A personal AI sous-chef that discovers recipes, respects your dietary needs, and helps you plan the grocery run.
- Conversational AI Chat - Describe what you want to cook or what's in your fridge. The AI finds recipes, handles substitutions, and adjusts for dietary needs.
- Fridge Inventory - Log what you have on hand. The AI prioritizes recipes using your available ingredients and flags items expiring soon.
- Taste Profile - Save allergies, dietary restrictions, favorite and disliked ingredients. Every recommendation is personalized automatically.
- Recipe Collection - Save recipes to your personal cookbook. Search and filter by cuisine, difficulty, or cook time.
- Smart Shopping Lists - Add a recipe's ingredients to your shopping list. Items already in your fridge are flagged so you don't buy duplicates.
| Layer | Technology |
|---|---|
| Frontend | React 19, Styled Components, Framer Motion |
| Backend | Node.js, Express, Helmet, Rate Limiting, Winston Logger |
| Database | MongoDB with Mongoose ODM |
| AI | Together.ai API (LLM with fridge-aware context) |
| Auth | JWT + bcrypt |
| Validation | express-validator |
- Node.js (v16+)
- MongoDB (local or MongoDB Atlas)
- Together.ai API key
-
Clone the repository:
git clone https://github.com/junho5400/mise.git cd mise -
Install dependencies:
npm install cd client && npm install && cd ..
-
Set up environment variables:
Create a
.envfile in the root directory (see.env.example):PORT=3000 MONGODB_URI=your_mongodb_connection_string JWT_SECRET=your_jwt_secret TOGETHER_API_KEY=your_together_ai_api_key CORS_ORIGIN=http://localhost:3001 LLM_MODEL=meta-llama/Llama-3.3-70B-Instruct-Turbo-Free LLM_RATE_LIMIT=5 LOG_LEVEL=info
-
Start the development servers:
# Backend (port 3000) npm run dev # Frontend (separate terminal) cd client && npm start
| Method | Endpoint | Description |
|---|---|---|
| POST | /auth/register |
Register a new user |
| POST | /auth/login |
Log in |
| GET | /auth/me |
Get current user profile |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/chat |
AI conversation (uses preferences + fridge contents as context) |
| Method | Endpoint | Description |
|---|---|---|
| POST | /users/me/recipes/:recipeId |
Save recipe |
| DELETE | /users/me/recipes/:recipeId |
Remove saved recipe |
| GET | /users/me/recipes |
Get saved recipes |
| PUT | /users/me/preferences |
Update dietary preferences |
| Method | Endpoint | Description |
|---|---|---|
| GET | /users/me/fridge |
Get all fridge items |
| POST | /users/me/fridge |
Add a fridge item |
| PUT | /users/me/fridge/:itemId |
Update a fridge item |
| DELETE | /users/me/fridge/:itemId |
Remove a fridge item |
| DELETE | /users/me/fridge/expired |
Clear all expired items |
| Method | Endpoint | Description |
|---|---|---|
| GET | /shopping-list |
Get shopping list |
| POST | /shopping-list/recipe/:recipeId |
Add recipe ingredients (flags items already in fridge) |
├── src/ # Backend
│ ├── index.js # Server entry point
│ ├── config/ # Database, env validation, logger
│ ├── controllers/ # Auth, recipe, user, fridge, shopping list
│ ├── models/ # Mongoose schemas (User with fridge, Recipe, ShoppingList)
│ ├── routes/ # Express route definitions
│ ├── middleware/ # Auth, validation, error handling
│ └── services/ # LLM integration (fridge-aware prompting)
├── client/src/ # Frontend (React)
│ ├── EnhancedApp.jsx # Root component with routing
│ ├── context/ # Auth state management
│ └── components/ # UI components
│ ├── EnhancedHome.jsx # Landing page
│ ├── EnhancedChatInterface.jsx # AI chat (two-panel layout)
│ ├── Fridge.jsx # Fridge inventory
│ ├── EnhancedPreferences.jsx # Taste profile
│ ├── EnhancedSavedRecipes.jsx # Recipe collection
│ └── ShoppingList.jsx # Shopping list
└── .env.example # Environment variable template
-
Build the React frontend:
cd client && npm run build
-
Deploy to your preferred hosting platform
-
Set all required environment variables on your hosting platform
Junho Hong
This project is licensed under the MIT License.