A full-stack food waste reduction app that helps users turn the ingredients they already have into practical recipe ideas.
The project combines a React frontend with an Express backend to support recipe discovery, saved ingredients, bookmarks, onboarding preferences, and personalized recommendations. The goal is simple: make it easier to cook with what you already have instead of letting food go to waste.
Users can:
- create an account and log in
- save ingredients they currently have at home
- search a large recipe dataset
- open detailed recipe pages
- bookmark recipes they want to come back to
- get recommendations based on bookmarks and saved preferences
- User authentication with signup and login
- Ingredient management for each user
- Recipe search and browsing
- Recipe detail pages
- Bookmark support
- Recommendation flow based on saved activity
- Onboarding/preferences support
- Local-first data storage using CSV and Excel files
- React
- React Router
- Axios
- CSS
- Node.js
- Express
- JWT authentication
- bcryptjs
- ExcelJS
- csv-parser
RecipeGenerator/
├── backend/
│ ├── controllers/
│ ├── routes/
│ ├── middleware/
│ ├── models/
│ ├── data/
│ └── server.js
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ ├── context/
│ │ ├── pages/
│ │ └── services/
├── package.json
└── README.md
Frontend pages currently include:
- Home
- Recipe Search
- Recipe Detail
- Bookmarks
- Recommendations
- Ingredients
- Login
- Signup
- Onboarding
The backend exposes route groups for:
/api/auth/api/recipes/api/bookmarks/api/recommendations/api/ingredients
There is also a health check at:
/api/health
This project does not rely on MongoDB or a hosted database.
Instead, it uses local files inside backend/data/, including:
recipes.csvfor the recipe datasetusers.xlsxfor user accountsbookmarks.xlsxfor saved recipesuser_ingredients.xlsxfor pantry itemsuser_preferences.xlsxfor onboarding/preferences
That makes the project lightweight and easy to run locally for demos or class/project submissions.
git clone https://github.com/Sanjana-Gondariya/RecipeGenerator.git
cd RecipeGeneratornpm run install:allThis installs:
- root dependencies
- backend dependencies
- frontend dependencies
Create a file at:
backend/.env
You can add:
PORT=5001
JWT_SECRET=your-secret-key
NODE_ENV=developmentImportant:
- login and signup now work locally even if
JWT_SECRETis not set, because the backend includes a development fallback secret - if you deploy the app, you should set a real
JWT_SECRET
Run both frontend and backend together:
npm run devFrontend:
http://localhost:3000
Backend API:
http://localhost:5001/api
From the project root:
npm run devRuns frontend and backend together.
npm run dev:backendRuns only the backend server.
npm run dev:frontendRuns only the React frontend.
npm run buildBuilds the frontend for production.
npm run install:allInstalls dependencies in all project folders.
- passwords are hashed with
bcryptjs - authenticated routes use JWT tokens
- tokens are stored in
localStorageon the frontend - the frontend automatically sends the token on API requests through the shared Axios client
- the frontend expects the backend API on port
5001by default - the frontend API base URL is configurable through
REACT_APP_API_URL - the recipe dataset is loaded by the backend when the server starts
- this project is intended to be easy to run locally without extra infrastructure
- deploy frontend and backend for a public live demo
- add filtering by dietary restrictions and cooking time in more places
- improve recommendation ranking
- add tests for auth and recipe search flows
- add better seed/demo data for user onboarding
- Riddhi Patel
- Sanjana Gondariya