This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
What I Built
I built Sassy Chef as a tiny local meal planner that does the morning brainwork I keep skipping.
Every day the same loop: what do I cook, what am I missing from the fridge, do I need to go buy something. I usually lose that fight and order food. This week’s theme is literally “reward laziness,” so I made the thing that should have existed already:
- One command in the morning
- Local Gemma 3 (
gemma3:4bvia Ollama) plans breakfast → lunch → dinner - It looks at what’s already in my pantry JSON before inventing a shopping list
- It dumps a markdown plan + a 1–2 page PDF I can print and take to the kitchen / store
- Personality is a sassy chef that roasts my procrastination, not my life choices
The lazy trick I’m happiest about: the shopping list is assumed bought after plan. I don’t have to check boxes into a CLI every evening. If I actually skipped spinach, that’s the only day I type anything:
python -m sassy_chef missed spinach
That pulls it out of the pantry and parks it for tomorrow’s list. Normal days = zero extra work. That felt more “sloth” than a fancy UI.
Demo
Code
mohamedation
/
sassy-chef
Local AI that plans your day of cooking so you don't have to think before coffee.
Sassy Chef
Local AI that plans your day of cooking so you don't have to think before coffee.
Every morning it writes breakfast → shopping list → lunch → dinner, keeps a rolling pantry + shopping list on disk, and dumps everything as markdown you can paste into email, Google Keep, or Tasks.
Built for Hacktoberfest 2026 Week 3 — Slow and Steady: open-weight AI that rewards laziness. Runs entirely offline with Gemma 3 via Ollama (default gemma3:4b).
Why open / local
- Your fridge and habits never leave your machine
- No API bill for a daily habit
- Swap models in one config line (
gemma3:4b→gemma3:12b, etc.) - Works when the internet doesn't
Requirements
- Python 3.11+
- Ollama running locally
- A pulled model (default Gemma):
ollama serve # if not already running
ollama pull gemma3:4b
PDF day sheets need one package (fpdf2). The meal planner…
ollama pull gemma3:4b
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt # only fpdf2 for the PDF sheet
python -m sassy_chef doctor
python -m sassy_chef plan
# open output/today-day.pdf
Stack on purpose: Python stdlib + Ollama HTTP + optional fpdf2. No web app, no cloud key, no “agent framework” for a problem that is one JSON chat and a JSON file.
How I Built It
The loop
pantry.json + missed leftovers + recent meals
→ Ollama chat (gemma3:4b, format=json, sassy system prompt)
→ breakfast / lunch / dinner + shopping_to_buy_today
→ write cooking.md + shopping.md + day.pdf
→ assume list bought → pantry updated, shopping cleared
→ (only if needed) missed <item>
Gemma does the creative part: titles, steps, “what am I missing,” the roast. Python owns the boring part: files, PDF layout, “did you actually buy it or are we lying to tomorrow.”
Design choices that mattered
-
Optimistic shopping. First version had a
boughtcommand. That’s daily chores. Flipped it: assume success,missedonly on failure. Fits the theme harder than another checkbox UI. - Printable PDF. Markdown is great for email/Keep. Standing in a kitchen I want one A4 page with checkboxes, not three files and a phone.
- Pantry is a JSON file. Deliberately dumb. Easy to edit by hand when the model’s quantity guesses are wrong.
- Sassy, not mean. Prompt rules: roast laziness, leave bodies/culture alone. The model still occasionally invents “Rice and Chicken (Almost)” when there’s no chicken, which is why the prompt now says: if it’s in the title, it has to be in pantry or on the shopping list.
Why Gemma / Ollama
I already run Ollama. gemma3:4b is small enough for a morning habit and good enough at structured JSON if you ask clearly and validate the three meal slots. Config is one line if I want gemma3:12b later. Same code path.
Why Does Open Innovation Matter?
Privacy. My fridge contents and “I skipped spinach again” habits are not a product telemetry event. They stay in data/pantry.json on disk.
Offline. Breakfast planning should not fail because the API is rate-limited. Laptop + Ollama is enough.
Cost. A daily meal plan against a paid API is a subscription I would cancel in week two. Local weights = free after the hardware I already own.
Swapability. Open weights mean I can change the model without rewriting the app or begging a vendor. That matters more for a habit tool than for a one-off demo.
Closed APIs are fine when you need the absolute best model and you’re okay shipping your life to someone else’s GPU. For “what do I cook from this sad pantry,” open + local won on privacy and “set it once.”
Prize Categories
- Overall
-
Best Use of Gemma daily plans run through Gemma via Ollama (
gemma3:4bdefault, model override inconfig.toml/--model)
Limits
- Small models still hallucinate a missing ingredient into a meal title if you don’t constrain them
- Pantry quantities are approximate (“4 eggs left”) so not a real inventory system with barcodes
- PDF is English / Latin-friendly via DejaVu when available; other scripts may need a font tweak
- No nutrition tracking, no fancy UI for this demo
- Cron is on you; the tool doesn’t install a daemon
If you also open the fridge, stare for thirty seconds, and then order something, this might save you that stare.
Top comments (0)