Bunny: a little planner for two

Daily tasks, habits, meals and groceries usually live in four different apps, and shared plans get buried in chat threads. Bunny is a small installable planner that keeps each person's day private and gives two people one shared space, with a code-drawn bunny called Bun to greet you and celebrate your wins.

LiveProduct discoverySpecs and designsVibe coding
My role
Product owner, BA, designer, builder and tester: idea, scope, spec, designs, milestones, end-to-end testing and deployment
Users
Two people: each has a private planner, and can share one space
Platform
Installable web app (PWA) on Android
Screens
22 designed screens
Built with
React, TypeScript, Supabase, Vercel
Problem

Personal planning and shared life admin are scattered across apps, and reminders feel like pressure.

What I did

Scoped the idea, wrote and reviewed the spec, designed 22 screens with Claude and Figma MCP, split the build into milestones and shipped it.

Outcome

A live, installable planner with reminders, offline use and private-by-default sharing, running on free tiers.

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.
Goal

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.

AreaPhase 1: one person, every dayPhase 2: together
AccountEmail sign-in, stay signed inInvite one person with a code
Today and planningTasks, routines, count goals, quick add, schedule picker, week view, "Someday" shelfShared tasks on Today
Task detailsPer-day notes, remembered choices, history, streaks-
FoodMeal plan with custom slots and repeats, recipes, saved ideasAI recipe from a caption
GroceriesMy list, partial shopping, offline in the shopShared list
Bills and reportsMonthly checklist, weekly and monthly reportsShared tasks done together
Together-Little notes, trip and date plans, partner notifications, surprise mode
BunAnimated mascot, moods, celebrations, sweet namesNames 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.

TODAY

The day at a glance

Tasks, routines, water, meals, groceries, bills and a weekly report card, with a progress ring and streaks.

PLANNING

Few taps, no re-entry

Quick add and one schedule picker for tasks, routines, meals and recipes: once, chosen dates, weekdays or every day.

FOOD

From plan to shop

Meal slots with repeats, recipes that rescale, a cooking mode and ingredients that flow to the grocery list.

REMINDERS

Gentle by design

Lock-screen reminders, one nudge if something is missed, a morning hello and quiet hours.

TOGETHER

Private by default

Shared list, tasks, little notes and trip or date plans. Everything else stays private.

BUN

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 areaRequirement
SpeedToday opens from cache in under 1 second on a mid-range Android phone, and a tick feels instant
OfflineApp shell and the last 30 days of data cached; offline changes sync in order
RemindersSent within 2 minutes of the set time, never during quiet hours, never duplicated
Security and privacyRow-level security on every table, single-use invite codes, no analytics or third-party trackers
Accessibility44 px touch targets, 4.5:1 contrast, reduced-motion respected
CostRuns 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.

#MilestoneOutcome
M1Foundation, Today and BunInstallable PWA, ticks, water, the interactive Bun
M2PlanningQuick add, schedule picker, task details, week view, undo
M3Food and groceriesMeal plan with repeats, recipes, ideas, partial shopping
M4Bills, reports, profileReports, settings, Bun colour, data export
M5Accounts and syncSign-in, local-first sync, offline retry
M6Reminders and go-liveWeb Push, scheduled function, deployment
M7TogetherInvites, 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
Next projectMneme: one searchable memory for project delivery