BiteByte is a full-stack recipe and live cooking platform built with React, Spring Boot, Spring AI and MongoDB.
- AI Recipe Customization powered by OpenAI
- Browse and add recipes with nutritional info
- Participate in live cooking classes
- User authentication and authorization (JWT)
- Dark and light theme toggle
The project is split into two parts:
A modular monolithic Spring Boot application with the following modules:
| Module | Responsibility |
|---|---|
ai |
OpenAI-powered recipe customization |
common |
Shared utilities, web config, DB initializer |
livecooking |
Live cooking class management |
recipe |
Recipe CRUD |
security |
JWT authentication filter |
user |
User registration and login |
A React SPA that proxies all /api and /auth requests to the backend.
- Java 21 (Amazon Corretto), Spring Boot 3, Spring AI, MongoDB
- React 18, Vite 4, React Router 6, Axios
- Node.js (v18+) and npm
- Amazon Corretto 21 or any JDK 21
- MongoDB running locally on port 27017
- An OpenAI API key
git clone https://github.com/yourusername/BiteByte.git
cd BiteByteCreate the local env file (already gitignored):
mkdir -p .vscode
echo "OPENAI_API_KEY=your-key-here" > .vscode/.envThis file is read automatically by ./gradlew bootRun and by the VS Code / Cursor debugger launch config.
Prevents local config files from being committed accidentally:
git config core.hooksPath .githookscd client && npm install && cd ..Open two terminals from the project root:
Terminal 1 — Backend
./gradlew bootRunSpring Boot starts on http://localhost:8080. On first run the database is seeded with sample recipes and live cooking classes.
Terminal 2 — Frontend
cd client && npm startVite starts on http://localhost:5173 by default (increments automatically if the port is in use — check the terminal output for the exact URL). API calls are proxied automatically to the backend.
| Method | Path | Description |
|---|---|---|
| POST | /api/auth/signup |
Register a new user |
| POST | /api/auth/signin |
Sign in and receive a JWT |
| Method | Path | Description |
|---|---|---|
| GET | /api/recipes/all |
List all recipes (public + personal) |
| GET | /api/recipes/{id} |
Get a recipe by ID |
| POST | /api/recipes |
Add a recipe (admin only) |
| PUT | /api/recipes/{id} |
Update a recipe (admin only) |
| DELETE | /api/recipes/{id} |
Delete a recipe (admin only) |
| Method | Path | Description |
|---|---|---|
| GET | /api/live-cooking-classes |
List all classes |
| POST | /api/live-cooking-classes |
Add a class (admin only) |
| POST | /api/live-cooking-classes/{id}/attend |
Attend a class |
| Method | Path | Description |
|---|---|---|
| POST | /api/ai-recipe-customization |
Customise a recipe using AI |
| POST | /api/ai-recipe-customization/save |
Save a customised recipe to your account |
| GET | /api/ai-recipe-customization |
List all customisations |
| GET | /api/ai-recipe-customization/{id} |
Get a customisation by ID |
- Fork the repository.
- Create a new branch:
git checkout -b feature/your-feature - Commit your changes:
git commit -m 'Add some feature' - Push to the branch:
git push origin feature/your-feature - Open a pull request.
This project is licensed under the MIT License — see the LICENSE file for details.
