CookIt - From Saved to Savored 🍳
Inspiration
The inspiration for CookIt came from a real problem experienced by millions of home cooks: the gap between recipe inspiration and actual cooking. We've all been there - saving countless TikTok videos, bookmarking Instagram posts, and screenshotting recipes, only to never actually cook them.
When we saw Eitan Bernath's brief for RevenueCat Shipyard 2026, his vision resonated immediately: "If I can tell some app all the cookbooks I have in my collection... I have chicken, broccoli... are there recipes in my cookbooks that have that?"
This wasn't just another recipe app idea - it was solving three critical pain points:
- 📚 Digital cookbook management (a feature NO competitor has)
- 🥘 Ingredient-based recipe discovery from your own collection
- 📱 Social media recipe extraction from creators like Eitan
The challenge was clear: build an app that bridges the inspiration-to-execution gap for Eitan's 12+ million followers and home cooks everywhere.
What I Learned
Building CookIt taught me invaluable lessons about AI integration, mobile development, and user experience design:
Technical Deep Dives
- OpenAI API mastery: Implemented 4 different AI parsing methods (URL, video, text, image)
- React Native optimization: Built responsive components that work seamlessly across iOS/Android
- State management: Created efficient Zustand stores for complex cookbook/recipe relationships
- RevenueCat integration: Implemented subscription tiers with precise entitlement management
AI Challenges & Solutions
The most fascinating learning was prompt engineering for recipe extraction. Getting consistent JSON output from chaotic social media content required:
// Example: Handling YouTube transcript + metadata hybrid approach
const videoPrompt = `Extract recipe information from this ${platform} video using ALL available data sources.
${transcriptContent}
${pageMetadata}
Based on what was SPOKEN in the video transcript and page information:
1. Extract exact recipe title
2. List ALL ingredients with quantities
3. Create step-by-step instructions
4. Estimate servings and cook times`;
UX Insights
The "What Can I Cook?" feature required sophisticated fuzzy matching algorithms: $$\text{Match Score} = \frac{\text{Available Ingredients}}{\text{Total Required}} \times 100$$
Where perfect matches (100%) show recipes you can cook immediately, while partial matches suggest missing ingredients.
How I Built It
🏗️ Architecture Overview
Frontend: React Native + Expo for cross-platform development
AI Engine: OpenAI GPT-4-turbo for recipe intelligence
Backend: Firebase for real-time data + authentication
Monetization: RevenueCat for subscription management
Storage: AsyncStorage for offline capabilities
🧠 AI Implementation Details
The AI system handles 4 distinct input types:
Website/URL Import 🌐
// Fetch webpage content, strip HTML, extract recipe const pageContent = await this.fetchWebpageContent(url); const recipe = await this.makeOpenAIRequest(pageContent);Video Import 📹 (TikTok, YouTube, Instagram)
// Hybrid approach: transcript + metadata const transcript = await this.getYouTubeTranscript(url); const pageContent = await this.fetchWebpageContent(url); const combinedContent = `${transcript}\n${pageContent}`;Image Recognition 📸 (GPT-4 Vision)
// Base64 encode image, use Vision API const base64Image = await FileSystem.readAsStringAsync(imageUri); const response = await openai.vision.analyze(base64Image);Natural Language Description ✍️
// Free-form text to structured recipe const recipe = await this.parseRecipeFromDescription(description);
🎯 Unique Features Implementation
Cookbook Library Management ⭐
interface Cookbook {
id: string;
title: string;
author: string;
coverImageUri?: string;
recipeCount: number;
notes?: string;
createdAt: Date;
}
Intelligent Ingredient Matching
const fuzzyMatch = (available: string[], required: string[]) => {
return required.filter(ingredient =>
available.some(avail =>
levenshtein(ingredient.toLowerCase(), avail.toLowerCase()) <= 2
)
);
};
🏪 Monetization Strategy
// Free Tier: 5 recipes, 3 cookbooks
// Premium: Unlimited recipes, unlimited cookbooks, photo import
const FREE_LIMITS = {
recipes: 5,
cookbooks: 3,
photoImport: false
};
Challenges I Faced
1. AI Consistency Challenge 🤖
Problem: OpenAI responses varied in format, breaking JSON parsing Solution: Implemented robust prompt engineering + multi-step validation
// Remove markdown, validate JSON, add fallbacks
responseText = responseText.replace(/```json\n?/g, '').replace(/```\n?/g, '');
const parsedResponse = JSON.parse(responseText);
2. Cross-Platform Responsive Design 📱
Problem: Layouts breaking on different screen sizes Solution: Built custom responsive utility functions
export const getResponsivePadding = (width: number) => {
if (width < 768) return 16;
if (width < 1024) return 24;
return 32;
};
3. Video Transcript Extraction 📺
Problem: YouTube transcripts not always available Solution: Hybrid approach combining multiple data sources
// Graceful fallback: transcript + page metadata + description
if (!transcript) {
recipeContent += `\n--- VIDEO PAGE INFO ---\n${pageContent}`;
}
4. State Management Complexity 🔄
Problem: Complex relationships between recipes, cookbooks, and users Solution: Zustand stores with computed values and persistence
interface RecipeStore {
recipes: Recipe[];
addRecipe: (recipe: Recipe) => void;
linkToCookbook: (recipeId: string, cookbookId: string) => void;
// ... 15+ methods for complete recipe lifecycle
}
Technical Achievements
- ✅ Zero compilation errors - Production ready
- ✅ 4 AI input methods - Most comprehensive recipe import system
- ✅ Fuzzy ingredient matching - Advanced algorithm for "What Can I Cook?"
- ✅ Voice cooking mode - Hands-free cooking experience
- ✅ RevenueCat integration - Complete subscription system
- ✅ Offline capabilities - AsyncStorage for core functionality
- ✅ Cross-platform - Single codebase for iOS/Android
Built With
Core Technologies
- React Native 0.73+ - Cross-platform mobile framework
- Expo SDK 50+ - Development platform and tooling
- TypeScript - Type-safe development
- Zustand - Lightweight state management
AI & APIs
- OpenAI GPT-4-turbo - Recipe intelligence and extraction
- GPT-4 Vision - Image-to-recipe conversion
- YouTube Transcript API - Video content extraction
Backend & Services
- Firebase - Authentication, real-time database, storage
- RevenueCat - Subscription management and analytics
- AsyncStorage - Local data persistence
UI/UX Libraries
- React Native Safe Area Context - Screen optimization
- Expo Image Picker - Photo/camera integration
- React Native Gesture Handler - Touch interactions
- React Native Reanimated - Smooth animations
Development Tools
- Expo CLI - Development workflow
- Metro Bundler - JavaScript bundling
- Flipper - Debugging and inspection
- EAS Build - Cloud building service
Try It Out
📱 Mobile App - React Native app with full feature set
🧑💻 Source Code - Complete TypeScript implementation
Demo Highlights:
- 📚 Cookbook Library Management - Unique feature no competitor has
- 🥘 "What Can I Cook?" - Ingredient matching with your cookbooks
- 📱 Recipe Import - From TikTok, YouTube, websites, and photos
Built for RevenueCat Shipyard 2026
Target Creator: Eitan Bernath (12M+ followers)
Solving real problems for food creators and home cooks worldwide 🍳
Built With
- developmenttools
- firebase
- openai
- reactnative
- revenuecat
Log in or sign up for Devpost to join the conversation.