← Grande Fox Software

Menutee

Live site: menutee.app

Overview

Menutee is a mobile + web product that solves a real, daily problem for people with dietary restrictions: "I'm out, I'm hungry, where can I actually eat?" Instead of forcing users to read every menu line by line and guess what fits their diet, Menutee scores each dish on a restaurant's menu against the user's personal dietary profile (diabetes, low-carb, low-FODMAP, gluten-free, vegetarian, etc.) and shows a clear % match so they can pick a meal in seconds.

The product was born from a personal need — the founder is a Type 1 diabetic — and is being built as a serious data product, not a directory. Every restaurant is geo-located from OpenStreetMap, every menu is OCR'd or scraped, every dish is matched to a known recipe with macronutrient data, and every score is computed against the user's diet on the backend.

The catalogue currently covers two cities in two countries:

Bucharest, Romania
~1,300 restaurants with full cuisine-level type-matching live across map, list, and detail screens, and a Romanian dish catalogue built up over the Phase 1 pilot.
Rimini, Italy
Italian-cuisine catalogue with 105+ dish families, 56 CREA-grade recipes (sourced from the Italian Council for Agricultural Research's nutrition tables), 862+ Italian-language ingredient aliases, and a growing per-restaurant menu library covering Romagna traditional cuisine, pizzas, seafood, and piadinerie.

Both cities are live in production, and the per-cuisine catalogue architecture is designed to scale to new cities and regions without code changes.

Core features

Diet-fit scoring engine flagship
Every menu item is scored against the user's diet profile on the backend (never duplicated in the mobile app). The user-facing % match is purely a diet-fit metric — confidence in identifying the dish is handled internally and never blended into the visible score. This separation keeps the product honest: a 90% match means "this dish genuinely fits your diet 90%," not "we're 90% sure what this dish is."
Vision-LLM menu ingestion pipeline
A multi-stage backend pipeline ingests restaurant menus from PDFs, images, and websites: OCR and structuring via Google Gemini and DeepSeek, per-page diagnostics so one bad page doesn't kill an import, an admin draft + approval workflow before any menu goes live, a PDF trimming helper for menus with decorative cover or divider pages, and a bulk import CLI that runs against the live production container via AWS SSM with no rebuild required.
Dish matcher with multi-cuisine recipe database
Items are matched to a curated dish_families catalogue. Each family has recipes with full ingredient breakdowns and macronutrient data. Romanian dishes are a hand-curated catalogue built during the Bucharest pilot; Italian dishes draw on 56 CREA-grade recipes from the Italian Council for Agricultural Research, 21 per-pizza families (Diavola, Capricciosa, Marinara, Quattro Formaggi, Calzone, …), Romagna secondi, and Cappelletti/Strozzapreti pasta families. Multi-language aliases (Italian, Romanian, English) feed a confidence-weighted matcher that picks the right recipe variant mechanically.
Two-tier restaurant scoring (L1 + L2)
L1 cuisine match is derived from OSM/Overture tags and Google Places categories. L2 keyword scoring scrapes restaurant websites for menu-relevant keywords and scores type-fit per cuisine, live across all three card surfaces (discover sheet, map picker, detail screen).
Map-first discovery UX
The Flutter app uses two distinct data endpoints — a server-side supercluster /map endpoint for marker rendering and a /nearby endpoint for the list sheet — to keep map performance smooth at city scale. Tiles use a custom Voyager-Mediterranean style generated from a Python pipeline, with a colour palette tuned for a warm Mediterranean restaurant vibe rather than the generic OSM blue/grey.
Real-time location with battery awareness
Geolocator cadence and accuracy adapt to user state (idle vs. browsing vs. background) to balance map freshness against battery drain on the user's phone.
Multi-source restaurant data ingestion
Restaurant coordinates and metadata are pulled from multiple authoritative sources: OpenStreetMap via Overpass API (city-scale bulk imports), Overture Maps for richer cuisine tagging (Italian L1 enrichment uses bbox-scoped runs to focus on one city at a time), Kaggle CREA datasets for Italian nutrition and dish families (a 4-step proven seed playbook: stage → probe → seed → verify), and Google Places for high-precision geo (6+ decimal coordinates — restaurant pins must be accurate to the building, not the street).

Tech stack

Mobile
Flutter (Dart), shipped on Google Play Internal Testing; Apple Developer org registration in progress.
Backend
Node.js + Fastify 4 + TypeScript, better-sqlite3 with FTS5 full-text search, WebSocket-ready.
Hosting
AWS — EC2 (Docker, zero-downtime container rotation via SSM), S3 + CloudFront for the web and admin apps, Cognito for auth, Route 53 for DNS.
CI/CD
GitHub Actions auto-deploys backend, web, and admin on push to main.
AI
Google Gemini (vision + structuring), DeepSeek (structuring), Claude Code for development workflow.
Data sources
OpenStreetMap (Overpass), Overture Maps, Kaggle CREA Italian nutrition database, Google Places.
Admin tooling
Custom React/TypeScript admin app at admin.menutee.app for menu review and approval.
Observability
Prometheus metrics, structured logs.

What makes it interesting

Solo-built, production-grade
The entire stack — Flutter mobile app, Node/Fastify backend, React admin UI, marketing site, CI/CD, AWS infrastructure — is built and operated by one developer with AI-assisted workflows.
Domain-deep, not generic
Rather than "another restaurant app," Menutee owns the harder problem of structured dish identity and per-diet scoring, with real per-cuisine catalogues behind it.
Already multi-country
Live in two countries — Bucharest (Romania) and Rimini (Italy) — with a per-cuisine catalogue architecture that scales to new cuisines and regions without code changes. The Italian catalogue was bootstrapped from public CREA nutrition data in a single push, validating the playbook for future cuisines.

Status

In closed beta — live in Bucharest (Romania) and Rimini (Italy), shipped on Google Play Internal Testing with Apple Developer org registration in progress.