Kiwi by Circuit Forge LLC — Pantry tracking + leftover recipe suggestions; barcode/receipt OCR
Find a file
pyr0ball ef04064728
Some checks are pending
CI / Backend (Python) (push) Waiting to run
CI / Frontend (Vue) (push) Waiting to run
Mirror / mirror (push) Waiting to run
feat(community): issue #119 — recipe dedup + variation clustering on submit
Three-layer dedup check before community post submission:
- L1: title ILIKE search against existing posts in community DB
- L2: Jaccard ingredient overlap using local corpus (≥0.70 very_similar, ≥0.35 somewhat_similar)
- L3: similar_to_ref FK — user can explicitly mark post as variation of existing

New endpoint: POST /api/v1/community/check-similar (gracefully no-ops if community DB absent)
New service: app/services/community/dedup.py — jaccard(), similarity_tier(), build_similar_post_result()
Both publish modals (plan + outcome) now check similarity before submit; user can proceed as-is,
mark as variation, or cancel. similar_to_ref passed in final publish payload.
2026-05-11 17:25:06 -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(community): issue #119 — recipe dedup + variation clustering on submit 2026-05-11 17:25:06 -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 feat(streaming): add native SSE fallback for L3/L4 recipe generation (closes #126) 2026-05-11 11:32:54 -07:00
docs fix: recipe enrichment backfill, main_ingredient browser domain, bug batch 2026-04-18 15:38:56 -07:00
frontend feat(community): issue #119 — recipe dedup + variation clustering on submit 2026-05-11 17:25:06 -07:00
scripts chore(pipeline): add fast targeted meal-tag backfill script 2026-04-27 13:00:58 -07:00
tests feat: recipe scanner — photo to structured recipe (kiwi#9) 2026-04-27 08:23:01 -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(browse): active time estimation, prep scaling, required-ingredient filter 2026-04-27 07:13:12 -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 feat(streaming): add COORDINATOR_URL and COORDINATOR_KIWI_KEY to cloud compose 2026-04-24 10:26:53 -07:00
compose.override.yml chore: bump to v0.6.0, fix TS build errors, remove cf-orch sidecar 2026-04-24 21:19:44 -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(manage): add update and cloud-update commands (closes #127) 2026-05-11 11:32:30 -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 to v0.6.0, fix TS build errors, remove cf-orch sidecar 2026-04-24 21:19:44 -07:00
README.md docs(readme): landing page rewrite — feature table, quick start, tier table, Forgejo-primary, split license 2026-05-06 08:51:38 -07:00

Kiwi logo

Kiwi

Pantry tracking and recipe suggestions — with or without an LLM.

License: MIT/BSL CI Version

Documentation · Live demo · circuitforge.tech

Part of the CircuitForge LLC suite — "AI for the tasks the system made hard on purpose."


The LLM is optional. Barcode scanning, receipt upload, expiry alerts, the full 200k+ recipe browser, and CSV export all work with zero LLM configured. Recipe suggestions and receipt OCR activate when a backend is available, and are BYOK-unlockable at any tier. You are never forced to send your data anywhere.


What Kiwi does

Feature Notes
Inventory tracking Add items by barcode scan, receipt upload, or manually
Expiry alerts Know what is about to go bad before it does
Recipe browser 200k+ recipes — filter by cuisine, meal type, dietary preference, or main ingredient; pantry match percentage shown inline
Leftover mode Prioritizes nearly-expired items in recipe ranking (5/day free, unlimited at Paid+)
Recipe suggestions Four levels: direct corpus match, substitution/swap, cuisine-style adapter, full LLM generation
Meal planning Plan meals for the week; pull from saved recipes or suggestions
Saved recipes Bookmark any recipe with notes, 0-5 star rating, and free-text style tags; organize into named collections (Paid)
Receipt OCR Extract line items from receipt photos automatically
Dietary profiles Vegan, gluten-free, diabetic, and other constraints respected throughout
Style auto-classifier LLM suggests style tags (comforting, hands-off, quick, etc.) for saved recipes
Community feed Browse and share recipes with other Kiwi users
CSV export Full pantry export, always available, no tier gate

Quick start

One-line install (self-hosted, Docker required):

bash <(curl -fsSL https://git.opensourcesolarpunk.com/Circuit-Forge/kiwi/raw/branch/main/install.sh)

Or clone and run manually:

git clone https://git.opensourcesolarpunk.com/Circuit-Forge/kiwi.git
cd kiwi
cp .env.example .env
./manage.sh build
./manage.sh start
# Web:  http://localhost:8511
# API:  http://localhost:8512

Live cloud instance (free account required): menagerie.circuitforge.tech/kiwi

Full setup and configuration guide: docs.circuitforge.tech/kiwi


Tiers

Feature Free Paid Premium
Inventory CRUD Yes Yes Yes
Barcode scan Yes Yes Yes
Receipt upload Yes Yes Yes
Expiry alerts Yes Yes Yes
CSV export Yes Yes Yes
Recipe browser (200k+ recipes) Yes Yes Yes
Save recipes + notes + star rating Yes Yes Yes
Style tags (manual, free-text) Yes Yes Yes
Leftover mode (5/day) Yes Yes Yes
Receipt OCR BYOK Yes Yes
Recipe suggestions (L1L4) BYOK Yes Yes
Named recipe collections Yes Yes
LLM style auto-classifier BYOK Yes
Meal planning Yes Yes
Multi-household Yes

BYOK = bring your own LLM backend. Configure ~/.config/circuitforge/llm.yaml to unlock AI features at any tier without a paid subscription.


Stack

  • Frontend: Vue 3 SPA (Vite + TypeScript), served on port 8511
  • Backend: FastAPI + SQLite via circuitforge-core, API on port 8512
  • Auth: CircuitForge session cookie (cloud mode); local mode requires no account
  • Licensing: Heimdall — free tier auto-provisioned at signup

Forgejo-primary

Kiwi is developed and maintained on Forgejo at git.opensourcesolarpunk.com/Circuit-Forge/kiwi. GitHub and Codeberg are read-only mirrors. File issues and submit pull requests on Forgejo.


License

Kiwi uses a split license:

  • Discovery and inventory pipeline (barcode scan, expiry tracking, pantry CRUD, CSV export, recipe browser): MIT
  • AI features (receipt OCR, LLM recipe suggestions, style auto-classifier): BSL 1.1 — free for personal non-commercial self-hosting; commercial use or SaaS re-hosting requires a paid license. Converts to MIT after 4 years.

Privacy · Safety · Accessibility — co-equal, non-negotiable across all CircuitForge products.