The Hood · a manager for a shared house
In one line: expenses, balances, groceries, bills, chores, a calendar, votes and an inventory for a house shared by roommates and household staff. I built it for my own house. It is in production and works on a phone first.
The problem it solves
In a shared house the same questions come back every week. Who paid the electricity? How much do I owe? Is there milk? Whose turn is it to take the trash out? Has the cleaner been paid? Usually the answers live in a group chat and a spreadsheet nobody keeps up to date. The Hood answers all of them in one place, with the money calculated exactly.
Who uses it
Each role sees only what it should:
| Role | What it sees |
|---|---|
| Admin | runs the house and invites people |
| Roommate | adds expenses, settles up, takes turns on chores and votes |
| Household staff | their own tasks, the grocery list and their own payments, never the house's money |
What it does
- Expenses split between roommates in exact cents. The remainder is distributed, so no cent is lost.
- Balances that simplify debts: the shortest set of payments to settle up, such as «Sam pays $1,428.33». Payments between roommates are recorded apart from expenses.
- A live grocery list, the house's bills and services with due dates, and chores with points.
- A calendar, votes («Do we buy a new sofa?») and an inventory of the house.
- Receipt photos, validated by their content and served only to people with a session and permission.
- Reminders. The daily and weekly summaries are ready behind an endpoint for the house's automation tool. The chat bot that delivers them is the last step left.
- Sign-in with a one-time link by email. Only people registered as active members of the house can get in, and the screen never reveals whether an address is registered.
How it's built
- App: Next.js 16 (App Router, Server Components and Server Actions), React 19, Tailwind 4 and shadcn/Radix components.
- Data:
- PostgreSQL 16 with Drizzle ORM and versioned migrations.
- Money is always stored as whole cents and calculated by a single engine.
- Dates without time are stored as text, and «today» is calculated in Mexico City time.
- Permissions live in one table in the code, so every screen reads the same rules.
- Containers:
- The app and its own database run in separate Docker containers.
- The database lives only on a private network that nothing outside the house app can reach.
- The app is published through the reverse proxy.
- Tests:
- 15 unit tests (Vitest).
- An end-to-end run of 32 steps with Playwright against an isolated copy of the production image. It uses an empty in-memory database and test mode, so no email ever leaves, and it removes itself when it finishes.
- Backups: a backup every day. Each backup is restored into a temporary database before it is kept.
In numbers
| Figure | What it is | Measured |
|---|---|---|
| 32 / 32 | end-to-end steps passing (sign-in, roles, money, photos, every screen at 390 px with no overflow) | October 13, 2026 |
| 15 | unit tests | October 13, 2026 |
| 3 | roles (admin, roommate, staff) | October 13, 2026 |
| 11 | screens inside the app | October 13, 2026 |
| 1 day | rebuilt from a static prototype on October 4, 2026; live since October 5 | git history |
Photos
The photos come from the isolated test copy, with test people (Alex, Sam, Rosa and Mario). No real data appears. The app's interface is in Spanish.




Worth pointing out
- Money in whole cents, from one engine. Splitting $85 three ways gives $28.34, $28.33 and $28.33, and the balances always add up to zero.
- Staff see only their own tasks and payments. The end-to-end tests check this: the house's money pages send staff back to the home screen, and a receipt photo returns «forbidden» to them.