Secondary-state items (stale bread, overripe bananas, day-old rice, etc.)
are now surfaced to the recipe engine so relevant recipes get matched even
when the ingredient is phrased differently in the corpus (e.g. "day-old
rice" vs. "rice").
Backend:
- Add rice and tortillas entries to SECONDARY_WINDOW in expiration_predictor
- Add secondary_pantry_items: dict[str, str] field to RecipeRequest schema
(maps product_name → secondary_state label, e.g. {"Bread": "stale"})
- Add _SECONDARY_STATE_SYNONYMS lookup in recipe_engine — keyed by
(category, state_label), returns corpus-matching ingredient phrases
- Update _expand_pantry_set() to accept secondary_pantry_items and inject
synonym terms into the expanded pantry set used for FTS matching
Frontend:
- Add secondary_pantry_items to RecipeRequest interface in api.ts
- Add secondaryPantryItems param to _buildRequest / suggest / loadMore
in the recipes store
- Add secondaryPantryItems computed to RecipesView — reads secondary_state
from inventory items (expired but still in secondary window) and builds
the product_name → state_label map
- Pass secondaryPantryItems into handleSuggest and handleLoadMore
Closes #83
|
||
|---|---|---|
| .forgejo/workflows | ||
| .github/workflows | ||
| app | ||
| docker/web | ||
| docs | ||
| frontend | ||
| scripts | ||
| tests | ||
| .cliff.toml | ||
| .env.example | ||
| .gitignore | ||
| .gitleaks.toml | ||
| .gitleaksignore | ||
| compose.cloud.yml | ||
| compose.override.yml | ||
| compose.yml | ||
| Dockerfile | ||
| environment.yml | ||
| LICENSE-BSL | ||
| LICENSE-MIT | ||
| manage.sh | ||
| mkdocs.yml | ||
| 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.
LLM support is optional. Inventory tracking, barcode scanning, expiry alerts, CSV export, and receipt upload all work without any LLM configured. AI features (receipt OCR, recipe suggestions, meal planning) activate when a backend is available and are BYOK-unlockable at any tier.
Status: Beta · CircuitForge LLC
Documentation · circuitforge.tech
What it does
- Inventory tracking — add items by barcode scan, receipt upload, or manually
- Expiry alerts — know what's about to go bad
- Recipe browser — browse the full recipe corpus by cuisine, meal type, dietary preference, or main ingredient; pantry match percentage shown inline (Free)
- Saved recipes — bookmark any recipe with notes, a 0–5 star rating, and free-text style tags (Free); organize into named collections (Paid)
- Receipt OCR — extract line items from receipt photos automatically (Paid tier, BYOK-unlockable)
- Recipe suggestions — four levels from pantry-match to full LLM generation (Paid tier, BYOK-unlockable)
- Style auto-classifier — LLM suggests style tags (comforting, hands-off, quick, etc.) for saved recipes (Paid tier, BYOK-unlockable)
- Leftover mode — prioritize nearly-expired items in recipe ranking (Free, 5/day; unlimited at Paid+)
- LLM backend config — configure inference via
circuitforge-coreenv-var system; BYOK unlocks Paid AI features at any tier - Feedback FAB — in-app feedback button; status probed on load, hidden if CF feedback endpoint unreachable
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 | ✓ | ✓ | ✓ |
| Recipe browser (domain/category) | ✓ | ✓ | ✓ |
| Save recipes + notes + star rating | ✓ | ✓ | ✓ |
| Style tags (manual, free-text) | ✓ | ✓ | ✓ |
| Receipt OCR | BYOK | ✓ | ✓ |
| Recipe suggestions (L1–L4) | BYOK | ✓ | ✓ |
| Named recipe collections | — | ✓ | ✓ |
| LLM style auto-classifier | — | BYOK | ✓ |
| Meal planning | — | ✓ | ✓ |
| Multi-household | — | — | ✓ |
| Leftover mode (5/day) | ✓ | ✓ | ✓ |
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)