Inspiration

This isn't my first go at building something for HOAs. I've been kicking around this idea for a while now, in different forms and under different names, and none of them ever really took off. But I kept coming back to it because the problem itself wouldn't leave me alone.

In short, communities run their lives through these disorganized groups that aren't designed for any kind of organization: rules can't be found, a broken gate goes unaddressed for weeks, no one can remember what the board actually voted on in the meeting three months ago.

Tools used range from Whatsapp groups, spreadsheets, email chains, to one person's Google Drive -- none of which are built to actually run an organization. They're for talking with friends. I did research and found applications that help manage payments, or community messaging, or store documents, but nothing that did it all together and actually treated a community like an organization with governance needs. That gap is what kept me coming back.

The project also ties in with two UN Sustainable Development Goals. SDG 11 (Sustainable Cities and Communities) relates to making places livable, equitable, safe, resilient, and sustainable. The Quorify issue tracker and event features tie into this by tying residents to their local environment and the connections that create their community.

SDG 16 (Peace, Justice and Strong Institutions) relates to open, accountable, and inclusive institutions at all levels. HOA rules are typically stored in unreadable PDFs and major decisions are made at meetings that less than half of the members attend. The Quorify project ties into SDG 16 by providing all members with a uniform accessible platform for HOA rules through its AI chatbot, and a complete, accessible history of every vote and decision ever made.

What it does

The US alone has over 370k HOAs with 77 million inhabitants; add churches, tenant unions, sports leagues, apartment buildings, neighborhood associations and you are dealing with hundreds of millions globally, living in an entity which requires them to make collective decisions, manage joint funds, and keep members updated. Today almost all of these groups rely on nothing more than Whatsapp groups, email chains, spreadsheets and an individual’s personal Google Drive. HOA communities regularly fail to meet the 10-50% quorum stipulated in their by-laws (California had to propose bill AB 1458 to allow HOAs to lower quorum to 20% if a first meeting could not meet it, because 80% of meetings couldn’t meet quorum). Maintenance requests are dropped in inboxes, board decisions are made with no minutes or paper trail, leaders change and take with them all of their tribal knowledge.

Quorify puts governance, communication and operations all into one place so nothing is lost in someone’s mind or inboxes. Votes have quorum tracking and a permanent, indisputable audit trail. Maintenance tickets are assigned to a transparent workflow, not dropped into an inbox. Members can ask the AI a question and receive a quoted answer regarding their community’s bylaws instead of waiting for a board member’s response. Admins can even operate the community using natural language - the AI generates events, posts announcements and creates reports using the exact same interface the buttons use. One app replaces the ten tools your community is currently cobbling together.

A regular community member has an "action strip" at the top, showing their pending polls, upcoming events, and dues that are owed. For administrators, there's a health score and an "intelligence feed" which highlights outstanding issues, upcoming polls that may fail due to lack of quorum, or overdue payments.

The AI assistant, allows community members to ask questions based on their specific community's bylaws and documents (with citations). If a resident asks about painting their door red, the AI pulls from the HOA's CC&Rs, explains the specific rule.

Administrators can also prompt the AI to send announcements, create polls, or compile a list of non-paying residents. These are not separate chatbot functionalities; the AI is integrated directly into the application's backend.

How I built it

The stack consists of Next.js 15, TypeScript, Supabase for auth and Postgres, Drizzle ORM, Shadcn UI, and Tailwind CSS. Deployment is handled by Vercel, and Stripe is used for payments. Google Gemini via Vertex AI is used for the AI functionality, and its capabilities are unlocked through function calling. Each defined tool (e.g., createEvent, postAnnouncement, createPoll) maps directly to a Next.js Server Action. This means the AI uses the same code path, and therefore the same validation logic, as manual user input, ensuring full auditability.

The progress tracker, something I became somewhat obsessed with, follows a five-stage process for every maintenance issue (Submitted, Acknowledged, In Progress, Pending Review, Resolved). Each status change is recorded in a statushistory table with the issue ID, new status, timestamp, user responsible, and optional notes. This renders on the frontend as a timeline, similar to package tracking. When an issue is resolved, the submitter can rate the vendor, and this rating is stored in a vendorratings table. This fully traceable system addresses the problem of vanishing requests in HOA maintenance.

The messaging system was also a challenge. Supabase offers realtime subscriptions, and while it seems straightforward to subscribe and render messages, I encountered race conditions where subscriptions fired before the initial message fetch completed, or the component hadn't mounted yet, leading to duplicate messages or delays. To fix this, I added client-side deduplication by message ID and a loading gate to delay the subscription listener until the initial message fetch was complete.

Challenges I ran into

Scope was definitely the biggest issue. I initially had over 40 features on my list and, at the start, I was working on all of them simultaneously. This resulted in an application where the announcements page existed but couldn't actually post anything, the polls page had a UI but no way to track votes, and essentially everything was at about 60% completion and nothing was working.

At some point, I had to force myself to focus on one feature at a time, complete it fully, then move on. About halfway through the project, I did a complete walkthrough of the app as if I had never seen it before, an audit through the lens of a regular user. It was pretty bad: a "no items" state with no way to create an item, a login page that sent you to another page that required login, and buttons that didn't look like buttons at all.

I spent a whole day just fixing those basic usability issues, and while no new features were added that day, it was arguably the most productive day of the entire project. Hallucinations by the AI were another early challenge. It would sometimes invent plausible-sounding rules, and rectifying this required extensive prompt engineering and ensuring that the retrieval system only pulled information from actual community documents. If there wasn't relevant information available, the AI would correctly indicate it didn't know.

What I'm proud of

I find myself repeatedly showing people the AI action feature; I'll type "schedule a meeting for Friday at 3pm" and an event will appear on the events page. I demonstrated this five times the first time it worked. While it's just function calling, seeing the translation from a typed sentence to a database entry and finally to a visual element on the page felt like the app was truly alive.

The progress tracker is another one. It's not glamorous but it's the one feature that solves the main complaint I hear about HOAs-the "I reported X but I never heard back about it again" problem. You can now literally see where something is in the workflow.

Also just actually shipping it. I've built this type of thing before and let it die. This is the first one that I actually shipped and it actually works-you can sign up, create a community, make announcements, create polls, track issues, and pay dues. That it's a real product feels really satisfying.

What I learned

I actually found it pretty useful learning about how to keep a large Next.js 15 code base organized. I used to have any types all over the place while I was moving really quickly, but it stopped being fine, and code would break at runtime in a way that TS should've caught.

So, I used Drizzle ORM's type inference to make the schema the single source of truth, and went through and started eliminating the any types one by one. It took quite a bit of work, but it made the app way more stable. I also implemented error boundaries for some areas that I previously would've let silently fail, particularly with AI function execution. It's important if I call a Gemini function and it errors out, that the app handles the error gracefully, not just crashes. This took a fair amount of work too, but again, made the app much more stable.

What's next

Onboarding - for admin signups there just isn't enough hand holding for what to do first.

After that magic link voting. A member gets a text, taps a link, they've voted. No signup needed. The only reason quorum fail in HOAs is nobody's going to download a dedicated app and create an account to vote on pool hours. One-tap voting from SMS solves this.

Next will be integration with 311. Community votes for something, Quorify automatically files the city work order. Connecting community decisions with the city departments that implement them. This is basically SDG 11 and 16 in one feature.

A mobile app is inevitable, as it would make this app much easier to access.

Long term? I think all communities should have software with these features. Most of them are currently using Slack/Discord/WhatsApp and are using a mix of apps to get things done, which results in inefficiency. I want to change that.

Built With

  • dizzle
  • eslint
  • gcp
  • lucide
  • next.js
  • radixui
  • react19
  • shadecn
  • sonner
  • sql
  • supabase
  • tailwind
  • typescript
  • vercel
Share this project:

Updates