A mobile-first web app for households who employ a domestic worker — track visits, calculate the monthly bill, and keep insurance and contract documents in one place.
Try it live → casa.martinsnuno.com No signup needed — click "Ver demonstração" on the login screen to explore with sample data.
Landing page: martinsmdnuno.github.io/casa
- Hours log — record each visit (start time, end time, duration auto-calculated) right after it happens.
- Monthly dashboard — running total of accumulated cost and hours for the current month, with payday flagged on the last working day.
- Calendar — visit-day dots, planned-day outlines, national holidays, and one-tap "mark absence" or "add extra" for future days.
- Payments — close the month, validate the total, mark as paid, and keep an audit trail of past months.
- Worker profile — hourly rate, schedule, contact info, quick call/WhatsApp shortcuts.
- Documents — upload and store insurance policies and contracts.
- Multi-user — invite a partner or family member to the same household.
- Locale-aware — EUR formatting, 24h time, dd/mm/yyyy dates, Iberian holidays.
- Client: React 19, TypeScript, Vite, Zustand, React Router
- Server: Node.js, Express, SQLite (better-sqlite3), session auth
- Infra: Docker / docker-compose, npm workspaces
The app is hosted at casa.martinsnuno.com.
- Demo mode — click Ver demonstração on the login page to enter a sample household with seeded data. Resets periodically.
- Real account — register with email + password (8+ chars). Each account gets its own household; you can invite a partner from More → Sessions.
npm install
npm run devClient runs on http://localhost:5173, server on http://localhost:3001.
Copy .env.example to .env and adjust values as needed.
export SESSION_SECRET=$(openssl rand -hex 32)
docker compose -f docker-compose.prod.yml up -d --buildData is persisted in the casa-data named volume.
casa/
├── client/ # React + Vite frontend
│ └── src/
│ ├── pages/ # Dashboard, Calendar, Payments, …
│ ├── components/
│ ├── stores/ # Zustand stores
│ └── api/ # Server client
├── server/ # Express + SQLite backend
│ └── src/
│ ├── routes/ # auth, dashboard, calendar, payments, …
│ ├── db/ # schema + migrations
│ ├── services/
│ └── middleware/
├── docs/ # GitHub Pages landing site
└── stitch_clareza_funcional_casa_app_prd/ # Original PRD + design mockups
| Dashboard | Register hours | Calendar |
|---|---|---|
![]() |
![]() |
![]() |
| Payments | Insurance & docs | Worker profile |
|---|---|---|
![]() |
![]() |
![]() |
Built on a system called Clareza Funcional ("Functional Clarity"):
| Token | Value |
|---|---|
| Primary (Sage Green) | #69997A |
| Secondary (Terracotta) | #C28B70 |
| Surface | #F9FAF9 |
| Text | #1C2B23 |
| Headings | Fraunces (serif) |
| Body / UI | Satoshi (sans-serif) |
| Border radius | 8px |
| Touch target min | 48px |
Full guidelines in stitch_clareza_funcional_casa_app_prd/styleguide_design.md.
Personal project — all rights reserved. Open to questions and feedback via Issues.





