← Back to Docs Gym Vibes Changelog
Version Unreleased
- 406cc2e - Fix checkbox layout and plate calculator (2026-08-20)
- 815d0ee - fix: make soft_delete_trigger SECURITY DEFINER so it can bypass restrictive RLS policies (2026-08-19)
Version 0.5.0
- d6786d0 - fix: remove -1 adjustment for reordering supersets (2026-08-18)
- 6cf7f3b - fix: fully restore Live Activities timer integration and variables (2026-08-18)
- 38bdaba - feat: implement superset swiping, updated_at defaults, and DB soft deletes (2026-08-18)
- ab3d1e2 - fix: dynamically update Live Activity start time when switching active workouts, and auto-confirm local test users (2026-08-08)
- 75eff5e - chore: remove boilerplate static widgets from iOS Widget Extension (2026-08-08)
Version 0.4.4
- 6337c40 - feat: complete iOS Live Activity stopwatch and widget layout - Added Gym Vibes logo to Dynamic Island and lock screen Live Activity - Replaced created_at timestamp with started_at to accurately reflect workout elapsed time - Prevented stopwatch from capping at exactly 24:00:00 for older workouts - Prevented planned workouts from inadvertently hijacking the Live Activity timer from an actively running session - Ensured Live Activity terminates correctly when a workout is completed (2026-08-08)
- 8b7cb4b - feat: inject premium Gym Vibes UI into SwiftUI Widget Extension (2026-08-07)
- dced2c1 - feat: extract Rest Timer to singleton and wire it up to set completion (2026-08-07)
- 6d848cd - feat: setup Rest Timer state and live_activities plugin integration (2026-08-07)
- fa5b9c3 - fix: ReorderableListView sorting double-offset bug and add drag padding (2026-08-07)
- 0dc2567 - refactor(ui): extract ActiveWorkoutScreen state and logic into Provider ViewModel (2026-08-05)
- 51f8984 - refactor: abstract data fetching into Profile, Reference, and Workout repositories (2026-08-04)
- e1e0ece - fix: ReorderableListView crash and async testing flakiness (2026-08-03)
- aa642f2 - refactor: componentize exercise logging screen to resolve god object anti-pattern (2026-08-01)
- 714d08b - refactor: componentize active workout god screen into smaller reusable widgets (2026-08-01)
- 9680979 - ci: add pull-requests write permissions for coverage reporter (2026-07-31)
- 38ddd85 - ci: install lcov in github actions runners to fix coverage reporter (2026-07-31)
- d3a7755 - chore: fix all flutter analyze warnings across the codebase (2026-07-31)
- f782385 - ci: replace custom coverage script with native github action (2026-07-31)
- 665c22b - chore: remove accidentally committed scratch files (2026-07-31)
- 7b82ddf - test: add comprehensive end-to-end integration test suite (2026-07-31)
- 222270e - chore: remove old websites, strip autologin, and update store screenshots (2026-07-31)
- c429f05 - chore: remove websites from app repo since they are housed in standalone repos now (2026-07-31)
- 4dee4cc - chore: update store listing screenshots (2026-07-31)
- f807dc9 - chore: remove Waffle Sloth branding (migrated to wafflesloth.com domain) (2026-07-30)
- 3e8a2c9 - added in svg (2026-07-30)
- a09d7d7 - chore: center white Wafflesloth SVG icons, add backgrounds, and darken facial features (2026-07-30)
Version 0.4.3
- e27748d - fix: remove dead edge functions from config.toml that were breaking the CI pipeline (2026-07-29)
- aaa90f0 - feat: add visual indicators for completed sets in the active workout exercise list (2026-07-29)
- e9da0fc - fix: prevent using deactivated context when importing a template (2026-07-28)
- 312e0a8 - perf: batch database inserts for template saving and importing (2026-07-28)
- a99e739 - fix: debounce sync indicator to prevent UI flickering on batch operations (2026-07-28)
- becffc3 - fix: remove loading flash when toggling template filter (2026-07-28)
- 9bd160c - chore: remove scratch test file that fails in CI (2026-07-28)
Version 0.4.2
- 77322f1 - fix: correctly render previous column data from offline cache when workouts block is absent (2026-07-28)
- e61e5ed - fix: add robust network fallback to gracefully rebuild missing previous_sets cache (2026-07-28)
- 204427e - fix: restore and correctly calculate historical averages when importing templates (2026-07-28)
- 6275770 - feat: add template filter toggle to main workouts history screen (2026-07-28)
- 7a6a4fb - style: use FA upload icon for saving templates (2026-07-28)
- 2c8a409 - style: revert action icons to original download and save icons (2026-07-28)
- b737603 - style: remove 3-dot context menu and compact template actions to bottom icon buttons (2026-07-28)
- 81d36a2 - fix: resolve bracket mismatch and Uuid compilation errors (2026-07-28)
Version 0.4.1
- dea3e40 - fix: dismiss loading spinner and donation sheet after successful native transaction request (2026-07-28)
- 1a22d7b - fix: parse android IAP originalJson to extract quantity (2026-07-28)
- a2f7282 - fix: extract quantity from native IAP payloads to calculate accurate donation totals (2026-07-28)
- e5ea167 - style: move support section above account details (2026-07-28)
- 11ecb33 - fix: resolve string interpolation and icon type compile errors (2026-07-28)
- f784696 - feat: global IAP state sync and donations UI history page (2026-07-28)
- a28e15e - chore: add Google Play Store IAP icons (2026-07-28)
- 0c52586 - feat: add workout templates and bro code set cascading (2026-07-28)
- df607ea - design: change Metrics screen title from ‘Body Metrics’ to ‘Metrics’ (2026-07-28)
- ae34fb1 - design: change Workouts screen title from ‘Training History’ to ‘Workouts’ (2026-07-28)
- a2bd4d6 - fix: emit connectivity drops from SyncService so the UI instantly displays the offline indicator mid-session (2026-07-28)
- a44183a - feat: enable offline support for exercise instruction viewing by utilizing AppRepository cache layers (2026-07-28)
- 01262ac - feat: use cached_network_image for persistent offline caching of exercise media (2026-07-28)
- a84b5e9 - feat: animate the syncing indicator during all background network fetches globally (2026-07-28)
- ee90be3 - design: refactor the offline indicator from a bottom banner into a compact pill badge embedded in screen AppBars (2026-07-27)
- a4ce91c - fix: prevent offline network failure from overwriting pre-populated workout title with a blank string (2026-07-27)
- fc4a36e - feat: scroll to top of workouts feed when tapping the active bottom navigation tab (2026-07-27)
- c8c4c2d - chore: add 375 past generated workouts to the seed file to assist with testing the offline prefetcher (2026-07-27)
- e31cabe - fix: instantly display workout name from global cache while loading to prevent blank titles (2026-07-27)
- fe512bd - perf: simplify background prefetcher by migrating to a single nested deep query rather than bulk chunk queries (2026-07-27)
- f372df3 - perf: rewrite background prefetcher to efficiently bulk fetch up to 100 workouts for deep offline support (2026-07-27)
- dbcd2f7 - feat: implement background prefetch of recent workout data for offline viewing (2026-07-27)
- a0eeb15 - fix: initialize sets cache when creating exercise offline so mutations apply correctly to local state (2026-07-27)
- 81e3e9c - feat: use cached historical data to populate instant smart defaults when adding exercises offline (2026-07-27)
- 2ae2668 - fix: seed exercise details cache for instant offline loading and stop endless spinner on failure (2026-07-27)
- 4111466 - feat: progressive enhancement for exercise addition - instant base defaults with background history update (2026-07-27)
- 2f2788a - perf: prevent exercise addition from blocking UI with long historical data queries (2026-07-27)
- db5cf03 - fix: resolve type cast error in offline search and make exercise addition fully offline capable (2026-07-27)
- 104791e - fix: sync global workouts_list cache in active_workout_screen for perfectly reactive UI (2026-07-27)
- 8b73ee1 - feat: add reactive cache update stream to AppRepository for global screen rebuilds (2026-07-27)
- 5d24250 - feat: complete offline caching of entire exercise catalog for airplane mode search capabilities (2026-07-27)
- c694120 - fix: more permissive offline detection to solve emulator bugs (2026-07-27)
- feeb766 - feat: implement offline caching for app mutations and data loads (2026-07-26)
- 5e10cd4 - fix: await keyboard dismissal animation before opening instructions sheet to avoid visual glitch (2026-07-26)
- 8dde689 - fix: dismiss keyboard before opening instruction sheet to prevent DraggableScrollableSheet height miscalculation jump (2026-07-26)
- d0d27d4 - style: increase top padding buffer for search sheet (2026-07-26)
- fd9f583 - fix: explicitly enforce top padding for search sheet to prevent dynamic island collision regardless of SafeArea behavior (2026-07-25)
- 607c66c - fix: subtract keyboard height from search modal constraint to prevent it pushing into dynamic island (2026-07-25)
- fa5088a - fix: resolve syntax error from DraggableScrollableSheet widget replacement (2026-07-25)
- 672572b - fix: match exercise logging screen bottom sheet behavior by using DraggableScrollableSheet and keeping it within tab bounds (2026-07-25)
- 4ed4c1d - fix: remove useSafeArea from modal config to prevent external bottom padding (2026-07-25)
- f5cd388 - fix: set useRootNavigator to true for modal bottom sheets to anchor to true bottom (2026-07-25)
- 6ed899a - fix: set bottom false on safe areas in modals to prevent floating unattached trays (2026-07-25)
- b7a6a27 - fix: constrain add exercise modal to safe area to fix dynamic island overlap (2026-07-25)
- f7f9d7f - docs: remove unreleased offline sync claims from release notes (2026-07-25)
- 7a5115b - docs: add short 500 character plain text release notes (2026-07-25)
- b947cf9 - docs: add plain text version of v1.0.0 release notes (2026-07-25)
- 7dfd3e8 - docs: add v1.0.0 feature release notes to branding folder (2026-07-25)
- 420c350 - chore: save macOS signing settings (2026-07-25)
- a053704 - chore: update platform package identifiers for release (2026-07-25)
- 5811253 - Merge feature/secure-storage-avatars into main (2026-07-25)
- 066143f - fix: update Edge Function tests to expect HTTP 302 redirects instead of HTML and mock the new RPC call (2026-07-25)
- 883a17c - fix: resolve flutter analyze warnings for unused imports, deprecated members, context usage across async gaps, and prints (2026-07-25)
- cc19d2a - feat: create dedicated static HTML deletion status page in frontend app and redirect Edge Function to it to permanently bypass all Cloudflare API Gateway rendering restrictions (2026-07-25)
- 24c0546 - fix: completely bypass Cloudflare HTML blocks by using application/xhtml+xml and strictly formatted XHTML documents for visual rendering (2026-07-25)
- d75d2a8 - refactor: replace HTML rendering with HTTP Redirects to bypass Supabase Edge network HTML restrictions (2026-07-25)
- 7f13a71 - fix: explicitly set Content-Security-Policy to allow unsafe-inline styles to prevent browser rendering failures (2026-07-25)
- 002c774 - fix: inline Headers object to bypass Edge Runtime static analysis override (2026-07-25)
- 23a8e10 - fix: change error status codes from 400 to 200 to bypass Safari bad-request caching (2026-07-25)
- 6e04916 - fix: clean up HTML whitespace for Safari (2026-07-25)
- 7527453 - fix: revert Headers class initialization in confirm-data-deletion to bypass Supabase Edge proxy serialization issue (2026-07-25)
- 1d1e5d6 - fix: use service role RPC for reliable user deletion (2026-07-25)
- 9466fd8 - fix: add DOCTYPE and enforce Headers in confirm-data-deletion to fix Safari plain-text rendering (2026-07-25)
- db1b778 - fix: secure storage.objects SELECT policy to prevent broad bucket enumeration (2026-07-25)
- cf96b32 - fix: add DELETE policy for anthropometric logs (2026-07-25)
- 38e1ad4 - chore: update deletion confirmation email sender to [email protected] (2026-07-25)
- 0c6b1cc - fix: update RLS for profiles and restore foreign key constraints (2026-07-25)
Version 0.3.7
- cd1fc69 - fix: await profile edit navigation to ensure data refreshes on return (2026-07-25)
- 8f142ce - style: fix horizontal padding on avatar upload button (2026-07-25)
- 18d5616 - feat: add Google Analytics from landing page to flutter web app (2026-07-25)
- cc594f4 - fix: resolve broken avatar loading on web by migrating SafeImage to use package:web for modern js_interop and Wasm compatibility (2026-07-25)
- 69177b4 - Merge remote-tracking branch ‘origin/main’ into dev (2026-07-25)
- 568a6eb - fix: hide empty parenthesis if build number is missing in version string (2026-07-25)
- 59866ed - fix: restore foundation and io imports missing after cleanup (2026-07-25)
- 3171f78 - chore: ignore supabase temp directory (2026-07-25)
- d1a9a14 - chore(security): add migration to enforce strict RLS on profiles table (2026-07-25)
- a76ff8a - fix: migrate deprecated onPopInvoked to onPopInvokedWithResult (2026-07-25)
Version 0.3.6
- 69224f7 - chore: include pubspec version updates, add missing native splash assets, and clean up unneeded imports via dart fix (2026-07-25)
- 1ebcb75 - feat: display dynamic app version at the bottom of profile screen (2026-07-25)
- 4902c36 - chore(android): update app label to Gym Vibes (2026-07-25)
- 68b6e2d - chore(branding): add flutter_native_splash and pure vector icon to fix Android 12 mask cropping (2026-07-25)
- 2593d02 - fix(routing): re-apply context.go fixes for deep linking compatibility (2026-07-25)
- 6fc3ded - chore(deploy): add catchall_document for SPA routing in DO app platform (2026-07-25)
- 992af7f - fix(routing): use StatefulShellRoute for tabs, fix go_router stack issues (2026-07-25)
- 0a02e4a - refactor(routing): complete go_router migration (2026-07-25)
- e9963d9 - fix(routing): preserve full exercise URL on deep link and change exercises/ to exercise/ everywhere (2026-07-25)
- 7985eba - fix(routing): remove unconditional redirect to /workouts and fix syntax error (2026-07-25)
- a20aae4 - fix(routing): fully remove replaceState and use pushReplacementNamed (2026-07-25)
- 62cbf1f - fix(routing): use RouteAware for tabs and remove bottom sheet named routes (2026-07-25)
- c3a6506 - fix(routing): fully support exercise deep links and browser back button (2026-07-25)
- 1b6da4c - chore: update app title to Gym Vibes: Workout Tracker (2026-07-25)
- f32764d - fix(routing): use pushReplacementNamed and correctly parse requestedRoute (2026-07-25)
- f92c70a - fix(routing): use RouteSettings for native web browser history (2026-07-25)
- 5aa29c2 - fix(routing): prevent web router from destroying navigator stack on browser back button (2026-07-25)
- 392b9f3 - feat(routing): use pushState for forward navigations to enable browser back button (2026-07-25)
- 3051268 - Fix URL routing widget test and fallback logic (2026-07-25)
- 1bc7c8c - Fix Stripe success redirect URL for web (2026-07-25)
- d1ed868 - Fix deep link persistence during login and OAuth flows (2026-07-25)
- 61a377a - Add deep linking to EditProfileScreen tabs (2026-07-25)
- cd76f17 - Fix URL route updates on Web and deep linking for active workouts (2026-07-25)
- 14f8635 - Fix back button to return to /workouts route (2026-07-25)
- 5bd20f3 - Rename /workout/ route to /workouts/ to enforce plural path convention (2026-07-25)
- 606872e - Fix PopScope syntax error (2026-07-25)
- 658961e - Fix active workout back button blank screen issue when deep linked (2026-07-25)
- 1a2c06b - Fix URL routing: implement PathUrlStrategy, fix web platform checks, reset URL on logout (2026-07-25)
- 78d8c06 - fix(auth): add dev override fallback user and eliminate routeInformationUpdated wipe-left animation (2026-07-25)
- 24e0958 - fix(routing): use RouteSettings(name: ’/’) in route generators to prevent duplicate route stacking on web (2026-07-25)
- d51a86a - fix(routing): use onGenerateInitialRoutes instead of home property to prevent route generator assertion exceptions (2026-07-25)
- ed2a521 - fix(routing): add onGenerateRoute and onUnknownRoute to MaterialApp to eliminate route generator exception on deeplinks (2026-07-25)
- f248d76 - fix(web): add signup fallback and robust window location targetUrl formatting for override_login deeplinks (2026-07-25)
- 4c6bf14 - fix(auth): update session assignment and Uri.base tab resolution for deeplinks with override_login (2026-07-25)
- a69b945 - fix(auth): await override_login before setting checkingAuth to false so deep-link tabs open automatically (2026-07-25)
- 93143d7 - fix(web): strip query parameters from window location search history without page reload (2026-07-25)
- a3097ae - fix(auth): strip override_login=true query parameter after successful auto-login (2026-07-25)
- f193205 - fix(routing): remove redundant hash prefix from routeInformationUpdated calls (2026-07-25)
- 9d7d3ab - refactor(components): extract reusable design system tokens, formatters, and widgets with comprehensive test coverage (2026-07-25)
- 5f15d7c - fix(tests): complete url deeplinking implementation with passing test suite (2026-07-25)
- d271fa4 - fix(syntax): clean modal bottom sheet whenComplete chaining in active_workout_screen (2026-07-25)
- cb81189 - fix(syntax): resolve modal bottom sheet closing brackets in active_workout_screen (2026-07-25)
- c087123 - fix(syntax): fix modal bottom sheet closing brackets in active_workout_screen (2026-07-25)
- 97d8e62 - feat(web): add dynamic URL bar updates, deep-linking, and override_login parameter support (2026-07-25)
- 42e7079 - fix(migrations): add DROP POLICY IF EXISTS statements to anthropometrics, workouts, and donations schemas to make migrations idempotent (2026-07-25)
- 5b0986e - fix(migrations): rename donations table migration to 20260724062502 to match remote prod database and updated dev database (2026-07-25)
- b59c1bb - fix(migrations): drop GDPR deletion requests policy and trigger if exists to ensure idempotent replays (2026-07-25)
- 271a5c3 - fix(migrations): restore original donations timestamp and drop remote exercise triggers if exists to ensure idempotent replays (2026-07-25)
- 55e20e4 - chore(git): ignore node_modules and track scratch package dependencies for screenshotting (2026-07-25)
- 46469e5 - feat(branding): finalize deep-linked store screenshots showing workouts, exercise search, and exercise details (2026-07-25)
- f8fd139 - feat(branding): add active workout, search, and details sheets screenshots for all devices, and add regenerate wrapper script (2026-07-25)
- 80045ea - feat(branding): update store screenshots with authenticated high-DPI viewports (2026-07-25)
- d0ee2bb - fix(migrations): drop public read policies if exists before creating them to avoid SQLSTATE 42710 error on replays (2026-07-25)
- 6af44de - feat(branding): add automated store listing screenshots for phone, 7-inch, and 10-inch tablets (2026-07-25)
- 200d0a8 - docs(branding): remove embellishments and reflect only verified app features (2026-07-25)
- fb41d47 - docs(branding): convert Google Play store description to clean plain text (2026-07-25)
- f963b9f - docs(branding): relocate store listing metadata to store_listing/ folder (2026-07-25)
- 3ed7345 - docs(branding): create default Google Play and App Store listing details (2026-07-25)
- f9d423b - refactor: rename local donations migration to match remote timestamp version (2026-07-24)
- b744e66 - feat: implement Option B automated GDPR deletion verification with Edge Functions and db webhooks (2026-07-24)
- a533c96 - feat: link web GDPR delete portal to live Supabase backend database table (2026-07-24)
- 821d097 - feat: enforce username validation rules and catch duplicate key violations to handle unique handles (2026-07-24)
- c47129a - feat: standardise UI components to BrandButton, BrandTextField, BrandCard, and BrandLoadingIndicator, and add comprehensive widget tests (2026-07-24)
- 6b0b0eb - ci: rename workflow to unit-tests.yml, split into parallel jobs, and upgrade runner actions (2026-07-24)
- b06a08d - test: generate Deno LCOV coverage file during test run step (2026-07-24)
- 2526532 - test: disable Deno test sanitizers dynamically and use —no-check in workflow (2026-07-24)
- 8fc41f2 - test: commit scratch/coverage_checker.js script for CI environment (2026-07-24)
- 740d712 - test: commit edge function exports required by Deno tests (2026-07-24)
- c6892d4 - test: commit local modifications for donation_sheet and active_workout_screen tests (2026-07-24)
- 0daf8cf - test: commit missing test files and mocks for CI workflow (2026-07-24)
- 4340085 - feat: add GDPR & Google Play compliant account deletion web page, RPC, and app options (2026-07-24)
- a829786 - ci: add GitHub Actions workflow for tests and update AI coding rules for coverage thresholds (2026-07-24)
- 41ccddf - test: boost coverage for EditProfileScreen, DashboardScreen, SafeImage, LoginScreen, and WorkoutUtils (2026-07-24)
- 9ad873e - feat(branding): generate comprehensive multi-platform icon suites, store marketing assets, SVGs, and brand documentation for GymVibes and Wafflesloth (2026-07-24)
- 4b94e58 - refactor(branding): reorganize branding assets into root branding/gymvibes and branding/wafflesloth directories (2026-07-24)
- a59d3b9 - test/refactor: extract WorkoutUtils, add conversion/snapping unit tests, and fix widget test (2026-07-24)
- 76f11f1 - feat: set desktop window title to Gym Vibes for macOS, Windows, and Linux (2026-07-24)
- 2395ef2 - feat: set native minimum window size constraints to 375x600 for macOS, Windows, and Linux (2026-07-24)
- 75fce42 - feat: implement responsive column header labels for small screens (2026-07-24)
- c223495 - fix: make inter-input gaps responsive and optimize mobile sizing to prevent text wrapping (2026-07-24)
- 8b6408d - fix: update layout header widths to dynamically match upscaled input sizes (2026-07-24)
- 6936c3d - feat: increase set input sizes on all devices and ensure weight is wider than reps (2026-07-24)
- d64a192 - feat: make set input fields responsive and larger on larger screens (2026-07-24)
- 668567e - feat: add global tap-outside gesture detector to dismiss virtual keyboard (2026-07-24)
- 80cb7fc - feat: check for empty string when loading avatar and update test user seed to set avatar_url to null (2026-07-24)
- ad0309e - feat: add default WaffleSloth mascot avatar image and fallbacks (2026-07-24)
- 1f5fd1d - fix(seeds): add aud column explicitly to auth.users insert statement (2026-07-24)
- 208f30a - fix(seeds): use verified, cryptographically correct a$ format bcrypt hash of password123 (2026-07-24)
- 04d6fcd - fix(seeds): change bcrypt prefix to a$ for GoTrue auth compatibility (2026-07-24)
- 76ffe55 - docs/seeds: update test user email domain to gymvibes.xyz and update password bcrypt hash (2026-07-24)
- 285898b - docs: add Developer & Environment Setup section to README.md (2026-07-24)
- d62e335 - feat: conditionally configure Supabase initialization for dev (debug) vs prod (release) environments (2026-07-24)
- 63e0448 - fix(seeds): fix invalid UUID syntax in user_and_workouts.sql (2026-07-24)
- ac1fe0a - feat(seeds): add user_and_workouts seed and split exercises automation scripts (2026-07-24)
- 27f836b - design: update WaffleSloth developer page branding icon and header assets (2026-07-24)
- 406e3c2 - design: regenerate WaffleSloth developer icon with correct arm anatomy (2 arms) (2026-07-24)
- 2ac65b8 - fix(migrations): fix table copy data order bug during database reset (2026-07-24)
- 39c70e3 - feat: add 50 and 100 donation tiers to functions, ui, and test plan (2026-07-24)
- ce821dd - chore: update .cursorrules with branch model (dev/main) and Stripe test/live configs (2026-07-24)
- fcf1f3f - design: add WaffleSloth developer brand assets for Google Play Console (2026-07-24)
- a9815a8 - docs: add donation testing plan to workspace test_plans/ directory (2026-07-24)
- b22ffe5 - feat(donations): add unified donations log table, write local IAP logs directly, and trigger automatic tier upgrades from PG (2026-07-24)
- 121b071 - feat(webhook): add stripe-webhook Edge Function to dynamically update profile tiers on donation success (2026-07-24)
- c8364f6 - feat(iap): integrate native In-App Purchases for mobile with Stripe Checkout fallback for web (2026-07-24)
- 0a084eb - feat: implement cross-platform Stripe Checkout donation flow with one-time and recurring monthly options (2026-07-23)
- 495ac36 - fix(do): disable icon tree-shaking on web build to fix broken FontAwesome icons (2026-07-23)
- c5fed1d - fix(do): remove deprecated —web-renderer canvaskit option from flutter build command (2026-07-23)
- b5012f8 - fix(do): add dummy index.html at root to trigger static HTML buildpack detection (2026-07-23)
- ef64f39 - fix(do): specify environment_slug: html for gymvibes-app to skip buildpack auto-detection (2026-07-23)
- f5187bc - chore: configure DigitalOcean App Spec for multi-site routing (gymvibes.xyz and app.gymvibes.xyz) (2026-07-23)
- 17ac93f - feat: add build script and DigitalOcean App Spec for static site deployment (2026-07-23)
- 010e175 - feat: set non-null default parameters and fallbacks for reps, weights, duration, distance, and calories (2026-07-23)
- e65cf3f - feat: show avatar image preview immediately after picking on both web and native (2026-07-23)
- aeb212d - feat: remove paste avatar url field and standardize upload mime types (2026-07-23)
- 05f25b9 - feat: add distance units (mi/km) to unit systems settings display in edit profile (2026-07-23)
- 076235d - feat: change cardio headers to MINUTES and MILES/KM (2026-07-23)
- 02ec272 - chore: move created_at and updated_at columns to the ends of workout_sets (2026-07-23)
- b92fd1d - feat: implement cardio and time-based exercise tracking (2026-07-23)
- 49ca679 - feat: implement contribution tiers, responsive metrics grid, and goals relocation (2026-07-23)
- f980d46 - feat(workout-logs): compute volume-weighted average weight based on completed sets, and add vertical-drag increment/decrement gestures to reps and weights inputs (2026-07-22)
- 1324c1e - feat(branding): generate launcher icons for android, ios, macos, and web using the brand logo asset (2026-07-22)
- ce83def - fix(auth): configure OAuth to use externalApplication launch mode to resolve hanging/cancelled in-app webview redirects on iOS/macOS (2026-07-22)
- 0a022b3 - fix(auth): register ‘gymvibes://’ simple alphanumeric custom URL scheme to resolve iOS/macOS Safari redirection issues (2026-07-22)
- 5c62a21 - feat(workout): integrate supabase edge function for semantic vector search with matching percentage indicator (2026-07-22)
- f9da824 - style(workout): swap order of reps and weight columns in logging table view (2026-07-22)
- c6ebae3 - fix(workout): refine calculate defaults database query to bypass complex joins using simple list maps (2026-07-22)
- 7e97363 - feat(workout): enforce non-null weight and reps and calculate historical defaults for new exercises with 3 sets (2026-07-22)
- 17c3f2c - fix(workout): resolve duplicate sort handles and implement exercise guide sheets (2026-07-22)
- 94849c3 - feat(workout): implement workouts and sets schema, real-time sync database structures, and premium builder UI (2026-07-22)
- 891e414 - fix(profile): resolve unit conversions and preferences lookups in main dashboard and body logs (2026-07-22)
- 706da6e - feat(profile): implement immutable profile_anthropometric_logs database schema and client logging UI (2026-07-22)
- 8210503 - style(database): capitalize common_activity_levels names to Title Case (2026-07-22)
- 662eef5 - fix(platform): add iOS and macOS camera and photo library usage descriptions and sandboxing entitlements (2026-07-22)
- e307305 - fix(edit_profile): resolve deprecated value parameter in DropdownButtonFormField (2026-07-22)
- eebec38 - feat(avatar): integrate image_picker and upload picked photos to Supabase Storage (2026-07-22)
- 61ed1e2 - feat(database): rename muscle_groups to common_muscle_groups and update junction schemas/seeds (2026-07-22)
- 65f4e55 - fix(edit_profile): move TabBar to body Column to prevent transparent click blockage on top fields (2026-07-22)
- 5f733f2 - feat(profiles): add updated_at column to main profiles table (2026-07-22)
- 4c11536 - feat(supabase): create public avatars bucket and secure storage policies (2026-07-22)
- 43d38bc - style(database): switch timestamp order to created_at followed by updated_at at table ends (2026-07-22)
- 10431fd - feat(database): prefix genders, activitylevels, and unit_systems lookup tables with common and document AI preferences (2026-07-22)
- 1c8ebc1 - feat(supabase): normalize unit system into unit_systems catalog and update Flutter integration (2026-07-22)
- e80ff89 - feat(profile): set imperial as default unit system and replace SegmentedButton with custom cards (2026-07-22)
- 38d5169 - feat(profile): implement EditProfileScreen and integrate with ProfileScreen in Flutter (2026-07-22)
- 7c514df - security(profiles): prevent users from modifying their own subscription tier via API (2026-07-22)
- 0bf47bb - feat(supabase): rename tiers to profile_tiers and tier_id to profile_tier_id (2026-07-22)
- facd9ef - feat(supabase): normalize profile activity level into activity_levels lookup table with multipliers (2026-07-22)
- 5c7a796 - feat(supabase): normalize profile gender column into genders lookup table (2026-07-22)
- fb9a4b1 - feat(supabase): rename muscle groups tables and seeds for alphabetical prefixing (2026-07-22)
- 610ff82 - feat(supabase): normalize profiles schema into sub-tables (anthropometrics, preferences, goals, tiers) (2026-07-22)
- 649a876 - feat(supabase): add profiles schema migration with expanded health and metric fields (2026-07-22)
- 6ceda09 - style(auth): reduce font size and margins of reset password header and forgot password link (2026-07-22)
- 2b64a10 - style(auth): reduce sign in/up switcher toggle height to 32px (2026-07-22)
- dd2cfe0 - design(branding): add square background logo versions in all app sizes (2026-07-22)
- 1552bdb - feat(supabase): add database migrations, catalog seeds, and auto-embedding trigger edge function (2026-07-22)
- ca80308 - feat: add Google Analytics (gtag.js) script to gymvibes.xyz index.html (2026-07-18)
- 93a72fa - feat: add Google Analytics (gtag.js) script to wafflesloth.com index.html (2026-07-18)
- a09a534 - feat: add static routes and files for privacy policy and terms of service in Gym Vibes landing page (2026-07-18)
- f492863 - feat: add custom SVG favicons for wafflesloth.com (waffle) and gymvibes.xyz (dumbbell) (2026-07-18)
- 5561284 - style: remove privacy-first reference from Gym Vibes credits to align with disclaimers (2026-07-18)
- 19fde97 - feat: add landing page websites for wafflesloth.com and gymvibes.xyz using Svelte (2026-07-18)
- a5d6728 - configure: update all custom deep link redirect schemes to xyz.gymvibes.app across iOS, Android, and macOS (2026-07-18)
- f835ee0 - configure: add custom URL schemes to macOS Info.plist to support desktop OAuth deep linking redirects (2026-07-18)
- b141164 - style: center dumbbell logo and make social icon colors grey in login screen (2026-07-18)
- bd904ea - feat: migrate all application icons to font_awesome_flutter package (2026-07-18)
- 3efe13e - feat: add Google and GitHub OAuth login buttons to login screen (2026-07-18)
- 9f94657 - configure: add Google OAuth client ID plist and configure iOS URL scheme (2026-07-18)
- bbc652e - configure: change app bundle identifier and package name to xyz.gymvibes.app across all platforms (2026-07-18)
- 2ad1fe1 - docs: add Terms of Service in MD and premium HTML formats (2026-07-18)
- b464f88 - docs: add Privacy Policy and Terms of Service in MD and premium HTML formats (2026-07-18)
- 2dd9d8e - design: add vector SVG logo and PNG app icons in standard sizes (2026-07-18)
- 59be22e - docs: update remaining instances of app description in code metadata and rules (2026-07-18)
- d29cafa - docs: shorten description to 20 words and remove technical jargon (2026-07-18)
- b04d3f1 - docs: rewrite description to reflect premium offline-first workout tracking concept (2026-07-18)
- 768226d - feat: implement password reset and update password flows (2026-07-18)
- 8ff3a56 - feat: implement Supabase auth with login and profile screens (2026-07-18)
- 7ad864d - chore: add VS Code extension recommendations (2026-07-18)
- 761aab4 - docs: add git and PR workflow rules to gym_tracker.md (2026-07-18)
- 4a70580 - feat: initial commit with workspace config and flutter skeleton (2026-07-18)