Case study · Own product
Phila SA
A POPIA-grade operations platform for South African counselling organisations.

- Year
- 2025
- Timeline
- About 3 months
- Role
- Design · Engineering · Infrastructure
- Status
- See it live
The brief
Our own product. Phila (isiZulu for "to heal, to be well") is the calm operating system for counselling organisations in South Africa: community and NGO practices, EAPs, university services. The medical-billing incumbents serve them badly, and the solo-therapist schedulers don't scale to a team.
The pain we went after: funder and demographic reporting that eats a second job. In Phila, the reporting falls out of the clinical work instead of being work on top of it.
What we built
The whole daily loop (calendar, session, note) plus the organisation around it: team, rooms, documents, invoicing, and a funder portal. One login for five kinds of user; there's no role picker, the server knows who you are and routes you to your world.

Each practice also gets a public micro-site with honest credential chips a counsellor's HPCSA verification shows "pending" until it's actually verified, and online booking that can't double-book, because the constraint lives in the database, not in the interface.

The hard part
Multi-tenant isolation you can prove. The route guard is UX; the real boundary is Postgres Row-Level Security: the app runs as a non-owner database role, and integration tests prove organisation A can never read organisation B. Clinical notes are stricter still: private to the authoring counsellor and their supervisor, and any admin override is itself audited. Funder exports pass through a k-anonymity floor with small-cell suppression: when a number is too small to be safe, the report says "too few to report" instead of the number.
Outcome
Live at philasa.com with 202 automated tests behind it. Every paid integration (video, payments, AI, WhatsApp) is dormant and honest until an organisation switches it on: off is a real state, never a fake demo. SA ID numbers are encrypted at the field level, and every AI-assisted note is labelled as a draft a human signs.
- 0
- User types, one login for all
- 0
- Automated tests
- 0
- k-anonymity floor on funder exports
- 0 days
- Trial, no card required
Stack
- Next.js 16
- React 19
- TypeScript
- PostgreSQL + RLS
- Drizzle ORM
- Better Auth
- LiveKit
- Tailwind v4