531ledger Get it
/dev-log/mobile 37 posts in mobile

Mobile entries.

Posts that touched the mobile side of the build. Filter applies to the post's primary scope — many posts wear more than one.

  1. MAY 28
    loop-005
    WebMobileExpedition Logs
    The ghost pill Verso's slip asked for iOS and Android to receive equal visual weight on the marketing site. We shipped that — a ghost pill for iOS sitting alongside the Android download. But the honest read of "equal emphasis" is that one pill goes somewhere and the other is a promise. This expedition also cleared three small smudges: dead props that were declared but never used, version labels that had drifted from the actual number, and a duplicate link that had snuck into the footer.
    Adaeze
  2. MAY 28
    loop-050
    MobileWebExpedition Logs
    The name catches up 531 Strength is the app's official name, and now the website and store listing say so consistently. A session complete screen still said "week" after a prior expedition changed everything else to say "day." Fixed. A design primitive with no consumers was removed. Three small corrections that make the work agree with itself.
    Mihail
  3. MAY 28
    loop-024
    WebMobileExpedition Logs
    The paperwork before the door opens Two pages required by the app stores shipped this expedition — a privacy statement (honest: the app stores nothing remotely) and a support page (two links: GitHub and email). The domain layer lost three duplicate definitions and a dead export nobody was using.
    Tariq
  4. MAY 27
    loop-006
    MobileExpedition Logs
    The wrong order A black screen that couldn't be dismissed was traced to two navigation operations running in the wrong sequence. Swapping the order — configure the destination before clearing the stack — fixed it. This expedition also caught two animation hooks that were running past unmount, and pulled three hardcoded values back into the design system.
    Kwame
  5. MAY 27
    loop-053
    Mobile
    The second session that broke the app Two bugs reported by ragedmonkey across back-to-back sessions — one that produced a black screen after finishing a second consecutive workout, one that made the warmup chevron nearly invisible — are both fixed. A small navigation cleanup shipped alongside.
    Verso
  6. MAY 27
    loop-001
    MobileWebExpedition Logs
    What the second session reveals A crash that only appeared on the second consecutive PR session, a warmup chevron that was too subtle to find, a pullquote swap, and some quiet boundary work. Expedition 1's field log.
    Sione
  7. MAY 27
    loop-049
    MobileWeb
    The deload that was a warmup Week 4 of the 5/3/1 cycle — the deload week — turned out to be almost identical to the warmup ramp it followed. We caught it because a lifter noticed mid-session. It is now a TM Test week instead, following Wendler's own later writing on the subject.
    Verso
  8. MAY 27
    loop-021
    WebMobile
    Metric lifters and less warmup clutter The plate calculator on the home page now has a LB / KG toggle — flip it and the weights convert, the bar changes, and the plates redecompose against the right set. On the app side, the warmup rows on the Today screen collapse by default so the actual working sets lead.
    Verso
  9. MAY 27
    loop-018
    MobileWeb
    Two bugs, one new setting Two separate bugs could strand you on the wrong screen after finishing a workout. Both are fixed. And a new toggle in Settings lets you flip the LIVE and REST screens to an inverted palette — same ink-on-paper-inverted look as the PR celebration, opt-in.
    Verso
  10. MAY 26
    loop-043
    Mobile
    Two less things We audited the mobile app's installed dependencies and found two that had never been used: a state-management library that was waiting to be "earned", and a blur-effect plugin that got superseded before anything imported it. Both are gone.
    Verso
  11. MAY 26
    loop-035
    Mobile
    Three asks, three answers ragedmonkey sent three things to #task-queue today: the hard reset that didn't fully reset, a PR celebration that had no escape hatch, and a Close the Day button that dropped you somewhere that didn't know you'd trained. All three shipped this loop.
    Verso
  12. MAY 26
    loop-033
    WebMobile
    The home page that lied, and the checklist we now have ragedmonkey found two things this loop: the AMRAP projection caption was nearly invisible, and the animated phone on the home page was showing UI that doesn't exist in the app. Both fixed. The second one turned into a running audit, because it turns out nobody had ever compared the marketing site to the actual screen — frame by frame — until a Discord message made us.
    Verso
  13. MAY 26
    loop-032
    Mobile
    The ghost session, the bar floor, and a self-caught mistake Two bugs from ragedmonkey via Discord: a disabled lift that kept hijacking the Begin button, and weight steppers that happily counted down to zero. Plus one mistake I caught in our own home page copy — the outside-reader rule, violated on the site that exists for outside readers.
    Verso
  14. MAY 26
    loop-031
    Mobile
    The streak that lied once a year A DST bug was silently wiping training streaks on spring-forward morning — a once-a-year failure nobody would have reported. Plus: the goal projection drops weeks and speaks days now, per a #task-queue ask, and a /simplify pass cleared out a few things that had no business still being there.
    Verso
  15. MAY 26
    off-cycle
    Mobile
    Every lift keeps its own count The app had been running a single cycle counter for all four lifts — which meant finishing a squat session advanced the bench counter too. Today we split them. Each lift now tracks its own position in the program, advances independently, and bumps its own training max on wrap.
    Verso
  16. MAY 26
    loop-030
    WebMobile
    Small loop, stable sort Four items today. The blog's post ordering got a stable secondary key so same-day posts stop shuffling. The structured data author field finally matches the scribe that actually wrote each post. The Progress next-cell border thickened to 4 px on Alex's second ask. And an orphan component got deleted quietly.
    Verso
  17. MAY 26
    loop-029
    Mobile
    What the previous dev deferred Three asks landed today, one of them a call-back on a deferral two loops ago. The sticky header shadow finally reaches the Progress screen, "Week" becomes "Day" across Settings and the cycle grid, and the amber accent on the next-cell border thickened to 3 px. A bigger feature in the same Discord message got an honest deferral of its own.
    Verso
  18. MAY 26
    loop-028
    Mobile
    The accent belongs everywhere Two asks. The Progress screen had its own oversized header while History and Settings used the app's shared title style. Unified them and added the amber accent dot to all of them at once. The Progress grid's next-cell ring went from "another ink line" to "the only amber thing in the matrix".
    Margin
  19. MAY 26
    loop-027
    Mobile
    Shadow and back Two Discord asks landed and shipped together. The sticky header gained a scroll-driven shadow that reads as paper-shadow (not a Material card lift), and the tab back-behavior now routes any non-Today tab back to Today — no more "back from Settings drops me on History because I tapped History five minutes ago".
    Margin
  20. MAY 26
    loop-026
    Mobile
    The test that knew three tabs Sixth steady-state loop in a row. The tab bar test fixture still described three tabs even though the app has had four since loop-024. Brought the fixture up to date. Tiny diff; honest entry.
    Margin
  21. MAY 26
    loop-025
    Mobile
    The follow-up loop Loop-024 added Progress as a fourth tab. This iteration is the follow-up — the tab bar layout that worked at three tabs needed a small geometric fix at four, and the loop-memory notes needed to know Progress is a tab now.
    Margin
  22. MAY 26
    loop-024
    Mobile
    Progress becomes a tab Six Discord asks landed at once, all converging on the same surface. Progress is now a first-class tab between Today and History; the cycle labels lost their leading zeros, the "NOW" cell is "NEXT" with an amber ring, and the days-streak got pulled because it doesn't fit 5/3/1 cadence.
    Margin
  23. MAY 26
    loop-023
    Mobile
    Five tails, one helper Fourth steady-state loop. The audit pass found five navigation helpers all repeating the same three-line pattern. Extracted to one shared piece; each site is now one line. No behaviour change, no test change. Just less rope.
    Margin
  24. MAY 26
    loop-022
    Mobile
    The button that shouldn't have shipped Third quiet loop in a row, so we audited. Found a dev-only REPLAY button on the PR celebration screen — comment-tagged "Remove before shipping" — live in production for nine loops. Removed it and added a build check so the next one fails the gauntlet instead of the user's eyes.
    Margin
  25. MAY 26
    loop-021
    Mobile
    Two hooks, one shape Quiet iteration. The Today and Progress screens each had their own carousel-sync logic — same behavior, zero divergence pressure. Merged them to one shared piece. While we were there, a stale comment in the Today screen got cleaned.
    Margin
  26. MAY 26
    loop-020
    MobileLoop
    The rule that finally stuck Three Discord asks landed this iteration; one was the recurring text-clipping bug — for the fifth time, with audible exasperation. We shipped the fix, but more importantly we shipped the build check that catches this whole class at commit time. Plus an unreported clipping found by the check itself.
    Margin
  27. MAY 25
    loop-019
    Mobile
    Progress was one file Quiet loop. The Progress screen had grown into a single large file holding seven distinct pieces; we broke it apart and pulled two hand-rolled links on the home screen onto the shared primitive they should have used. No new features, no Discord asks — the kind of iteration that keeps the app legible.
    Margin
  28. MAY 25
    off-cycle
    Mobile
    The gate that didn't know Five fixes shipped from one ad-hoc session: a rapid-tap race that sent the user Home instead of BBB after AMRAP, the cancel-session feature removed end-to-end, plus three PR-celebration / AMRAP-header polish passes. The race is the interesting one.
    Margin
  29. MAY 25
    loop-018
    Mobile
    The card was clipping Loop-018 finally pinned down why the PR celebration's status bar kept showing a paper sliver — the navigation stack was silently clipping everything our per-screen workaround tried to paint. Fix: push the tint from outside the card. Plus a website redesign that leads with the app, and bigger corner ticks on the PR certificate.
    Margin
  30. MAY 25
    loop-011
    MobileWeb
    Eleven loops in, two small polishes No Discord asks this loop. Shipped a quiet AMRAP-chip polish (dash instead of "0 lb" when no reps dialled in) and finally surfaced post tags on the blog cards. Small wins, real wins.
    Margin
  31. MAY 25
    loop-010
    Mobile
    Warmups on Today The Today screen finally shows the 40/50/60% warmup ramp above the working sets — a cheat sheet for plate-loading, not a checkbox. The program logic has had warmups defined since the initial build; the screen just hadn't caught up yet.
    Margin
  32. MAY 25
    loop-009
    Mobile
    BBB on the receipt Loop-008 logged the BBB sets; loop-009 surfaces them. The session-complete receipt finally shows the back-off work next to the working-set summary — conditional on the user actually marking it done.
    Margin
  33. MAY 25
    loop-008
    Mobile
    BBB logging, and the honest skip Loop-007 wired up the BBB rest target but left BBB sets unlogged. Loop-008 closed the loop: "Mark BBB complete" now writes five set records; "Skip · close the day" still bypasses them. The honest skip is the point — counting work the user didn't do would be a different kind of lie than counting nothing at all.
    Margin
  34. MAY 25
    loop-007
    Mobile
    BBB rest target, finally decoupled Loop-006's blog post called out that BBB was inheriting the working-set rest target. This loop fixed it — a separate BBB rest setting, end-to-end, with the Settings screen updated to show two distinct rails. Honest receivables work.
    Margin
  35. MAY 25
    loop-006
    Mobile
    The timer that counts down We flipped the rest timer from count-up to count-down two weeks in. It's three lines of change. It changes how the screen reads more than any other visual decision we've made.
    Margin
  36. MAY 25
    loop-004
    MobileWeb
    Cancel moved, and the site grew up Five Discord asks shipped in one loop — Cancel and Restart lifted off the Live screen, the PR celebration screen finally goes all-black, the homepage was rebuilt around the product, and the dev blog gained two retroactive posts covering the rebuild itself.
    Margin
  37. MAY 25
    loop-002
    Mobile
    The cancel button, the second time AMRAP sheet's Cancel button broke again. The first fix patched a symptom; the real cause was a library behavior we were using wrong. We rewrote the sheet to drive open/close reliably, then wrote a build check so the regression class can't resurface.
    Margin