What's new

881 releases over 84 days of shipping, newest first. Now on v5.145.26.

MONDAY, SEP 7, 2026 Β· 3 RELEASES

  1. Hidden Cards Can Come Back

    v5.11.2
    • πŸ› Switching a card off removed it from the switch list too, so there was nothing left to switch back on. The list now shows every card your story can hold, shown or hidden
  2. Cards Fill The Frame

    v5.11.1
    • πŸ› Exported video drew each card small with a dead band under it β€” the capture box was taller than the card, and the gap got baked into every frame
    • πŸ› Pound For Pound printed "253.531 lbs"; weights round to a tenth at the point they are drawn
  3. Your Transformation, As A Video

    v5.11.0
    • 🎬 Export your whole story as a video β€” every card in order, your music baked in, and the cards that normally need scrolling (records, badges, protocol) pan past on their own so nothing is hidden
    • πŸ”€ It ends on an animated before/after: the divider sweeps across and back so the change reads at a glance, without anyone touching the screen
    • πŸ“ Two shapes: 9:16 for Instagram/TikTok stories and reels, 1:1 for feed posts
    • πŸ“² Share straight from your phone's share sheet into Instagram, TikTok or anywhere else β€” no link to follow, no site to visit
    • πŸŽ›οΈ New "Cards In Your Story" switches: turn off anything you'd rather not share and it leaves the story, the share link and the video
    • 🌈 New RGB accent that cycles the whole spectrum, with a speed slider from a 1.5-second strobe to a 30-second drift
    • πŸ‹οΈ New "Pound For Pound" card: your big-three total and what each lift is worth as a multiple of your bodyweight

MONDAY, AUG 31, 2026 Β· 6 RELEASES

  1. Exercises You Already Added Stop Disappearing

    v5.10.1
    • πŸ”Ž Searching the Add Exercise picker for something already in your workout showed every variation of it EXCEPT the one you wanted β€” it was being hidden for already being in the session, with nothing to say so. Eight Dumbbell Pullover variations, no Dumbbell Pullover
    • βœ… Those now appear where you'd expect, marked "Added" and greyed out, so a search tells you the truth instead of looking like the exercise doesn't exist
  2. Search Survives Your Thumbs

    v5.10.0
    • πŸ” Searching "dumbell pullover" found nothing at all β€” one missing b and the whole library went blank. Search now forgives a typo per word, but only when the exact spelling finds nothing, so good searches stay sharp
    • πŸ’ͺ Gym shorthand works: "db pullover", "bb squat", "ohp", "rdl", "benchpress" and friends all land where you'd expect
    • 🎯 The exercise you actually typed now comes first. "pullover dumbbell" used to find Dumbbell Pullover and then bury it sixth, behind Dumbbell Around Pullover
    • 🩹 A typo'd "pullovr" returned a wall of pull-ups, because "pull" was allowed to match anything starting with it. Short words no longer swallow much longer ones
    • πŸ• The exercise library opens on a Recent row β€” the lifts you've actually logged in the last 60 days β€” instead of the top of a 2,000-row alphabet. The workout picker already did this; the library now matches
  3. Pause Means Pause

    v5.9.1
    • πŸ› The pause button on a clip's trimmer restarted the clip instead of stopping it β€” it passed the in-point, which the player read as "play from here"
  4. You Just Lifted A Blue Whale

    v5.9.0
    • πŸ‹ Your all-time volume now earns notifications. Cross the weight of a car, an elephant, a Boeing 737, a blue whale β€” and each one arrives with its own message, written for that object and nothing else
    • 🧊 Eighteen rungs, from a grown adult to the iceberg that sank the Titanic. Reach the top and you're told you just lifted enough to save the ship
    • 🚒 Six new rungs: a Boeing 747, the Leaning Tower of Pisa, the Titanic, the Empire State Building, the Golden Gate Bridge and that iceberg β€” closing a gap where the Wrapped card used to say "21 Eiffel Towers"
    • πŸ”” One notification per workout, ever. A huge first session that clears four rungs at once announces the heaviest and stays quiet about the rest
    • πŸ“ Wrapped and the notifications now read one ladder, so the same tonnage can never be named two different things on two screens
  5. The Clip Preview Actually Previews The Clip

    v5.8.1
    • πŸ› Previews ignored the out-point and played on to the end of the track. The listener watching the clock was reading the trim as it was when you pressed play, so any out-point you set afterwards never reached it
    • ▢️ A preview now behaves like the story does: it stops at the out-point and rolls into the next clip, wrapping back to the first β€” and a single clip loops
    • πŸ› Removing a song while previewing it left it playing with nothing on screen to stop it. It stops now
  6. Every Song, Cut To The Good Part

    v5.8.0
    • βœ‚οΈ Every song in a story playlist has its own trimmer now β€” skip the two-minute build on track one, drop straight into the chorus on track two. A story gets 30 seconds of attention; no song should spend it building
    • πŸ” The playlist plays your clips in the order you set, then starts over from the first and keeps looping
    • ↕️ Reorder the queue with the arrows, remove a track with βœ•, and preview any clip from its exact in-point before you save
    • 🎧 Rebuilt the player around two audio elements so the next clip is buffered and cued before the current one ends β€” no gap at the seams, and volume and mute survive every change
    • 🎡 The track's name appears briefly when a new clip starts, so a playlist tells you what you're hearing
    • πŸ‘€ You can finally see your own closing card β€” the one visitors get, with what your transformation cost β€” right before your Share card. Visitors still end on it, with the button that actually signs them up

SUNDAY, AUG 30, 2026 Β· 12 RELEASES

  1. Every Pound Says Which Pound

    v5.7.3
    • βš–οΈ The closing card for visitors labelled its pace tile "lbs/week" with no subject β€” same ambiguity the What It Took card just lost. It now reads "Body weight a week"
  2. Showing Up, Told Honestly

    v5.7.2
    • πŸ› "Sessions a week" divided by calendar weeks, including weeks after your last workout (transformation windows often end in the future) β€” a 5-a-week lifter was reported as 4.0. It now shows a typical training week (the median of the weeks you actually trained), plus your best week and how many weeks you trained
    • πŸ› "Most-trained day" was a tie-break, not a fact: with five sessions a week several days tie and the earliest one always won, so Monday got named even when it was the lightest day. It's now your heaviest day by volume, and it stays hidden unless one day is genuinely ahead
    • ⏱️ Added your longest session next to your typical one β€” a 1h 45m day shouldn't be invisible
    • βš–οΈ The pace line under Total Weight Moved says what it means: "Body weight β€” 21.2 lbs lost over 17 weeks, about 1.2 lbs a week". Two different pounds on one card needed labelling
    • πŸ‹ The weight-moved comparison spans every magnitude now, from a first month of lifting to a decade of it β€” never a fraction of a blue whale, never nine thousand grand pianos
    • ✏️ Transformations can be renamed β€” the title is a field in story settings instead of being fixed at creation
  3. A Shared Story Ends With An Invitation

    v5.7.1
    • πŸ”₯ Shared stories now close on "start your transformation" β€” the weeks, sessions, hours and weekly pace it took, then a way in. Visitors used to land on a Share button that was disabled for them
    • πŸ“… The heatmap card is "Day By Day" so it stops echoing the new Showing Up card
  4. Wrapped: The Inputs, Not Just The Outputs

    v5.7.0
    • πŸ‹οΈ New "What It Took" card β€” hours under the bar, sets, reps, total tonnage, and your weekly pace, with the tonnage translated into something you can picture (4.7 Boeing 737s beats 422,600 lbs)
    • πŸ“† New "Showing Up" card β€” sessions a week, longest streak without a rest day, your most-trained day, and the hour the work usually started
    • 🎯 New "Where The Work Went" card β€” volume by muscle group, replacing the archetype card (a label nobody picked, with an icon that never loaded for the people you shared with)
    • 🍽️ New "What Fuelled It" card β€” average calories and protein across the days you logged, shown only when there are enough of them to mean anything
    • πŸ† Personal Records now list one row per lift (your best), with every record for that lift β€” and the date it was set β€” one tap away, instead of every 275/315/425 on the way up
    • πŸŽ–οΈ Badges are tappable: each one explains what it took to unlock and when you got it, so "Quarter Master" means something to whoever you send it to
    • 🎡 Multi-song stories: pick up to 5 tracks and they play in order, then start over. Clip trimming stays for single-song stories, where it makes sense
    • 🧭 "During your 16-week bulk" moved onto the opening card β€” same context, one less swipe
  5. Side By Side Sits Tight

    v5.6.2
    • πŸ“ The side-by-side final card sizes to its photos again instead of stretching to the full frame, so there's no empty band above the pair
  6. Summary Photos Keep Their Shape

    v5.6.1
    • πŸ–ΌοΈ The final card's photos are sized by width and height together, so side-by-side frames stay 3:4 instead of stretching tall and growing blurred bars
    • πŸ”’ Stat tiles no longer wrap: "422.6K lbs" and its label sit on one line each across all four columns
  7. Final Card: Your Choice Of Reveal Or Side By Side, And It Fits Again

    v5.6.0
    • πŸ› Fixed the summary card overflowing the frame after the full-width reveal landed (photo clipped under the progress bar, stats cut off at the bottom): the hero is now capped to the card area and the stats sit in a tighter 4-across grid
    • πŸͺž Per-transformation choice for the final card in story settings: the before/after reveal slider (default) or the classic side-by-side pair β€” saved with the story, so your share link shows what you picked
  8. Summary Card At Full Width

    v5.5.2
    • πŸ› The summary card was sizing itself to its text and coming out ~40% narrower than the journey card, so the new before/after reveal looked small. Story cards now always fill the frame β€” the reveal is as wide as the journey photos
    • πŸ” Frame Your Photos editors auto-size with a 240px minimum instead of four to a row (they were 156px wide on desktop)
  9. Framing Editors You Can Actually Frame In

    v5.5.1
    • πŸ” The Frame Your Photos editors now auto-size with a 240px minimum instead of packing four to a row β€” on a desktop settings sheet that's ~300px each, on a phone one big editor at a time
  10. Full-Resolution Stories, A Real Before/After Reveal, Editors You Can See

    v5.5.0
    • πŸ“Έ Story photos are now full quality: every card was rendering the 400Γ—400 upload thumbnail β€” a center-cropped square β€” which is why they looked pixelated on a good screen and why edges were missing before any framing. Stories now use a 1600px, aspect-preserving version generated from your original (created on first view, then cached)
    • πŸͺž The summary card's before/after is a full-width reveal: drag the divider to sweep between the two photos, each at the card's entire width instead of half. The 9:16 / 1:1 downloads capture the reveal wherever you leave it
    • 🎯 Fit mode pans when zoomed: drag to put the subject where you want, and the photo only moves along an axis where it overflows the frame β€” so the blurred margins stay equal and you can still recenter
    • πŸ” Photo picker tiles never shrink below ~112px no matter the layout, and the framing editors are half/third-width instead of thumbnails, so you can actually see what you're framing on desktop and mobile
  11. Coming Off: One Tap From Cycle End To A Scheduled Protocol

    v5.4.0
    • πŸ“… The last-dose date is now derived from your cycle instead of guessed. Pick your bulk or cut and it walks your dosing rhythm back to the real final day β€” a Mon/Wed/Fri protocol on a cycle ending Sunday the 20th gives you Friday the 18th, worked out for you
    • πŸ› Fixed the date defaulting to weeks in the PAST. It used the newest END DATE across your schedules, but anything you are still running has no end date β€” so it landed on the last protocol you had already FINISHED
    • ⚑ One tap: β€œSchedule my PCT” saves and books the whole protocol β€” hCG, your SERM, every dose β€” straight onto your calendar, Today screen, Active Levels and adherence. No second visit to this page
    • 🎯 Derived dates no longer invent a dose. The stack anchor is the latest dose across every compound, so a daily oral running to cycle end would previously have put a phantom injection on a day you do not inject
    • βœ‚οΈ Removed the counterfeit-products warning. It was built on analyses of seized black-market product, which is not where this app’s users get their pharmaceuticals
    • βœ‚οΈ Removed the trial-evidence lecture. Leading with β€œno measurable difference” leaned on a study that only checked at 3 months and 1 year β€” by which point most men have recovered either way, so it could not detect the speed difference that is the entire point of running PCT
    • πŸ” Still there: the clearance maths, the evidence tiers, the bloodwork schedule, and the red flags that actually need acting on
  12. Equal Margins At Every Zoom

    v5.3.4
    • πŸ› Fit-mode photos that had a saved zoom were still off-center: the zoom scaled about the old top-aligned focal point, so the photo slid down and out of the frame β€” bar on top, none below, body clipped at the waist. Fit now zooms about the center as well, so the blurred margins stay equal at any zoom. Fill still pans and zooms around the point you drag to

SATURDAY, AUG 29, 2026 Β· 2 RELEASES

  1. iPhone Upload Tap: Focus-Free, And Traced

    v5.3.3
    • πŸ“± Follow-up to 5.3.2 for the iPhone report that the upload chooser still needed several taps: a tap no longer moves keyboard focus onto the upload control (the only thing that differed between the first tap and the ones that worked), and the control opts out of double-tap zoom. Keyboard users still Tab to it and see the ring
    • πŸ” On phones, every tap on an upload control is now traced (touch β†’ click β†’ change, what was under the finger, focus and zoom state) into the console capture that rides along with a bug report. If a picker still needs more than one tap: tap it once, then file a bug report from the same page β€” the trace comes with it
  2. Photo Upload Works On iPhone Again

    v5.3.2
    • πŸ“± Tapping the photo upload zone on iPhone opens the photo picker again. Every upload control was a hidden file input triggered from script, and iOS WebKit (Safari and Chrome alike) had stopped opening the chooser for it β€” the tap silently did nothing. The real control now sits under your finger on the Photos page, the lab report uploader, the bug reporter's Screenshot tile and the story music picker
    • πŸ› The bug reporter's Screenshot tile attaches images on the phone again (same fix)
    • ⌨️ Keyboard users: Tab lands on the upload zones and Enter/Space opens the picker, with a visible focus ring

THURSDAY, AUG 27, 2026 Β· 1 RELEASE

  1. Summary Photos Back, Even Margins, Accents That Actually Accent

    v5.3.1
    • πŸ› Fixed the summary card's before/after photos rendering invisible after the Fit-mode change (the frame collapsed to zero height on that card only)
    • 🎞️ Fit mode always centers the photo now, so the blurred margins are equal top and bottom (or left and right). Photos saved with the old top-aligned framing were pinning to the top and showing a single bar
    • 🎨 The accent color selector finally does something: it re-themes the card borders, the card glow, the timeline rail and nodes, and every primary-colored element β€” not just the couple of green highlights it used to touch
    • πŸ§ͺ Share Compounds is a collapsed dropdown with the on/off switch in its header ("5 shared"), and Journey Photos collapses too β€” a long protocol no longer takes over the settings sheet
    • 🎚️ The music clip range is one trimmer bar with in/out brackets (drag either, tap inside to preview from there, arrow keys to nudge) instead of two separate sliders

SATURDAY, AUG 29, 2026 Β· 2 RELEASES

  1. Atlas: What Was NOT In Your Blood, And Real Panel-To-Panel Comparisons

    v5.3.0
    • πŸ§ͺ Atlas no longer credits a compound you weren't on. When you confirm a panel's protocol on the Labs page, every compound you left out β€” and anything you started after the draw β€” is now spelled out to the coach as β›” NOT in the bloodstream for that panel, in the main context, in lab history and in comparisons. Before, only the confirmed list was shown and Atlas bridged the gap from "currently taking" on its own (the Retatrutide-and-glucose incident)
    • πŸ“Š "Compare this to my previous / mid-cycle / pre-cycle bloodwork" is now a real comparison: a new compare_lab_panels tool returns every shared marker with its exact change (Ξ” and %), what rose, fell or held, range flags on both sides, markers only in one panel, the confirmed protocol at each draw, and exactly what started, stopped or changed dose between the two draws β€” so a change can only be pinned on something that actually changed. It understands latest, previous, oldest, pre-cycle, "2 panels ago" and dates
    • 🧭 One rule for "what was on board": lab history now uses the same shared derivation as the Labs page and the main context, and confirmed names match schedule names through their aliases (HCG ↔ HCG (Human Chorionic Gonadotropin), Anavar ↔ Oxandrolone (Anavar))
    • πŸ”§ A custom Mon/Wed/Fri schedule is no longer reported to the coach as having "drifted" from MWF
  2. Lab Upload: Ratios Have No Unit, Equivalent Units Aren't Mismatches

    v5.2.2
    • πŸ§ͺ Lab PDF upload works again for reports with ratios: Albumin/Globulin, Chol/HDL and other dimensionless results no longer stop the whole panel with "Unit required" β€” a ratio is just a number. The confirm table, manual entry and the in-place editor all accept a blank unit now, and blank stays blank on the history and trend surfaces (no dangling space)
    • βœ… No more false "Expected K/uL" warnings: Quest's Thousand/uL and Million/uL, LabCorp's x10E3/uL, mL/min/1.73m2 for eGFR, IU/L vs U/L, uIU/mL vs mIU/L and the other equivalent spellings are recognised as the same scale. The ⚠ still appears for a real unit change (ng/dL vs nmol/L) and when a marker we know carries a unit came through blank β€” but it is advice, never a blocker
    • πŸ“ˆ Trend charts no longer split one marker into "mixed units" because two labs spelled the same unit differently
    • 🧹 A stray "(calc)" note on a unit is trimmed instead of dropping the marker, and the extractor is told to copy units exactly as printed and leave ratios blank
    • πŸ›  npm run labs:extract -- report.pdf replays a report through the exact upload pipeline offline (same prompt, model and parsing), so a misbehaving report can be diagnosed without the app

THURSDAY, AUG 27, 2026 Β· 2 RELEASES

  1. Shared Template Page: Phone Polish

    v5.2.1
    • πŸ“± On phones, an exercise name that filled the line left its how-to β†— icon stranded alone on the next line; the icon now stays glued to the last word. The stats tiles keep their numbers on one baseline ("Muscles" instead of a wrapping "Muscle groups")
  2. Share A Template, Import It In One Tap, Duplicate Before You Tweak

    v5.2.0
    • πŸ“₯ Shared template links are finally useful: a signed-in viewer gets an Import button (top right and at the bottom of the page) that copies the whole routine β€” every exercise, order, set and rep target, cardio blocks, notes β€” into their own templates and opens it for editing. Before, the page told you to "import" but there was nothing to click; the only way in was rebuilding it one exercise at a time
    • 🧬 Imports are safe to share with anyone: custom exercises you made are copied into the importer's library so nothing shows up as "Unknown exercise", the copy is named "Push Day (from Mike)" so they know where it came from, and importing twice gives "(2)" rather than a twin
    • ✨ The shared template page is redesigned: a proper header with who shared it, a stats ribbon (exercises, total sets, muscle groups, cardio minutes), muscle-mix chips at a glance, and one clean exercise list with the targets in their own column β€” instead of a dozen loose boxes with wrapping badges. Viewing your own link shows "Open in my library"; signed-out visitors get sign-up plus a sign-in link that brings them straight back to the template
    • πŸ“‹ Duplicate a template from its editor: one tap makes "<name> (copy)" and opens it, so you can rename and rework your new Thursday while the original stays untouched (and stays on your schedule) for reference. Copies of copies count up β€” "(copy 2)", never "(copy) (copy)"

WEDNESDAY, AUG 26, 2026 Β· 2 RELEASES

  1. Nothing Gets Cut Off Anymore

    v5.1.2
    • πŸ–ΌοΈ Story photos now Fit by default: the whole photo sits inside the 3:4 frame with a blurred copy of itself filling the margins, so a double-bicep shot keeps both arms. The old behavior cropped anything wider than the frame and the crop tool could only zoom in β€” it never could have brought the arms back. Fill (crop-to-frame) is still a toggle per photo
    • 🎚️ Story settings are tidier: Background Music and Frame Your Photos are collapsed dropdowns (the music header shows the current song), framing editors are thumbnails instead of half-screen panels, and the checkpoint photo picker is finally tall enough to see photos on desktop (up to 8 columns)
  2. Protocol Changes After The Finish Photo Count Too

    v5.1.1
    • πŸ› A dose change or stop dated after your after-photo was dropped from the story entirely (an Anavar raise on Aug 5 with an Aug 4 finish photo simply never appeared). Compounds now span your full transformation window; changes after the finish photo show as a trailing node past Finish on the journey
    • ⏹️ The "Stopped" marker is a filled stop square now β€” the outline read as an unchecked checkbox

SATURDAY, AUG 22, 2026 Β· 1 RELEASE

  1. Polypharmacy-Proof: Titrations, Stops, And A Timeline That Respects Time

    v5.1.0
    • πŸ“ˆ The journey now understands dose changes: a compound titrated up or down shows a "Raised dose" / "Lowered dose" event with the before β†’ after weekly totals (Oxandrolone 175 β†’ 350 mg/wk), and compounds you stopped show "Stopped" where they ended. A schedule edited within two weeks reads as continuous, not a stop-and-restart
    • 🧭 Protocol changes are clustered: everything within a two-week window (that doesn't cross a photo checkpoint) is one compact node with a count badge and a ledger of changes β€” a week where you started six compounds is one swipe, not six, so the strip reads as time again
    • πŸ“œ The Protocol card scrolls: 10+ disclosed compounds no longer overflow the card, and the compound info panel stays on screen (its X was off-screen when the card overflowed)
    • 🎯 Fixed the pulsing info icon getting clipped at the right edge of the compound name

WEDNESDAY, AUG 26, 2026 Β· 1 RELEASE

  1. Strength Goals Complete When You Beat Them

    v5.0.8
    • 🎯 Fixed strength goals staying "active" after you beat them. With no stored start value (every goal created before 5.0), the checker took your first lift AFTER setting the goal as the starting point β€” so a 335 lb bench against a 330 lb goal was read as "get back down to 330" and failed. Strength and FFMI goals are now always "reach at least the target"; body-fat goals default to "get down to" when the start is unknown
    • πŸ”” Achieving a goal now sends a notification (bell + phone push, in your coach's voice) with the target and what you actually hit β€” before, only the one-time "Goal Achiever" badge fired, so every goal after your first was silent
    • πŸŒ™ The nightly run re-checks every active goal against your current numbers, so a goal met while a check was missed can never stay open β€” existing goals were re-evaluated with this release

TUESDAY, AUG 25, 2026 Β· 8 RELEASES

  1. One Metabolic Age Card

    v5.0.7
    • πŸ› Fixed the dashboard showing two "Metabolic Age" cards. v5.0.0 quietly added the raw Withings card to everyone's layout next to the metabolic-age card you already had β€” the one that shows the same reading plus the gap to your actual age. The duplicate is retired and drops out of your layout on its own
    • πŸ•°οΈ The remaining Metabolic Age card shows your scale's reading even before you've added your age in Settings; the comparison appears once you do
  2. No More Redirect Loops, Ever

    v5.0.6
    • πŸ” 5.0.5 carried valid pre-5.0 sessions over correctly, but a browser holding an old cookie whose session had already expired still bounced between the dashboard and the login page. Root cause was older than 5.0: any cookie that exists but no longer validates (expired, revoked from another device, or stale) tripped the same loop. The login page now always renders when the app sent you there, and stale cookie values are cleared instead of copied β€” so the worst case is the login form, once
  3. Old Sign-In Cookies No Longer Lock You Out

    v5.0.5
    • πŸ”‘ If you were signed in before 5.0.0, the site bounced between the dashboard and the login page until your browser gave up ("too many redirects") β€” the only way out was clearing cookies. 5.0.0 changed the sign-in cookie's name, the app kept treating the old cookie as "signed in" and nothing ever removed it. The old cookie is now carried over automatically: a still-valid session just works with no sign-in at all, and an expired one takes you to the login page once
  4. Lab PDF Extraction Restored

    v5.0.4
    • 🩸 Uploading a lab PDF works again. The PDF reader's native helper (@napi-rs/canvas) was left out of the 5.0.0 server image the same way sharp's binding was, so every PDF upload since 5.0.0 answered "Failed to read PDF" β€” the image now ships it, and a build-time check imports the PDF reader so this can't recur
  5. Share Links, Uploads, and Lab OCR Back

    v5.0.3
    • πŸš‘ Fixed share links, link-preview images, photo uploads, bug-report screenshots, and lab-report extraction all failing with a 500 since v5.0.0. The slimmed-down production image was missing sharp's native image binding (Next's file tracing dropped it). The image now ships the full sharp install and refuses to build at all if sharp can't load
    • πŸ›‘οΈ A share page can no longer be taken down by the photo resizer: the preview image loads sharp only when it actually has photos to resize, so a resize failure means "no photos" on a transformation card β€” never a broken workout link
  6. Settings Hydration Fix

    v5.0.2
    • πŸ•’ The timezone picker's UTC-offset labels are rendered identically on the server and in the browser (zero-offset zones read "UTC+00:00" everywhere), which removes the hydration error that fired on every Settings visit in 5.0.0
  7. Rollout Hotfix

    v5.0.1
    • 🩺 The DB-free /api/livez liveness endpoint introduced in 5.0.0 is now exempt from the sign-in gate β€” the middleware was answering the kubelet's probe with 401, which kept 5.0.0 pods from ever passing their startup check
  8. The Big One: 240+ Fixes From A Full Platform Audit

    v5.0.0
    • 🏁 Version 5 is the result of a top-to-bottom audit of every page, query, coach prompt, notification rule and deploy step. Every finding was fixed, tested and verified: this release closes 5 critical, 52 high and 180+ medium/low issues across security, data correctness, the coach, workouts, body tracking, compounds, labs, social features and the UI. You'll be asked to sign in once after the update
    • πŸ” Security: invite codes are enforced by the server (no way to register without a valid, unused code), sign-ups confirm you're 18+, and Settings has a new Security section β€” change your password, see every signed-in device, sign out everywhere, or delete your account and every byte of your data yourself
    • πŸ”’ Sessions use a Secure cookie, every page ships clickjacking/MIME/referrer protections, rate limits are shared across the whole cluster, banning an account cuts its CLI keys instantly (keys now expire after 90 days), and share links only ever expose the sharer's own records and stop serving within five minutes of being revoked
    • πŸ“Έ Photo, song and lab uploads are verified by their bytes; photos are re-saved with GPS and device metadata stripped, so your originals never carry location data again
    • πŸ›‘οΈ Every server action now verifies ownership of every id it's handed β€” another user's custom compounds, supplements, exercises, sets and schedules can't be read or written by id, including through Atlas and the CLI
    • πŸ—‘οΈ Deleting a workout removes the PRs it set and restores any record it had beaten β€” no more phantom PRs on the dashboard, in Awards or in Atlas. Deleting a template clears it from your weekly schedule; deleting a compound or supplement schedule keeps the doses you already logged as off-schedule doses
    • πŸŒ™ Evening entries land on the right day everywhere: doses, workouts, weigh-ins, calendar events, weekly grids, streaks, 'this week vs last week', strength curves and transformation stats all use your own timezone (pick it in Preferences β€” it's auto-detected) instead of the server clock. A Sunday-night pin no longer vanishes or tempts a double log
    • βš–οΈ Every 'current weight' surface β€” dashboard, Body page, goals, nutrition, Atlas, photos β€” agrees on which reading counts for a day (the earliest, i.e. your fasted weigh-in), and re-logging a weight no longer wipes that day's body-fat % or notes. Weights and measurements are stored at full precision, so the Β±0.1 lb drift between cards, chart and goals is gone
    • 🎯 Goals are achieved honestly: the smoothed trend has to cross the target (or two readings in a row), body-fat goals judge the same DEXA-calibrated number the Body page shows, strength goals use your heaviest real lift the moment you finish the workout, FFMI goals chart real FFMI, every goal remembers where you started, and the projection says 'at your current rate you reach 185 lbs around Oct 12'
    • πŸ‹οΈ Workout logger: Start buttons open the workout you chose (or Resume the one already running), abandoned empty sessions are cleared away or can be discarded, a rest timer ticks in the header from the moment you log a set, the logger shows the number to beat, template targets fill in as you go (2/3 Γ— 8-12), and the exercise picker opens on your recent lifts
    • πŸ› Fixed the phantom set (deleting a set in Edit Session no longer resurrects one you just logged), the delete-from-history 'not found' bounce, the 3.1-mile run that became 1.93 miles, the runaway '72h 15m' clock on a workout left open, and templates that saved '3 Γ— 6' instead of '3 Γ— 6-8'
    • πŸ“Š Training volume means one thing on every screen β€” working and failure sets only β€” the same rule behind volume-record notifications, the tonnage badge, challenge scores and shared workout cards. Late-Sunday sessions count toward the week you did them in, and workout history loads older sessions on demand
    • πŸ†• Adding a custom exercise warns when a matching one exists ('Bench Press' vs 'Barbell Bench Press') with a one-tap Use existing, so one lift's history and PRs never split across two names
    • 🧬 Active Levels and the Coming Off planner read one reviewed half-life per compound, so they can never disagree. 50+ peptides (Retatrutide, Semaglutide, Tirzepatide, HCG, Ipamorelin…) now carry cited half-lives and appear in Active Levels; compounds with no real human pharmacology (trenbolone esters, Anadrol) are shown as 'Not modelled' with the reason instead of confident curves
    • 🧹 Purged fabricated catalog data: 121 compounds no longer share 12 copy-pasted side effects, duplicate entries (HCG, MK-677, TB-500, Semaglutide, Tirzepatide, PT-141, MT-2, CJC-1295) are merged with your schedules and logs moved to the survivor, GLP-1s are dosed in mg (typing '2' for Retatrutide no longer records a 1000Γ— smaller dose), and aromatization is recorded for 13 more compounds
    • πŸ’Ύ PCT plans can be saved: keep your dates, add the protocol to your schedules in one tap, withdraw it just as easily, and 'Recalculate' shows exactly which dates would move before anything changes. 'None β€” wait it out' now shows the low-testosterone gap it leaves open
    • πŸ“… Ending a supplement schedule asks when you actually stopped instead of stamping today and inventing missed doses; cycles can be ended on the day they really ended (from the app, the coach or the CLI); doses can't be logged for days that haven't happened yet
    • ⚑ Atlas streams its answer word by word β€” no more staring at bouncing dots β€” and shows 'Looking up your lab history…' while it works. Replies are saved the moment they finish (closing the tab mid-answer loses nothing), stuck providers time out cleanly, edits and regenerations no longer duplicate your question, and every action card shows up when Atlas proposes several changes
    • 🧠 Atlas remembers what it looked up last turn, re-confirms memories older than 90 days instead of building on them, never saves near-duplicate notes, and treats notes and memories strictly as facts about you β€” never as instructions. The Memories page lets you edit or resolve any note
    • πŸŽ™οΈ Atlas Voice works again in production, follows the same accuracy rules as text (stopped compounds aren't 'current', labs are read against the doses you were on at the draw), and the browser can no longer change the coach's instructions or voice mid-session
    • 🩺 One clear disclaimer rule per coaching mode; Natty+ mode no longer sees anabolic compounds through lab attribution and says when attribution is incomplete; cycle progress starts at Day 1 / Week 1; coach edits to schedules only accept real units and frequencies, so a bad value can never break the Compounds, Today or Next Dose pages
    • πŸ—£οΈ Re-running the setup interview keeps your history (active items are ended, never deleted, and the confirm dialog spells out exactly what changes); onboarding after 8 pm no longer creates a cycle and weigh-in dated tomorrow; '2 tablets daily' and 'creatine Mon/Wed/Fri' land as valid schedules
    • πŸ”” Your notification preferences now govern everything Atlas surfaces (muting a category also silences PR celebrations, the 1,000 lb club and badge unlocks), nothing pushes your phone more than once every six hours except health warnings, and challenge results, accepted challenges and new group members arrive in the one feed without duplicates
    • πŸ… Badges are honest: a corrected set or weigh-in un-earns a badge it awarded, body-weight-ratio badges use your trend weight, FFMI 25 needs two readings over the line, and the 1,000 lb / 1,200 lb clubs use one exact line (453.6 / 544.3 kg) and recognise your lifts however you named them ('Conventional Deadlift', 'Paused Bench Press') while variations stay out
    • 🏁 Milestones can't slip through the cracks β€” workout #100, a 30-day weigh-in streak or a 6-week training streak is celebrated even if two sessions landed in one day or the nightly run was missed; adherence nudges count only the days each schedule was actually due; new goal-deadline insights warn a week ahead
    • πŸ§ͺ Bloodwork alerts and charts match markers properly: 'fasting glucose' is no longer AST, 'Hemoglobin A1c' is not Hemoglobin, VLDL isn't LDL, and 'ESTRADIOL,ULTRASENSITIVE', 'Testosterone, Total' and 'Total Testosterone' chart as one series. Labs shows your whole history (older panels no longer drop off past ~100 results), trend dots are judged against each result's own reference range, and mixed-unit markers let you pick the unit to plot
    • πŸ“„ Lab uploads no longer fail because of one unreadable line: qualitative results are listed as skipped, '<0.5' keeps its '<', long PDFs say which pages weren't read, re-uploading the same report updates the panel instead of doubling every marker, and you can fix a wrong OCR digit in place
    • πŸ“‘ Withings: readings you correct or delete in the Withings app propagate on the next sync, 'Import Full History' pulls your entire scale history, token refreshes are serialized so two syncs can't break the connection, an expired authorisation shows Reconnect instead of 'Sync failed' forever, disconnecting really unsubscribes, and DEXA calibration can use the scan date
    • πŸ₯— Nutrition targets always add up: cycle overrides re-balance fat and carbs from the final calories, TDEE is labelled as an estimate with its activity multiplier (set activity level and date of birth in Preferences), and protein is prescribed on lean mass when your body fat is known. Food entries can be edited and logged for past days
    • ✏️ Body measurements can be corrected or removed; weigh-ins, measurements and goal deadlines can't be dated in the future or on impossible days; abandoned goals can be reactivated; the weigh-in log shows Manual vs Withings
    • πŸ“Έ Weight and body fat on progress photos are the numbers the body chart draws through that day β€” exact when you weighed in, otherwise marked '~' with the weigh-ins they were read between. Photos that anchor a transformation story are protected, and the comparison view is one tap from the gallery
    • πŸ”— Shared Links shows every link with an Active / Revoked / Expired badge and what it points at; links can expire in 7, 30 or 90 days or never; sharing the same item twice reuses the live link; sharing a template warns that its notes are public
    • πŸ† Challenge scores are computed from the workouts you actually completed between the dates (editing, deleting or re-dating a session updates your score everywhere), Gym Streak counts training days in your timezone, 'Beat My Workout' keeps its target fixed at the session you picked, leaderboard ties share a rank, and accept/resolve/join are safe under load β€” no 3-person challenges, no over-capacity groups, no duplicate 'You won'
    • πŸ‘‘ Groups: every member can see who's in the group, admins can promote another admin, leave once someone else runs it, or delete the group; invite problems ('group is full', 'already a member') say so instead of bouncing to a blank page
    • πŸ§‘β€πŸ« New Settings β†’ Coaching card lists who can see your data (one-tap revoke) and who you coach; the consent screen spells out exactly what a coach sees; coaches see and set a client's numbers in their own units
    • πŸ•’ Transformation stories refresh their stats automatically when newer weigh-ins, workouts, records or badges arrive and show 'Stats as of <date>'; share previews always show your before/after photos (WebP and huge originals included) and load far faster; 'Save 9:16' / 'Save 1:1' exports fill the image
    • πŸ“¦ Data export now includes lab results and panel protocols, every workout set, personal records, compound and supplement schedules and logs, food logs, badges, Atlas memories and chat history β€” in your units, with a unit column
    • πŸ€– CLI: back-filled workouts and injections are dated to when they happened (PRs, streaks and the serum model follow), measurements are stored and returned in your unit system (a 34-inch waist is no longer saved as 34 cm), delete tools preview and only act on confirm: true, and get_lab_history returns the protocol that was on board at each draw
    • 🐞 See every bug you've reported and its status under Settings β†’ My Bug Reports; reports never capture API keys, tokens, passwords or email addresses from console errors
    • πŸ› οΈ /goals loads again (the crash since v4.56.0 can't come back), Recent PRs and Strength Curve show kg for metric users, goal progress reads 0% when you drift away from the target (not 100%), Adherence never exceeds 100%, and Weekly Volume shows last week's sets instead of a blank card on Monday morning
    • 🟒 One colour rule for changes: on a bulk a gain is green everywhere, on a cut a loss is green everywhere, waist/hips shrinking on a cut is green too β€” and every coloured change also reads 'on track' / 'off track' to screen readers
    • 🧭 Every empty widget says what to do next (Log a weigh-in, Start a cycle, Connect your Withings scale, Upload bloodwork…), Withings-only cards stay hidden until a scale is connected, real error pages keep the sidebar and offer Try again / Report a bug, and loading skeletons appear while pages fetch
    • 🍎 Installed to your iPhone home screen (the web app β€” not an App Store app): header and sheets clear the status bar and home indicator, proper home-screen icon, browser chrome colour follows your theme. Push taps reliably open the right page, subscriptions renew in the background, and logging out disconnects push on that device
    • 🎨 Light theme works properly (visible borders, table lines and dividers; readable change badges), secondary text meets WCAG AA on every dark theme, 'Reduce motion' is respected across the app and landing page, and the Labs pages follow your theme
    • β™Ώ Every icon-only button in the app has a screen-reader label, number fields open the numeric keyboard, touch targets meet 44 px, story tap zones are real buttons, and arrow keys no longer flip story cards while you're typing in the settings sheet
    • ↩️ Nothing destructive happens on a bare tap anymore: deleting a set, exercise, workout, template, weigh-in, food entry, measurement, goal, photo, schedule, transformation, song, client or coach always confirms β€” and most offer Undo
    • πŸ”— Opening a link while signed out (push notification links included) brings you back to that page after you log in; the sidebar highlights the section you're in on sub-pages and remembers whether it was collapsed
    • ⚑ Faster everywhere: dashboard charts load in their own chunks and no longer re-mount after page load, workout history, the Calendar and the exercise picker fetch in a handful of queries, exercise how-to steps load only when you open the demo, the notification bell stops polling while the tab is hidden, and 38 new database indexes back the hot paths
    • πŸ“¦ Runtime and libraries upgraded β€” Node 22 LTS, Next 15.5.23, better-auth 1.7, drizzle 0.45.2, sharp 0.35, ws 8.21 β€” clearing 31 open security advisories; /api/health now reports the running version and commit
What's new β€” AnabolicAdvisor