🍽️ Inspiration
Chef’s Table was born from a simple observation:
Beautiful recipe content lives on the internet…
but real cooking happens in messy kitchens with limited time and ingredients.
We wanted to bridge the gap between aspirational food discovery and practical home cooking by creating a product that feels:
✨ Curated like a chef’s notebook
🧠 Intelligent like a kitchen assistant
🏡 Useful in everyday life
At its core, Chef’s Table answers the timeless question:
“What can I cook with what I already have?”
🚀 What It Does
Chef’s Table is an AI-powered culinary workspace that helps users move seamlessly from inspiration → planning → cooking.
✨ Core Capabilities
🧠 AI-Magic Importer
The AI-Magic Importer is the heart of Chef’s Table.
It converts messy, real-world content into clean, structured recipes — automatically.
📥 Supported Inputs
Recipe URLs (blogs, chef websites)
Raw copied text
Images (handwritten notes, screenshots)
PDFs (cookbooks, shared documents)
⚙️ How It Works
Content is uploaded or shared into the app.
A Cloud Function triggers AI parsing (Gemini).
The system extracts semantic structure:
- Ingredients
- Quantities
- Steps
- Timings
- Tools
- A validation layer normalizes everything into a consistent schema.
RawContent→AI ParsingStructuredRecipe→ValidationCanonicalModelRawContentAI ParsingStructuredRecipeValidationCanonicalModel
This ensures every imported recipe behaves like a native Chef’s Table recipe, regardless of source quality.
✅ Why This Matters
Most recipe apps store links.
Chef’s Table understands recipes.
🧺 Fridge Scraping (Pantry Intelligence)
The Fridge Scraping feature helps users cook from what they already own — reducing waste and decision fatigue.
📷 Input Methods
Manual ingredient entry
Quick-select pantry items
(Future-ready) Image-based fridge capture
🧠 Ingredient Matching Engine
The system evaluates recipe feasibility using a pantry-to-recipe similarity function:
MatchScore=∣Ingredientsavailable∩Ingredientsrequired∣∣Ingredientsrequired∣MatchScore=∣Ingredientsrequired∣∣Ingredientsavailable∩Ingredientsrequired∣
Recipes are ranked by:
Ingredient coverage
Substitution flexibility
Preparation complexity
Recommendation=f(MatchScore, Simplicity, UserPreference)Recommendation=f(MatchScore, Simplicity, UserPreference)
🍳 Result
Instead of asking:
“What should I cook?”
Users see:
“Here’s what you can cook right now.”
🏗️ How We Built It
The system combines a cross-platform Flutter client with a server-side AI processing pipeline.
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | Flutter (iOS + Android) |
| Backend | Firebase (Auth, Firestore, Storage, Functions) |
| Server Logic | TypeScript Cloud Functions |
| AI Processing | Gemini via Cloud Functions |
| Monetization | RevenueCat |
| Offline Support | Local caching + sync reconciliation |
🔄 Architecture Flow
User Input → Upload / Paste / Scan
↓
Cloud Function Triggered
↓
AI Parsing + Normalization (Gemini)
↓
Structured Recipe Model Stored in Firestore
↓
Client Sync + Local Cache
↓
Offline-Friendly Cooking Experience
📐 Data Normalization Concept
AI-generated content can vary widely in format, so every imported recipe is passed through a Normalization Layerbefore being saved.
Canonical Recipe Model
Each recipe is transformed into a strict internal structure:
Recipe {
title: string,
ingredients: Ingredient[],
steps: Step[],
time: Duration,
servings: number,
metadata: {
source,
confidenceScore,
cuisine,
tags[]
}
}
This guarantees that recipes imported from a blog, PDF, or image behave identically inside the app.
Recommendation Logic (Human-Friendly Representation)
Instead of relying on a single signal, recipe suggestions are ranked using a weighted blend of:
| Signal | Meaning | Why It Matters |
|---|---|---|
| Pantry Match | How many required ingredients are already available | Encourages cooking without extra shopping |
| User Preference | Learned cuisine/style affinity | Personalization |
| Simplicity | Effort required (steps, tools, time) | Practical for daily cooking |
Conceptually:
Recommendation Score =
Pantry Compatibility
+ Personal Preference Alignment
+ Ease of Preparation
⚙️ Challenges We Ran Into
1️⃣ AI Output Is Flexible — Cooking Data Must Be Rigid
AI may interpret the same ingredient differently:
“2 tomatoes”
“Two ripe Roma tomatoes”
“Tomatoes (approx. 200g)”
To prevent inconsistency, we enforce a measurement validation step:
Extract → Standardize Units → Validate → Store
If standardization fails, the system falls back to assisted parsing rather than saving unreliable data.
2️⃣ Multi-Source Import Requires a Staged Pipeline
Different formats require different handling strategies:
| Source Type | Processing Strategy |
|---|---|
| URL | HTML parsing + semantic cleanup |
| Image | OCR → structure detection |
| Layout-aware extraction | |
| Raw Text | Direct AI structuring |
Pipeline Overview
Input → Format Detection → AI Extraction → Schema Validation → Canonical Recipe
3️⃣ Making Async AI Feel Instant
AI processing runs in the cloud and can take several seconds.
To avoid blocking the user experience, we designed a progressive UX model:
User Imports Recipe
↓
Instant Placeholder Appears
↓
Background Processing Completes
↓
Structured Recipe Replaces Placeholder
This keeps the app feeling responsive even during heavy parsing.
🏆 Accomplishments We’re Proud Of
✅ A complete multi-source recipe ingestion system
✅ End-to-end AI workflow from raw content → structured cooking data
✅ A polished, chef-centric UI that feels editorial rather than utilitarian
✅ Cohesive flows across:
Discovery → Save → Plan → Shop → Cook
📚 What We Learned
🔐 Strong Data Models Are Essential When Using AI
Without schema enforcement, AI output entropy grows:
[
Entropy_{recipe} \propto Lack\ of\ validation
]
Resilient models reduce ambiguity and improve UX consistency.
🔁 Always Design Fallback Paths
Every AI step must have:
Deterministic validation
Retry logic
Graceful degradation
⚡ Lightweight Tooling Enables Faster Iteration
Over-engineering slows experimentation.
We optimized for deployability over theoretical purity.
🔮 What’s Next for Chef’s Table
🗣️ Recipe Narration Screen (Voice-Guided Cooking)
We are introducing a hands-free cooking mode designed for real kitchen environments.
🎧 Features
Step-by-step narrated instructions
Voice command navigation:
- “Next” → Move to next step
- “Repeat” → Replay current step
- “Previous” → Go back
Auto-scroll synchronized with narration
Screen stays awake during cooking mode
🧠 Interaction Model
UserVoice→IntentRecognitionCommand∈{Next,Repeat,Previous}→StepNavigatorUserVoiceIntentRecognitionCommand∈{Next,Repeat,Previous}→StepNavigator
🍽️ Goal
Turn recipes into a guided cooking experience, not something users must constantly touch with messy hands.
Additional Enhancements in Progress
Smarter ingredient substitution modeling
Improved AI extraction confidence scoring
Expanded offline-first synchronization
Personalized discovery based on cooking history
💡 Vision
Chef’s Table is designed to become more than a place to store recipes — it aims to be an intelligent cooking companionthat understands both content and context.
Today, food inspiration is abundant but fragmented, while real-life cooking is constrained by time, ingredients, and attention. Chef’s Table brings these worlds together by combining AI understanding, pantry awareness, and guided execution into a single seamless experience.
Inspiration+Ingredients+Intelligence→Confident CookingInspiration+Ingredients+Intelligence→Confident Cooking
Our vision is to create a system where:
Recipes are not just saved — they are understood and structured.
Ingredients are not forgotten — they are activated into possibilities.
Cooking is not a static read-through — it becomes a hands-free, narrated flow.
Technology fades into the background, allowing users to focus on the act of cooking itself.
Ultimately, Chef’s Table aspires to transform everyday meals into intentional experiences by helping people cook more often, waste less, and move effortlessly from “What do I make?” to “Let’s start cooking.”
Built With
- cloudfunctions
- dart
- firebase
- flutter
- gemini
- node.js
- typescript
Log in or sign up for Devpost to join the conversation.