Work / 02 of 06
food-lib.gr
REST API · Greek food catalogue
Thousands of Greek foods with per-100 g nutrition, searchable in Greek, greeklish or English as you type.
Visit food-lib.gr- Role
- Solo: data, API, admin panel and website
- Years
- 2026
- Status
- Live
- Stack
- Laravel · Meilisearch · React

5,634
foods
11,285
product images
268
brands
9
categories
The brief
Coach needed a Greek food database with per-100 g nutrition and search that understands Greek. I built it as a product of its own: a JSON API sold with metered keys, which Coach also uses.
What I built
- A Laravel 13 API on MariaDB, Meilisearch and Redis, running in Docker behind Caddy.
- An admin panel for the catalogue, and a public review queue for food contributions.
- Images on Cloudflare R2, and a marketing site on Vercel with a live search demo.
- CI that runs tests and Pint, builds an image and deploys over SSH, with migrations run on boot.
Decisions
- 01
Search that speaks Greek
Diacritic folding, typo tolerance and a greeklish field in the index, so "bira" finds Μπύρα. Semantic search is opt-in, with a relevance threshold that was measured rather than guessed: a food logger that confidently returns the wrong product writes wrong macros into someone's day.
- 02
Metering that's fair
API keys are resolved before the rate limiter, so customers are limited by their plan rather than their IP. The monthly quota runs after it, so a burst that gets throttled is never charged against the month.
- 03
Revalidating cached data
Reads use tagged Redis caches and ETags for revalidation. Free-text search is left uncached.
- 04
Backups that are tested
A nightly database dump plus encrypted offsite snapshots to R2. A verify step restores a real file and compares checksums, because a backup that has never been restored isn't a backup.