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

5,810
exercises
1,724
demo clips
21
muscles in 6 groups
971
duplicates merged
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
- 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.
- 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.
- 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.
- 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.