AI-powered recipe generator that transforms ingredients into delicious recipes using Google Gemini AI. Deployed on Google Cloud Run at chomptron.com.
Enter ingredients you have in your kitchen, and Chomptron generates creative, practical recipes complete with measurements, instructions, cooking time, and serving sizes.
npm install
export GEMINI_API_KEY="your-api-key-here"
export GEMINI_MODEL="gemini-2.5-flash-lite" # Optional, defaults to gemini-2.5-flash-lite
npm startVisit http://localhost:8080
Get API key: https://makersuite.google.com/app/apikey
GEMINI_API_KEY(required) - Your Google Gemini API keyGEMINI_MODEL(optional) - Model to use, defaults togemini-2.5-flash-litePORT(optional) - Server port, defaults to 8080
The Gemini model can be configured via the GEMINI_MODEL environment variable:
Recommended Models (as of December 2025):
gemini-2.5-flash-lite(default) - Best free tier limits: 15 RPM, 1,000 RPDgemini-2.5-flash- 10 RPM, 250 RPDgemini-2.0-flash- 10 RPM, 200 RPD (β οΈ unstable quota, often showslimit: 0)gemini-1.5-flash- Legacy model, may have better limits than 2.0
December 2025 Quota Shift:
Google overhauled free tier quotas in December 2025:
gemini-2.0-flashwas removed from fully unauthenticated free tier- Many accounts see
limit: 0errors for newer models without billing enabled - Free tier quotas don't automatically reset monthly
Fixing "Limit: 0" Errors:
If you're seeing quota errors with limit: 0:
- Switch to
gemini-2.5-flash-lite- Best free tier model currently available - Enable billing (Pay-As-You-Go) - Linking a credit card (even if you don't spend) moves you from "Limited Free" to "Tier 1" and unlocks promised free quotas
- Check your region - EEA, UK, and Switzerland have restricted free tier access
- Monitor usage - Visit
/api/usageendpoint or https://ai.dev/usage
Free Tier Limits (as of Dec 2025):
| Model | Requests/Minute | Requests/Day | Best For |
|---|---|---|---|
| gemini-2.5-flash-lite | 15 | 1,000 | High-volume apps |
| gemini-2.5-flash | 10 | 250 | General use |
| gemini-2.0-flash | 10 | 200 | Legacy (unstable) |
| gemini-2.5-pro | 2 | 50 | Complex reasoning |
npm testTests validate:
- Modular File Structure: Verification of external
styles.cssandapp.jslinking - CI/CD & DevOps: Docker and Cloud Build configurations
- API Integrity: Health check endpoints (
/health,/ready) and recipe generation - Feature Robustness: Recipe history, scaling logic, and favorites (70+ comprehensive tests)
For interactive testing of the Recipe History & Favorites feature:
npm start
# Visit http://localhost:8080/test-history.htmlThe browser test suite includes:
- localStorage persistence testing
- Recipe save/load operations
- Favorite toggle functionality
- Recipe name extraction
- 100-recipe limit validation
- Data structure validation
- Automatic backup/restore of existing data
GET /health- Liveness check, returns service statusGET /ready- Readiness check, verifies AI configuration and shows current modelGET /api/usage- Usage statistics (total requests, quota errors, model info)POST /api/generate-recipe- Main recipe generation endpoint- Request Body:
{ "ingredients": "chicken, tomatoes, garlic", "dietaryPreferences": { "vegan": false, "vegetarian": false, "glutenFree": false, "dairyFree": false, "nutFree": false, "shellfishFree": false, "eggFree": false, "soyFree": false } } - Response:
{ "success": true, "recipe": "**Recipe Name:** ...", "cached": false }
- Request Body:
Chomptron is built as a serverless application on Google Cloud Run for cost efficiency and automatic scaling.
Tech Stack:
- Backend: Node.js 22 + Express
- AI: Google Gemini (configurable model, defaults to gemini-2.5-flash-lite)
- Frontend: Modular Vanilla HTML/CSS/JavaScript (Clean separation of concerns)
- Storage: Browser localStorage for recipe history
- Platform: Google Cloud Run (serverless)
- CI/CD: Cloud Build
- Domain: chomptron.com
Why Serverless?
- Scales to zero when idle β $0 cost (vs. $5-50/month traditional hosting)
- Auto-scales from 0 to 1000+ instances based on traffic
- Zero maintenance - no servers to manage, patch, or configure
- Perfect for AI workloads - handles burst traffic and CPU-intensive recipe generation efficiently
Performance Optimizations:
- In-Memory Caching: Per-instance recipe cache (24-hour TTL, max 100 recipes)
- Structured Recipe Parsing: Extracts recipe components for better display and scaling
- Client-Side Rate Limiting: Prevents excessive API calls
- Smart Retry Logic: Handles quota errors gracefully with exponential backoff
- Enter your ingredients in the text area
- (Optional) Select dietary preferences/allergies
- Click "Generate Recipe β¨"
- View your structured recipe with:
- Recipe name and metadata
- Scaled ingredients list
- Step-by-step instructions
- Cooking tips
- Scale Servings: Use +/- buttons to adjust serving size (0.25x to 4x)
- Rate Recipes: Click stars to rate recipes (1-5 stars)
- Add Notes: Type personal notes in the notes field
- Favorite: Click the star button to favorite recipes
- Print: Click print button for print-friendly view
- Share: Click share button to generate shareable URL
- Click the π button (top-right) to open recipe history
- Search recipes by name, ingredients, or content
- Filter by favorites
- Export all recipes as JSON or text
- Click any recipe to reload it
- Click the π button (top-left) to toggle dark/light mode
- Preference is saved automatically
Health checks:
curl https://chomptron.com/health
curl https://chomptron.com/ready
curl https://chomptron.com/api/usage # View usage statisticsView logs:
# Recent logs
gcloud run logs read chomptron --region us-central1 --limit 50
# Live stream
gcloud run logs tail chomptron --region us-central1Console dashboards:
- β¨ AI-powered recipe generation using Google Gemini
- π³ Creative recipe names and instructions
- π Precise measurements and serving sizes
- β±οΈ Cooking time estimates (prep, cook, total time)
- π¨ Modern Visual Polish: Glassmorphism design with staggered entrance animations
- π Premium Typography: Outfit and Inter fonts for a contemporary feel
- β‘ Serverless, auto-scaling infrastructure on Google Cloud Run
- π Recipe history with localStorage persistence (up to 100 recipes)
- β Favorites system to mark and filter beloved recipes
- π Search and filter through saved recipes
- πΎ Export recipes to JSON or text format
- π Quick access to past recipes via sidebar panel
- π Add personal notes to each recipe
- β Rate recipes with 5-star rating system
- π₯ Dietary Preferences & Allergies: Vegan, Vegetarian, Gluten-Free, Dairy-Free, Nut-Free, Shellfish-Free, Egg-Free, Soy-Free
- π Recipe Scaling: Adjust serving sizes from 0.25x to 4x with automatic ingredient scaling
- π¨οΈ Print-Friendly View: Clean print layout optimized for printing recipes
- π Shareable URLs: Generate shareable links for recipes (Web Share API support)
- π Structured Recipe Format: Parsed display with organized sections:
- Recipe name
- Serving size and timing information
- Ingredients list
- Step-by-step instructions
- Cooking tips
- π¨ Dark/Light Mode: Toggle between themes with persistent preference
- πΎ Recipe Caching: In-memory cache reduces API calls for similar ingredient combinations
- π Smart Retry Logic: Automatic retry with exponential backoff for quota errors
- β‘ Rate Limiting: Client-side rate limiting prevents excessive API calls
- π Health monitoring and readiness checks
- π SEO optimized with meta tags, Open Graph, Twitter Cards, and structured data
- π± PWA support with manifest.json
- π€ robots.txt and sitemap.xml for search engine indexing
Recipes are stored in browser localStorage with the following structure:
{
"id": "timestamp",
"ingredients": "chicken, tomatoes, garlic",
"recipe": "Full recipe text...",
"recipeName": "Extracted recipe name",
"timestamp": "2025-01-01T00:00:00.000Z",
"favorite": false,
"rating": 0,
"notes": "",
"servingSize": 4,
"dietaryPreferences": {
"vegan": false,
"vegetarian": false,
"glutenFree": false,
"dairyFree": false,
"nutFree": false,
"shellfishFree": false,
"eggFree": false,
"soyFree": false
}
}The application uses in-memory caching on the server side:
- Cache Key: Normalized ingredients + dietary preferences
- TTL: 24 hours
- Max Size: 100 recipes per instance
- Scope: Per-instance (serverless instances are ephemeral)
- Benefits: Reduces API calls for similar requests hitting the same instance
Optimized for search engines and social sharing with meta tags, Open Graph, Twitter Cards, structured data (JSON-LD), sitemap, robots.txt, and PWA support.
This is a personal project, but suggestions and improvements are welcome!
MIT