How t-teieki/onaka-log works
onaka-log is a food nutrition estimation and meal-logging backend for a planned mobile app. The principal workflow accepts label or meal-photo images for estimation, or a barcode for product lookup; it converts results into food-item candidates, then supports creating and updating meals and retrieving day summaries. The API also validates requests against shared contracts and persists meals through configurable repositories. The graph follows the sampled API and bootstrap code; unsampled API routes and client internals are represented only where documented or explicitly wired.
Main entry points: app.py HTTP API · main.py App bootstrap · drafts.py Candidate conversion · __init__.py Meal repository
Components 18
API and workflow
- HTTP API
apps/api/src/onaka_api/api/app.py - API contracts
contracts/api/openapi.yaml - App bootstrap
apps/api/src/onaka_api/main.py - Runtime settings
apps/api/src/onaka_api/settings.py
Estimation and lookup
- LLM contracts
contracts/llm - Label estimation
apps/api/src/onaka_api/api/app.py - Photo estimation
apps/api/src/onaka_api/api/app.py - Barcode lookup
apps/api/src/onaka_api/api/app.py - Candidate conversion
apps/api/src/onaka_api/estimation/drafts.py
Meal domain and storage
- Meal rules
apps/api/src/onaka_api/domain/meal.py - Meal repository
apps/api/src/onaka_api/repository/__init__.py - DynamoDB store
apps/api/src/onaka_api/repository/dynamodb.py - Memory store
apps/api/src/onaka_api/repository/memory.py
External integrations
- Claude estimator
apps/api/src/onaka_api/clients/claude.py - OFF client
apps/api/src/onaka_api/clients/off.py
Other components
- Mobile app
- Anthropic Claude
- Open Food Facts
Connections 22
- Mobile app → HTTP API: sends requests
README.md - HTTP API → API contracts: validates requests
apps/api/src/onaka_api/api/app.py - HTTP API → Label estimation: routes label requests
apps/api/src/onaka_api/api/app.py - HTTP API → Photo estimation: routes photo requests
apps/api/src/onaka_api/api/app.py - HTTP API → Barcode lookup: routes product lookups
apps/api/src/onaka_api/api/app.py - Label estimation → LLM contracts: validates image input
apps/api/src/onaka_api/api/app.py - Photo estimation → LLM contracts: validates image input
apps/api/src/onaka_api/api/app.py - Label estimation → Candidate conversion: converts results
apps/api/src/onaka_api/api/app.py - Photo estimation → Candidate conversion: converts results
apps/api/src/onaka_api/api/app.py - Barcode lookup → Candidate conversion: converts product data
apps/api/src/onaka_api/estimation/drafts.py - App bootstrap → HTTP API: assembles app
apps/api/src/onaka_api/main.py - App bootstrap → Runtime settings: loads configuration
apps/api/src/onaka_api/main.py - App bootstrap → Claude estimator: configures estimator
apps/api/src/onaka_api/main.py - App bootstrap → OFF client: configures client
apps/api/src/onaka_api/main.py - App bootstrap → DynamoDB store: selects store
apps/api/src/onaka_api/main.py - App bootstrap → Memory store: selects store
apps/api/src/onaka_api/main.py - Claude estimator → Anthropic Claude: calls model
- OFF client → Open Food Facts: fetches products
- HTTP API → Meal rules: creates and updates meals
apps/api/src/onaka_api/api/app.py - HTTP API → Meal repository: reads and writes meals
apps/api/src/onaka_api/api/app.py - DynamoDB store → Meal repository: implements
apps/api/src/onaka_api/repository/dynamodb.py - Memory store → Meal repository: implements
apps/api/src/onaka_api/repository/memory.py