DEV Community

Cover image for House Pot: Amma's kitchen in Dhaka — approve first, then listen
S. M. Riad
S. M. Riad

Posted on AI-assisted

House Pot: Amma's kitchen in Dhaka — approve first, then listen

Hacktoberfest Weekend Challenge: Build for a Friend Submission 🤝

This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend

“The dal was right—use a little less cumin next time. And I will not listen to the voice until I tap approve.”
— Amma

What I Built

House Pot is one weeknight dinner for Amma, who runs the stove in our Dhaka flat.

The pantry is whatever came back from the market. A cousin cannot eat peanuts or shellfish. She wants one dish, not a feed. Voice is welcome after she has accepted the exact card on screen — not before, and not as a disclaimer the model wrote.

So the app does three jobs, in that order:

  1. Gemma proposes one JSON recipe from tonight’s pantry and the household allergy list.
  2. pantry-check.ts marks in-kitchen vs missing and blocks Approve on allergens. Shrimp counts as shellfish. The model does not get a vote.
  3. ElevenLabs reads the approved card aloud. It never sees the pantry voice note.

Defaults on the live site: cook Amma, allergies peanuts and shellfish, pantry red lentils, onion, garlic, rice, cumin, spinach, yogurt.

I handed her the dal. She ate it. The quote above is the spec.

Demo

Live: https://house-pot.onrender.com/ (free-tier cold start ~60s)

Sixty seconds: leave the defaults → Propose tonight’s pot → read the marks → Approve & read aloud. Then tap If shrimp slipped in. That last click does not call Gemma or ElevenLabs. It adds shrimp to the same card and runs pantry-check.ts so you can see Approve stay off.

The live narrated card is Mild Eggplant and Potato Comfort Curry — Sunday-market eggplant, potato, eggs, mustard oil; four diners; peanuts and shellfish blocked. Gemma ~51s, critic ~23s, then ElevenLabs after approve.

Amma’s narrated run · all pots · video

Live stills (same order as the video)

Kitchen hero

Sunday-market pantry

Shrimp-slip gate + ElevenLabs

Kitchen services

All pots

Amma household history

Code

GitHub logo smriad / house-pot

Voice-friendly kitchen agent for a friend — pantry in, approve, narrate.

House Pot

One recipe from tonight’s pantry. Allergies enforced in code. ElevenLabs speaks only after the cook taps approve.

Built for Amma in Dhaka — Hacktoberfest “Build for a Friend.” Challenge write-up: SUBMISSION.md.

House Pot kitchen — Mild Eggplant and Potato Comfort Curry

Live demo · Narrated run · Video · DEV post

Quick start

git clone https://github.com/smriad/house-pot.git
cd house-pot
npm ci
cp .env.example .env.local
npm run dev
Enter fullscreen mode Exit fullscreen mode

Open http://localhost:3000. Node 20+. Without GEMMA_* the kitchen UI still loads; propose needs an OpenAI-compatible Gemma endpoint (Ollama locally, or hosted keys — see Configuration).

Contents

About

Weeknight dinner is what is already in the kitchen, who is eating, and who cannot eat peanuts or shellfish — not a trending shopping list. Generic meal apps trust prompt-only “allergy safe” claims and dump ten recipes while rice is on the stove.

House…

Start at pantry-check.ts, then orchestrator.ts, approve/route.ts, narrate/route.ts, HousePotApp.tsx.

How I Built It

Open-weight Gemma is good at a dal from lentils and spinach. It is not a doctor. Competitors in this challenge put allergies in the prompt and hope. I put them in TypeScript and re-run the same check on approve and on narrate, so a stale “yes” cannot speak a changed ingredient list.

The human gate is one executable action: speak this recipe. Not a transcript. Not “the model said it was fine.” The approval-queue pattern is spend the human only where the action is irreversible; tie approval to the exact artifact so “approved” cannot drift. House Pot binds approve to this proposal and this pantryReview.

ElevenLabs is the closed piece on purpose. It sits behind the gate and receives recipe text only. MongoDB keeps the household, the run, and “less cumin next time” so tomorrow’s propose is not a lecture.

Locally, the same repo talks to Ollama (gemma3:4b), Whisper, and optional TabPFN. Render uses hosted GEMMA_* so a judge on a phone can click without installing anything. I say that plainly rather than pretending the public URL is air-gapped.

Why Does Open Innovation Matter?

In this kitchen the sensitive data is not “inspiration.” It is who reacts to peanuts, what Amma bought before the rain, and what we will not ship to a closed meal API abroad.

Open-weight Gemma can plan on a machine we run. Validation stays in our repo. The Render demo is hosted so you can try it — the policy layer is still the TypeScript you can read. Swapping the planner is an env var; swapping the allergen rules is a pull request.

My Agent Session

Three public sessions on DEV, oldest first.

Demo video, tech voiceover, and DEV submission sync

House Pot — demo video, tech voiceover, and DEV submission sync
You

Prepare House Pot for Hacktoberfest Weekend submission: live demo on Render, DEV draft, and a judge-friendly demo video.

Agent

Expanded README/SUBMISSION with BRD traceability, plan→policy→deliver architecture, and honest tech tables tied to GET /api/health. Fixed Render propose latency (TABPFN_DISABLE), Mastra probe, and smoke-test run IDs for judges.

You

Record demo.mp4 locally with visible cursor and voice that explains each feature.

Agent

Added npm run demo:record: Playwright 1920×1080 capture, chapter voiceovers via ElevenLabs, ffmpeg mux. Scripts live under scripts/record-demo.mjs and scripts/lib/demo-voice.mjs.

You

Narration should cover which technology is used, where in the UI/API, and how it is used — Bangladesh male accent.

Agent

Rewrote tour chapters (Next.js, health strip, MongoDB profile, STT input, Gemma orchestrator, pantry-check policy, ElevenLabs gate, run history, recipe TTS). Default demo voice: Aashish (South Asian male). Re-recorded public/demo.mp4 (~5 min).

You

Update the DEV submission draft and agent session embed.

Session 422 — 7 curated turns.

Full HF26 build log (demo, ML, submission sync)

House Pot — full HF26 build log (demo, ML, submission sync)
You

Prepare House Pot for Hacktoberfest Weekend: live Render demo, DEV submission, and a judge-friendly walkthrough.

Agent

Expanded README/SUBMISSION with BRD traceability and plan→policy→deliver architecture. Wired honest integration probes to GET /api/health. Tuned Render (TABPFN_DISABLE, Mastra probe) and smoke scripts for production.

You

Improve the DEV draft submission and keep it unpublished until I review.

Agent

Polished SUBMISSION.md for judge skimmability (demo steps, safety narrative, prize categories). Created unpublished DEV draft with #hf26challenge tags via DevRelay.

You

Embed My Agent Session in the post and explain the section.

Agent

Saved curated agent session 422 on DEV and added {% agent_session 422 %} to SUBMISSION. Separated the Amma closing quote from the technical session embed.

You

Record demo.mp4 with cursor, chapter voiceover (technology / where / how), Bangladesh male accent.

Agent

Added npm run demo:record (Playwright 1920×1080, ElevenLabs TOUR_CHAPTERS, ffmpeg mux). Re-recorded ~6 min public/demo.mp4 with integrations chapter and live recipe narration on Render.

You

Fix CI lint and keep main green.

Agent

Fixed IntegrationsPanel react-hooks/set-state-in-effect with useSyncExternalStore for local Temporal link. Removed unused vars in tabpfn/predict.ts. CI passed on main.

You

Add ML features: multi-propose, training export, pantry extract, semantic allergen hints.

Agent

Shipped propose-rank (PROPOSE_CANDIDATES), meal_fit_training rows + export:training, Gemma pantry-extract on transcribe, allergen-semantics hints (non-blocking). Updated orchestrator and README.

You

/history/all is slow on live MongoDB — fix it.

Agent

Batched household lookups, Mongo projection for list view, summarizeRunForList, short cache on /api/pots. AllPotHistoryPage shows Refreshing only when rows already exist.

You

Remove DigitalOcean from footer and integrations — I deploy on Render only.

Agent

Removed .do/app.yaml, DigitalOcean probe card, and footer credit. Updated demo voice script and docs for 17 sponsor integrations.

You

Simplify demo screenshots to one integrations image; build voiced demo.mp4 from five PNGs.

Agent

capture-demo-screenshots.mjs → 5 PNGs. build-demo-from-screenshots.mjs + SLIDESHOW_CHAPTERS ElevenLabs narration (~50s). Fixed ffmpeg segment timing so integrations slide stays on screen with matching voice.

You

Add GitHub community standards and sync README/SUBMISSION.

Agent

Added LICENSE (MIT), CODE_OF_CONDUCT, CONTRIBUTING, .github/SECURITY.md. README demo table documents screenshots → from-screenshots workflow.

You

Update my full agent session for the DEV submission embed.

Agent

Publishing this expanded curated session on DEV. Judges: https://house-pot.onrender.com/ · https://github.com/smriad/house-pot · voiced demo.mp4 from live screenshots.

Session 432 — 22 curated turns.

Submission polish, shrimp-slip gate, eggplant curry demo

House Pot — submission polish, shrimp-slip gate, eggplant curry demo
You

Rewrite the DEV submission around Amma’s quote and a real Sunday-market dinner — eggplant curry, not generic AI chef copy.

Agent

Restructured SUBMISSION and the live DEV post: Amma quote up front, three-job story (Gemma → pantry-check → ElevenLabs), 60-second judge path. Featured live narrated run Mild Eggplant and Potato Comfort Curry (run 8073cda3-1865-4542-871b-5cba6afc9b4d). GitHub embed + prize order emphasizing ElevenLabs gate.

You

Judges need to see allergy enforcement without another LLM call — shrimp on the same card should block approve.

Agent

Added slipIngredient in pantry-check.ts and “If shrimp slipped in (no model call)” in HousePotApp — mutates the displayed recipe client-side, re-runs PantryReview, keeps Approve off. Unit tests for shrimp → shellfish and slip path. No Gemma or ElevenLabs on that button.

You

Update demo.mp4 and screenshots for the new story: kitchen, Sunday pantry, approved card with gate, integrations, history.

Agent

Refreshed demo-screenshots (6 PNGs including 03-approved-recipe.png). Voiced slideshow via demo:screenshots + demo:from-screenshots (SLIDESHOW_CHAPTERS). README demo table documents the six-slide order and shrimp-slip judge step.

You

Add a third agent session on DEV so the build log covers everything after session 432.

Agent

Publishing this curated session (433) on DEV alongside 422 (early demo tour) and 432 (full HF26 build). Embed all three under My Agent Session on the submission post. Live: https://house-pot.onrender.com/ · repo https://github.com/smriad/house-pot.

Session 443 — 8 curated turns (Amma-led post, slipIngredient demo, six-slide demo.mp4). Make Public on DEV if the embed is blank.

Prize Categories

  • Best Use of ElevenLabs — TTS only after approve; pantry audio never sent; the live “If shrimp slipped in” path never reaches TTS.
  • Best Use of Gemma — one pantry-constrained JSON recipe, optional critic, never the safety authority.
  • Best Use of MongoDB Atlas — household + runs + cook feedback (meal_fit_training) on the live URL.
  • Best Use of Render — https://house-pot.onrender.com/ from render.yaml.

Hacktoberfest Weekend 2026 — Build for a Friend.

Top comments (0)