- Configuration: dotenv support, env vars for PORT, DB_PATH, CORS_ORIGIN, rate limits - Security: API key auth for write endpoints, rate limiting on import, configurable CORS, image URL normalization - Reliability: DB transactions for create/update, dirty flag for saves, foreign key enforcement (PRAGMA), duplicate detection O(1) optimization - Features: health check endpoint (/api/health) - Bugfix: corrected tag assignment/removal routes (param order) - Testing: added tests for PUT/DELETE recipes, tag CRUD and assignment, enabled foreign keys in tests - All 46 backend tests passing Closes #<ticket-if-any> |
||
|---|---|---|
| .. | ||
| category | ||
| credits | ||
| detail | ||
| empty-state | ||
| hero | ||
| list | ||
| README.md | ||
| manifest.json | ||
README.md
Photo-First Assets (Wave 2.5)
This directory is the handoff surface for migrating from illustration-first to photo-first art direction.
Current status
manifest.jsonis the source of truth for photo slots and candidate sources.- No third-party photos are vendored yet in this repo.
- Existing SVG placeholders remain as safe local fallbacks until approved photos are added.
Folder intent
hero/— homepage/detail hero photos (.jpg/.webp)list/— 4:3 and 1:1 card/list photosdetail/— 16:9 or 3:2 detail hero photoscategory/— optional category cover photosempty-state/— optional minimal photographic empty-state supportcredits/— attribution and source snapshots when required
Licensing guardrails
Preferred source order:
- Pexels (free commercial use, attribution typically not required)
- Unsplash (free use under Unsplash License, attribution appreciated)
- Owned/internal photos (full control)
Rules:
- Verify license at time of download and record it in
manifest.json. - Never ingest images marked editorial-only or with recognizable private persons without release confidence.
- Keep
sourceUrl,license, anddownloadedAtmetadata for every vendored photo.
Integration
UI workers should consume manifest.json and gracefully fallback to local placeholders when localPath is null.