Pocket Planner, the app

Pocket Planner started with a frustration I kept seeing in myself and in the people buying my Notion templates. Notion and tools like it hand you a blank page. Before you can plan a single day, you have to design a system, then build the architecture that holds that system, then maintain both forever. I built the system as a Notion template first and sold it. In 2026 I rebuilt it as a real web app with Claude Code, so the architecture is already there. You answer nineteen questions, personalize it, and open a planner that is already yours.

Role Product designer, system designer, and the person directing the buildTimeline January to July 2026, ongoingMade with Claude Code, React, TypeScript, Supabase, Stripe, Google Calendar, VercelLive pocketplanner.musarium.app
Product designSystem architectureData modelingOnboarding designBuilding with ClaudeDesign systemsSupabaseStripe
Part 1

Where it came from

😩

The frustration

People who buy ADHD planners have tried Notion, GoodNotes and every app that promised to help. The tools are either flexible but shapeless, or structured but rigid. In the flexible ones you spend the first month building a system for yourself and the housing for it, and the first bad week breaks it.

📓

The template proved the method

I built the system in Notion first: 16 databases, three dashboards, a notification center, a mood menu. Sold on Gumroad, every review five stars. It worked. But every formula and relation was mine to maintain, and buyers still had to set it up by hand from a guide.

🧱

What Notion could not do

Change what you see based on your mood. Update five surfaces from one checkbox. Sync a calendar. Reset one routine without touching the others. Ask you a question and build the page from your answer. You can get close with tricks, and the tricks break.

“The whole thing was made for neurodivergent people, unlike some others where they just put ‘ADHD’ in the title to sell a product. This planner is so colorful and engaging.”Five-star review of the Notion template, before the app existed
Part 2

The system, and the house I built for it

The app does not ask you to build anything. The structure is built in. You name your lists, pick what each page shows, and launch. Under it all is one rule I wrote on the first day and never let the code break.

🗄️

Databases are truth. Widgets are views. Dashboards are arrangements.

A record exists exactly once. A list has an identity (id, name, icon, color, work or personal) and every widget reads that same identity. Check a task off anywhere and it is done everywhere, because there is only one of it.

5️⃣

Five lists per hub

The Work Hub holds five work lists: Daily, Weekly and Emails come built in, two you name. Personal HQ holds five you name. Five projects, five goals, five routines. The limit is the product: you can manage five things well or twenty badly.

🪄

A list becomes a widget

Name a list once and the app makes a Quick Capture button for it, a widget with its own banner, a tab and a row in the Task Tracker, and a stat tile. One answer creates real infrastructure.

🧩

Same widget, any page

That widget can be toggled on or off the Daily Dashboard, added to a Daily Planner day, and dragged wherever you want it. The layout engine rebalances the row every time, so there is never an empty gap.

🧭

Four dashboards, four questions

Daily Dashboard: what am I doing today? Work Hub: how is work going? Personal HQ: how am I doing as a person? Daily Planner: what do my days look like across the week? Different pages for different states, all windows into the same data.

🛟

No guilt, by design

No streak counters, no overdue red, no "last active". Partial progress is shown proudly. Open it Tuesday, open it three weeks later, it still works.

Name a list onceOnboarding step 3 · Task Tracker
Your fourth work list
Icon color
Show this widget on
Work HubDaily DashboardDaily Planner
1 · Quick Capture button
+ Today+ Weekly+ Priority+ Reminder+ Brain Dump+ Outreach
2 · Widget with its own banner
Outreach0%
No tasks yet. Add one from Quick Capture.
On Work Hub and Daily Dashboard
3 · Task Tracker tab and row
AllDailyWeeklyEmailsPriorityOutreach
Outreachwork · 0 tasks
4 · Stat tile
0
Outreach remaining

Type a name, pick a color, toggle the pages. Four surfaces update from one list record. In the app the same record also feeds the Daily Planner and the Starboard count.

DashboardAnswersAlways on
Daily DashboardWhat am I doing today?Quick Capture, stat tiles, calendar, Day Card, Starboard
Work HubHow is my work going?Stat tiles, Starboard, work habits, the Work Zone (Priority, Daily, Weekly, Emails)
Personal HQHow am I doing as a person?Stat tiles, personal lists, goals
Daily PlannerWhat do my days look like?Schedule, the day's lists, mood, journal, one card per day
LayerPoolWhat you choose
Page widgets12 on Daily, 8 on Work Hub, 12 on Personal HQAny non-core widget on or off, in any order
Starboard18 cardsUp to 8, under a locked greeting
Day Card11 mini widgets5, under a locked greeting
Stat tiles8 per page4 showing
Quick CaptureEvery list you own3 of the 8 buttons; 5 are locked
Part 3

How I built it with Claude

📐

Spec first, then code

Before the first line, I wrote the app's source-of-truth documents: the architecture, the system rules, the layout system, and a one-page set of execution rules. The repo's instructions tell Claude to follow those and to ask instead of guessing.

🧵

Scoped sessions with handoffs

Each build session got its own prompt (one for the Work Hub, one for Personal HQ, one for the planner, one for onboarding) and ended with a handoff note: what shipped, what is still broken, what comes next. 19 of those in the repo.

🛑

Rules Claude had to obey

Only the requested task. Never a duplicate system. Widgets are views and never own data. No sample data in a real account. "Done" means it works, not that it renders. 44 locked decisions and corrections, kept in memory across sessions.

WhenWhat happened
January 2026The Notion template is live on Gumroad
March 12 to 17App spec, a 139-decision design document, and an HTML prototype of the Daily Dashboard
March 26First commit, as a React Native app. Within the week, pivoted to React on the web
April 2Full codebase pushed and live on Vercel: login, 19-step onboarding, all four dashboards
April 3One-day audit: 12 features and fixes, then the zone layout system
April 9 to 15Calendar day view, seed data for every table, the routines system
April 21 to 22Two features I had not planned: Pockets of Sun and Cadet Mode
May to JulyPromo video, marketing site, refinements. 72 commits by April 22, and 200+ changes in progress since
GuardrailWhy it is there
Four source-of-truth docsArchitecture, system rules, layout rules, execution rules. Decisions live there, not in chat
Build-time auditA script runs on every build and fails it if a page talks to the database directly instead of the shared data layer
Strict TypeScriptUnused variables and loose types fail the build. Several commits exist only to satisfy it
Push to main deploysVercel rebuilds in about a minute, so I review every change on the live app, never on localhost
Never push partial workA rule I added after Claude shipped half a fix. Finish everything requested, then commit
Push back on meClaude is told to challenge any decision that would hurt a shipped product, and to ask when an edge case is missing
Part 4

Feature spotlights

🖱️

Try them

Everything below is clickable and built with the app's own colors, fonts and glass. Sample data, no real account.

🎯

Why these seven

Each one is a place where the app does something the Notion template could not: ask, build, respond, reset, sync.

Onboarding builds the planner before you see it

The first thing a new account sees. 19 steps, every one skippable
🌍

Four phases

Your world: name, icon pack, work lists, work sections, everyday tasks, personal lists. The bigger shape: projects, goals, habits, routines, meals, finances, mood. What each page shows: dashboards, then Starboard and Day Card. Then launch.

✍️

Every answer writes real rows

Launch inserts your lists, projects, goals, habits, routines and widget preferences into the database, then opens the Daily Dashboard. Your real list names are on the buttons. No empty states on day one.

🎁

Setup is the reward

In the template, setup was a guide you followed by hand. Here it is the best-looking part of the product: glass cards on a blurred holographic background, a rainbow progress bar, and a launch button that opens something you just built.

WelcomePhase 1 · Your world
Step 1 of 19
BackNext

The titles, defaults and limits are the app's own. Click through, or jump to step 19 and press Launch to watch the dashboard assemble from what you typed.

Quick Capture

On the Daily Dashboard, Work Hub and Personal HQ
🔘

Eight buttons

Five are locked: Today, Weekly, Priority, Reminder, Brain Dump. Three the user swaps in from a pool: Home, Life, Email, Note, Idea, Cleaning, Money, or any list they made.

🎯

Every button knows where things go

The list, the dashboard, the icon and the color are already decided. Nothing to configure at the moment of capture.

1️⃣

One write, many surfaces

The task is saved once. The list, the stat tile and Starboard all read from that one record, so they change together.

Quick CaptureDaily Dashboard
Daily0%
21
Priority remaining
stat tile
Starboard

Good afternoon, Shelby! 👋

You have 28 active tasks and 1 upcoming event this week.

Tasks remaining28 open work tasks · 4 active lists

Press a button. The task lands in its list, the tile and Starboard update from the same record.

The Day Card and Starboard

Day Card on the Daily Dashboard, Starboard on the Work Hub
🔭

A second scale of information

The main widgets answer "what do I need to work on?" These two answer "what is quietly going on right now?" Small cards, ambient, read in a glance.

🔒

Greeting locked, slots open

The Day Card keeps its greeting and fills 5 slots from a pool of 11 mini widgets. Starboard keeps its greeting and fills up to 8 from a pool of 18. Each person's picks are saved to their profile.

🧮

Every line is computed

Active tasks are counted from the task table. Next appointment comes from the synced calendar. The rings are completion rates. Weather uses the zip code on the profile. The fact comes from a library of ADHD tips.

SundayDay Card · Daily Dashboard
SundayApril 5, 2026
Good evening, Shelby! ✨
Customize · 5 of 5 slots used
StarboardWork Hub
Good afternoon, Shelby! 👋

You have 28 active tasks and 1 upcoming event this week.

Customize · 5 of 8 slots used

Both greetings are computed from your clock right now. Tap the chips to turn cards on and off, the way the Customize menu does in the app; the slot limits are the real ones.

Mood to Action

On the Daily Planner and Personal HQ
🙂

Tap a mood

A mood entry is logged for the day. The suggested actions underneath change to match, so help shows up inside the workflow instead of in a separate app.

⚡

Calibrated to capacity

Each action carries an effort level and a time. Tired gets two-minute actions; energized gets a whole room.

📈

Two things, kept apart

The menu of actions is a reference. The log of moods is a history. In the template they were two databases; in the app they are two tables, for the same reason.

MoodDaily Planner · Monday
CalmLogged today
Suggested actions

Tap a mood. Sample actions in the app's own wording style, not the full menu.

Routines with their own resets

On Personal HQ
🔄

Five routines

Morning, Night, Workout, Sunday Reset, Cleaning by default, named in onboarding. Each is a sequence of steps, not a habit, and each has its own progress.

🧹

Reset one, keep the rest

The user decides when a new day starts for each part of life. Resetting Night leaves Morning exactly as it was.

🚫

Nothing resets itself

No automatic midnight wipe. If you come back after two weeks, the routines are where you left them, with no note about the gap.

RoutinesPersonal HQ · progress 0%

Check steps off, then press Reset on one routine. Only that one clears.

Five lists, one table, four behaviors

On the Work Hub and the Daily Dashboard
🗄️

One table, many views

Daily, Weekly, Emails, Priority and Reminders are all rows in one task table with a list id. Every widget is a filtered view of it.

✉️

Emails is a to-do list of emails

It holds the emails you still need to write, in one place instead of scattered through other lists. Send marks the row complete. The app never touches your inbox. Reminders dismiss with an X, because an X is the whole action.

📅

Generate stamps, never duplicates

Everyday Tasks are the five things you named in onboarding. Generate Today's Tasks sets today's date on those same rows and unchecks them. Nothing is copied, so nothing piles up while you are away.

ListsWork Hub · one table, four behaviors
Emailssend
Remindersdismiss
Everyday Tasksgenerate
Generate Tasksreplay

Send an email, dismiss a reminder, generate the day. Three behaviors, one table. The cursor runs the Generate step for you when the card scrolls into view.

A planner for every day, with Google Calendar inside it

The Daily Planner, one card per day
🗓️

Seven Day Cards

Generate the week and every day gets its own page: a schedule down the left, the day's lists in the middle, Important, Mood and Journal on the right. The same lists as the dashboards, filtered to that day.

🔗

Google events land in the app's own layer

Four serverless functions: connect, callback, sync, disconnect. The token stays server-side. Synced events are written into the internal calendar table, so the schedule, the calendar page and the dashboards show one event system. Google events are read-only here.

♻️

Fails loudly, not silently

If Google revokes or expires the token, the app marks the connection and asks to reconnect instead of quietly showing an empty day.

MondayDaily Planner · March 30, 2026
Schedule
Synced Mar 31 · read-only
Sync CalendarDisconnect
simulate a revoked token
To Do
Daily To-Do0%
Mood
😣 Stressed😊 Happy😌 Calm😴 Tired

The schedule column is one third of the page, like the app. Sync pulls the day's Google events; the small link shows what the user sees when Google drops the connection.

By the numbers

35,440lines of TypeScript across 106 files
23,500lines of CSS
29pages and routes
21database tables, 21 migrations
6serverless functions (Stripe, Google Calendar)
19onboarding steps that write real data
72commits in the first four weeks
139design decisions documented before the build
19session prompts and handoff notes
44locked decisions and corrections in memory
6months from template to live product
1live app at pocketplanner.musarium.app

Also in the app

Habit tracker with a momentum percentage per day. Projects with milestones. Goals. Notes with five types. Journal. Finance in six categories that puts bills on the Day Card. A Make It Yours studio for backgrounds, banners and four icon packs.

Two I did not plan

Pockets of Sun, a keepsake page where good moments are filed as grateful, proud, growth or love. Cadet Mode, a learning vault with a dark space theme and three stages: in motion, discovery, vault.

The plumbing

Supabase with row-level security and email login. Stripe subscriptions with a trial, a webhook for checkout and invoices, and a customer portal. Push to main and Vercel is live in a minute.

How I think about building

Spec before code

Decisions live in documents the build has to follow, not in a chat that scrolls away.

Done means it works

Rendering is not finished. Every element has to trace back to real data.

Design is a layer of the system

Banners, spheres and progress bars are wayfinding and dopamine, not decoration.

The tool adapts to the human

Mood, routines and resets bend to the person. Never the other way round.