← back to the timeline

From the build log of an AI coach that learns what you can lift and tells you exactly what to do next.

Jun 19 2026

10 things got done: The Progress tab now matches the rest of the app. Tap any of these to read the whole thing.

The Progress tab now matches the rest of the app

Every screen in the app got the new look months ago, pure black, big bold condensed numbers, one bright lime colour for the important thing.

Shipped
the problem

Every screen in the app got the new look months ago, pure black, big bold condensed numbers, one bright lime colour for the important thing. Every screen except one: the Progress tab. It was still wearing its own old outfit, a dark mint-green "dashboard" style from an earlier redesign. So jumping to Progress felt like walking into a slightly different app.

what I changed

Gave the Progress tab the same look as everywhere else, without changing a single number it shows:

  • The big "strongest lift" number up top is now the giant bold tabular style (the whole number counts up when you've gained, with the decimal and "KG" sitting quietly beside it).
  • The trend chart line, the pulsing "latest" dot, the personal-record dots (gold), and the "you're behind on this muscle" warnings (amber) all use the app's shared colours.
  • Sharp-cornered cards with thin hairline edges instead of the old rounded mint cards.
  • The weekly-volume bar chart keeps a colour per muscle (it's the one place colour actually means something), but I retuned them to muted tones and made sure chest is no longer lime, lime is reserved for the one accent.
  • Deleted the old separate colour file the Progress tab used to carry around.

Nothing about the data or the honesty changed: every insight still hides itself when there's nothing real to show.

how I tested it

Built mock versions in the prototype playground first and got the look signed off, then built the whole app clean and took a real screenshot of the live Progress screen to confirm it looks right in the actual app (using a throwaway hook that I removed).

Shipped to main, PR 525, part of 524 (kept open for a final look on a real phone).

A "how it works" page that explains the coach two ways

The build-log site showed what the app looks like and how I designed it, but never the actually-interesting part: how the coach thinks.

Shipped
the problem

The build-log site showed what the app looks like and how I designed it, but never the actually-interesting part: how the coach thinks. How does it decide what weight to tell you? How does it learn who you are? People had to take "it's smart" on faith.

what I changed

Added a new page that explains the coach and its "brain" two ways, with a toggle to flip between them:

  • A plain version for anyone: how it learns you instead of using averages, why it picks the exact weight it does, how it remembers the notes you leave it, how it sharpens every session, and the fact that it won't make a number up.
  • A technical version for developers: the real internals. The three-layer memory, the actual formulas (how it estimates your strength, smooths it, sets your targets), how it grades and corrects its own past advice, the architecture, and a "the hard parts" section with the genuine bugs and complications that shaped it. The deepest details tuck behind "go deeper" toggles so it isn't a wall of text. All of it pulled from the real code, including the honest caveats (like which model it actually runs). I also added my Instagram and LinkedIn to the footer.
how I tested it

Wrote it off three deep reads of the codebase so the technical claims are accurate, built the site (now 16 pages), opened both versions to check the toggle, the diagrams, and the formulas all render right, took the em-dashes out to match the site style, then pushed it live and confirmed both versions and the new links work on the real site.

Shipped and live at thearnavmenon.com/how-it-works.

Tidied the muscle name on the day screen

On a day's exercise screen, the little summary line at the top spelled out the full muscle name, "3 EXERCISES · PECTORALIS MAJOR", while…

Done
the problem

On a day's exercise screen, the little summary line at the top spelled out the full muscle name, "3 EXERCISES · PECTORALIS MAJOR", while the calendar showed the friendly short version, "CHEST". Small inconsistency, but it looked untidy.

what I changed

Made that summary line use the same short names the calendar uses, so it now reads "3 EXERCISES · CHEST · TRICEPS." (The detailed name under each individual exercise is left as-is.)

how I tested it

Built the app clean and confirmed it compiled.

Merged (PR 521, under umbrella 507).

The Program top card now knows when a workout is paused

On the new Program screen, the big card at the top always said "NEXT UP, Start workout." But if I'd already started a session and paused…

Done
the problem

On the new Program screen, the big card at the top always said "NEXT UP, Start workout." But if I'd already started a session and paused it part-way (say my Pull day), the card still said "Start workout", as if nothing was going on. It ignored the fact that a workout was sitting there paused, waiting to be resumed.

what I changed

The top card now reads the app's live-session tracker and shows the real state:

  • If a workout is paused, it turns amber and says "PAUSED, Resume workout" (taking you straight back into it).
  • If a workout is live right now, it says "LIVE NOW" and even shows how many sets you've done.
  • Only when nothing is going on does it fall back to "NEXT UP, Start workout."
how I tested it

Built the app and ran it in the simulator with a fake paused session for the Pull day, the top card correctly showed the amber "PAUSED, Resume workout" for Pull A instead of the old "Start workout." Photographed it to confirm.

Merged (PR 519, under umbrella 507).

A "how I designed it" page on the build-log site

The build-log site showed the finished app and the finished site, but not the part I find most interesting: all the options I tried and…

Shipped
the problem

The build-log site showed the finished app and the finished site, but not the part I find most interesting: all the options I tried and threw away to get there. There was nowhere that showed the actual creative process.

what I changed

Added a new page (reachable from the homepage and the footer) that walks through every design decision as a little "here's what I tried, here's what I kept". For each one it lays the options out side by side with the version that actually shipped marked. It covers both the app and this site:

  • The workout screens, built three different ways (a data-heavy "instrument" one, a stark "brutalist" one, and a calm one). Brutalist won, and then I rolled that look across the whole core flow.
  • Four ways I tried to put my name on the site's front page, then I cut the name entirely and just called it "Build Log".
  • The page layout, the diary section, the share card, and the tab icon, each with the options I weighed. I picked the page's own layout the same way I pick everything visual: rendered a few versions and chose one. The old option images were just scratch files spread across two folders, so I cleaned up and shrank the good ones into the site.
how I tested it

Built the site (now 15 pages), opened it locally to confirm every image loaded and the "shipped" picks were marked right, then pushed it live and checked the new page, its images, and the homepage link all work on the real site.

Shipped and live at thearnavmenon.com/design.

The build-log website got a polish pass

The build-log website, the public page where I write up each day's work, had a pile of small rough edges.

Shipped
the problem

The build-log website, the public page where I write up each day's work, had a pile of small rough edges. The diary titles still showed my internal shorthand, things like "(#423)" or "(Phase 3 UI, commit 1 of 2)", so it read like a task tracker instead of a journal. Sharing a link showed no preview card, and there was no little icon in the browser tab. The phone screenshots on the homepage were about four times bigger than they needed to be, so the page was heavier than it should be. And some of the faint grey text was too dim to read.

what I changed

A batch of small fixes, built in parallel by a handful of agents and shipped together:

  • Stripped the internal issue/phase shorthand off the shown titles, but kept the real-words asides like "(the real reason saves were failing)", and the #123 chips still show on the status line.
  • Added a proper share card (a bold "WHAT I'VE BEEN WORKING ON" poster) and a tab icon (a lime grid with a little dumbbell cut out of it). I rendered a few options for each and picked.
  • Made shared day-links friendlier: a real headline, a one-line "what is this app" note at the top, and a proper page description.
  • Shrank the phone screenshots to a modern format (about 980KB down to ~150KB) and told the browser to cache the images for a long time.
  • The commit totals on the heatmap now count up when they scroll into view.
  • Bumped the faint grey text so it's readable, and put a visible outline back on entries when you tab onto them with the keyboard.
  • Added a small footer, a robots file, and a sitemap so search engines find it.
how I tested it

Built the site (still 14 pages, no errors) and clicked around a local copy, the titles are clean, the share card and icon show up, the day pages have headlines, and the screenshots are sharp but small. Then pushed it live and checked the real site: the preview card, the icon, the sitemap, and the long-cache headers are all serving from thearnavmenon.com.

Shipped and live at thearnavmenon.com (build-log site repo). No separate issue tracker for that repo, so it landed straight on its main.

The Program tab got the full redesign

The Program tab, the screen that shows your 12-week plan and the screen that shows a single day's exercises, was the last part of the app…

Done
the problem

The Program tab, the screen that shows your 12-week plan and the screen that shows a single day's exercises, was the last part of the app still wearing the old look. Everything else (workouts, settings) had moved to the clean black "Brutalist" style, so the Program tab stuck out. It was also a bit dumb: it listed the plan but never told you what to do next, never showed how you did last time, and never explained why a deload week was a deload.

what I changed

First I rebuilt both screens in fake-data prototypes so I could see the new look before touching the real app, and got it signed off. Then a panel of four reviewers (a product person, a designer, a serious-lifter, and a "keep it simple" skeptic) suggested upgrades and I picked the good ones. The real work shipped as six small pieces:

  • Both Program screens restyled to the black/condensed/volt-lime identity.
  • A "NEXT UP" card at the top of the calendar with a big Start button, the screen finally tells you what to train next.
  • Each exercise now shows what you lifted last time (with an up arrow if you're improving) and your floor/stretch targets.
  • Completed days now show the coach's note explaining why it picked each weight (we already wrote that note, we were just throwing it away).
  • A one-line reason on deload weeks, and the per-lift progress strip now shows trend arrows and "transitioning" markers.

Where the data didn't really exist (a fake session-length, a made-up deload percentage), I deliberately left it out rather than invent numbers.

how I tested it

Each piece built green on its own; I scanned every change to confirm it only touched the look, not the behaviour, before merging. Then I built the whole app together (green) and ran it in the simulator with sample data to photograph both real screens, the new calendar and day view look right in the actual app, not just the mockups.

All six pieces merged (PRs 508, 509, 510, 511, 512, 514) under umbrella 507. Holding the umbrella open until I sign off on the look on a real device. One tiny follow-up noted: the day-header focus line shows the long muscle name instead of the short one.

The build-log site now updates itself

I put the public build-log website online, but it was a frozen snapshot, the diary and the green commit-graph on it only showed data up to…

Shipped
the problem

I put the public build-log website online, but it was a frozen snapshot, the diary and the green commit-graph on it only showed data up to the day I built it. Every time I shipped something new, the site would quietly fall behind unless I copied files across by hand.

what I changed

Added a small robot (a GitHub Action) to this repo. Now every time I push my work, it counts up my commits for each day, grabs the latest diary, and sends both over to the website's own repo automatically. The website notices and rebuilds itself a minute later, so it always shows my newest days without me touching it. I also made the commit-graph stretch to the most recent day with activity, so brand-new days actually appear instead of stopping at an old date.

how I tested it

Merged it and watched the first run go green, then looked at the website's repo: the robot had pushed today's diary and a fresh commit count that now includes today (it didn't a minute before). The whole loop works start to finish.

Merged to main (513). The build-log site lives in its own repo and went live on Cloudflare earlier today; this is the piece that keeps it fresh.

Two fixes to the mid-workout flow

Two annoyances during a workout.

Done
the problem

Two annoyances during a workout. First, when you finished a set and the "How did that set feel?" popup came up, the "Log set" button was hidden below the fold, you had to swipe up every single time just to reach it. Second, when you finished an exercise, a "Set Complete" screen flashed up that still used the old plain-looking design, out of step with the rest of the app.

what I changed
  • The "How did that set feel?" popup now sizes itself to its contents, so the Log set button is always on screen, no more swiping up. It grows on its own if you open the "Add detail" section.
  • The end-of-exercise moment got a fresh look: a volt-lime "done" stamp that pops in, the exercise name, and a small "next up" line so it feels like you're moving forward instead of hitting a wall. It keeps the same brief timing as before (that pause quietly loads the AI's plan for your next exercise), adds a little success buzz, and respects the "reduce motion" setting.
how I tested it

Proved the popup-sizing trick in the isolated prototype harness first (the Log set button sits fully clear of the home bar), got the new "exercise complete" look signed off from a prototype render, then built the real app clean for both.

Both merged to main, popup fix (504), exercise-complete restyle (505). Visual/behaviour only; no workout logic touched.

Redesign playbook now includes a "what can we improve?" step

Our screen-redesign process only covered making a screen look right.

Done
the problem

Our screen-redesign process only covered making a screen look right. But a redesign is also the best moment to ask "what's missing here, or what could be better?" The Settings redesign proved that out, so I wrote the step down so we do it every time.

what I changed

Added a step to the redesign playbook: an optional panel of agents that reviews a screen from different angles, product, visual, an expert user, and a skeptic who pushes back on adding too much, covering what's missing, what to add, and how it looks and feels. The panel hands back a short list, the user picks, and the chosen ideas get prototyped and built like any other change.

how I tested it

Docs-only change to the redesign guide; merged via PR.

Merged to main (502). The how-to lives in docs/agents/screen-redesign.md (Phase 2.5).