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:
- Gemma proposes one JSON recipe from tonight’s pantry and the household allergy list.
-
pantry-check.tsmarks in-kitchen vs missing and blocks Approve on allergens. Shrimp counts as shellfish. The model does not get a vote. - 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)
Code
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.
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
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
- Features
- Tech stack
- Getting started
- Architecture
- Project structure
- HTTP API
- Deployment
- Contributing
- License
- Acknowledgements
- Author
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
Session 422 — 7 curated turns.
Full HF26 build log (demo, ML, submission sync)
Session 432 — 22 curated turns.
Submission polish, shrimp-slip gate, eggplant curry demo
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)