Skip to content
VITAL. ← Back to home

Changelog

What's shipped

Every build since 16 April 2026 · newest first · updated each release

Every build of Vital since the first commit on 16 April 2026, reconstructed from version history. Notes under each build record numbering and distribution facts (skipped numbers, rejections, what consolidated into what). Build numbers are unique within a version, not across versions, so a number can appear on more than one line.

Releases, newest first

  • 3.1.1 (47)
  • 3.1.1 (46)
  • 3.1.1 (45)
  • 3.1.0 (44)
  • 3.0.0 (42 and 43)
  • 3.1.0 (43)
  • 3.0.1 (42)
  • 3.0.0 (40)
  • 2.12.0 (39)
  • 2.11.2 (38)
  • 2.11.0 (36 and 37)
  • 2.10.1 (35)
  • 2.9.0 (33)
  • 2.9.0 (32)
  • 2.9.0 (30 and 31)
  • 2.8.1 (29)
  • 2.8.0 (28)
  • 1.0.0 (1)

3.1.1 build 47

12 to 13 June 2026 · Live on the App Store

  • Resolved the Guideline 5.1.1(v) rejection of build 45: Vital AI can now be subscribed to, and AI output received, without first registering an account.
  • Added anonymous sessions so a signed-out user can subscribe and use AI features; an account is requested only when syncing across devices.
  • Bootstrapped an anonymous session for AI calls made before any account exists.
  • Rewrote the HealthKit permission purpose strings to disclose the sync and AI data flows, per Guideline 5.1.1.
  • Corrected the privacy manifests: valid Health and Fitness data types, the app-group access reason, and a manifest for the widget.
  • Added the EULA link to the App Store description, required for auto-renewable subscriptions.
  • The binary Apple approved; live on the App Store and the current public version.
  • Build 46 carried the compliance hardening; build 47 added the registration-free subscription path and was the build that passed review.

3.1.1 build 46

11 June 2026 · App Store compliance build

  • Corrected the Data Protection Impact Assessment (DPIA), including recording live-infrastructure verification results.
  • Fixed data retention and erasure handling to match the stated 30-day account-erasure commitment.
  • Added transfer risk assessments for the overseas processors.
  • Published privacy policy v2, matching the in-app and website wording and citing the ICO registration.
  • A compliance-hardening build between the rejected build 45 and the approved build 47.
  • Reconstructed from the build-46 pull request: DPIA corrections, retention and erasure fixes, transfer risk assessments, privacy policy v2.

3.1.1 build 45

9 June 2026 · Rejected (Guideline 5.1.1)

  • Changed Vital to a free download.
  • Removed the one-time premium unlock from sale; Vital AI is now the paid tier, gated by an auto-renewable subscription.
  • Added two subscription plans: Monthly at £7.99, Annual at £50, both with a 3-day free trial.
  • Paywall prices now read live from the App Store, showing the localised price instead of hard-coded copy.
  • Marked all 35 existing premium accounts (waitlist members and early buyers) as lifetime in the database.
  • Lifetime status cannot be downgraded by a lapsed subscription; the backfill is guarded so a sync cannot undo it.
  • Reworked the paywall and onboarding purchase step around a two-plan picker with price, renewal terms and trial length disclosed up front, per Apple requirements.
  • Removed all remaining 'pay once, no subscription' copy.
  • Changed subscription status to be decided server-side, replacing the on-device never-downgrade rule; expiries, refunds and revocations now take effect, with lifetime users protected by an explicit flag.
  • Added server-side handling of App Store Server Notifications from Apple: renewals, expiries, refunds and billing-grace periods update accounts without the app being opened.
  • Restore Purchases continues to honour the original one-time unlock.
  • Added a Manage Subscription row in Settings opening Apple's native sheet to change plan or cancel; visible to subscribers only, hidden for lifetime users.
  • Tightened AI consent gating in every path, following Apple Guideline 5.1.1/5.1.2 feedback on 3.1.0.
  • Feed and background refreshes can no longer generate an AI insight before the AI disclosure has been accepted.
  • Food search and barcode scanning restricted to Vital's own catalogue until consent to AI food estimation has been given.
  • Added a single automatic retry when Vital AI returns an unusable insight response; the retry does not spend a second daily insight, and an error is shown only if both attempts fail.
  • Reworded the error shown when the App Store cannot load subscription products: it now describes a connection problem and prompts a retry. The previous wording read as a placeholder and was flagged by App Review under Guideline 2.1.
  • Rewrote section 9 of the terms for subscriptions, putting the lifetime grandfather commitment in writing.
  • Updated the privacy policy.
  • Privacy manifest now declares purchase data.
  • Submitted for App Review on 9 June 2026; rejected by Apple under Guideline 5.1.1(v) for requiring an account before a user could subscribe.
  • The consent-gating fixes (Guideline 5.1.1/5.1.2) were Apple's feedback on 3.1.0 and shipped with build 44; they are listed here because the 3.1.0 history was consolidated and the fixes were re-applied at the start of this build's commit range, so they appear in both records.
  • Superseded by build 47, which added the registration-free subscription path and passed review.

3.1.0 build 44

7 to 9 June 2026 · Live on the App Store

  • Added score uncertainty ranges: each score detail shows a likely range (e.g. "likely 58 to 70") instead of a single integer.
  • Range width is approximately plus or minus 10 in the first week of data, narrowing to a floor of approximately plus or minus 4 after a month.
  • Recovery: sleep midpoint now tracked over the last 14 days; high night-to-night timing variability trims the sleep contribution to recovery by up to 15%, per UK Biobank evidence that consistent timing predicts outcomes independently of hours slept.
  • Calorie targets: with roughly two weeks of logged food and sufficient weight readings, actual energy expenditure is derived from intake versus weight change and blended with the standard predictive formula.
  • Added deload detection: six weeks of training volume analysed; four or more consecutive build weeks without an easy week caps the day's recommended exertion at easy, with rationale shown. Previous logic detected only three-day hard streaks.
  • Added acute-to-chronic workload ratio to the readiness detail, banded low to high injury risk (optimal band 0.8 to 1.3). Previously internal to the training-stress number.
  • Changed stress scoring: HRV penalty damped when sleep loss is already costing stress points, removing double-counting of a single bad night.
  • Increased HRV trend weighting slightly once a week of history exists.
  • Added per-context score calibration, starting with the luteal phase: a context calibrates independently after five feedback entries, without affecting scoring for the rest of the month.
  • Added rolling-digest memory to the AI coach in daily insights and chat: builds on prior themes, acknowledges progress or slippage, avoids repetition. Previously each read started without prior context.
  • Added a 14-day sparkline beneath the readiness hero score.
  • Added trajectory charts with shaded typical range to the Recovery, Health, Readiness and Stress drill-downs.
  • Added a "Today's focus" callout above the feed naming the single most actionable item, prioritised: low recovery, high stress, sleep debt, poor nutrition. Hidden when nothing is notably off; feed order unchanged.
  • Changed morning and evening notifications to carry the AI read's actual headline instead of generic "your read is ready" text.
  • Fixed readiness falling on every refresh: four engines (baselines, fatigue, readiness trends, training load) let today's data leak into the history today is compared against; all four now exclude today.
  • Fixed a refresh cancelled mid-gesture briefly displaying empty scores (one diagnostic recorded readiness collapsing from 83 to 55); last good scores are now retained on cancellation.
  • Added an automated test enforcing the exclude-today rule.
  • Fixed sleep debt counting untracked nights as zero hours slept; a single tracking gap fabricated roughly 7.5 hours of phantom debt. Untracked nights now excluded.
  • Reduced the sleep-debt target from 8 hours to 7.5 hours to sit inside the healthy band and match the recovery sleep target.
  • Added one complimentary daily AI insight for new users before the paywall, granted once per account and enforced server-side.
  • Pre-release bug sweep fixed 17 verified issues on the release branch; a wider audit pass landed roughly 50 fixes across sync, scoring, workouts, nutrition and AI.
  • Fixed refunded purchases retaining premium indefinitely; premium is now revoked on every device.
  • Fixed exercise-set edits syncing as duplicates; edits now sync as edits.
  • Fixed imperial unit display in workout rows and summaries.
  • Fixed food logs duplicating when the Apple Health write fails; the log now rolls back.
  • Rewrote all user-facing strings across more than 80 files: punctuation and filler phrasing standardised, plain British English throughout, one consistent no-data glyph app-wide, live AI output held to the same style rules at generation time.
  • Included the fixes for the four guideline points Apple rejected 3.0.0 (build 41) on.
  • Changed the health-data permission step to a single Continue button; "Skip for now" removed.
  • Replaced the custom Apple sign-in button with Apple's native Sign in with Apple button in onboarding; added an email sign-up option.
  • Fixed the post-sign-in flow stranding users on the sign-in screen when the auth event was not received (occurred on the reviewer's iPad); the sign-in result is now used directly.
  • Added a support page at tryvital.app/support.
  • Account deletion now erases photo bytes from server storage as well as the database records that reference them.
  • Added an "informational only, not medical advice" note to chat and the insight card.
  • Added a medical-safety guardrail to the AI prompts.
  • Changed user-facing AI branding to "Estimated by Vital AI".
  • Fixed App Store upload error 90474: the archive incorrectly declared iPad support on a portrait-only app; the bundle is now iPhone-only.
  • Removed a leftover lookup that fired six throwaway HealthKit heart-rate queries on every refresh.
  • Correlation analysis no longer blocks first paint of the Insights screen.
  • Consolidates three strands into one binary: the 3.1.0 scoring and interface line, the 3.0.0 rejection fixes, and two large verified bug sweeps.
  • Approved by Apple; went live on the App Store over 9 to 10 June 2026. First version of Vital available to the public.
  • On the App Store track, builds 41 to 43 never reached the public: 41 was the 3.0.0 submission Apple rejected, 42 failed upload validation with the iPad packaging error (90474), 43 carried the rejection fixes.
  • 3.0.0 was never shipped separately; all of its work was folded into 3.1.0 (build 44).

3.0.0 builds 42 and 43

2 to 4 June 2026 · App Store resubmission

  • Fixed sign-in flow hang: the app waited for a confirmation event that never arrived on the review device even though Apple sign-in had succeeded server-side; the sign-in result is now used directly, with the event listener retained as a fallback.
  • Added email sign-up and sign-in to the onboarding account step, mirroring the options in Settings; account creation no longer requires Apple or Google.
  • Changed the onboarding account step to scroll so the additional sign-in fields fit on smaller iPhones.
  • Replaced the custom-styled Apple sign-in button with Apple's official button in onboarding and Settings (App Review guideline 4).
  • Reworded the pre-HealthKit-permission screen: single Continue button, 'Skip for now' option removed (App Review guideline 5.1.1).
  • Added a support page at tryvital.app/support (App Review guideline 1.5).
  • Fixed a profile check that compared two different user ID types, causing a 15 second timeout on every account switch and a possible dead end on a 'Couldn't load your profile' screen; profiles now sync when the signed-in user changes and the flow advances automatically.
  • Fixed onboarding answers being overwritten by a stale sync arriving from another device.
  • Fixed the upload failure that blocked the first resubmission attempt: the archive was packaged as iPad-capable, and a portrait-only iPad-capable build fails App Store validation (error 90474); all targets now pinned to iPhone only.
  • Account deletion now erases photo files from cloud storage, not only the database records referencing them.
  • Added a medical-safety guardrail to morning and night insight generation; chat and the insight card now carry a statement that Vital is informational, not medical advice.
  • Corrected the photo-library permission message to accurately describe how photos are used.
  • Fixed purchase copy that described the lifetime unlock as a subscription, including in the refund wording; now described as a one-off purchase.
  • Relabelled AI estimates as 'Estimated by Vital AI'; underlying model name removed from user-facing copy as part of a branding sweep.
  • Chat bubbles clamped to a maximum width in iPad compatibility mode; previously stretched full screen width.
  • Removed an 'Editing coming soon' alert in nutrition.
  • Feedback emails now open with the subject line 'Vital Feedback'.
  • Apple rejected 3.0.0 (build 41) on four points: HealthKit permission screen wording (guideline 5.1.1), custom Sign in with Apple button (guideline 4), a sign-in flow failure that blocked the reviewer, and a missing support page (guideline 1.5).
  • Apple requires a higher build number on resubmission, so numbering resumed at 42 after the rejected build 41.
  • Build 42 carried the sign-in fixes and the upload fix; build 43 was the full resubmission binary.
  • The 3.0 feature set (calibration countdowns, motion and haptics, insight length options, baseline seeding) carried over unchanged from build 41.
  • Neither build went live as 3.0.0; all changes shipped inside 3.1.0 (build 44), the version that reached the App Store.

3.1.0 build 43

29 May to 2 June 2026 · External TestFlight

  • Changed HRV scoring to a logarithmic scale, matching its night-to-night distribution; extreme readings previously counted disproportionately against baseline and over-swung the readiness score.
  • Changed baseline estimation: under roughly two weeks of data a median-based estimate resists single-night outliers; longer histories use a trimmed average.
  • Changed young baselines to blend personal and population data: at one week of readings the weighting is roughly 40 per cent personal, 60 per cent population, shifting steadily towards fully personal as history accumulates.
  • Removed the hard switch where scores could jump on the day personal baselines took over.
  • Baseline rework applies to HRV and resting heart rate only; sleep, steps and all other metrics score as before.
  • Fixed a background path that skipped notification checks: smart notifications (HRV, stress, sleep and cycle alerts) now verify both the master Daily Reminders toggle and system permission before firing; some alerts previously reached users who had disabled notifications.
  • Fixed a threading bug in Insights that could crash the app when a correlation analysis ran during a refresh.
  • Fixed automatic insight refresh sending a health snapshot to the AI before the consent notice had been shown; the manual refresh path already performed this check.
  • Fixed cycle-tracking disablement to fully withdraw consent: the change is recorded in the consent ledger and already-synced reproductive-health entries stop syncing to servers, as GDPR requires; previously only the toggle state changed.
  • Fixed the recovery-mode onboarding consent sheet, where cancelling could record answers differently from what the app stored.
  • Added a permanent Restore Purchases row in Settings, functional while signed out, so a reinstall can recover premium without signing in; required by Apple guidelines, previously non-compliant.
  • Changed the fertility card to show Not enough data instead of a definitive verdict when nothing is logged.
  • Renamed the Infertile fertility label to Lower.
  • Added a permanent note stating the fertility card is not a method of contraception or conception planning.
  • Changed cycle predictions to use the computed personal cycle average once enough cycles are logged; predicted dates now match the average shown on the Insights card.
  • Removed copy promising a luteal-phase recovery boost the score no longer applies.
  • Fixed food-database parsing of micronutrients measured in micrograms, which were inflated by a factor of one million; amino acids and trace minerals now read correctly.
  • Fixed meal deletion removing a second meal logged in the same second; deletion now targets only the single closest match.
  • Fixed leaving the app mid-refresh saving an empty, zero-score day that dragged down baselines and trends; empty refreshes are no longer saved.
  • Fixed the workout set logger's weight wheel being hard-coded to kilograms: an imperial user entering 225 stored a 225 kg lift and wrote it to Apple Health. The wheel now operates in pounds for imperial users; underlying storage remains metric.
  • Distance wheels for runs, rides and swims remain in kilometres.
  • Fixed workout trends averaging kilogram values with rep counts when an exercise was logged both weighted and bodyweight; the trend now follows a single series.
  • Changed the GDPR data export file to be encrypted on device and excluded from backups.
  • Fixed the Xcode test scheme so the test suite runs from the command line and in CI (internal).
  • Distributed via external TestFlight, 29 May to 2 June 2026.
  • Contains six batches of fixes from an internal review alongside the baseline rework.
  • No 3.0.1 release exists: the fix batches were authored under that label, but the baseline rework is a scoring change, so the build shipped as 3.1.0.
  • A wider 17-finding bug sweep from the same review round shipped in the next build.

3.0.1 build 42

29 May 2026 · External TestFlight

  • Fixed blood oxygen unit handling: Apple Health reports SpO2 as a fraction (0.97), Vital read it as a percentage, so every user with SpO2 data was scored as if saturation were below 95%.
  • Effect of the SpO2 bug: 5 points added to stress and 5 removed from health every day, regardless of actual readings.
  • Fixed the feed blood oxygen pill showing 0%; it now shows actual saturation.
  • Aligned the sleep detail screen with the corrected SpO2 reading so all surfaces report the same number.
  • Fixed the luteal-phase exertion adjustment, which never fired: it waited on a signal that could not occur. It now triggers when HRV drops below baseline during the luteal phase, easing the recommended exertion target.
  • Changed TDEE handling: daily calorie-burn estimates are no longer saved unless the profile contains the data required to calculate them. Previously an estimate built on missing profile data could be stored as a real value.
  • Removed server database scripts from the app bundle: unused by the app, added 6.3 MB to every install, and documented backend internals in the client download. They remain server-side only.
  • Widened the build rule that excludes Xcode-duplicated source files from shipped builds, preventing stray file copies entering a build.
  • Removed an unused background processing mode declaration.
  • Corrected the photo permission prompt: it claimed photos are never stored on a server, which ceased to be true when account sync shipped. Wording now matches actual behaviour and the privacy policy.
  • Build 41 was the rejected 3.0.0 App Store upload; this TestFlight line resumed numbering at 42.
  • First batch of findings from a full internal pre-release codebase audit.
  • Distributed via external TestFlight, 29 May 2026.

3.0.0 build 40

22 May 2026 · App Store submission (rejected)

  • Added calibration chip (Personalising, day X of 7) to the Recovery, Health, Stress and Heart score detail views during the first week of data; removed after seven days, eliminating the previously unexplained day-7 switch to personal baselines.
  • Added onboarding fields for resting heart rate and HRV from existing wearables (Whoop, Oura); entered values seed initial baselines instead of population averages.
  • Changed first-week AI insights to account for data completeness; trend commentary withheld until sufficient history exists.
  • Added placeholder state for trend charts with under three days of data, replacing an empty chart.
  • Added a feed banner when Health access is denied; previously metrics showed zeros with no explanation.
  • Added tap depression animation to feed cards.
  • Added haptic pulse on readiness band changes (e.g. Compromised to Primed).
  • Added checkmark flash on pull-to-refresh completion.
  • Changed detail-view charts to cascade in rather than render at once.
  • Changed onboarding step transitions to slide instead of instant replacement.
  • Added insight length setting: Brief (60 to 90 words), Standard, or Detailed; applies to morning and night insights.
  • Rewrote 13 generic or robotic strings across onboarding, the paywall, settings and the wind-down notification.
  • Added configurable auto-lock timeout to the operator admin panel: 1, 5, 15 or 60 minutes, or never; previously hard-coded to 5 minutes.
  • Fixed scores not recomputing when food or a workout was logged; readiness on the feed previously stayed stale until the next full refresh.
  • Fixed zero-calorie foods (black coffee, sparkling water, calorie-free sweeteners) being unloggable; the save button required calories above zero.
  • Fixed auto-assigned meal categories ignoring customised meal windows; AI and barcode logs previously used fixed clock boundaries.
  • Fixed missing sleep efficiency being scored as zero; now treated as no data, so nights without a watch no longer reduce Recovery and Health.
  • Fixed daytime naps being counted as overnight sleep.
  • Fixed body fat parsing for third-party scales (Withings, Garmin) that report 18.0 instead of 0.18.
  • Fixed mid-cycle spotting being misread as a new cycle start, which halved apparent cycle length for users logging spotting.
  • Fixed past-dated cycle entries receiving the wrong phase; phase now matches the entry date.
  • Added validation of BBT entries before they feed the fertility window.
  • Changed hydration targets to sex-differentiated EFSA per-kilogram figures; the previous flat formula overestimated women's targets by roughly 10 per cent.
  • Added sanity ceilings on imported nutrition data; a known Open Food Facts fault could inflate some micronutrient values a million-fold, and such values are now dropped.
  • Fixed AI credit double-charge when retrying a chat message after a timeout.
  • Fixed force-refreshing an insight silently consuming a credit with no new output.
  • Hardened purchase verification: receipts are now tied to the purchasing account.
  • Hardened the biometric lock so it is enforced throughout app launch, including slow first launches.
  • Changed sign-in token storage to device-only; tokens no longer sync via iCloud Keychain.
  • Changed AI payloads to include supplement names only; doses are stripped.
  • Added queueing for consent records made offline or before sign-in; records post once connected, closing gaps in the GDPR processing-consent audit trail.
  • Removed duplicate HealthKit queries.
  • Changed chart and trend computations to cached results instead of recalculating on every screen update.
  • Changed food searches to run in parallel.
  • Added debouncing of score recomputes during rapid set logging.
  • Fixed over 400 bugs and edge cases across scoring, nutrition, workouts, cycle tracking, sync and security during a two-week audit preceding this build.
  • First App Store submission; rejected by Apple.
  • Repo carried build number 40; the binary was uploaded to App Review as build 41 (bump made at upload, never committed).
  • Rejection fixes shipped as builds 42 and 43.

2.12.0 build 39

12 May 2026 · External TestFlight

  • Added methodology document citing roughly 40 peer-reviewed studies behind every score weight, with caveats where a weight is an engineering judgement not directly validated by the literature; published at docs/SCIENCE.md and tryvital.app/science.
  • Added 'Why this matters' card to each score detail view (Readiness, Recovery, Exertion, Stress, Health): four to five foundational studies with one-line summaries and a link to the full library.
  • Changed the algorithm in eight places following the literature review.
  • Removed the luteal-phase Recovery boost: HRV typically falls in the luteal phase, so the adjustment pointed the wrong way.
  • Changed sleep targets to age bands: 7 to 9 hours for adults under 65, 7 to 8 hours for 65 and over.
  • Relaxed the deep and REM sleep quality target for users 65 and over to account for age-related decline in deep sleep.
  • Reweighted the fitness composite: heart-rate recovery 65%, watch-estimated VO2 max 35% (watch VO2 max readings carry around 13% error).
  • Reduced the Stress penalty for low HRV in the one to two days after hard training; the dip is treated as expected adaptation.
  • Recovery score: protein intake well under target on a hard training day now reduces Recovery slightly.
  • Recovery score: two to three consecutive short nights now keep reducing Recovery instead of resetting after one adequate sleep.
  • Calorie expenditure now uses the Katch-McArdle formula when body-fat data is available.
  • Completed a full privacy impact assessment (DPIA) sweep.
  • Added 'What Vital can do' section in Settings with six per-feature consent switches: cloud sync, AI insights, AI chat, AI physique analysis, AI food estimation, mood logging.
  • All consent switch changes recorded in an append-only consent ledger.
  • Added 'My data' dashboard in Settings: live counts of stored data with purpose, storage location, retention period and recipients per category, plus a one-tap route into the Health app to revoke HealthKit access.
  • Added a dedicated consent screen in onboarding before the HealthKit access request.
  • Each AI feature now requests consent once on first use.
  • Chat history now auto-deletes after 90 days, on device and server, matching the existing privacy policy commitment.
  • Fixed the GDPR data export covering only 8 of 17 data types; all 17 now export, including workouts, body measurements, supplements and full consent history.
  • Expanded the food catalogue to about 23,000 foods (nearly doubled), all carrying the full nutrient panel introduced in 2.11.2.
  • Logged meals now write 31 micronutrient samples to Apple Health.
  • Food search now runs as the query is typed; previously required pressing return.
  • Food search now collapses near-duplicate results: 'chicken breast' returns one row instead of five.
  • Added a full detail view for logged meals.
  • Added a 'More nutrients' section to manual food entry for values from nutrition labels.
  • Redesigned the food logging flow: full screen instead of a sheet, restyled to match the Train screen, with scan, describe and manual entry consolidated behind a single plus menu.
  • Added info icons to feed sections (Sleep, Strategy, Activity, Nutrition, Body, Stress, Mood) explaining how each section's numbers are calculated.
  • Closed a 23-finding bug hunt; key fixes below.
  • Fixed disabling cloud sync not notifying the server.
  • Fixed sign-out deleting local data; it now retains it as stated.
  • Fixed failed food and water saves showing a false 'Saved' message; they now show an error.
  • Fixed the readiness calibration multiplier being applied twice.
  • Added a warning banner when local storage is broken, instead of allowing data logging that would be lost.
  • Fixed physique photo sync skipping failed downloads permanently; downloads now retry.
  • Fixed workouts mirrored from Apple Health being double-counted into scores.
  • Fixed account switching leaking the previous user's data if the app was killed mid-wipe.
  • Paywall now states price, recurrence and cancellation method above the purchase button.
  • Fixed a product-identifier mismatch in server-side purchase verification that would have failed every real purchase; caught before launch, no users affected.
  • Tightened server-side premium entitlement validation.
  • Locked the purchase and AI server endpoints to Vital's own domain.
  • Server errors no longer expose internal database detail to the app.
  • Removed duplicate HealthKit reads on every refresh; overlapping refreshes now guarded.
  • Fixed the sleep-debt chart drawing nine bars under a 'Last 7 nights' header; the nightly average now appears next to the total.
  • Unified icons across the app.
  • Strategy screen now uses the same calorie calculation as every other surface; it previously had its own divergent calculation.
  • Overnight background scoring now includes sleep debt, so the morning score matches the score shown on app open.
  • AI usage limits now count days in a single timezone, removing false out-of-insights states near midnight.
  • Added an optional kilojoule display.
  • Added configurable meal-time windows for non-standard eating schedules.
  • Expanded the operator admin panel: dashboard, GDPR export, support messages, compliance log.
  • Released to external TestFlight testers on 12 May 2026.
  • The app was versioned 2.11.2 (build 38) for most of this cycle; the build counter briefly drifted to 40 and was wound back. Neither 2.11.2 nor build 38 ever left the development phone.
  • All work was uploaded together as 2.12.0 (build 39): TestFlight jumps from build 37 to 39, and the version from 2.11.x to 2.12.0 in one step.
  • No What's New sheet entry was written for 2.12.0, so this build updated silently; the sheet returned in the next release.

2.11.2 build 38

9 May 2026 · External TestFlight

  • Added in-app weight logging: weigh-in sheet with whole-unit wheel and 0.1 nudge buttons, live difference shown against current weight, entries written through to Apple Health. Weight previously flowed one way, from Apple Health into Vital.
  • Manual weigh-ins build an in-app weight history without Apple Health, so the coaching engine works when the Health permission is declined.
  • Added goal weight step to onboarding; existing coaching engine surfaced in Settings; feed card prompts setup if skipped.
  • Added Strategy detail view: goal-weight progress with landing estimate, current coaching state, pace versus trend with 30-day sparkline, full coaching history, inline editing of goal, pace and pauses.
  • Weigh-ins now trigger an immediate coaching recalculation; the card shows the calorie adjustment applied.
  • Added 'Building baseline, day 4 of 7' state covering the coaching engine's first week.
  • Added info icon to every feed section (Sleep, Strategy, Activity, Nutrition, Body, Stress, Mood) explaining how its numbers are calculated.
  • Performance: feed refresh faster; duplicate HealthKit calls eliminated.
  • Food catalogue: full nutrient panel (vitamins, minerals, amino acids, fat sub-types) added for roughly 12,000 foods; tapping a logged food opens the detail; AI logging estimates the panel; new micronutrients write to Apple Health.
  • Food search now searches as-you-type and collapses near-identical duplicates ('Chicken breast (raw)' versus 'Chicken breast, raw') into one result.
  • Food logging flow moved from a sheet to full screen.
  • Streaks moved to a dedicated page: hero card for the longest active streak with 30-day timeline and best-run stats, list for the rest; feed chip removed.
  • Fixed sleep debt counting untracked nights as deficit; untracked nights are now excluded and a subtitle states how many nights the figure is based on. One tester had shown a phantom 40-hour debt.
  • Fixed 'Lowest overnight' heart rate showing the overnight average instead of the true minimum; chart and stat now read from the same data.
  • Fixed daily average heart rate being dragged down by sleeping hours.
  • Fixed readiness breakdown rows not summing to the headline score (previously could disagree by a couple of points).
  • Changed the Moderate readiness band threshold from 55 to 52.
  • Fixed a crash when background sync fired while the device was locked and the database was unreadable (reported on an iPhone 11 Pro); storage moved to Apple's recommended protection class for apps with background tasks, still encrypted at rest.
  • Security: server-side premium receipt checks now validate the full certificate chain against Apple's root certificate.
  • Security: row-level security enforced across newer database tables.
  • Security: operator admin panel refuses to open on devices without a passcode.
  • Security: AI proxy redacts tokens and email addresses from its logs.
  • Added age gate in onboarding: 13 and over, with guardian-consent attestation.
  • Added Terms of Use and a 'Vital is not a medical device' disclaimer to onboarding, the paywall and Settings.
  • Compliance: Data Protection Impact Assessment, processing records and breach response plan written for the ICO.
  • Copy: 58-finding sweep rewrote generic or awkward phrasing across user-facing text.
  • Reworked the daily insight prompt to stop treating unlogged food or water as missed intake.
  • Accessibility: screen-reader labels added to 18 icon-only buttons; undersized touch targets widened to 44 points; tertiary text now passes WCAG AA contrast; largest Dynamic Type sizes no longer break the What's New sheet.
  • Added 13-section internal debug panel (state toggles, data seeding, sync controls, crash drills); compiled out of release builds.
  • Fixed the Insights throttle banner: added the working 'Try now' button the copy referenced.
  • Fixed mood quick-log sheet layout to use its space.
  • Added Send Feedback row in Settings.
  • Fixed deleted workouts not removing their exercise sets on every device.
  • Changed contact address to business@lmslabsltd.com.
  • Third update for the external TestFlight beta group; 74 commits over six days.
  • Repo briefly declared this build as 40 before correction to 38, one above the last TestFlight upload (37).
  • Version 2.11.1 was skipped; that number never shipped.

2.11.0 builds 36 and 37

4 to 7 May 2026 · External TestFlight

  • Added workout trends: the five most-trained lifts show a direction chip (progressing, stable or regressing) on the workout page.
  • Trend calculation: top working set over the last 3 weeks compared against the prior 3 weeks; a rise of 5% or more reads as progressing, a drop of 5% or more as regressing; minimum 3 sessions in the window before a chip is shown.
  • Trend card weights respect the user's unit setting.
  • Added VoiceOver support on trend chips: reads exercise, direction and session count rather than relying on chip colour.
  • Replaced the stock system date picker in the history calendar with a custom month grid tinted by daily readiness: green for 75 and above, amber below 50, default text colour in between, muted grey for no data.
  • Calendar marks today in semibold; selected day indicated with a ring.
  • Added spoken accessibility labels per calendar day (e.g. 'readiness 82 percent', 'no data'), so colour is not the only signal.
  • Added 290 hand-curated UK food items, taking the catalogue past 23,000 foods: major chocolate, crisp and cereal brands, dairy and plant milks, soft and energy drinks, and takeaway staples (Indian, Chinese, fish and chips, kebab shop, pizza by the slice).
  • Branded item macros sourced from manufacturer nutrition labels; takeaway portions use category-average estimates and are flagged at medium confidence.
  • Changed physique photo retention: photos now deleted automatically from device and servers once AI analysis completes; retained if analysis fails so the analysis can be retried.
  • Fixed cleared chat conversations reappearing after reinstall, on a new device or on a later sync: the clear operation could silently fail to reach the server. Reproduced on a real account and fixed at the root.
  • Audited all other sync paths for the same deletion flaw; found and patched it in 13 further places covering food logs, mood check-ins, cycle entries, workouts, body measurements, supplements, physique photos and the rest. Deletions now propagate across all devices.
  • Added a What's New sheet shown on first launch after an update; skipped on fresh installs and not shown again for the same version.
  • Added a recovery flow for testers with profiles corrupted by an earlier onboarding bug: next launch goes to a short finish-setup screen with the account intact, instead of the full first-run sequence.
  • Build 37 was a TestFlight re-upload of build 36 with no code changes; both carry the same 2.11.0 feature set.
  • Second feature batch shipped to external TestFlight beta testers, 4 to 7 May 2026.

2.10.1 build 35

3 May 2026 · External TestFlight

  • Fixed onboarding bug: server-side stub profiles on new accounts were treated as complete, skipping the body-stats screen; calorie, protein and daily energy targets then ran on default values (age 25, 170 cm, 70 kg). Affected 8 of 16 testers who signed up after the server change.
  • Fixed onboarding completeness check: the app now verifies all required profile fields are present before allowing the user past.
  • Fixed onboarding answers being silently discarded when a stub profile already existed; answers now update the existing profile in place, keeping it aligned with the account for sync.
  • Fixed chat deleting the user's message on a failed send; the message now stays in the thread and Retry resends it.
  • Food catalogue expanded from about 5,200 entries to 22,779: over 11,000 USDA-verified foods translated into UK terms, own-brand products from ten UK supermarkets, chain restaurant menus (McDonald's, KFC, Greggs, Pret, Nando's, Wagamama, full Wetherspoons menu), coffee-shop drinks, takeaway dishes, HelloFresh and Gousto meal kits, frozen ranges, and the full Cadbury and Walkers line-ups.
  • Reworked food search: results now ranked server-side in a single round trip.
  • Changed search ranking: plain ingredients win short queries ('egg' returns Egg, not Eggnog; 'milk' no longer returns Millet; 'rice' no longer returns Rice Milk); branded products win when the brand is named.
  • Added around 80 plain entries for everyday basics with per-piece servings: Egg (one medium, 50 g), Slice of bread (36 g), Glass of milk (240 ml); queries '1 egg', 'one egg' and 'eggs' all match.
  • Added misspelling tolerance to food search: 'chickn breast', 'yoghrt grek' and 'salmin fillet' resolve to the correct foods.
  • Added American-to-British spelling translation before search: yogurt, eggplant, zucchini, cilantro and scallion map to yoghurt, aubergine, courgette, coriander and spring onion.
  • Changed default portions from a flat 100 g to per-item values: banana 118 g, slice of bread 36 g, glass of wine 175 ml, packet of crisps 25 g.
  • Cleaned 2,550 names inherited from USDA data, e.g. 'Beef, rib, back ribs, bone-in, separable lean and fat, trimmed to 0 inch fat, all grades (raw)' shortened to 'Beef, rib, back ribs (raw)'.
  • Fixed brand-plus-food queries ('tesco yoghurt') returning every product from the brand instead of the named product.
  • Fixed 'Sync now' failing with a duplicate training-split error after opening the split picker more than once; the client now pushes at most one active split and the server deduplicates, so older app versions reconcile cleanly.
  • Added automatic premium grant for the first 50 waitlist sign-ups at account creation; testers who had already signed up were granted retroactively.
  • Fixed accounts abandoned mid-sign-up (force-quit between account creation and onboarding completion) being half-created and invisible to support tooling; a profile now exists from the moment the account does, so premium grants and lookups work immediately.
  • Fixed a sign-in failure caused by the same sign-in link being processed twice; password-reset links and social sign-in no longer interfere with each other.
  • Added CSV export under Settings, Privacy & Data: all detected patterns, including confidence level and sample sizes per pattern.
  • Added first dedicated test suite for the nutrition quality engine: 12 tests covering sodium and sugar penalties, vitamin D and iron suggestions, and sex-differentiated iron requirements.
  • Fixed operator admin sync-health view reporting last activity as '56 years ago' for new accounts; accounts with no logged data now count from sign-up date, so inactive accounts are identifiable.
  • Drafted full App Store listing copy: name, subtitle, description, keywords and submission checklist.
  • Added nightly automated database backups with 30-day retention.
  • External TestFlight release, 3 May 2026.
  • Version 2.10.0 (build 34) was prepared on 2 May 2026 but never shipped; the onboarding and chat-send fixes were found before it was archived, so the fixes shipped together in this build.
  • Numbering jumped from 2.9.0 (build 33) directly to 2.10.1 (build 35).
  • Food-catalogue expansion and search rebuild took three days of work within this cycle.

2.9.0 build 33

1 to 2 May 2026 · External TestFlight

  • Added UK GDPR privacy policy, effective 1 May 2026: data collected and purposes, retention periods stated separately for active accounts, deleted accounts and audit records, processors named (Supabase in London, Anthropic and Apple in the US), all eight data rights with concrete steps, ICO contact details for complaints.
  • Added in-app access to both policy versions under Settings > About > Legal: plain-English summary and full policy at tryvital.app/privacy.
  • Tightened operator access to sensitive data (food entries, mood check-ins, AI chat history, insights): access requires a specific reason selected from a fixed list, vague reasons rejected, every view written to a permanent audit log before content is shown.
  • Added in-app operator messaging: notices to all testers or a single account, displayed as a feed banner, single-tap permanent dismissal, optional expiry date on messages.
  • Added operator-triggered password-reset emails from the admin panel; recovery link goes only to the account holder; every triggered reset logged in the audit trail.
  • Added a hard daily AI usage ceiling per account across all features, on top of existing per-feature limits.
  • Fixed multi-device deletion race: data deleted on one device could be restored by a sync from another device; deletion now always wins regardless of sync order.
  • Fixed export-compliance declaration: widget binary lacked the standard-encryption exemption the main app already declared (TLS and Apple built-in encryption only), causing App Store Connect to demand encryption paperwork on every upload; both binaries now declare the exemption and uploads pass automatically.
  • Changed lock screen to the full lockup (VITAL with KNOW YOUR BODY beneath), matching splash, onboarding and the App Store listing name, Vital: Know Your Body.
  • Added pagination to the operator admin panel audit log; previously truncated at 200 entries.
  • Built 1 May 2026; cleared Apple Beta App Review; external TestFlight beta opened 2 May 2026.
  • First build distributed outside the internal three-person team.
  • Widget encryption declaration was the blocking defect: without it, App Store Connect required encryption compliance paperwork on every upload.

2.9.0 build 32

1 May 2026 · Internal TestFlight

  • Internal code audit landed more than 40 fixes across scoring, sync, nutrition, chat and security.
  • Fixed workout drafts being deleted on exit: leaving a lift, run or cardio session part-way through deleted all logged data. Workouts with real data are now kept as resumable drafts; only empty sessions are cleaned up.
  • Added In Progress banner at the top of the Train tab: surfaces resumable drafts with one-tap Resume and explicit Discard.
  • Added This Week summary card to the Train tab: sessions, minutes, working sets, total volume, three most-trained muscle groups.
  • Added Recent list to the Train tab: last 10 completed workouts, each tappable to review or edit.
  • Reworked Train tab layout: larger day cards, headline numbers, start card shown when nothing is logged.
  • Fixed opening an old workout prompting training-split setup again.
  • Fixed opening an old workout overwriting a deliberately blank split tag with the current split.
  • Fixed next-day readiness forecast reading the trend in reverse: improving users were shown a downward prediction.
  • Fixed Recovery score inflation for users with both VO2 max and heart-rate-recovery data: fitness bonus could exceed its intended cap. Calculation rebuilt.
  • Fixed inflated readiness persisting on fresh installs: score was computed before cloud history sync completed. Feed now recomputes when sync finishes.
  • Changed calorie expenditure to use Apple Health body composition (body fat, lean mass) instead of a generic estimate.
  • Fixed kilojoule conversion applied to food database entries already stored in calories: affected entries displayed roughly 4x too low.
  • Added 5 litre cap on the daily hydration target.
  • Fixed workout streak excluding Apple Watch workouts imported from Health: previously only workouts logged with an effort rating counted.
  • Added dedicated training-load multipliers for swimming and rowing; previously scored as cycling.
  • Fixed flaky network connections triggering sign-out.
  • Fixed workout deletion on one device not removing its sets on other devices.
  • Changed physique photo downloads to run in parallel; first sync no longer hangs for minutes.
  • Changed chat to cache the health snapshot per session instead of re-querying HealthKit before every message: removes 2 to 5 seconds per reply.
  • Fixed keyboard lag when typing exercise names in the lift logger with a long workout history.
  • Security: operator admin panel now requires Face ID before opening.
  • Security: account deletion gained a failsafe requiring the local data wipe to be in place before it can run.
  • Security: premium purchases bound to the purchasing account.
  • Security: AI prompts and error messages tightened against leaking internal details.
  • Added clamping of personal calibration multipliers to a sane range on application: a corrupted profile can no longer zero out or inflate scores.
  • Changed operator admin panel AI usage reporting from calendar month to rolling 30 days; heavy users no longer drop off the cost dashboard on the 1st.
  • Restored the AI fallback in food search, dropped by a merge: foods unrecognised by any database receive an AI estimate again.
  • Internal TestFlight build, 1 May 2026.
  • Builds 31 and 32 were both uploaded on 1 May 2026; build 32 was cut within hours of build 31, the second internal upload of the day.
  • Build 31 carried the new operator admin panel and food search tabs; build 32 carried the workout fixes and audit sweep.

2.9.0 builds 30 and 31

24 April to 1 May 2026 · Internal TestFlight

  • Reworked workout page into a tabbed layout: one pill per exercise in a top strip, full set-by-set history shown above the logger.
  • Removed an earlier workout layout after on-device testing showed it hid per-set history; the tabbed layout replaced it.
  • Changed session setup (split and muscle groups) to collapse into a single header.
  • Changed exercise autocomplete to appear only while typing.
  • Reworked rest timer to track an absolute end time: added time (e.g. 15 seconds) survives backgrounding and the completion buzz fires on schedule.
  • Fixed bug where opening a saved workout and dismissing without tapping Save again could delete it.
  • Fixed timezone bug that could store a UK Saturday workout as Friday on the server.
  • Added Body tab measurement tracker: 17 manual metrics (waist, hips, chest, arms, legs and more), waist-to-height and waist-to-hip ratios, sparklines per card, per-metric history chart with tap-to-edit.
  • Reworked Nutrition layout: calorie hero and macros always visible, with a Today / Vitamins / Minerals / Fats / Aminos picker beneath.
  • Added reading of every dietary value Apple Health tracks, including all 13 vitamins and all 14 minerals.
  • Added adaptive calorie coach: daily calorie target adjusts by up to 200 kcal when actual rate of weight change drifts from goal over a rolling two-week window; surfaced on a Strategy card on the feed.
  • Added supplement logging: 310-item catalogue across vitamins, minerals, sleep, performance and herbal categories, with history and sync.
  • Added supplement-to-nutrient crediting: roughly 55 catalogue supplements that map to a tracked nutrient (vitamin D, magnesium, iron and others) credit vitamin and mineral bars and count towards the Health score.
  • Added streaks: five habit streaks (sleep tracked, food logged, mood checked in, workout logged, full-track day) with current run, best run over 90 days and a 14-day dot row.
  • Added feed chip for any streak past three days.
  • Added curated food catalogue: started at 145 hand-checked UK foods, ended the week at 5,209 entries covering supermarket own-brands, restaurant chains, ready meals, snacks and world cuisines.
  • Added per-row confidence flag and an Est. badge on estimated catalogue values.
  • Added AI fallback lookup for searches the catalogue cannot answer; results are filed for review.
  • Removed or capped noisy US wholesale food data that previously buried UK results.
  • Added All / Favourites / Custom tabs and a per-result source badge to the food search sheet.
  • Changed unknown-barcode scans to open a create-your-own food form instead of an error; the entry is reused on the next scan of that barcode.
  • Fixed food logging bug that stored serving size as 1 gram regardless of input, which could display a normal bowl of oats as a 30,000 kcal entry.
  • Added email and password account creation alongside Sign in with Apple and Google, including a forgot-password flow that emails a reset link back into the app.
  • Changed sign-out to retain local data (profile, health history, food log, workouts) and stop syncing; signing in to a different account on the same phone still clears local data so accounts cannot mix.
  • Security hardening, round 1: food-data lookups moved behind Vital's own server with a signed-in session check, provider credentials now held server-side only; access rules tightened on several server tables; 14 of 18 internal audit findings fixed in this window.
  • Sync fixes targeting silent data loss: each data type saves progress independently so one failure cannot discard other types' work; rows deleted before first sync are cleaned up rather than polluting the server; an expired session triggers one retry with a fresh token; switching accounts mid-sync cancels the sync cleanly.
  • Changed mood, period, workout and food saves to a checked path that reports failures instead of swallowing them.
  • Added drag-to-inspect tooltips on ten line and bar charts (HRV, resting heart rate, weight, sleep, mood, supplement doses and more) showing the exact value under the finger.
  • Added hourly stress chart of heart rate above resting across the day, with exercise hours marked so workouts do not read as stress.
  • Fixed cycle-phase score adjustments for female users: the logic existed but was never fed real data.
  • Fixed calorie model inventing a default burn figure when profile data was incomplete.
  • Smoothed several first-week scoring cliffs for new users.
  • Changed Patterns to count meaningful days rather than raw days.
  • Added early pattern signals from 14 days of data, marked with a confidence chip.
  • Added new correlations including caffeine timing and cycle phase.
  • Changed every sheet to a uniform swipe dismiss with a visible drag handle.
  • Fixed sideways scroll drift on the Body page.
  • Changed card advice to vary by time of day instead of repeating one static line.
  • Added delete confirmation to all delete actions.
  • Added explainer sheet on the Heart card covering the difference between overnight low and baseline.
  • Added first-visit walkthroughs to the Feed, Body and Nutrition tabs, replayable from Settings.
  • Added internal operator admin panel for support and catalogue maintenance.
  • Covers two internal TestFlight builds (30 and 31), both versioned 2.9.0, spanning roughly 80 commits from 24 April to 1 May 2026.
  • Parts of the Body and Nutrition rework shipped, were tested on device, and were removed within the same week.
  • A Habits page and an energy-balance chart were added and removed after on-device testing.
  • Entry lists only changes that survived to build 31.

2.8.1 build 29

24 April 2026 · Internal TestFlight

  • Enabled Sign in with Apple for account creation and sign-in; previously returned a holding message pending paid Apple Developer Programme membership activation and server-side configuration.
  • Added Fatsecret as a third food search database alongside Open Food Facts and USDA FoodData Central; all three searched in parallel and merged.
  • Fatsecret integration biased to UK results, filling supermarket own-brand gaps (Tesco, M&S, Sainsbury's).
  • Moved the USDA food source off the shared demo key, raising the rate limit 33-fold.
  • Reworked food search ranking: plain whole foods boosted on one-word searches, ready meals and flavoured snacks demoted, results per brand capped at three.
  • Removed barcode numbers from food search result rows.
  • Added protein, carbohydrate and fat preview to each result row, with calories displayed prominently.
  • Shortened USDA taxonomy names: 'Chicken, broilers or fryers, breast, meat only, cooked, roasted' now reads 'Chicken breast (cooked)'.
  • Database serving sizes now carry through: a scanned 30 g bread slice opens at 30 g instead of the 100 g default, with the product's own serving as the first quick-select chip.
  • Pre-cached the 20 most common generic foods (egg, chicken breast, rice, oats and similar) on first open for instant search results.
  • Redesigned the food log sheet: meal-and-time header ('Breakfast, 8:42 am'), two primary actions (Scan a barcode; Describe with AI, marked PRO on the free tier), search field, recents grouped by typical eating time for that time of day, manual macro entry moved to a link at the bottom.
  • Added a manual food entry sanity check: warning shown when typed calories disagree with entered macros by more than 10%.
  • Fixed duplicate logging when a recent food is tapped twice in quick succession.
  • Reworked mood logging to one tap: a five-face sheet saves and closes itself.
  • A second mood log in the same day now replaces the earlier entry instead of stacking.
  • Added an Add Detail link in mood logging opening the full sheet for symptoms, energy, anxiety, triggers and notes.
  • Rebuilt the water sheet: animated progress ring showing drunk, goal and remaining; four presets (glass 250 ml, mug 330 ml, bottle 500 ml, large 750 ml); steppers for custom amounts; undo for the last five entries.
  • Added an explanation of how the daily water target is calculated from weight and activity; imperial users see ounces throughout.
  • Resting heart rate and HRV now fall back to the most recent reading from the past fortnight when a night is untracked, instead of showing a dash for days.
  • Fixed stress-score distortion caused by missing HRV readings.
  • Nutrition scoring is now diet-aware: keto, low-carb, high-protein and high-carb users are scored against their own plan's macro ranges rather than a generic balanced diet.
  • Removed daily saturated-fat warnings for keto users eating to their prescribed plan.
  • Empty placeholder days from before onboarding completion no longer count towards the 21-day patterns unlock or inflate the days-tracked figure.
  • Unified AI usage counters: chat, the Diagnostics screen and the operator admin panel previously kept three separate counts (one screen could show 499 messages remaining while another showed 16 used); all now read from a single source.
  • Added a Diagnostics screen under Settings showing usage against caps; crash reports collected via Apple's own framework, no third-party analytics SDK in the app.
  • Signing out or deleting an account now wipes all local synced data; a second account on the same device cannot inherit the first account's weight, goals or calibration.
  • Widgets cleared on sign-out.
  • App lock now enforced on devices with no passcode set.
  • Removed the baked-in 78/100 readiness score shown on widgets for new installs and signed-out users; widgets now read 'Open Vital to start tracking' until real data exists.
  • Fixed a bug that let the entire feed be dragged sideways off the left edge of the screen.
  • First feed load now cross-fades from the loading skeleton instead of snapping.
  • Failed chat sends no longer leave a stuck bubble; the message text is restored to the draft for retry.
  • Retrying a failed chat message no longer counts twice against the monthly allowance.
  • Fixed the workout rest timer keeping incorrect time after the app was backgrounded.
  • Editing a logged workout no longer writes duplicate samples to Apple Health.
  • Rest days now tick off correctly in the weekly plan.
  • Fixed the cycle phase timeline bar being one day short, which let the progress dot run off the end on the final day of a cycle.
  • Fixed the cycle calendar firing haptics twice on every month change.
  • Score calibration (the adjustment learned from user feedback on scores) now syncs across devices.
  • Closed several multi-device edge cases that could stall baselines or patterns.
  • Added VoiceOver labels to more than a dozen charts.
  • Removed 'chevron right' VoiceOver announcements on settings rows.
  • Corrected American spellings to British English.
  • Rewrote error messages to state the next action instead of quoting status codes.
  • Release builds no longer write detailed error information to the device log.
  • Internal TestFlight build, uploaded 24 April 2026, one day after build 28.
  • The 2.8.1 diff over build 28 was strictly one change: enabling the Apple sign-in provider after paid Developer Programme membership activation. All other items in this entry landed in the day between builds 28 and 29.

2.8.0 build 28

23 April 2026 · Internal TestFlight

  • Added scoring engine, shipped in v2 form (v1 never released externally): personal baselines learnt from 30+ days of user history, population defaults until then.
  • Added training-load model tracking chronic and acute load.
  • Fatigue now stacks across consecutive hard days instead of resetting at midnight.
  • Added forward-looking readiness score predicting the next day.
  • Changed HRV and resting heart rate inputs to overnight readings instead of whole-day averages; baselines measured over the same sleep window.
  • Fixed sleeping heart rate being compared against daytime averages, which systematically depressed scores.
  • Added breakdown views for each composite score (Recovery, Health, Readiness, Stress): per-signal point contributions, result interpretation, calculation method.
  • Added score feedback options (too low, accurate, too high); after roughly five disagreements the engine adjusts that score within bounded limits.
  • Added daily target effort beneath the readiness number: 0-10 range, plain-English session suggestion, tappable rationale.
  • Rest recommendation forced after three consecutive hard days regardless of score.
  • Added workout tracker: training splits, set-by-set logging, week view, separate detail screens for lifts, runs and cardio.
  • Added Apple Watch import: 30 days of workout history on first launch, deduplicated; deletions mirrored back to Apple Health.
  • Readiness recommendations now read the planned training split.
  • Reworked exertion scoring around continuous heart-rate data: time in each heart-rate zone drives the score, sport type adds an impact bonus, activity-ring data retained as a floor when watch data is absent.
  • Fixed three bugs that kept exertion scores pinned near zero.
  • Changed food search to query Open Food Facts and the USDA food database in parallel; generic foods (chicken breast, oats) now return relevant results instead of most-scanned barcoded products.
  • Added AI food logging: macro estimation from a meal photo with multiple-choice follow-up questions.
  • Added food quality scoring across five dimensions: macro balance, micronutrient coverage against sex-adjusted recommended intakes, protective nutrients (fibre), limiting factors (sugar, sodium), hydration.
  • Food quality scoring produces up to four concrete suggestions (e.g. foods to close an iron gap).
  • Empty food log now shows an explicit no-data state instead of a default mid-range score.
  • Added opt-in cycle tracking: phase detection, period and ovulation forecasts, fertility window from temperature, LH tests and other symptothermal signals, 30 trackable symptoms, pregnancy mode, CSV export.
  • Recovery scoring compensates for hormonal luteal-phase HRV dips.
  • Mood check-ins (energy level, anxiety, context triggers) now feed the stress score and correlation engine.
  • Replaced emojis with monochrome icons app-wide.
  • Added sleep coaching: chronotype detection from the last 30 nights, personalised bedtime recommendation, gradual sleep-debt payback plan, consistency score, pre-bed wind-down reminder.
  • Added eight event-driven smart notifications (e.g. sharp HRV drop, mounting training stress, recovery personal best).
  • Changed AI insights to twice daily: morning insight at 9 AM scoped to the previous night's recovery, full-day insight at 9 PM, each tagged with the signals that drove it.
  • Added cooldown on the insight regenerate button to prevent repeated taps consuming the usage allowance.
  • Added accounts with Google sign-in and two-way backend sync covering meals, scores, mood, cycle data, chat, insights and physique photos.
  • Sign in with Apple implemented but inactive pending Apple Developer account paperwork.
  • Removed bring-your-own AI key requirement; all AI features route through a first-party server with account checks and monthly usage metering.
  • Added premium tier with in-app purchase flow; AI features gated behind the paywall.
  • Security: premium and admin account flags restricted to server-side modification only.
  • Security: AI requests rate-limited and hardened against prompt injection.
  • Added account deletion with full server-side erasure.
  • Drafted UK GDPR privacy policy.
  • Added operator admin panel for account management.
  • Added visual identity: matte black, Tektur wordmark, grey monochrome palette, no category colours.
  • Replaced tab navigation with a single continuous scrolling feed.
  • Readiness number rendered as a full-bleed 96pt hero that collapses into a sticky strip on scroll.
  • Added floating quick actions for logging food, water, workouts and mood.
  • Added home screen and lock screen widgets showing readiness band and score.
  • Added history browser (calendar icon in top bar): replays any past day's full dashboard with week-over-week comparisons.
  • Pre-release review sweeps: 50-issue correctness pass, daily batches of 12 to 18 bug fixes, final nine-reviewer sweep on cut day.
  • Fixed scores returning invalid output for new users with no data.
  • First numbered build: roughly 120 commits in one week, from empty Xcode project to working app.
  • Distributed via internal TestFlight to the three-person team only.
  • Version jumped from 1.0.0 directly to 2.8.0 in a single bump at the end of the sprint.
  • Builds 2 to 27 never existed: build 1 was the initial project, build 28 the first TestFlight upload.

1.0.0 build 1

16 April 2026 · Development

  • Added Recovery score (0 to 100): HRV measured against a 14-day personal baseline, plus sleep quality and resting heart rate.
  • Added Exertion score (0 to 10): computed from active energy, exercise minutes and heart-rate intensity.
  • Added Stress score: inferred from HRV dips and resting heart rate elevation, blended with manual 1-to-5 check-ins.
  • Added composite Daily Health score combining recovery, activity, sleep, nutrition, hydration and stress.
  • Added Apple Health integration: reads sleep, heart rate, HRV, steps, workouts and nutrition; writes back all manually logged data.
  • Added dashboard of rings and tiles with detail screens for sleep, heart, activity, nutrition, stress and body.
  • Added manual logging: water (quick-add buttons), food with calories and macros, weight, and stress check-ins with notes.
  • Added AI insight engine with caching.
  • Added AI chat screen for questions about logged health data; provider credentials stored in the iOS Keychain.
  • Added physique photo tracking with AI analysis.
  • Added correlation engine for detecting patterns across metrics.
  • Added TDEE calculator for daily calorie estimates.
  • Added Face ID lock, onboarding, notifications, background refresh and haptics.
  • Built entirely on native Apple frameworks (SwiftUI, HealthKit, SwiftData, Swift Charts); zero third-party dependencies.
  • Single founding commit of approximately 11,400 lines of Swift; one developer, one device.
  • Development build only: sideloaded and re-signed every seven days on a free Apple ID; no TestFlight or App Store distribution, no external testers.

Vital is not a medical device. Scores and insights are informational only.

Get Vital.

Free on the App Store, iPhone only. Vital AI optional.

Download on the App Store →

VITAL.

Home The Science Compare About Changelog Support Privacy Policy Terms of Use

Vital is not a medical device. Scores and insights are informational only.

© 2026 LMS Labs Ltd. Registered in Scotland, company number SC888839. ICO registration ZC144937.