Indecisive

AI-Powered Food Decision Engine (2025)

Indecisive app interface showing the complete user journey from menu scanning to personalized recommendations.

Project Overview

Choosing what to eat at a restaurant shouldn’t feel like an exam. Menus are overwhelming, time is short, and you rarely know what a dish actually looks like. Indecisive solves this problem by turning any messy restaurant menu into a fun, fast, and visual decision-making game.

Simply upload a photo of a menu, and Indecisive will parse all the dishes, generate clean images, and guide you through quick pairwise comparisons. At the end, you get a confident recommendation — “Here’s your perfect choice!” — plus backup options that match your taste and dietary preferences.

Indecisive is designed to make food decisions effortless, playful, and personalized. This is insipired by MenuGen project by Karpathy.

Key Features

  • Menu Upload & Parsing Take a photo of a restaurant menu; the app uses GPT-4o vision + structured outputs to extract dishes, prices, tags, and courses (Appetizer, Main, Dessert, Beverage, Extras).

  • Visual Dish Previews Each dish is paired with a photorealistic image generated by DALL·E, styled to blend seamlessly with the UI. Placeholders are shown while images generate in the background.

  • Pairwise Tournament Selection Dishes compete head-to-head in quick comparisons (Elo/Bradley–Terry model). Users just tap between two choices until a winner emerges.

  • Course-Aware Flow Decide separately for Appetizers, Mains, Desserts, and Beverages. Once you finish one, you’re prompted to pick another, building a full meal.

  • Personalized Profiles

    • Save your final picks by restaurant and dish
    • Track menu contributions you’ve uploaded
    • Set dietary preferences (Vegetarian, Vegan, Halal, Kosher, Gluten-free, etc.), which are automatically enforced during comparisons
    • Live “Taste Summary” generated by GPT-4o, giving playful insights into your food personality

Results Screen

See your winning dish with justification (“chosen over 7 alternatives”), suggested backups, and easy sharing.

Technical Details

Frontend

  • Next.js + React with App Router
  • TailwindCSS for styling
  • shadcn/ui components for polished cards, buttons, and modals

Backend

  • Next.js API routes with Prisma ORM
  • SQLite (local) or Postgres (cloud)
  • NextAuth (passwordless email login), with optional OAuth

Database Schema

  • Menu, Dish, Session, Comparison, User, UserPrefs, UserPick, Contribution
  • Enforces dish categorization by course and links picks back to users

LLM Integration

  • Parsing: GPT-4o with OpenAI Structured Outputs + Zod validation for strict JSON schema
  • Image Generation: DALL·E (gpt-image-1) with optimized PNG→WebP pipeline using Sharp, background jobs, and lazy loading in UI
  • Taste Summary: GPT-4o summarizing user picks + preferences into short, friendly prose and bullets
  • Candidate Ranking: Active selection loop powered by Elo/Bradley-Terry scoring to minimize comparisons while ensuring confidence

Deployment

  • Platform: Vercel (Next.js optimized, serverless)
  • Storage: Optimized dish images served from /public/images/generated, cached with immutable headers
  • Secrets: Managed with Vercel environment variables (OPENAI_API_KEY, AUTH_SECRET, etc.)
  • CI/CD: GitHub + Vercel integration for continuous deployment on push

Live Demo

🌐 Try Indecisive: https://indecisive-tau.vercel.app

Experience the full AI-powered food decision engine in action. Upload any restaurant menu and let Indecisive guide you to your perfect meal choice through an intuitive, visual comparison process.