A full-stack recipe management app built with the PERN stack (PostgreSQL, Express, React, Node.js).
Save, organize, and discover recipes all in one place — built for food lovers and home cooks.
- Table of Contents
- About the Project
- Features
- Getting Started
- Development and Testing
- Development Plan and Improvements
- Project Structure
- Contributing
- License
- Support
Cookbook is a modern, full-stack web app that lets users create, store, and share their favorite recipes.
It features a fast React frontend, a Node/Express API, and a PostgreSQL database for reliable data storage.
Whether you’re tracking your family’s secret recipes or exploring new cuisines, Cookbook keeps everything organized and searchable.
- Create, edit, and delete recipes (Under Development).
- Search recipes by name and subtitle.
- Filter recipes by cuisine, cooktime, difficulty, meal type and dietary requirements.
- Simple, responsive UI built with React, Tailwind and Shadcn.
- Dockerized backend and database setup for easy development.
Before getting started, ensure you have the following installed:
This runs PostgreSQL, Backend, Frontend, and PGAdmin in containers:
- Clone the repository:
git clone https://github.com/imseanconroy/cookbook.git
cd cookbook- Start the development environment:
docker compose --env-file docker/env/.env.dev -f docker/compose/docker-compose.dev.yaml up --build -d
- Run database migrations:
docker compose --env-file docker/env/.env.dev -f docker/compose/docker-compose.dev.yaml exec backend npm run migrate:up- Seed the database (Optional):
docker compose --env-file docker/env/.env.dev -f docker/compose/docker-compose.dev.yaml exec backend npm run seed- Access the application:
- Frontend (React App) - http://localhost:5173
- Backend API - http://localhost:8000
- PGAdmin (Database GUI) - http://localhost:5050
- To stop the application:
docker compose --env-file docker/env/.env.dev -f docker/compose/docker-compose.dev.yaml down -v
This runs PostgreSQL, Backend, Frontend, and PGAdmin in containers:
- Clone the repository:
git clone https://github.com/imseanconroy/cookbook.git
cd cookbook- Install backend dependencies:
cd backend
npm install- Configure backend environment variables:
PORT=8000 NODE_ENV=development READ_ONLY=false FRONTEND_ORIGIN=http://localhost:5173 POSTGRES_PASSWORD=<database_password> POSTGRES_USER=<database_user> POSTGRES_DB=<database_name> POSTGRES_PORT=5432 POSTGRES_HOST=localhost
- Create the database tables and seed the database:
DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} npm run migrate:up && npm run seed
- Start backend express server:
npm run dev
- Install frontend dependencies:
cd frontend
npm install- Configure frontend environment variables:
VITE_API_BASE_URL=http://localhost:8000
- Start the frontend react application:
npm run dev
Run all backend tests with the following command:
cd backend npm run test
This section outlines upcoming features and improvements:
-
User Features:
- Add ability to create, update and delete recipes from the fronted.
- Add local bookmarking and "favorites" functionality.
-
Testing and Quality Assurance:
- Expand test coverage for frontend components.
-
Documentation:
- Create a detailed API reference.
Feel free to suggest additional improvements by opening an issue.
cookbook/
├── frontend/ # React application for the user interface
├── backend/ # Express.js server with PostgreSQL integration
│ ├── migrations/ # Database migration files
│ ├── test/ # Backend tests
│ ├── src/ # Backend source code
│ │ ├── config/ # Database and environment configurations
│ │ ├── controllers/ # API request handlers
│ │ ├── middleware/ # Request processing logic
│ │ ├── repositories/ # Database queries and schema models
│ │ ├── routes/ # API endpoint definitions
│ │ ├── services/ # Core business logic
│ │ └── util/ # Utility functions (e.g., validation, logging)
├── docker/ # Docker configuration files
└── README.md # Project documentation
Contributions are welcome. Please open an issue or fork the repository, create a new branch (feature/your-feature-name) and submit a pull request for any enhancements or bug fixes.
This project is licensed under the MIT License - see the LICENSE file for information.
If you are having problems, please let me know by raising a new issue.