A modern React Native app for managing and organizing your favorite recipes. Built with Expo and featuring image upload, ingredients management, and step-by-step cooking instructions.
- 📱 Cross-platform: iOS and Android support
- 📸 Image Upload: Add photos from camera or gallery
- 🥘 Recipe Management: Create, edit, and delete recipes
- 📝 Dynamic Forms: Add/remove ingredients and cooking steps
- ⏱️ Prep Time Tracking: Set preparation time with smart formatting
- 🎨 Modern UI: Clean design with enhanced recipe cards
- 💾 Offline Storage: Local SQLite database for reliable data persistence
- 🔄 Real-time Updates: Automatic data synchronization with React Query
- Node.js (v18 or newer)
- pnpm (recommended package manager)
- Expo CLI
- Expo Go app on your mobile device
-
Clone the repository
git clone <repository-url> cd recipes-expo
-
Install dependencies
pnpm install
-
Start the development server
pnpm start
-
Run on device/simulator
- Scan the QR code with Expo Go (Android) or Camera app (iOS)
- Press
ifor iOS simulator - Press
afor Android emulator - Press
wfor web browser
- View Recipes: Browse your recipe collection on the home screen
- Create Recipe: Tap the "+" button to add a new recipe
- Add Details: Fill in title, author, description, and prep time
- Upload Image: Take a photo or select from gallery
- Add Ingredients: Use the dynamic form to list ingredients
- Add Steps: Create step-by-step cooking instructions
- Save & Enjoy: Your recipe is stored locally and ready to use
- Framework: Expo (React Native)
- Language: TypeScript
- Navigation: Expo Router (file-based routing)
- Database: SQLite with automatic migrations
- State Management: React Query + Zustand
- Forms: React Hook Form + Zod validation
- Image Handling: Expo Image Picker + Expo Image
- Icons: Expo Vector Icons
- Linting: Biome (modern alternative to ESLint/Prettier)
src/
├── app/ # Expo Router pages
│ ├── (tabs)/ # Tab navigation
│ ├── recipe/ # Recipe details
│ └── create.tsx # Create/edit recipe form
├── components/ # Reusable UI components
├── lib/ # Database and repository layer
├── types/ # TypeScript type definitions
└── utils/ # Helper functions
- Linting:
pnpm run lint(Biome) - Type Checking: TypeScript with strict mode
- Code Formatting: Automatic with Biome and EditorConfig
The app uses SQLite for local storage with automatic schema migrations. The database includes:
- Recipe metadata (title, author, description, prep time)
- Image storage (URI/base64)
- Dynamic ingredients and cooking steps
- Creation and update timestamps
- RecipeForm: Dynamic form with image upload and field management
- RecipeCard: Enhanced display with thumbnails and metadata
- Recipe Detail View: Full-screen recipe display with all information
- Metro bundler won't start: Clear cache with
npx expo start --clear - App won't reload: Make sure a device/simulator is connected before pressing
r - Image picker not working: Ensure camera permissions are granted
- Database issues: Check SQLite migrations in
src/lib/database.ts
- Use iOS Simulator for fastest development iteration
- Press
rin Metro terminal to reload connected apps - Use
jto open debugger for troubleshooting - Shake device to access developer menu
This project is open source and available under the MIT License.
Contributions are welcome! Please feel free to submit a Pull Request.
Built with ❤️ using Expo and React Native