A full-stack recipe management application built with Next.js, Express, and PostgreSQL.
- Recipe Management: Create, edit, view, and delete recipes
- Recipe Groups: Organize recipes into custom groups
- Search: Search recipes by name, description, ingredients, or steps
- Image Upload: Upload and manage recipe images
- Responsive Design: Works on desktop and mobile devices
- Dark Mode: Toggle between light and dark themes
- Print Support: Print-friendly recipe views
Recipes are accessed using their slugified, lowercase IDs:
- Recipe name: "Pancakes" → URL:
/view/pancakes - Recipe name: "Alabama White Sauce" → URL:
/view/alabama-white-sauce
Recipe IDs are automatically generated from the recipe name when creating or updating recipes.
- Docker and Docker Compose
- Node.js 18+ (for local development)
- Clone the repository
- Run the development environment:
docker-compose -f docker-compose.dev.yml up
- Access the application at
http://localhost:3000
- Build the Docker images:
docker-compose build
- Start the production environment:
docker-compose up -d
- Access the application at
http://localhost:8000
GET /api/recipes- List all recipesGET /api/recipes/:id- Get recipe by IDPOST /api/recipes- Create new recipePOST /api/recipes/:id- Update recipeDELETE /api/recipes/:id- Delete recipe
GET /api/search?query=...- Search recipesPOST /api/search- Search with filters
GET /api/groups- List all groupsGET /api/groups/:id- Get group detailsPOST /api/groups- Create new groupPUT /api/groups/:id- Update groupDELETE /api/groups/:id- Delete group
The application includes scripts for database maintenance:
# Import recipes from backup
npm run import-recipes
# Migrate production database to new schema
npm run migrate-productionIf you need to update a production database to use the new consistent recipe ID schema:
npm run migrate-productionThis will:
- Create a backup of all recipes
- Update all recipe IDs to be slugified, lowercase versions of their names
- Remove redundant
idfields from recipe JSON data - Handle any conflicts by appending numbers to duplicate IDs
This project is licensed under the MIT License.