Your personal recipe collection. Store, organize, and discover delicious recipes by Chef Groq.
A modern, responsive recipe management application built with React. Browse recipes by category, search by name, adjust serving sizes dynamically, and keep track of your favorites!
- ๐ณ 15+ Curated Recipes - Diverse collection from Greek Salad to Sushi Rolls
- ๐ Smart Search - Find recipes by name instantly with real-time filtering
- ๐ท๏ธ Category Filters - Browse by Pasta, Seafood, Salads, Meat, Desserts, Mexican, Korean, Japanese
- โ๏ธ Dynamic Serving Adjustment - Scale ingredient amounts automatically based on servings
- โญ Favorites System - Mark and filter your favorite recipes
- ๐ฑ Fully Responsive - Seamless experience on desktop, tablet, and mobile
- ๐พ Persistent Storage - LocalStorage integration keeps your data between sessions
- ๐จ Beautiful UI - Clean, modern design with smooth animations
- โฟ Accessible - Built with WCAG accessibility guidelines
- ๐ Interactive Ingredients - Check off ingredients as you cook
- ๐ Nutrition Information - View nutritional data for each recipe
- ๐ก Cooking Tips - Expert tips included with every recipe
- ๐ SEO Optimized - Meta tags and structured data for better discoverability
Browse recipes by category with beautiful card layouts

Detailed instructions, ingredients with serving adjustments, and nutrition info

Full functionality on any device

- React 18.3 - Modern UI library with hooks
- Vite 5.0 - Lightning-fast build tool and dev server
- JavaScript ES6+ - Modern JavaScript features
- Tailwind CSS 3.4 - Utility-first CSS framework
- Custom CSS - Additional styling and animations
- React Context API - Global state management
- useImmerReducer - Immutable state updates with Immer
- LocalStorage API - Client-side data persistence
- Tippy.js - Elegant tooltips and popovers
- Custom Hooks - Reusable React logic
Before you begin, ensure you have:
- Node.js (v18.0.0 or higher)
- npm (v9.0.0 or higher) or yarn
git clone https://github.com/aymansoliman-dev/GroqRecipeBook.git
aymansoliman-dev GroqRecipeBooknpm installnpm run devNavigate to http://localhost:5173
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview
# Lint code
npm run lint- Browse all recipes on the home page
- Click category filters (Pasta, Seafood, Salads, etc.) to filter by cuisine
- Use the search bar to find specific recipes by name, cuisine, category, or even ingredient
- Click on "Cook Now" button in any recipe card to view full details
- Click "Cook Now" on any recipe card
- See complete ingredient list with amounts
- Read step-by-step instructions
- View nutrition information and cooking tips
- Click the โ button or press
Escapeto close
- Open any recipe detail page
- Find the "Adjust Servings" section
- Use - and + buttons to decrease or increase servings
- Watch ingredient amounts scale automatically
- Original serving count is shown for reference
- Click the โค๏ธ (heart) icon on any recipe card
- Toggle on/off to add/remove from favorites
- Click the "Favorites" filter to view only favorited recipes
- While viewing a recipe, check ingredient checkboxes as you gather them
- Track your progress while cooking
- Checkboxes reset when you reopen the recipe
aymansoliman-dev
GroqRecipeBook/
โ
โโโ public/
โ โโโ robots.txt # SEO crawler instructions
โ โโโ favicon files # App icons
โ
โโโ src/
โ โโโ assets/
โ โ โโโ asset.svg # Every svg icon used in the App
โ โ
โ โโโ components/
โ โ โโโ Advertisement.jsx # Recommending Chef Groq App
โ โ โโโ AIChefAssistant.jsx # Link to Chef Groq App
โ โ โโโ CategoryBrowser.jsx # Category filter buttons
โ โ โโโ Footer.jsx # App footer
โ โ โโโ Header.jsx # App header with branding
โ โ โโโ Logo.jsx # Reusable logo component
โ โ โโโ MainContent.jsx # Main content wrapper
โ โ โโโ NavigationBar.jsx # App navbar
โ โ โโโ RecipeCard.jsx # Individual recipe card
โ โ โโโ RecipePage.jsx # Full recipe detail modal
โ โ โโโ RecipesGrid.jsx # Recipe cards grid layout
โ โ โโโ SearchBar.jsx # Recipe search input
โ โ โโโ Stat.jsx # Reusable individual stat component
โ โ โโโ Stats.jsx # Stas of your recipes
โ โ
โ โโโ context/
โ โ โโโ RecipesProvider.jsx # Global state with Context + Reducer
โ โ
โ โโโ data/
โ โ โโโ state.js # Recipe database (15 recipes)
โ โ
โ โโโ App.css # App styles
โ โโโ App.jsx # Root component
โ โโโ main.jsx # App entry point
โ
โโโ .gitignore # Git ignore rules
โโโ index.html # HTML entry point with meta tags
โโโ vite.config.js # Vite configuration
โโโ package.json # Dependencies and scripts
โโโ LICENSE # MIT License
โโโ README.md # This file
The app uses React Context API with useImmerReducer for predictable, immutable state updates:
// Reducer actions
- viewed_recipe_page // Open recipe detail
- hid_recipe_page // Close recipe detail
- toggled_favorite // Toggle favorite status
- selected_category // Update category filter
- searched // Update search queryIngredients are structured as objects with precise measurements:
{
name: "all-purpose flour",
amount: 2,
unit: "cups"
}When servings are adjusted, amounts scale proportionally:
- Base: 2 servings, 2 cups flour
- Scaled to 4: 4 cups flour
- Scaled to 1: 1 cup flour
All state is automatically saved to browser localStorage:
- Recipes and their favorite status
- User preferences
- Filter and search state (optional)
Data persists across browser sessions and page refreshes.
- Semantic HTML elements (
<article>,<section>,<nav>) - ARIA labels for icon buttons
- Keyboard navigation support (Escape to close modals)
- Focus management
- Screen reader friendly
Each recipe contains:
{
id: 0,
name: "greek salad",
image: "https://...",
category: "salads",
cuisine: "greek",
difficultyLevel: "easy",
servings: 2,
ingredients: [
{ name: "cucumber", amount: 2, unit: "large" },
{ name: "salt", amount: null, unit: "to taste" }
],
description: "Fresh Mediterranean salad...",
prepTime: 8,
rating: 4,
instructions: ["Step 1...", "Step 2..."],
nutritionInfo: {
calories: 180,
protein: "6g",
carbs: "12g",
fat: "12g",
fiber: "3g"
},
tips: ["Tip 1...", "Tip 2..."],
isFavorite: false,
isSaved: false
}Contributions are welcome! Here's how you can help:
- Check if the bug is already reported in Issues
- Open a new issue with:
- Clear title and description
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
- Open an issue with the
enhancementlabel - Describe the feature and its benefits
- Discuss implementation approach
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Make your changes
- Commit with clear messages (
git commit -m 'Add some AmazingFeature') - Push to your branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow existing code formatting
- Use meaningful variable and function names
- Add comments for complex logic
- Ensure no console errors or warnings
Currently, there are no known issues! ๐
If you find a bug, please report it.
- Add recipe creation form
- Edit existing recipes in-app
- Delete recipes
- Recipe categories management
- Improved mobile navigation
- Export recipes as PDF
- Print-friendly recipe view
- Share recipes via link/QR code
- Recipe import from URL
- Shopping list generator from selected recipes
- Meal planning calendar
- Recipe notes and personal modifications
- User authentication (Firebase/Supabase)
- Cloud sync across devices
- Recipe ratings and reviews
- Community recipe sharing
- AI-powered recipe generation (Groq API integration)
- Image upload for custom recipes
- Video cooking instructions
- Voice-guided cooking mode
- Multi-language support (i18n)
- Dark mode toggle
- Advanced filtering (dietary restrictions, prep time, difficulty)
- Ingredient substitution suggestions
- Nutritional goals tracking
- Weekly meal prep planner
- Push your code to GitHub
- Visit vercel.com
- Import your repository
- Vercel auto-detects Vite configuration
- Click "Deploy"
# Build production files
npm run build
# The dist/ folder contains your production files
# Upload to any static hosting serviceThis project is licensed under the MIT License.
See the LICENSE file for details.
TL;DR: You can use, modify, and distribute this project freely. Just include the original license.
Ayman Soliman
- GitHub: @aymansoliman-dev
- LinkedIn: @aymansoliman-dev
- Email: aymansoliman.dev@gmail.com
- Frontend Mentor: @aymansoliman-dev
- X: a_soliman1783
- Recipe data curated and structured for demonstration purposes
- Food images from Pixels and Cloudinary
- Icons and UI inspiration from modern recipe applications
- Built as a learning project to master React state management patterns
- Special thanks to the React and Tailwind CSS communities
This project demonstrates:
- โ
React Hooks (
useState,useEffect,useContext,useReducer) - โ Context API for global state
- โ Immutable state updates with Immer
- โ Component composition patterns
- โ Conditional rendering
- โ List rendering and keys
- โ Form handling
- โ Event handling
- โ LocalStorage API
- โ Responsive design with Tailwind
- โ Accessibility best practices
Perfect for learning modern React development! ๐
Need help? Have questions?
- ๐ Documentation
- ๐ Issue Tracker
If you found this project helpful or interesting:
- โญ Star this repository
- ๐ Fork it and build your own version
- ๐ฃ Share it with others learning React
- ๐ Report bugs to help improve it
- ๐ก Suggest features you'd like to see
-
Replace placeholder URLs:
https://github.com/aymansoliman-dev/GroqRecipeBookโ Your actual repo URLhttps://aymansoliman-dev/GroqRecipeBook.vercel.appโ Your deployed app URLyour.email@example.comโ Your actual email@yourusernameโ Your GitHub username
-
Add screenshots:
- Create a
screenshots/folder - Add:
home.png,recipe-detail.png,mobile.png
- Create a
-
Create LICENSE file:
MIT License
Copyright (c) 2025 Ayman Soliman
[Full MIT license text]