Mealie-backed AI meal planner + shopping list for the family
Find a file
Cobb Hayes 592b4f1161 Public-flip audit: env-driven paths, scrub audit-ticket prefixes, terser README
Lucy bind paths + LAN host pins replaced with env defaults. Repository URLs
→ git.sulkta.com. Audit-changelog scaffolding stripped from inline comments
(technical reasoning preserved). README sheds marketing scaffolding. AI-speak
in load-bearing prompts/SOULs left alone — that IS the product.
2026-05-27 11:42:56 -07:00
cauldron Public-flip audit: env-driven paths, scrub audit-ticket prefixes, terser README 2026-05-27 11:42:56 -07:00
scripts Public-flip audit: env-driven paths, scrub audit-ticket prefixes, terser README 2026-05-27 11:42:56 -07:00
tests v0.3 step 3+4: AI plan generator + /list shopping aggregation 2026-04-29 06:26:54 -07:00
.env.example Public-flip audit: env-driven paths, scrub audit-ticket prefixes, terser README 2026-05-27 11:42:56 -07:00
.gitignore v0.1 — backend bones + ingredient sterilizer 2026-04-28 16:59:11 -07:00
compose.yml Public-flip audit: env-driven paths, scrub audit-ticket prefixes, terser README 2026-05-27 11:42:56 -07:00
Dockerfile v0.1 — backend bones + ingredient sterilizer 2026-04-28 16:59:11 -07:00
LICENSE Initial commit 2026-04-28 16:35:30 -07:00
README.md Public-flip audit: env-driven paths, scrub audit-ticket prefixes, terser README 2026-05-27 11:42:56 -07:00
requirements.txt deps: cryptography 46.0.6→46.0.7 (CVE-2026-39892, residual after first scan) 2026-05-02 13:34:39 -07:00

cauldron

Mealie-backed meal planner + shopping-list aggregator. Wraps a Mealie instance with: an ingredient sterilizer (free-form quantities → structured parses), a weekly meal-plan generator, and a household shopping list that collapses cross-recipe duplicates.

Stack

  • Flask + gunicorn, Python 3.12
  • Authentik (or any OIDC provider) for sessions
  • MariaDB for per-user prefs + Fernet-encrypted Mealie tokens
  • clawdforge for the AI layer

Mealie remains the source of truth for recipes / plans / shopping lists. Cauldron stores per-user prefs + cached metadata only.

Run

cp .env.example .env   # fill in secrets
docker compose up -d --build
curl http://localhost:7790/healthz

CAULDRON_ENV_FILE=/path/to/secrets.env docker compose up -d if your env file lives outside the repo.

Endpoints

GET  /healthz                              liveness + clawdforge upstream
GET  /login            /auth/callback      OIDC flow
GET  /me                                   account + integration status
GET  /plan             /list               household plan + shopping list
GET  /api/recipes                          (admin bearer) proxy Mealie list
POST /api/sterilize/preview/<slug>         (admin bearer) dry-run parser
POST /api/sterilize/apply/<slug>           (admin bearer) write parses back

Admin-bearer endpoints expect Authorization: Bearer $ADMIN_BEARER.

Layout

cauldron/
  config.py            env-driven config
  forge.py             clawdforge HTTP client
  mealie.py            Mealie API client
  sterilizer.py        ingredient parse + apply pipeline
  aggregator.py        cross-recipe shopping aggregator
  server.py            Flask app
scripts/
  build_foods_seed.py  USDA → foods seed
  clean_foods_seed.py  clawdforge-curated cleanup pass

License

MIT.