AI-first menu tool for restaurants. Photograph your existing menu or your dishes (or start blank), upload your logo, and get a print-ready, multilingual, LMIV-compliant menu — with optional printed copies and a QR mobile menu.
Two-AI architecture:
- Claude Sonnet 4.6 — the Brain: extraction, dish recognition, translation, LMIV allergen detection, logo analysis. Produces structured data only.
- gpt-image-2 — the Designer: complete print-ready menu layout, food photos, logo integration, 4 style variants. Produces the final visual artifact.
Core principle: every flow ends in AI generation. The final menu is always an AI-generated image — never an HTML-rendered PDF.
FastAPI · PostgreSQL 16 · Redis 7 + RQ · MinIO (S3) · React + Vite + TanStack Router · Tailwind v4 · shadcn/ui · Caddy · Docker Compose.
Requires Docker + Docker Compose.
cp .env.example .env # adjust if needed
docker compose up -d --buildThen:
- API: http://localhost/api/v1/health
- API docs: http://localhost/api/docs
- MinIO console: http://localhost:9001 (minioadmin / minioadmin)
The compose stack maps host ports that can clash with other local stacks. Override
them in .env (defaults chosen to avoid the common Postgres/Redis ports):
| Service | Host port | Env var |
|---|---|---|
| Postgres | 5433 | DB_HOST_PORT |
| Redis | 6380 | REDIS_HOST_PORT |
| MinIO API | 9000 | MINIO_HOST_PORT |
| MinIO console | 9001 | MINIO_CONSOLE_HOST_PORT |
| Web (Caddy) | 80 | WEB_HOST_PORT |
Internal service-to-service ports are always the defaults (db:5432, etc.).
docker compose ps # service status
docker compose logs -f backend # tail backend logs
docker compose down # stopDatabase migrations and tests run inside a one-off backend container (mounting the live source, so no rebuild needed):
# apply migrations
docker compose run --rm --no-deps -v "$(pwd)/backend:/app" -w /app backend \
alembic upgrade head
# generate a new migration after changing models
docker compose run --rm --no-deps -v "$(pwd)/backend:/app" -w /app backend \
alembic revision --autogenerate -m "describe change"
# run tests
docker compose run --rm --no-deps -v "$(pwd)/backend:/app" -w /app backend \
sh -c "uv pip install --system -q '.[dev]' && python -m pytest -v"The product is built in dependency-ordered sessions (spec §24): Foundation → Brain → Designer → Editor → Recognition → Checkout/Print → QR → Compliance. See the spec for full detail.