A modern, full-stack recipe application built with React Native (Expo) and Node.js, featuring user authentication, recipe search, favorites management, and a beautiful mobile-first interface.
- Recipe Discovery: Browse recipes by categories with beautiful cards and featured recipes
- Advanced Search: Search recipes by name or ingredients with debounced search
- Favorites System: Save and manage your favorite recipes with persistent storage
- User Authentication: Secure authentication using Clerk
- Recipe Details: View comprehensive recipe information including ingredients and instructions
- Cross-platform: iOS, Android, and Web support
- Real-time Updates: Pull-to-refresh functionality
- Responsive Design: Optimized for various screen sizes
- Offline Capable: Cached data and graceful error handling
- Modern UI/UX: Smooth animations and intuitive navigation
- Framework: React Native with Expo SDK 53
- Navigation: Expo Router with file-based routing
- State Management: React Hooks and Context
- UI Components: Custom components with consistent styling
- Authentication: Clerk for secure user management
- API Integration: TheMealDB for recipe data
- Runtime: Node.js with Express.js
- Database: PostgreSQL with Drizzle ORM
- Authentication: Clerk integration
- API: RESTful endpoints for favorites management
- Deployment: Production-ready with environment configuration
- Node.js (v18 or higher)
- npm or yarn
- Expo CLI (
npm install -g @expo/cli) - iOS Simulator (for iOS development) or Android Studio (for Android development)
-
Clone the repository
git clone <repository-url> cd react-native-recipe-app-yt
-
Install backend dependencies
cd backend npm install -
Install mobile app dependencies
cd ../mobile npm install -
Environment Setup
Create
.envfiles in both backend and mobile directories:Backend (.env)
DATABASE_URL=your_postgresql_connection_string NODE_ENV=development PORT=5001
Mobile (.env)
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
-
Database Setup
cd backend npm run db:generate npm run db:migrate
-
Start the backend server
cd backend npm run dev -
Start the mobile app
cd mobile npm start -
Run on your preferred platform
- Press
ifor iOS Simulator - Press
afor Android Emulator - Press
wfor Web browser
- Press
react-native-recipe-app-yt/
βββ backend/ # Node.js backend server
β βββ src/
β β βββ config/ # Configuration files
β β βββ db/ # Database schema and migrations
β β βββ server.js # Express server
β βββ package.json
β βββ drizzle.config.js
βββ mobile/ # React Native mobile app
β βββ app/ # Expo Router pages
β β βββ (auth)/ # Authentication screens
β β βββ (tabs)/ # Main app tabs
β β βββ recipe/ # Recipe detail pages
β βββ components/ # Reusable UI components
β βββ services/ # API services
β βββ constants/ # App constants
β βββ hooks/ # Custom React hooks
β βββ assets/ # Images, fonts, styles
β βββ package.json
βββ README.md
Update the API URL in mobile/constants/api.js to match your backend server:
export const API_URL = "http://your-ip-address:5001/api";Configure your PostgreSQL database connection in backend/src/config/db.js.
The app includes several key screens:
- Home: Featured recipes and category browsing
- Search: Advanced recipe search functionality
- Favorites: User's saved recipes
- Recipe Details: Comprehensive recipe information
- Authentication: Sign in/sign up flows
- React Native: 0.79.3
- Expo: SDK 53
- Expo Router: File-based navigation
- Clerk: Authentication
- React Navigation: Navigation components
- Expo Vector Icons: Icon library
- Node.js: Runtime environment
- Express.js: Web framework
- Drizzle ORM: Database ORM
- PostgreSQL: Database
- CORS: Cross-origin resource sharing
- TheMealDB: Recipe data source
GET /api/health- Health checkPOST /api/favorites- Add recipe to favoritesGET /api/favorites/:userId- Get user's favoritesDELETE /api/favorites/:userId/:recipeId- Remove recipe from favorites
- Recipe search by name
- Recipe lookup by ID
- Random recipe generation
- Category filtering
- Ingredient filtering
- Modern Design: Clean, intuitive interface
- Smooth Animations: Expo Reanimated for fluid transitions
- Responsive Layout: Adapts to different screen sizes
- Loading States: Comprehensive loading indicators
- Error Handling: Graceful error states and user feedback
- Pull-to-Refresh: Real-time data updates
- Authentication: Secure user authentication with Clerk
- Data Validation: Input validation on both frontend and backend
- Environment Variables: Secure configuration management
- CORS: Proper cross-origin resource sharing configuration
- Set up a PostgreSQL database
- Configure environment variables
- Deploy to your preferred hosting service (Heroku, Vercel, etc.)
- Build the app using Expo EAS Build
- Submit to App Store and Google Play Store
- Configure production environment variables
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- TheMealDB: For providing the recipe data API
- Expo: For the excellent React Native development platform
- Clerk: For secure authentication services
- Drizzle: For the modern database ORM
For support and questions:
- Create an issue in the repository
- Check the documentation
- Review the code comments for implementation details
Built with β€οΈ using React Native and Node.js