01The problem
Planning a shared life is small, personal and a bit emotional, and most planner apps are built for teams.
- Tasks, habits, meals and groceries live in four different apps.
- Shared lists and trip plans end up buried in chat threads.
- Reminders feel like pressure instead of support.
- Generic tools have no personality, so people stop opening them.
Plan days, weeks and the far future in as few taps as possible, with repeating routines that never need re-creating, reminders that reach the lock screen, and a warm, personal feel.
02Scope
I prioritised features into must-have, should-have and could-have, then split them into two phases. Phase 2 only starts after Phase 1 has been used daily for two weeks.
| Area | Phase 1: one person, every day | Phase 2: together |
|---|---|---|
| Account | Email sign-in, stay signed in | Invite one person with a code |
| Today and planning | Tasks, routines, count goals, quick add, schedule picker, week view, "Someday" shelf | Shared tasks on Today |
| Task details | Per-day notes, remembered choices, history, streaks | - |
| Food | Meal plan with custom slots and repeats, recipes, saved ideas | AI recipe from a caption |
| Groceries | My list, partial shopping, offline in the shop | Shared list |
| Bills and reports | Monthly checklist, weekly and monthly reports | Shared tasks done together |
| Together | - | Little notes, trip and date plans, partner notifications, surprise mode |
| Bun | Animated mascot, moods, celebrations, sweet names | Names for each other |
Not in scope: a chat app, a social network, public sign-up, calorie counting and iPhone support.
03The product
Four bottom tabs and a centre add button. Every screen is reachable within two taps of Today.
The day at a glance
Tasks, routines, water, meals, groceries, bills and a weekly report card, with a progress ring and streaks.
Few taps, no re-entry
Quick add and one schedule picker for tasks, routines, meals and recipes: once, chosen dates, weekdays or every day.
From plan to shop
Meal slots with repeats, recipes that rescale, a cooking mode and ingredients that flow to the grocery list.
Gentle by design
Lock-screen reminders, one nudge if something is missed, a morning hello and quiet hours.
Private by default
Shared list, tasks, little notes and trip or date plans. Everything else stays private.
Personality in code
A bunny mascot drawn and animated in code: greetings, moods, celebrations and small surprises.
04Key decisions
Privacy is enforced in the database
Surprise plans and the names one person picks for the other are protected with row-level security, not just hidden in the interface.
Local-first, works offline
The app shell and recent data are cached, and offline changes are queued and synced in order, so the shop with no signal is not a problem.
Reminders that do not nag
One reminder at the set time and at most one nudge 15 minutes later, with quiet hours respected.
Meals are tasks too
One done-or-missed model for meals and tasks keeps reports consistent.
Repeats are stored as rules
Only the days a person touches are saved, so editing a repeating item never leaves orphan rows.
05Requirements and documentation
I wrote the full product spec before any code. It covers goals and non-goals, a 22-screen navigation map listing every tappable element, feature behaviour, empty states and error handling, offline and sync rules, a data model, privacy rules and non-functional requirements. I then reviewed it for gaps and closed the open questions in a decisions log. The documents live in the project's private repository.
| Quality area | Requirement |
|---|---|
| Speed | Today opens from cache in under 1 second on a mid-range Android phone, and a tick feels instant |
| Offline | App shell and the last 30 days of data cached; offline changes sync in order |
| Reminders | Sent within 2 minutes of the set time, never during quiet hours, never duplicated |
| Security and privacy | Row-level security on every table, single-use invite codes, no analytics or third-party trackers |
| Accessibility | 44 px touch targets, 4.5:1 contrast, reduced-motion respected |
| Cost | Runs on free tiers for two users |
06How I built it
The process was spec first: idea, scope, written and reviewed documentation, then designs created with Claude connected to Figma over MCP and refined by hand. I divided the build into milestones and directed AI coding tools from the specs, reviewing each milestone on a real phone before moving on, with a rule of no redesigning while building. It is deployed on Vercel, with Supabase for the backend.
- Front end
- React 18 and TypeScript on Vite, installable PWA with a service worker and offline cache
- Backend
- Supabase: Postgres with row-level security, Auth, Realtime, Storage, Edge Functions and scheduled jobs
- Notifications
- Standard Web Push with VAPID keys, sent by one Edge Function that runs every minute
- Hosting
- Vercel, deployed on every push
- Testing
- End-to-end testing by me: unit tests, Playwright scripts per milestone and manual testing on a real phone
07Milestones
Each milestone ended with something usable on a phone.
| # | Milestone | Outcome |
|---|---|---|
| M1 | Foundation, Today and Bun | Installable PWA, ticks, water, the interactive Bun |
| M2 | Planning | Quick add, schedule picker, task details, week view, undo |
| M3 | Food and groceries | Meal plan with repeats, recipes, ideas, partial shopping |
| M4 | Bills, reports, profile | Reports, settings, Bun colour, data export |
| M5 | Accounts and sync | Sign-in, local-first sync, offline retry |
| M6 | Reminders and go-live | Web Push, scheduled function, deployment |
| M7 | Together | Invites, shared lists and tasks, notes, plans, partner notifications |
08Testing
I did the end-to-end testing myself, both automated and by hand on a real phone, at every milestone and again after go-live.
- Automated
- Unit tests for the recurrence and reminder rules, Playwright scripts per milestone, PWA checks and a smoke test
- Functional
- Every screen and flow: planning, repeats, meals, recipes, groceries, bills, reports, profile and settings
- Offline and sync
- Changes made with no signal, then synced in order once back online
- Notifications
- Lock-screen reminders, the missed-task nudge, the evening wrap-up and quiet hours
- Two-person flows
- Invite codes, shared tasks and lists, notes, plans and partner notifications, tested from both accounts
- Privacy
- Checked from the other account that private items, surprise plans and sweet names stay hidden, as the database rules require
- Install and UI
- Install as an app on Android, light and dark theme, and regression after every milestone