About MediMenu

Inspiration

MediMenu started with a simple observation: for people with allergies, medication-food interactions, or strict dietary restrictions, eating out can feel unsafe and stressful.
Most menus are written for taste and marketing, not for medical clarity. Ingredients are often incomplete, hidden in sauces, or ambiguous.

At the same time, restaurants are under pressure to answer more detailed dietary questions, but most teams don’t have the time or tools to manually maintain allergen-safe, personalized guidance for every diner.

We wanted to build a bridge between both sides:

  • empower diners to make safer choices quickly,
  • and help restaurants offer better transparency without major operational overhead.

Problem Identification

1) Diner-side problem (B2C)

For diners with food constraints, the current experience has major gaps:

  • Menu language is often vague (“house sauce,” “chef special,” “seasonal mix”).
  • Risk depends on personal context (allergies, medications, diet), not generic labels.
  • Asking staff every time is inconsistent and time-consuming.
  • There’s no quick, standardized way to evaluate dish safety table-side.

In short, diners need a fast, personalized, confidence-building decision layer.

2) Restaurant-side problem (B2B)

Restaurants face a different but connected challenge:

  • Manual allergen tracking is tedious and easy to drift out of date.
  • Staff training and dietary Q&A are hard to keep consistent during peak hours.
  • Menu transparency is a trust issue, but implementation cost is high.
  • Most restaurants lack tooling to turn menu data into actionable safety insights.

In short, restaurants need a scalable way to digitize, review, and publish safer menu information.


What We Built

MediMenu is a dual-sided platform:

  • Restaurant flow (B2B):

    1. Create a restaurant with name + location.
    2. Upload a menu photo.
    3. AI extracts dishes and inferred ingredients.
    4. Restaurant reviews/edits ingredients, confirms allergens, marks cross-contact risk.
    5. Publish a QR code linked to the confirmed menu.
    6. View scan analytics (scan count + top flagged allergens).
  • Diner flow (B2C):

    1. Create a personal profile (allergies, medications, dietary restrictions).
    2. Scan the restaurant QR code.
    3. Get dish-level risk labels (OK / Caution / Avoid) with explanations.
    4. Mark dishes as “I ate this” to create a meal record.
    5. View meal history including restaurant name, restaurant location, dish, ingredients, and date.
    6. Download meal history as a formatted PDF report with dates and name of the restaurant, which can be used to track your dietary habits and share with doctor for diagnosis.

Technically, we used:

  • Frontend: React + Vite
  • Backend: FastAPI + SQLite
  • AI: OpenAI GPT-4o vision + structured outputs
  • QR flow: Restaurant-published confirmed menu + user profile re-evaluation

How It Works (Conceptually)

MediMenu evaluates food safety at the dish level, personalized to each individual user's profile.

Every dish on a menu is checked against what the user has told us about themselves — their allergies, medications, and dietary restrictions. Based on that check, each dish is assigned one of three risk labels: OK, Caution, or Avoid. A dish is marked Avoid if it contains a confirmed allergen or a serious dietary conflict. It is marked Caution if there is uncertainty, a possible cross-contact risk relevant to the user's allergies, or a minor dietary concern. Everything else is OK.

The overall Menu Safety Score is then derived by averaging across all dishes — dishes rated OK contribute fully to the score, Caution dishes contribute partially, and Avoid dishes contribute nothing. If any dishes carry a cross-contact risk that is specifically relevant to the user's allergies, a small additional penalty is applied.

MediMenu has two evaluation paths. In the QR scan flow, a confirmed restaurant menu is re-evaluated in real time against the user's profile — checking allergens, dietary restrictions, and cross-contact relevance entirely on the backend. In the image analysis flow, the user uploads a menu photo directly, and GPT-4o additionally checks for medication-food interactions, which requires reasoning about the full ingredient context.

The core principle in both paths is the same: safety is profile-dependent. The same dish can be perfectly safe for one person and dangerous for another. MediMenu makes that distinction explicit, for every dish, every scan.


Challenges We Faced

  • Vision output reliability: AI extraction can be noisy on real menu photos; we enforced schema-validated structured output with retry fallback.
  • Ambiguous ingredients: Many dishes imply ingredients that aren’t explicitly listed.
  • Cross-contact uncertainty: Kitchen contamination risk is hard to infer from text alone. We rely on explicit restaurant-side confirmation, and we only flag cross-contact as a risk when the user's allergen is actually present in at least one other dish on the menu — if the allergen isn't used anywhere in that kitchen, no cross-contact warning is shown.
  • UX clarity: We needed safety outputs that are actionable without overwhelming users.
  • Data usability: We added meal logging + downloadable PDF history to make safety insights persistent and useful over time.
  • End-to-end deployment: Coordinating frontend/backend environments, CORS, and routing in production required careful setup.

What We Learned

  • Building trust in safety products requires both technical accuracy and clear communication.
  • AI is most useful when paired with human review loops (restaurant confirmation/editing).
  • Product design for health-adjacent use cases must prioritize explainability over black-box outputs.
  • A two-sided architecture (diners + restaurants) creates stronger value than solving only one side.
  • Users value not just recommendations, but also traceable records of what they consumed.

Why This Matters

MediMenu is about making dining more inclusive, safer, and less stressful.
Our goal is to reduce the gap between “I hope this is safe” and “I know why this is safe for me.”

Share this project:

Updates