Skip to main content

Changelog

Notes follow the same versions as CHANGELOG.md in the repository.

Shipped updates, in plain language. For the full canonical list (including internal headings), see CHANGELOG.md in the project.

We use Keep a Changelog and Semantic Versioning. Below is a reader-friendly summary of what each release meant for you.

0.3.23

  • Mobile session chrome: portal mounts in sync with the DOM so dialogs open reliably; deleting the first set in a log works again; discarding a session clears the exercise queue.

0.3.22

  • Docs: the Appwrite Sites deploy guide now walks through local provisioning, required collection env vars, build output (`./.next`), and production secrets in one place.

0.3.21

  • On mobile, the dash gets a floating button to start a log, and active logging shows a bottom session bar (volume, rest and timer, finish or discard) above the keyboard.
  • Dashboard greeting uses rotating hero lines; recent workouts can include short note previews when available.
  • Tighter mobile app chrome (top bar and nav), and the old insights strip on the dashboard is gone.

0.3.20

  • Very large exercise libraries load fully (paginated past Appwrite’s 500-row default); renaming a category can refresh exercise labels where it makes sense.
  • Category delete migration handles original muscle labels more predictably; provisioning validates catalog exercise kinds and uses stable ids when seeding defaults.

0.3.19

  • Exercise library polish: default catalog validation in `npm run check`, safer category delete/reassign, catalog/provisioning alignment with built-in slugs, and accessibility fixes on chips and rename.
  • Large libraries: listing categories and scanning exercises for migration paginate past Appwrite’s 500-row page limit.
  • Custom movements: saves require compound or isolation; rows with an invalid stored kind are skipped when loading.

0.3.18

  • Exercise library on `/dash/exercises`: add your own categories and movements; changes sync to Appwrite.
  • Workout exercise picker merges the shared catalog with your library and categories; run `npm run provision:appwrite` if you need the new `exercise_categories` collection.

0.3.17

  • Default exercise catalog grew with many common lifts; run `npm run provision:appwrite` to sync `__catalog__` in Appwrite.

0.3.16

  • Exercise picker loads the shared catalog plus your own Appwrite exercises (deduped by slug); dev uses bundled defaults if Appwrite is empty or unavailable.
  • Clear messages when exercises fail to load or nothing matches your search/filter.

0.3.15

  • Appwrite-backed global exercise catalog with seeded defaults (`provision:appwrite`); completing a workout resolves exercises from your library, then the shared catalog, then creates a user-owned row.
  • New workout log flows load the exercise picker from Appwrite on `/dash/log/new` and `/admin/log/new` instead of a fixed in-code list.

0.3.14

  • Recent workout volume totals now sum every set (paginated past Appwrite limits); if totals fail, you still see the list with a small notice.
  • Dash navigation uses one helper for the active item; log URLs align with history for highlighting, Settings looks active in the top bar, and locale changes refresh on log routes too.

0.3.13

  • Dash workout history at `/dash/history`, a settings placeholder, and a redirect from the old workout-history URL; history lists recent completed sessions from Appwrite.
  • Dashboard recent workouts show duration and total volume with a link to view the full history.
  • Nav highlights stay correct for log routes and legacy URLs; non-staff `/history` visits go to the dash history page.

0.3.12

  • Shared Training Logger wordmark and a back-to-home link on sign-in and waitlist so branding and escape hatches stay consistent.
  • Marketing nav sits full-width for a cleaner sticky header; doc pages use a simpler shell layout.
  • Skip-to-main is hidden until you focus it; Clerk login and waitlist embeds use scoped styles to trim extra footer chrome.

0.3.11

  • Removed the extra Clerk UI theme package; sign-in and account flows still use the shared `clerk` CSS layer with the app.

0.3.10

  • Added a keyboard-visible Skip to main link and consistent `#main-content` landmarks across app shells and docs.
  • Introduced shared focus ring styles for marketing and kinetic surfaces; updated links and controls for clearer keyboard focus.
  • Improved muted text contrast and expanded the SetRow delete target for better accessibility.

0.3.9

  • Privacy, terms, and changelog pages share a consistent doc layout; legal copy lives in dedicated sections you can skim.
  • The changelog page summarizes releases in plain language from the same versions as the repo changelog.
  • Home and bottom CTAs send you to the waitlist page; Clerk UI is wired so auth styling layers cleanly with the app.

0.3.8

  • Added a dedicated waitlist page with Clerk's embedded sign-up so you can join the beta without leaving the app.
  • Sign-in and sign-up screens now point waitlist links to that route, so the flow stays consistent.
  • Marketing hero and bottom CTA use the same embed instead of a bespoke email field—less to maintain, one path for you.

0.3.7

  • Tightened Appwrite provisioning so the exercise index is validated in the right order—fewer surprises when setting up.

0.3.6

  • Workouts can be pending or completed; history shows finished sessions only, so the feed stays honest.
  • Server-rendered timestamps respect your locale and timezone once cookies are set—no more "wrong day" confusion.
  • Mobile navigation labels adapt (for example staff "Activity" vs athlete history); finishing a workout waits until at least one set is logged.
  • Rest timer and set-row behavior got small fixes so the log feels steady under real use.

0.3.5

  • Mobile shell no longer remounts on every navigation; the drawer closes cleanly when you move around.
  • Saving a workout uses an explicit lock so you cannot double-submit while the server works.
  • Discard confirmation handles Escape properly; category chips use clearer accessibility semantics.

0.3.4

  • Rest timer keeps ticking correctly after you change rest duration mid-session.
  • History empty state links you to the right log route based on your role.
  • Provisioning only treats true "already exists" cases as skips—less brittle string matching.

0.3.3

  • Creating a custom exercise handles concurrent requests safely; duplicate slugs resolve to one record.
  • Exercises use a unique index on your account plus slug so the database stays consistent.

0.3.2

  • Saving a workout only includes sets you actually completed—no more empty placeholders slipping through.

0.3.1

  • Moved kinetic animation CSS so dev builds don't corrupt media queries under Tailwind v4.
  • Added an idempotent Appwrite provisioning script you can run after env is configured.

0.3.0

  • Full workout logging: build a queue, log sets, rest timer, optional notes.
  • Workouts, exercises, and sets persist to Appwrite; history lists recent sessions.
  • Mobile shell with top bar, drawer, and bottom tabs—built for thumbs, not just desktops.

0.2.1

  • Clerk auth URLs use optional catch-all routes so nested login paths resolve correctly.

0.2.0

  • Clerk powers sign-in and sign-up; public metadata can label staff vs athlete for routing.
  • Server-side Appwrite calls require a signed-in Clerk session; the Mistral proxy checks Clerk too.
  • Dashboard, admin, history, and settings routes are protected at the edge.

0.1.0

  • First public shape of the app: dashboard, admin, marketing pages, and a Mistral API proxy.
  • Tooling: ESLint, Prettier, Tailwind CSS v4, and an `init:env` script to get started.