Fitnit · built in public
Working boards for design and product experiments. Each is built from real screenshots and real data rather than mockups, and re-generated as the app changes, so the record stays honest rather than becoming a highlight reel.
A Today card designed to be the screenshot, a share sheet at the moment someone takes one, and the streak and PR moments people already screen-record — each with the person's referral code on it.
Seven proposed changes — the home widget grid, a premium ring, a physique scan, saveable meal plans, sharing that pays, a challenge you can lose, and moving the push ask earlier — each shown against the screen it replaces.
Every screen of the signup flow, a scrubber for stepping through how it has changed across versions, and the PostHog funnel showing where it actually loses people.
Replacing the three carousel icons with photoreal plates generated on fal.ai, with the app's own UI composited onto the phone in each shot. Style rounds and comp tests.
Should the three pre-onboarding slides be photographed or drawn? Four illustration directions in Fitnit green, each seated in the real landing layout beside the photoreal plates that ship today.
The two account screens as shipped, beside CSS mockups built from the real landing plates and wordmark at the phone's true size. Every arguable number is a variable; iterate here before touching React Native.
Six stacked cards carrying three corner radii, two paddings and two gaps — measured, then collapsed into one token. Plus the settings rows going 46pt → 56pt, and the nav badge that was missing under it all.
The nutrition card redrawn as five capsule sliders with an icon each and a fill that says what share of the meal it was. Before/after composites sized for marketing.
Seventeen category leaders pulled live from the App Store — screenshots, subtitles, pricing, age — beside our real install numbers. Momentum measured from Apple’s own review feed, what each one makes per month — and the 5,017 accounts we already had and never used.
The two moments iOS lets you speak to someone who is leaving — a shortcut above Remove App, and Apple’s cancel sheet. Built and shipped, beside the mockups it started as. Plus the six push tokens, and the entitlement scare that wasn’t.
Apple lets one app have many App Store pages and A/B test them — the only surface with enough traffic for a test to finish. The arithmetic that says test one at a time, and six alternate listings worth building.
Fitnit can be driven by Siri with the app closed, and nothing in the app says so. Three places a tip could go, the budget that stops ten features fighting over one moment, and the arithmetic that says do the App Store first.
Drop a self-contained HTML export in scripts/lab/, run
externalize.py, and add a card here.
Served from src/public/lab/ · Cloudflare Pages, deploys on push
Add a board: python3 scripts/lab/externalize.py <export>.html --out src/public/lab --name <slug>
Images are content-hashed into lab/assets/, so a re-export only rewrites what changed.