37b18bd58611d95076cf3bed4aa5fbe5cdfc473a
Food — Meal Planning System
A custom Django app for pantry tracking, meta-recipes, and meal planning. Built for Tom, operated primarily through Caine (OpenClaw AI assistant) via Matrix chat, with Django admin as the web UI.
Architecture
- Django 5.2 (latest LTS) with SQLite backend
- Django REST Framework for API (Phase 2)
- HTMX frontend planned (Phase 4)
- App name:
kitchen
Core Concept: Meta-Recipes
Instead of rigid recipes, the system uses templates with swappable slots:
"Stir Fry" = protein (chicken OR pork) + carb (noodles OR rice) + veg (any combo) + sauce
This matches how Tom actually cooks — same method, different ingredients depending on what's in the pantry.
Models
| Model | Purpose |
|---|---|
Tag |
Flexible ingredient tags (protein, carb, veg, etc.) |
Ingredient |
Master ingredient list with aliases and shelf life |
PantryItem |
Current kitchen inventory with location and expiry |
MetaRecipe |
Cooking template with swappable slots |
Slot |
A category in a meta-recipe (protein, carb, veg) |
SlotOption |
An ingredient that can fill a slot, with qty/serving |
MetaRecipeBase |
Always-needed ingredients (onion, garlic, oil) |
Recipe |
Traditional fixed-ingredient recipe |
RecipeIngredient |
Ingredient in a fixed recipe |
CookLog |
What was cooked and when |
ShoppingListItem |
Shopping list with reasons and checkboxes |
Setup
cd /var/lib/food
source venv/bin/activate
# Run migrations
python manage.py migrate
# Seed initial data (ingredients, pantry, meta-recipes)
python manage.py seed
# Create superuser (if not already done)
python manage.py createsuperuser
# Run dev server
python manage.py runserver 0.0.0.0:8042
Admin UI at: http://localhost:8042/admin/
Credentials
- Admin user:
tom - Admin password:
Kitch3n!2026
File Structure
/var/lib/food/
├── food_project/ # Django project config
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── kitchen/ # Main app
│ ├── models.py # All models
│ ├── admin.py # Admin config with inlines
│ ├── management/
│ │ └── commands/
│ │ └── seed.py # Initial data seeder
│ └── migrations/
├── venv/ # Python virtual environment (gitignored)
├── db.sqlite3 # SQLite database (gitignored)
├── manage.py
└── README.md
Pantry Business Rules
- Freezer items → no expiry date (frozen = indefinite)
- Fridge items → expiry date set from ingredient's
shelf_life_daysif available - Staples (onions, frozen chips, salt, etc.) → auto-flag for restocking when quantity = 0
- Onions are a permanent staple — always restock
- Chicken skin → remove before cooking (noted in slot option notes)
- Tom prefers pork to chicken — pork mince over loins
Implementation Phases
- Phase 1: Django project + models + admin + seed data
- Phase 2: DRF API + Caine integration + "what can I cook?" logic
- Phase 3: Recipe import (URL scraping + cookbook extraction)
- Phase 4: HTMX frontend (pantry view, recipe browser, shopping list)
- Phase 5: Systemd service + nginx reverse proxy + production hardening
Design Doc
Full design document with meta-recipe concept, model rationale, and implementation plan:
Obsidian Vault/Tom Net/Meal Planning System.md
Description
Django + DRF meal-planning system: pantry tracking, meta-recipes and slot-based meal generation.
Readme
277 KiB
Languages
Python
76%
HTML
24%