vital · tailored
lightbulb
EN SV

← back

Changelog

What changed and when.

0.5.32 latest 2026-03-20
  • Removed the top-bar **Add to home screen** control (Material `add_to_home_screen`); manifest / icons / service worker unchanged so manual install from the browser remains possible. `pwa.js` now only handles the help tooltip; static cache bumped to **v6**.
0.5.31 2026-03-20
  • **Longevity bodyweight track (full):** Profile field **`longevity_track`** (`barbell` or `bodyweight`) + persisted **`longevity_bw_progress_json`** (rotation & per-pattern tiers). `vitail_bodyweight` builds daily sessions; `compute_daily_session` returns protocol **`bodyweight`** (skips barbell rotation). Completion advances progression; deleting the log restores prior JSON via the same undo mechanism as Wendler/meso. Workout plan overview, time-budget pass, program header line, EN/SV copy, and schema docs updated.
0.5.30 2026-03-22
  • PWA / Add to Home Screen icons: **light plate** (`#EEECF8`) with **thicker, higher-contrast** mark so the app reads on dark wallpapers (iOS home screen). Regenerated `icon-192.png`, `icon-512.png`, `apple-touch-icon.png` from updated `vitail-logo-app.svg` / `scripts/build_app_icons_from_symbol.py`; `manifest.json` `background_color` aligned.
0.5.29 2026-03-22
  • Primary goal **`hybrid`** is labeled **Functional** (EN) / **Funktionell** (SV); the stored value stays `hybrid`. Program flavor **`crossfit`** becomes **`mixed_metcon`** (DB migration + normalization on load/save). Legacy form values `crossfit` / `wod` / `cf` still map to the same behavior. User-facing copy avoids third-party trademarks; rotating benchmark metcons and Wendler barbell template for that track are unchanged.
0.5.28 2026-03-22
  • Removed **Tactical** as a primary goal (unclear in product). Profiles with `goal=tactical` migrate to **`hybrid`** (UI: Functional) on DB init; forms and loads coerce the same. CLI goal menu updated. Workout Plan copy for tactical phases removed; longevity overview notes a planned **bodyweight** track under the same goal (docs + i18n roadmap).
0.5.27 2026-03-22
  • Workout log (/logs): delete restores saved state when possible — on complete, the app stores an undo snapshot (user_progression for that lift, Wendler week, running meso week). Deleting the log entry applies it then removes the row. Older log rows without a snapshot are only removed from the list.
0.5.26 2026-03-22
  • PWA: service worker at /sw.js precaches same-origin /static assets (CSS, JS, icons, manifest) and serves them from cache when offline or slow; bump CACHE_VERSION in static/vitail-sw.js when changing cached files.
0.5.25 2026-03-22
  • Today check-in: time available (30–90 min) is parsed from the form and passed into session generation (previously ignored on submit). Endurance plans now run the same time-budget pass as strength (rationale tag + estimated duration / block times).
0.5.24 2026-03-22
  • Profile injury/limitation notes are always woven into generated session plans (rationale, failure policy, prep, primary and supporting blocks) and shown in a prominent banner on the workout page from the live profile (EN/SV).
0.5.23 2026-03-22
  • Feedback page (/requests): same form for feature ideas and bug reports; optional type (feature / bug), stored and shown as a badge; copy and nav label updated (EN/SV).
0.5.22 2026-03-22
  • Timer: large settings (gear) button always visible — portrait scrolls to controls, landscape toggles sheet; larger tune control in landscape; EN/SV aria labels.
0.5.21 2026-03-22
  • PostgreSQL (e.g. Railway): on init, try CREATE EXTENSION pg_stat_statements so platform query-stats UI stops logging “relation does not exist” (ignored if the role lacks permission).
0.5.20 2026-03-22
  • Feature requests: normalize created_at to strings for PostgreSQL (fixes /requests 500 when slicing dates in the template). Docker: run with Gunicorn instead of flask dev server.
0.5.19 2026-03-22
  • PWA: fix Add to Home Screen on iPhone — tapping the icon no longer immediately closed the instruction bubble (clicks targeted the inner span). Show the install hint on all iOS browsers (not only Safari). Clearer Share / Add to Home Screen copy.
0.5.18 2026-03-22
  • Feature requests (/requests): fix internal server error — ensure DB migration runs on each load, rewrite vote aggregation with a subquery (PostgreSQL/SQLite-safe), and broaden areas_json column detection to any schema on search_path.
0.5.17 2026-03-22
  • Workout log: fix crash for Wendler sessions (work sets use kg, not weight) and for secondary/aerobic stored as lists or objects. Feature requests: optional multi-select areas including aerobic (and Today, workout blocks, log, My Records, etc.), stored and shown as tags.
0.5.16 2026-03-22
  • Workout: short “Why today’s plan” card from Today check-in; enrolled-program progress line; link to Timer with URL presets (interval/rest matched to primary work). My Records: modalities in collapsible sections, vertical distance rows (no horizontal scroll), “Previous best” under strength and endurance fields. Copy aligned with Workout log / My Records; Today controls use tap-friendly min height.
0.5.15 2026-03-21
  • Security: on hosted deploys (FLASK_ENV=production, Railway production, or Hugging Face Spaces via SPACE_ID), the app refuses to start without SECRET_KEY or FLASK_SECRET_KEY. Event-goal research API (/profile/research-event) now requires a signed-in user; it stays available during profile onboarding.
0.5.14 2026-03-21
  • UI polish: Inter font weights 300–600, antialiased body text, shared design tokens (--radius-*, --text-muted). Database module uses a single open_connection() entry point; PostgreSQL placeholder helper is adapt_sql (alias of internal _q).
0.5.13 2026-03-21
  • Registration requires accepting a health & liability disclaimer (own risk, not medical advice, limitation of liability). Feature Requests (/requests) is login-only; guests are redirected to sign in.
0.5.12 2026-03-21
  • Optional beta registration gate: set BETA_MAX_USERS (e.g. 10) to cap accounts, and BETA_INVITE_CODE or BETA_INVITE_CODE_HASH (SHA-256 hex) so new sign-ups need a shared invite. Unset env vars = unchanged open registration.
0.5.11 2026-03-21
  • Gym timer: in landscape orientation, the control sheet closes automatically when you press Start so the digits stay full-screen while the session runs.
0.5.10 2026-03-21
  • Gym timer sounds reworked: sine waves with attack/release envelopes and light low-pass filtering (less clicky than square-wave pings). Slightly retuned frequencies for armed / countdown / GO.
0.5.9 2026-03-21
  • Gym timer: Web Audio beeps — short armed tone on Start; during +10s pre-start, beeps on 3-2-1 and a double GO at zero. Interval and EMOM modes use the same 3-2-1 + GO at each phase / round boundary. Sound toggle below +10s (default on).
0.5.8 2026-03-21
  • Added Feature Requests page (/requests) — a lightbulb icon in the top controls opens a public board where logged-in users can submit ideas and everyone can browse them. Email addresses are masked (first 2 characters visible, rest hidden).
0.5.7 2026-03-21
  • Added Workout Log page (/logs) under the Account menu. Shows all completed sessions with primary lift, secondary work, aerobic block, readiness signals (sleep/hydration/fatigue), perceived effort rating, and session notes.
0.5.6 2026-03-21
  • Sleep input changed from a numeric hours slider to a simple Poor / OK / Good selector, consistent with the hydration field. Session state logic updated accordingly.
0.5.5 2026-03-21
  • Extended database to track user-executed workouts: added session_sets table for per-set logging (weight, reps, RPE, distance, pick-one choice) and pr_history table for longitudinal PR trending.
  • Daily readiness check-in (sleep, hydration, fatigue, cycle phase, time available) is now stored alongside each session for rolling fatigue analysis.
  • Post-session feedback added to workout completion: perceived effort rating (1–5 with emoji) and a free-text session note.
  • Profile enriched with four new fields: body weight (kg), equipment available (full gym / dumbbells / bodyweight / home), event date, and injury/limitation notes.
  • PR saves now automatically append a snapshot to pr_history for both strength lifts and endurance times.
0.5.4 2026-03-21
  • Replaced all custom SVG and emoji icons with Material Symbols (Google's Material Design icon library). Covers top controls (info, install, theme) and the nav bar (today, workout, timer, account).
0.5.3 2026-03-21
  • Login and register merged into a single tabbed page — Sign In / Register tabs, no redirect bounce. Register errors stay on the register tab with email pre-filled.
0.5.2 2026-03-21
  • Added N/A as a third sex option on the profile page. Menopause/cycle-tracking fields remain female-only.
0.5.1 2026-03-21
  • Field-level encryption for sensitive profile data (sex, menopause status, event goal summary) using AES-128 Fernet. Requires VITAIL_ENCRYPT_KEY env var; degrades gracefully to plaintext if unset.
  • Updated 'About VITAIL' tooltip to accurately reflect data storage (server-side, encrypted, no analytics).
0.5.0 2026-03-21
  • UI redesign: premium light-mode palette aligned with brand colors (accent #534AB7, text #1A1A2E).
  • Top controls converted from separate floating buttons to a single grouped pill toolbar.
  • Version badge moved from fixed top-left to footer alongside copyright.
  • Navigation: borderless tiles with SVG icons above labels; active tab is a filled purple pill.
  • Account tab chevron replaced with a person icon.
  • User info shown in a card with accent left border; 'Sign out' styled as a ghost button.
  • Cards: 16px border-radius, soft shadow in light mode (no hard border).
  • Tagline clamped to 2 lines with max-width 260px to prevent single-word wrapping on mobile.
  • Horizontal padding increased to 24px throughout; section spacing increased to 32px.
  • Inter loaded as primary UI font.
0.4.4 2026-03-21
  • Brand assets integrated: SVG favicon (symbol), app icons regenerated from real logo, Inter 300 loaded for wordmark rendering.
  • Header wordmark replaced with branded 'vitail' logotype — 'vit' and 'l' in theme-adaptive text color, 'ai' in brand orange (#FF6B00), font-weight 300.
  • Manifest theme_color updated to brand purple (#534AB7).
0.4.3 2026-03-21
  • Added PWA support: manifest, app icons, and iOS meta tags so VITAIL can be installed to the home screen on any device.
  • Added 'Add to Home Screen' install button next to the language flags: shows the native install prompt on Android/Chrome, and a Safari share-sheet instruction on iOS.
  • Mobile layout audit: fixed header padding to clear the expanded top-bar, added narrow-screen (≤400px) breakpoint so all four controls fit cleanly on iPhone SE.
0.4.2 2026-03-21
  • Added forgot-password flow: request a reset link by email, then set a new password via a secure one-time token (expires in 1 hour).
  • When no SMTP server is configured (local dev), the reset link is printed to the server log and shown as a dev-mode flash message.
0.4.1 2026-03-21
  • Fixed: progression table no longer corrupted when doing a one-off session under a different program (e.g. Wendler user doing a Functional pass). Lift rotation still advances correctly, but weight and progression timestamp are protected unless the session protocol matches the user's current profile.
0.4.0 2026-03-21
  • Workout now realistically fits your chosen time budget.
  • Time tier logic corrected: 45 min removes both secondary and accessory (previously only accessory); 60 min removes accessory (previously nothing was removed).
  • Mixed-metcon benchmark workouts filtered by available time — e.g. 45 min budget only picks shorter benchmarks (Fran, Grace, Annie, etc.); Murph/Eva/Chelsea reserved for 75–90 min sessions.
  • Each workout tile now shows an estimated duration (~X min), and the session hero shows total estimated time with a color-coded warning if it exceeds your budget.
  • Metcon estimates shown inline (e.g. named benchmark ~10 min).
0.3.9 2026-03-21
  • Fixed: 'No saved max for Bench Press' modal appearing even after saving a bench PR. The modal now checks the live profile instead of the stored session flag.
  • Saving PRs now invalidates the current draft session so the next workout is regenerated with the correct working weights.
0.3.8 2026-03-21
  • Time input fields now accept plain minutes — typing '28' is interpreted as 28:00, '28.5' as 28:30. mm:ss and h:mm:ss still work as before.
  • Improved error message when a time value can't be parsed.
0.3.7 2026-03-21
  • Hybrid / functional programs now meaningfully distinct: Hyrox, mixed metcon, and balanced GPP each have a unique prep, secondary, accessory, and conditioning block.
  • Mixed metcon track: named benchmark workouts rotate daily — Annie, Helen, DT, Fran, Grace, Cindy, Murph, and 13 others. Today's pick is shown in the aerobic tile.
  • Hyrox track: dedicated station block (wall ball, sled push, sandbag lunges, burpee broad jumps) + specific running/erg engine intervals.
  • Balanced GPP track: unilateral accessories, loaded carry superset, broad mixed-modal finisher at conversational effort.
0.3.6 2026-03-21
  • BikeErg PR distances updated to standard Concept2 test distances: 500m, 1k, 2k, 5k, 10k, 20k.
0.3.5 2026-03-21
  • Endurance Engine: endurance goal users now get a proper endurance-primary session (Zone 2 / tempo / intervals / absorb) instead of a barbell session with endurance notes bolted on.
  • Endurance primary rotates through a 4-week meso cycle: base (Z2), build (tempo/threshold), quality (intervals), absorb (recovery).
  • Strength maintenance secondary block preserved for endurance users — low volume, no leg grinders.
  • Event research UI: enter a race name on the profile page and click Research to auto-fill event details via web search (+ AI summary when OPENAI_API_KEY is set).
  • Event parsing extracted into vitail_event.py (internal refactor — no behaviour change).
  • Changelog page added; version badge in top-left is now a link to it.
0.3.4 2026-03-21
  • Changelog page — this view, accessible from the version badge top-left.
0.3.3 2026-03-21
  • Endurance onboarding: first profile save redirects straight to My Records for pace calibration.
  • My Records: strength section collapsed by default for endurance users; endurance times shown first with primary discipline highlighted.
  • Workout PR splash: endurance users see a discipline-specific time-trial guide instead of the barbell starting-weight prompt.
  • Language switcher: English (🇬🇧) and Swedish (🇸🇪) flags added to the top bar.
  • Full Swedish translation across all pages and flash messages.
  • Endurance focus selection on profile: choose primary, optional secondary, and optional tertiary discipline (running, cycling, SkiErg, etc.).
  • Session hints and goal-axis text now reflect the chosen endurance discipline order.
0.3.2 2026-02-01
  • Endurance PR grid: enter best times per distance; app derives pace per km or /500 m split.
  • Time-budget bar on Today check-in; meso-week counter.
  • Delete account flow with full data wipe.
  • PR form hardening: better validation and error messages.
  • Fix: init_db now runs before every auth and profile DB operation.
  • Fix: login next-URL guard prevents open-redirect abuse.
  • Deploy: VITAIL_APP_VERSION env override; git SHA baked into Docker image.
0.3.1 2025-12-10
  • Running / endurance goal with pace-aware session extras.
  • Welcome splash and profile-first onboarding for new users.
  • Show / hide password toggle on login and register.
  • Fix: sessions behind Hugging Face proxy (ProxyFix, Secure cookies, SameSite=None).
  • Fix: configurable SQLite path for containerised deployments.
0.3.0 2025-10-18
  • Draft workout flow: generate, review, and mark complete — progression and history update on completion.
  • Workout history: last 8 sessions shown on the Workout page.
  • Gym timer: count-up, countdown, E×M, and interval modes.
  • Hybrid strength programs added (GVT 10×10, Classic 5×5).
  • Dockerfile for Hugging Face Spaces deployment.
0.2.0 2025-08-05
  • Full Flask web app replacing the CLI prototype.
  • Today check-in: sleep, stress, soreness, and energy sliders feed the readiness model.
  • Max-lift entry and bar-maths for Squat, Bench, Deadlift, OHP.
  • Wendler 5/3/1 progression with auto-advancing meso weeks.
  • Dark / light theme toggle persisted in localStorage.
0.1.0 2025-06-01
  • Initial VITAIL physiological decision engine.
  • Readiness model from sleep, HRV-proxy, stress, and soreness inputs.
  • Session-state machine: fresh → normal → fatigued → overreached → deload.
  • SQLite persistence for profile, progression, and session history.
  • Linear 3×5 and basic periodisation logic.

← back

© 2026 SQUAB, Sweden. All rights reserved.