How nhoogenkamp/sommelieriq-v2 works
SommelierIQ is a restaurant wine-recommendation platform: diners select a restaurant and dishes, then discover suitable wines from that restaurant’s available list. Restaurant staff maintain wine, food and sauce data, including CSV imports and AI-assisted profiling; role-based administration also covers users and restaurant accounts. The Flask API connects these workflows to persistence and optional billing/email services. The README documents rule-based pairing across food and wine characteristics. Some backend and frontend source was not sampled, so uncertain internal calls are omitted.
Main entry points: app.py Flask API · AppRoutes.jsx Application routes · db.py Application database · wineApi.js Wine API client
Components 24
Customer experience
- Application routes
frontend/src/routes/AppRoutes.jsx - Restaurant discovery
frontend/src/pages/Restaurants.jsx - Wine list
frontend/src/pages/WineList.jsx - Dish selection
frontend/src/pages/FoodPairing.jsx - Pairing interface
frontend/src/components/foodPairing/PairingTabs.jsx - Pairing API client
frontend/src/api/foodPairingApi.js - Wine API client
frontend/src/api/wineApi.js
Restaurant administration
- Session and roles
frontend/src/context/AuthContext.jsx - Role-protected pages
frontend/src/context/ProtectedRoute.jsx - Menu imports
frontend/src/pages/admin/MenuUpload.jsx - Wine management
frontend/src/pages/admin/WineUpload.jsx - Admin API client
frontend/src/api/adminApi.js
API and domain
- Flask API
Server/app.py - Pairing recommendations
Server/routes/recommendation.py - Wine operations
Server/routes/wines.py - Menu operations
Server/routes/menu.py - AI dish profiling
Server/routes/uploadDishesAI.py - Admin authentication
Server/routes/admin.py
Persistence and integrations
- Application database
Server/db.py - Stripe billing
Server/routes/Stripe/stripeWebhook.py - Gmail authorization
Server/routes/gmail/gmail_auth.py
Other components
- Diner
- Restaurant staff
- AI profiling service
Connections 31
- Diner → Application routes: opens
- Application routes → Restaurant discovery: routes to
- Application routes → Wine list: routes to
- Application routes → Dish selection: routes to
- Dish selection → Pairing interface: renders
- Dish selection → Pairing API client: requests data
- Pairing API client → Flask API: calls API
- Wine list → Wine API client: requests wines
- Wine API client → Flask API: calls API
- Flask API → Pairing recommendations: dispatches
- Flask API → Wine operations: dispatches
- Flask API → Menu operations: dispatches
- Pairing recommendations → Application database: reads data
- Wine operations → Application database: reads and writes
- Menu operations → Application database: reads and writes
- Restaurant staff → Application routes: opens
- Application routes → Role-protected pages: checks access
- Role-protected pages → Session and roles: uses session
- Menu imports → Admin API client: uploads data
- Menu imports → Wine API client: uploads menu
- Menu imports → Flask API: submits imports
- Wine management → Wine API client: manages wines
- Admin API client → Flask API: calls API
- Flask API → Admin authentication: dispatches
- Admin authentication → Application database: reads and writes
- Flask API → AI dish profiling: dispatches
- AI dish profiling → AI profiling service: generates profiles
- AI dish profiling → Application database: stores data
- Flask API → Stripe billing: dispatches webhook
- Stripe billing → Application database: updates billing
- Flask API → Gmail authorization: dispatches OAuth