FITNIT LAB · PROPOSAL

Made to be shared

People already screenshot fitness apps to post them. Today a screenshot of Fitnit is a grid of numbers with no name on it: it says nothing about where it came from and earns the person who posted it nothing. Three changes, each drawn against what exists now: a card designed to be the screenshot, a prompt at the exact moment someone takes one, and the milestones people already screen-record.

Nothing here is built. Every right-hand pane is a drawing. The left-hand screenshot is the app as of v1.148.0. The referral code and affiliate link exist already (Profile → Referrals); every card below carries them, because a share with no code is a free ad.
01

The Today card — a screenshot that is also an ad

One full-width card at the top of Home, composed from the widgets that already exist: the calorie ring, the streak, steps, this week's weight change. It is laid out to be cropped and posted as-is — wordmark and referral code in the corner, so every post attributes itself and pays the poster. A share glyph on the card renders it in story and square formats through the ShareCardModal that runs and walks already use.

ShareCardModal existsreferral code exists new: one composite widgetmust look good with zeros
Todayreal · v1.148.0 · what a screenshot gives you
The Fitnit home screen: calorie ring, macro bars, weight chart, tiles.

Good numbers, no name. Nobody seeing this reposted knows what app it is, and the person who posted it gets nothing for the referral it just made.

Proposedthe card, on Home and as it exports
814 left
Tuesday · Sep 8
Day 12
7,412steps
2 / 5workouts
−4.2 lbthis month

On Home it is the first card. The three stats are the ones a person would brag about; the ring is the one they would explain.

As it exports. 9:16 for a story or a TikTok slide, 1:1 for a feed. The code is the person's existing referral code; the link resolves through Affiliateo so the install is attributed and the commission is theirs.

02

The screenshot is the moment

iOS tells an app when the user takes a screenshot (UIApplicationUserDidTakeScreenshot). That is the highest-intent second in the whole app: the person has already decided to show someone. Offer the rendered card and their link right then. One sheet, two buttons, never twice in a day.

one notification listenerreuses 01 rate-limit or it is spam
Todayreal

The screenshot lands in Photos. If it gets posted, it gets posted without a name, a link, or a code — and the app never knew it happened.

Proposedthe sheet, ~300ms after the shutter
9:41▮▮▮ ⌁
Fitnit
Eaten today
1,847 of 2,661
Steps
7,412
Move
430
of 620 cal

Share your progress?

We made you a card — with your link on it.

Day 12 · 814 left
fitnit.app/CADEN · you earn on every install
Not now
Share

Shown once a day at most. Off in Settings → Sharing.

03

Moments people already record

A streak milestone, a personal record, a goal reached. These are the frames people screen-record for a TikTok — the number counting up, the burst, the "did it" — and today Fitnit shows them as a toast. Make each one a full-screen moment with a single button, and the export is the same card as 01 with the milestone as its headline.

achievements already firePRs already detected new: one full-screen route

The PR card says counted on purpose. A camera-verified rep count is the one claim a fitness screenshot can make that a rival cannot, and it is the thing worth being asked about in the comments.

04

Viral moments — what to film

A picture gets a like; a clip gets a duet. The clips come from the parts of Fitnit that move, and most of them already exist — what they lack is a reason to be filmed and, in a few cases, an export. Each row is a moment, its three-second hook, what is on screen, and whether it can be filmed today.

3 filmable today3 need one animation 1 needs an export path
Hook · the camera counts
23
push-ups
Exists. Phone on the floor, skeleton draws, number ticks. No other fitness app can film this.
Hook · Future You
Now
+12 mo
Exists (Physique Scan → Future You). Needs one thing: a slider, so the reveal is a wipe.
−4.2 lb
"At this pace you'll be 160 by Aug 31."
Exists static. Needs a 1.5s draw-in on open — the line arriving at the cone is the clip.
MomentThree-second hookOn screenToday
Camera-counted reps"My phone counts my push-ups"Live camera, pose skeleton, the number ticking, PR burst at the endFilmable now. An in-app clip export with the overlay would turn it into a one-tap share.
Future You reveal"This is me in a year"Scan photo → generated photo, wiped by a sliderExists as two images. Needs the slider.
Weight chart draw-in"At this pace…"Trend line draws to the projection cone, sentence types inStatic today. One animation on open.
Streak / PR moment"Day 12"Full-screen count-up, burst, one button (03)Toast today. Needs 03.
Voice-logging a meal"Two eggs and toast" → the ring movesMic, the transcript, calories counting up, macro bars slidingFilmable now.
Month filling in30 days in 3 secondsThe heat-map painting day by dayStatic today. A staggered fill on first open.
Run replayThe route draws itselfMap, the line racing the route, pace and splits overlaidReplay exists on screen. Video export was explicitly not built — the one row that needs real work.
Water + / −The satisfying tapBottle fills, haptic, 5/8 → 6/8Filmable now. A loop, not a story — B-roll.

What makes it beautiful on a phone screen

One motion per frameA ring filling, a number counting, a line drawing. Never two. The eye follows one thing; a second one is noise at 1080p on a bus.
Dark ground, one greenTikTok's own chrome is black. Fitnit's dark card on black with a single #49DE80 reads as part of the feed, not a screenshot pasted into it.
The number is the hero96pt, one number, one word under it. Everything on the board above obeys this; the moments in 03 are built from it.
9:16 by defaultEvery export, every moment, every card renders portrait first. Square is the crop, not the source.
The code is always thereBottom corner, small, monospace. It is the difference between a post and a referral.
Verified beats claimed"Counted" on a rep card, "measured" on a sleep card. A number the app can vouch for is the one worth arguing about in the comments.

Order of work

ChangeAlready builtReal costDo it
01 · Today cardEvery number; ShareCardModal; referral code + linkOne composite widget + two export layouts. Must read well at zero — a new user's first screenshot is all zeros.First. Everything else exports this card.
02 · Screenshot sheetThe card from 01One listener, one sheet, a once-a-day guard, a Settings toggle.Second. Smallest change, highest-intent moment.
04 · Viral momentsRep counting, Future You, voice logging, the water tapThree animations (chart draw-in, month fill, reveal slider) and one export (run replay video).Film the three that exist this week; build the animations as they come up.
03 · MomentsAchievement + PR events already fireOne full-screen route, a count-up, the burst. Same export as 01.Third. The only one that makes a video, not a picture.
Left panes are real (iPhone 17 · iOS 26 · Fitnit v1.148.0 · 2026-09-08). Right panes are drawings and have not been built.
Board: src/public/lab/share.html