Kiwi by Circuit Forge LLC — Pantry tracking + leftover recipe suggestions; barcode/receipt OCR
- Assembly template system (13 templates: burrito, fried rice, omelette, stir fry, pasta, sandwich, grain bowl, soup/stew, casserole, pancakes, porridge, pie, pudding) with role-based matching, whole-word single-keyword guard, deterministic titles via MD5 pantry hash - Prep-state stripping: strips 'melted butter' → 'butter' for coverage checks; reconstructs actionable states as 'Before you start:' cooking instructions (NutritionPanel prep_notes field + RecipesView.vue display block) - FTS5 fixes: always double-quote all terms; strip apostrophes to prevent syntax errors on brands like "Stouffer's"; 'plant-based' → bare 'based' crash - Bidirectional synonym expansion: alt-meat, alt-chicken, alt-beef, alt-pork mapped to canonical texture class; pantry expansion covers 'hamburger' from 'burger patties' etc. - Texture profile backfill script (378K ingredient_profiles rows) with macro-derived classification in priority order (fatty → creamy → starchy → firm → fibrous → tender → liquid → neutral); oats/legumes starchy-first fix - LLM prompt: ban flavoured/sweetened ingredients (vanilla yoghurt) from savoury - Migrations 014 (nutrition macros) + 015 (recipe FTS index) - Nutrition estimation pipeline script - gitignore MagicMock sqlite test artifacts |
||
|---|---|---|
| app | ||
| docker/web | ||
| frontend | ||
| scripts | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| compose.cloud.yml | ||
| compose.yml | ||
| Dockerfile | ||
| environment.yml | ||
| manage.sh | ||
| PRIVACY.md | ||
| pyproject.toml | ||
| README.md | ||
🥝 Kiwi
Part of the CircuitForge LLC "AI for the tasks the system made hard on purpose" suite.
Pantry tracking and leftover recipe suggestions.
Scan barcodes, photograph receipts, and get recipe ideas based on what you already have — before it expires.
Status: Pre-alpha · CircuitForge LLC
What it does
- Inventory tracking — add items by barcode scan, receipt upload, or manually
- Expiry alerts — know what's about to go bad
- Receipt OCR — extract line items from receipt photos automatically (Paid tier)
- Recipe suggestions — LLM-powered ideas based on what's expiring (Paid tier, BYOK-unlockable)
- Leftover mode — prioritize nearly-expired items in recipe ranking (Premium tier)
Stack
- Frontend: Vue 3 SPA (Vite + TypeScript)
- Backend: FastAPI + SQLite (via
circuitforge-core) - Auth: CF session cookie → Directus JWT (cloud mode)
- Licensing: Heimdall (free tier auto-provisioned at signup)
Running locally
cp .env.example .env
./manage.sh build
./manage.sh start
# Web: http://localhost:8511
# API: http://localhost:8512
Cloud instance
./manage.sh cloud-build
./manage.sh cloud-start
# Served at menagerie.circuitforge.tech/kiwi (JWT-gated)
Tiers
| Feature | Free | Paid | Premium |
|---|---|---|---|
| Inventory CRUD | ✓ | ✓ | ✓ |
| Barcode scan | ✓ | ✓ | ✓ |
| Receipt upload | ✓ | ✓ | ✓ |
| Expiry alerts | ✓ | ✓ | ✓ |
| CSV export | ✓ | ✓ | ✓ |
| Receipt OCR | BYOK | ✓ | ✓ |
| Recipe suggestions | BYOK | ✓ | ✓ |
| Meal planning | — | ✓ | ✓ |
| Multi-household | — | — | ✓ |
| Leftover mode | — | — | ✓ |
BYOK = bring your own LLM backend (configure ~/.config/circuitforge/llm.yaml)
License
Discovery/pipeline layer: MIT AI features: BSL 1.1 (free for personal non-commercial self-hosting)