A Next.js web application for saving and managing cooking recipes from online sources. Import recipes from URLs, preserve content locally (text and images), and never lose access to your favorite recipes even if the original sites go offline.
- Single Recipe Import: Import recipes from URLs with automatic scraping
- Bulk Import: Import multiple recipes from Chrome bookmarks HTML export
- Smart Scraping: Uses JSON-LD (Schema.org) with HTML fallback for maximum compatibility
- Local Storage: All recipe content and images are stored locally
- Search & Filter: Find recipes by title, description, categories, and more
- Progress Tracking: Real-time import job status monitoring
- Image Optimization: Automatic image processing and optimization
- Frontend: Next.js 14+ (App Router), React, TypeScript
- Styling: Tailwind CSS
- Database: PostgreSQL with Prisma ORM
- Scraping: Cheerio for HTML parsing, JSON-LD for structured data
- Image Processing: Sharp for optimization
Want to get this running live on the internet?
👉 Follow the Quick Deploy Guide
This guide will walk you through:
- Setting up a free Supabase database (5 min)
- Deploying to Vercel (5 min)
- Running database migrations (3 min)
- Testing your live app (2 min)
For detailed deployment options and troubleshooting, see DEPLOYMENT.md
- Node.js 18+ installed
- PostgreSQL database (local or hosted)
- Clone the repository
- Install dependencies:
npm install- Set up your database:
Create a .env file in the root directory:
DATABASE_URL="postgresql://username:password@localhost:5432/recipes?schema=public"
NEXT_PUBLIC_APP_URL="http://localhost:3000"- Run database migrations:
npx prisma migrate dev --name init- Start the development server:
npm run dev- Open http://localhost:3000 in your browser
- Click "Import Recipe" in the header
- Select the "Single Import" tab
- Paste a recipe URL
- Click "Import Recipe"
- The recipe will be scraped and saved to your database
-
Export your bookmarks from Chrome:
- Open Chrome
- Go to Bookmarks → Bookmark Manager (Ctrl/Cmd+Shift+O)
- Click the ⋮ menu → Export bookmarks
- Save the HTML file
-
In the Recipe Manager:
- Click "Import Recipe"
- Select the "Bulk Import" tab
- Open the exported HTML file in a text editor
- Copy all the HTML content
- Paste it into the textarea
- Click "Start Bulk Import"
-
Monitor progress:
- Click "Import Status" in the header
- View real-time progress of all import jobs
- Failed imports will show error messages
- Browse all recipes on the homepage
- Click any recipe card to view full details
- See ingredients, instructions, cooking times, and more
The application uses the following main models:
- Recipe: Stores recipe data (title, ingredients, instructions, images, etc.)
- RecipeImage: Stores image URLs and local file paths
- Tag: Custom tags for organizing recipes
- ImportJob: Tracks bulk import progress
POST /api/recipes/import- Import single recipe from URLPOST /api/recipes/import/bulk- Start bulk import from bookmarksGET /api/recipes/import/jobs- Get import job statusGET /api/recipes- List all recipes (with pagination)GET /api/recipes/:id- Get single recipePATCH /api/recipes/:id- Update recipe (rating, tags, notes)DELETE /api/recipes/:id- Delete recipeGET /api/recipes/search- Search recipesGET /api/tags- List all tags
-
Create a Supabase project:
- Go to supabase.com
- Create a new project
- Copy the PostgreSQL connection string
-
Deploy to Vercel:
- Push your code to GitHub
- Import the repository in Vercel
- Add environment variables:
DATABASE_URL: Your Supabase connection stringNEXT_PUBLIC_APP_URL: Your Vercel URL
-
Run migrations:
npx prisma migrate deploy
- Create a Railway project
- Add PostgreSQL service
- Add Next.js service (connect to GitHub)
- Railway auto-provides
DATABASE_URL - Deploy
- Ensure the URL is accessible and contains recipe data
- Check that the site uses Schema.org JSON-LD or standard HTML markup
- Some sites may block automated scraping
- Verify your
DATABASE_URLis correct - Ensure PostgreSQL is running
- Check firewall settings for remote databases
- Check that the
public/uploadsdirectory exists - Verify Sharp is installed correctly
- Ensure sufficient disk space
- Recipe scaling (adjust servings)
- Shopping list generation
- Meal planning calendar
- Browser extension for one-click save
- Nutrition calculation
- Multi-user support with authentication
- Export recipes to PDF
ISC
Contributions are welcome! Please feel free to submit a Pull Request.