Work / 03 of 06

workout-lib.gr

REST API · exercise catalogue

An exercise library with muscle maps, demo clips and bilingual search, served from one index.

Visit workout-lib.gr
Role
Solo: data, API, admin panel and website
Years
2026
Status
Live, private API with a public demo
Stack
Laravel · Meilisearch · React
workout-lib.gr on desktop and mobile

The brief

Coach's workout planner needed an exercise catalogue with Greek names, muscle mappings and demos. workout-lib.gr is that catalogue, built as a sibling of food-lib.gr with the same stack and layout.

What I built

  • A Laravel 13 API on MariaDB, Meilisearch and Redis, with demo clips on Cloudflare R2.
  • An admin panel that is just another API client, and a marketing site with live search.
  • A Supabase Edge Function that gives Coach access through a service account, so no credential ships in the app.

Decisions

  1. 01

    One index for two languages

    Each exercise carries its English name and every translation in the same document, so a Greek query and an English one hit the same results.

  2. 02

    Preserving exercise IDs during merges

    The import brought many movements in twice, once per gender. 971 duplicate records were merged into their matching exercise entries, retaining a clip for each variant. A merged row is soft-deleted with a pointer to its survivor, because Coach stores exercise IDs, and those have to keep resolving. That also makes the merge reversible.

  3. 03

    Limiting bulk access to the demo

    The two demo endpoints can't be paged, strip where the data came from, have their own per-IP limit, and can be switched off with one variable. Switched off, they return a 404.

  4. 04

    No AI where it isn't needed

    The catalogue uses keyword search across exercise names and translations, so users can find the same exercise in Greek or English without an additional AI search layer.