MenuMaestro: A Local-First Menu Translator for Restaurant Owners — Built on Gemma 3
Submission for the Hacktoberfest Open-Source AI Challenge: Week 2 — Side Hustle
What I Built
MenuMaestro is a fully local, privacy-first menu translation and cultural adaptation tool for small restaurant owners.
You drop in your dish names — or a photo of your handwritten menu — and get back:
- Culturally adapted names in 12 languages (not word-for-word robot output)
- Appetising descriptions that make sense to the target audience
- Dietary flags — Vegan, Halal, Gluten-Free, and more — detected automatically
- Cultural notes for dishes that commonly confuse foreign guests
- A tagline for your restaurant in the target language
The whole thing runs on Gemma 3 via Ollama, on your laptop. Nothing leaves your machine.
GitHub: github.com/adibafna/menumaestro
The Problem
I have a local Indian restaurant near my college. The owner is brilliant at cooking. His menu is terrible at explaining itself to anyone who didn't grow up eating the food.
"Laal Maas" on a menu in a tourist area tells a first-time visitor nothing. Google Translate gives you "Red Meat." That's it. No context, no appetite, no allergy info. The owner was spending ₹2,000/month on a translation agency who gave him slightly better word-for-word output.
He needs:
- Something that explains why a dish is delicious — not just what it's called
- Dietary information (he gets asked about dairy, nuts, and halal constantly)
- Something that doesn't cost a subscription every time he updates his seasonal specials
MenuMaestro solves all three.
Demo
Input
Restaurant: Shree Rajputana Dhaba
Cuisine: Rajasthani
Target language: English (Tourist-Friendly)
Dishes:
Laal Maas
Dum Aloo
Makki ki Roti
Sarson ka Saag
Churma
Lassi
Output (Gemma 3, running locally)
✨ Suggested tagline: "Royal flavors of Rajasthan — slow-cooked, fire-kissed, unforgettable."
1. Laal Maas → Rajasthani Fire Lamb
A slow-braised lamb curry ignited with whole dried Mathania chillies — Rajasthan's answer to the world's most satisfying cold-night meal. The heat creeps up slowly; the depth lingers.
Dietary: Gluten-Free
💡 Despite the name meaning "red meat," this dish is defined not by the protein but by the intense Mathania chilli — a variety almost impossible to replicate outside the region.
2. Dum Aloo → Whole Baby Potatoes in Yoghurt Gravy
Petite potatoes simmered in a sealed pot with tangy yoghurt, warming whole spices, and a saffron finish — the dum (steam) technique creates a depth no stir-fry can match.
Dietary: Vegan Gluten-Free
💡 "Dum" literally means breath — the sealed-pot steaming technique is a Mughal-era method that transforms ordinary baby potatoes into something extraordinary.
3. Makki ki Roti → Rustic Maize Flatbread
Stone-ground yellow cornmeal pressed into thick flatbreads and cooked on an iron griddle — earthy, filling, and inseparable from Sarson ka Saag in Punjabi winter tradition.
Dietary: Vegan Gluten-Free
4. Churma → Rajasthani Festival Sweet
Coarsely ground wheat flour toasted in ghee, sweetened with raw jaggery and perfumed with cardamom — crumbly, rich, served at celebrations alongside dal baati.
Dietary: Vegetarian
💡 Churma is the sweet third of the iconic dal-baati-churma trio; ordering it alone tells the owner you're an adventurous tourist.
Architecture
┌──────────────┐ photo (optional) ┌─────────────────────┐
│ Gradio UI │──────────────────────▶│ Gemma 3 Vision │
│ (browser) │ │ (OCR — reads menu │
└──────┬───────┘ │ photo locally) │
│ dish names └──────────┬──────────┘
│◀──────────────────────────────────────────┘
▼
┌──────────────────────────────────────────────────────────┐
│ Gemma 3 Text (Ollama — 100% local, no API key needed) │
│ Structured JSON output: names · descriptions · flags │
└──────────────────────────┬───────────────────────────────┘
│
Rendered Markdown
+ Raw JSON export
Stack:
-
Model:
gemma3:4bvia Ollama — open-weight, Apache 2.0 - Framework: Gradio — open-source UI, runs in browser
- Language: Python 3.10+
- License: MIT
Why Open Innovation Matters Here
1. Cost makes the business model work
The restaurant owner I showed this to was paying ₹2,000/month (~\$24) for translation. MenuMaestro's running cost after setup: \$0/month. That's the difference between a tool a local business can actually afford and one they can't.
A cloud API at \$0.01 per dish × 200 dishes × 12 languages × monthly updates adds up fast. Gemma 3 on a laptop has zero marginal cost per run.
2. Seasonal menus stay private
Restaurants change their menus seasonally — sometimes daily. A chef's new signature dish is real intellectual property before it launches. Sending it to a cloud API before service opens is a genuine concern. Local inference removes that concern entirely.
3. The niche where general models genuinely underperform
I tested GPT-4o, Claude 3.5, and Gemma 3 on the same 10 Rajasthani dishes.
- GPT-4o translated "Churma" as "Sweet crumbled bread" — technically correct, commercially useless
- Claude 3.5 skipped cultural notes entirely on dishes it didn't recognise
- Gemma 3 with the right system prompt produced richer descriptions for regional Indian dishes than either — likely because its instruction-tuning included more regional food writing in Hindi-adjacent contexts
The system prompt is the real product here. Because we own the model and the prompt, we iterate for specific cuisines without paying per token for every experiment.
4. Model swap is one line
Swap to gemma3:12b, mistral, or any future Ollama model by changing two constants in app.py. No contract, no migration cost, no API key rotation.
First User
I handed a laptop running MenuMaestro to the owner of a local Rajasthani dhaba near my college.
He sat with it for 20 minutes. He translated his 18-dish menu into English and French. He found two dishes he'd never gotten a good English description for in five years of running the restaurant.
Would he pay? He asked if he could pay per menu update — "like a subscription, maybe ₹300 a month." That's \$3.60/month. Given the \$0 running cost after setup, that's effectively pure margin for anyone who packages this as a service.
What did he ask for next?
- Print-ready PDF output (his next printed menu goes to 1,000 tourists)
- QR-code generation for table menus
- A "formal dining" vs. "street food" tone toggle
All three are on the roadmap.
Running It
# Prerequisites: Python 3.10+, Ollama installed (https://ollama.com)
ollama pull gemma3:4b
git clone https://github.com/adibafna/menumaestro
cd menumaestro
py -m pip install -r requirements.txt
py app.py
# Open http://localhost:7860
Sample menus in demo_menus/ — indian_sample.txt and thai_sample.txt — work out of the box.
Links
- 📦 GitHub: github.com/adibafna/menumaestro
Built with Gemma 3 (open-weight, Google DeepMind) · Ollama (open-source inference runtime) · Gradio (open-source UI) · MIT License

Top comments (0)