PRIVATE · FAMILY
Our Hub. One calm dashboard for a busy household.
- Status
- Live — private, family-only
- Type
- Personal
- Stack
- Supabase (Postgres · magic-link auth · Realtime) · Edge Functions
- Scale
- 11 tables · multi-provider calendar ingestion
- Year
- 2026
RLS-private by designprivacy enforced by the database, not the UI

The problem
Two people, two calendar ecosystems, shared lists scattered across apps, and a dog whose care schedule lived in memory. The goal: one glanceable page for the household — without handing family data to another aggregator startup.
What I shipped
- ◆Merged calendars — a server-side function ingests each person’s private calendar feeds, expands recurring events, and refreshes on a schedule; phones just read the cache.
- ◆Shared and private lists — with privacy enforced by row-level security in the database, proven from a second account, not just hidden in the UI.
- ◆Realtime sync — a change on one phone appears on the other without refreshing.
- ◆Magic-link sign-in and an auto-pairing household capped at exactly two members at the database level.
How it works
- 1Edge function fetches private calendar feeds server-side
- 2Recurring events expanded into a cache table, refreshed on schedule
- 3Row-level security decides who sees what — per row
- 4Realtime pushes changes to both phones
The hard part
Recurring-event expansion and honest privacy. Calendar feeds disagree about recurrence in creative ways, so expansion happens server-side once, correctly, instead of on every phone. And “private list” means the database refuses the query from the wrong account — verified by actually trying from a second login.
Proof
- ✓Selftest scripts run the core flows offline against a mock backend.
- ✓RLS verified from a second account — the failure case, tested.
- ✓In daily household use.
Today · 3 events mergedSYNCED
Groceries · shared listREALTIME
Dog care · walk logged✓
Where it stands
Live and in daily use by the household. It stays private — this case study is the tour.
I designed the schema and the row-level security policies that keep private lists private. Claude Code built the stack on top of them. How I work →
Want something like this built?
I take on projects where shipping something real — tested, verified, in production — is the whole point.