totalHOA
Multi-tenant SaaS for HOA community management.
- Role
- Founder & Developer
- When
- Since 2024
- Stack
- Laravel
- Livewire
- PostgreSQL
- React
- TypeScript
- Stripe Connect
- OpenAI
Boards get governance tools and day-to-day workflows, and residents get a portal branded as their own neighborhood. I started it in 2024 as a side project for the HOA I live in, while I was at Cardinal Financial. Twenty architecture tests hold rules across the codebase, like no AI model call leaving the app without being logged.
Nova
An AI assistant that answers residents and board members from the association's own documents.
- It proposes, people decide. Every write is a proposal a person confirms.
- It only sees what the resident can. Retrieval with pgvector in PostgreSQL, scoped to one community and that resident's access.
- It would rather not answer than guess. It declines when nothing matches closely enough. I tune that against 92 questions, 41 of which it should refuse.
- It has to show its work. An answer with no citation or tool call behind it becomes a refusal, so even a prompt injection that gets through shows the resident nothing.
Multi-tenancy
Every community shares one PostgreSQL database, and 262 of the app's 309 models are scoped to a community.
- The scope fails closed. When the hostname doesn't name a community, reads come back empty and writes are refused.
- A test walks the route table. An admin of one community with all 99 permissions requests another community's record on every signed-in page that loads one. Anything but a 403 or 404 fails.
- New domains need no server config. The edge server issues a TLS certificate on the first visit, once the app confirms the domain. More in Three Servers, One Door, Zero Downtime.
Billing and collections
A ledger for each community's dues, from assessments and late fees to liens and collections.
- Fees follow local rules. Late fees can be capped by jurisdiction, with presets for seven states, and a late fee is never charged on a late fee.
- Bankruptcy changes the order. The ledger marks the filing date, and payments go to post-petition charges first.
- The money never passes through totalHOA. Dues settle in the association's own Stripe account, and I hold no community's secret keys.

Meetings and elections
From the agenda to the approved minutes and the certified result.
- Executive session stays private. Meetings are recorded in the browser and transcribed, and speech inside a closed session is dropped by its timestamp.
- Minutes have a checklist. AI drafts them, and the call to order, attendance, quorum and every agenda item have to check out before they go for approval.
- Secret ballots are secret in the database. The ballot records that the unit voted, and the choice has no link back to it.
Block editor
A drag-and-drop page builder, so each community runs its own branded website without code. The first version of this portfolio was built with it.
- 86 block types. Each is a PHP class with its own schema and validation, and the same editor builds pages, forms and emails.
- Stored as JSON, rendered by Blade. Pages render on the server, so they stay fast and easy to index.
