Kiwi by Circuit Forge LLC — Pantry tracking + leftover recipe suggestions; barcode/receipt OCR
Find a file
pyr0ball 521cb419bc feat: sensory profile filter — texture/smell/noise filtering for Browse and Find (kiwi#51)
- Migration 035: add sensory_tags column to recipes (default '{}')
- scripts/tag_sensory_profiles.py: batch tagger using ingredient names,
  direction keywords, and ingredient_profiles texture data
- app/services/recipe/sensory.py: SensoryExclude frozen dataclass,
  build_sensory_exclude(), passes_sensory_filter() with graceful degradation
  (untagged recipes always pass; malformed JSON always passes)
- store.browse_recipes and _browse_by_match: accept SensoryExclude, apply
  filter in recipe-building loop (default path) and scoring loop (match sort)
- recipe_engine.suggest: load sensory_preferences from settings, apply
  passes_sensory_filter() after exclude_set check in the rows loop
- settings endpoint: add sensory_preferences to _ALLOWED_KEYS
- Frontend: SensoryPreferences types in api.ts; sensoryPreferences state and
  saveSensory() action in settings store; Sensory section in SettingsView with
  texture avoid pills, smell/noise tolerance scale pills with ok/limit/neutral
  color coding
- 66 new tests (29 classification + 13 sensory service + 2 settings); 281 total
2026-04-24 09:47:48 -07:00
.forgejo/workflows ci: wire Forgejo Actions CI, mirror, and release workflows 2026-04-15 20:10:57 -07:00
.github/workflows ci: add GitHub Actions CI for public credibility badge 2026-04-15 20:20:13 -07:00
app feat: sensory profile filter — texture/smell/noise filtering for Browse and Find (kiwi#51) 2026-04-24 09:47:48 -07:00
config chore(config): add llm.yaml.example with cf-text trunk backend pattern 2026-04-20 13:28:56 -07:00
docker/web fix: frontend concurrent-mount errors, nginx routing, and browser UX (#98 #106 #107) 2026-04-18 17:12:34 -07:00
docs fix: recipe enrichment backfill, main_ingredient browser domain, bug batch 2026-04-18 15:38:56 -07:00
frontend feat: sensory profile filter — texture/smell/noise filtering for Browse and Find (kiwi#51) 2026-04-24 09:47:48 -07:00
scripts feat: sensory profile filter — texture/smell/noise filtering for Browse and Find (kiwi#51) 2026-04-24 09:47:48 -07:00
tests feat: sensory profile filter — texture/smell/noise filtering for Browse and Find (kiwi#51) 2026-04-24 09:47:48 -07:00
.cliff.toml ci: wire Forgejo Actions CI, mirror, and release workflows 2026-04-15 20:10:57 -07:00
.env.example feat(config): add CF_APP_NAME for cf-orch analytics attribution 2026-04-20 07:02:00 -07:00
.gitignore feat: saved recipes, recipe browser, and recipe detail panel 2026-04-08 14:35:02 -07:00
.gitleaks.toml feat(browser): expand cuisine taxonomy to 13 categories + 105 subcategories 2026-04-21 10:15:58 -07:00
.gitleaksignore chore: suppress initial-commit .env false positives in gitleaksignore 2026-04-03 18:57:50 -07:00
compose.cloud.yml chore(cf-orch): route recipe LLM calls through vllm with model candidates + CF_APP_NAME 2026-04-21 15:05:38 -07:00
compose.override.yml feat(frontend): async polling for L3/L4 recipe generation + rename cf-orch node to sif 2026-04-19 21:52:21 -07:00
compose.yml chore: initial commit — kiwi Phase 2 complete 2026-03-30 22:20:48 -07:00
Dockerfile fix: install circuitforge-orch in kiwi image for cf-orch-agent sidecar 2026-04-18 22:29:08 -07:00
environment.yml feat: wire cf-orch agent sidecar and scheduler coordinator integration (closes #7) 2026-04-02 22:57:21 -07:00
LICENSE-BSL chore: menagerie alignment — LICENSE files, gitignore CLAUDE.md, circuitforge-hooks 2026-04-02 23:20:35 -07:00
LICENSE-MIT chore: menagerie alignment — LICENSE files, gitignore CLAUDE.md, circuitforge-hooks 2026-04-02 23:20:35 -07:00
manage.sh feat: saved recipes, recipe browser, and recipe detail panel 2026-04-08 14:35:02 -07:00
mkdocs.yml feat: add Plausible analytics to Vue SPA and docs 2026-04-16 21:15:56 -07:00
PRIVACY.md chore: initial commit — kiwi Phase 2 complete 2026-03-30 22:20:48 -07:00
pyproject.toml chore: bump version to 0.3.0 2026-04-16 14:24:16 -07:00
README.md docs: add link to docs.circuitforge.tech/kiwi in README 2026-04-14 08:19:32 -07:00

🥝 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 05 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-core env-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 (L1L4) 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)