Taste Engine — Wine Recommendation System
Wine Recommendation MVP

Taste Engine

Система персональных винных рекомендаций на основе вкусового профиля. Квиз → профиль → авторизация → ML-движок → список вин.

Пользовательский флоу

От вопроса
до бокала

Пять шагов от первого ответа на квиз до персональной подборки вин — без лишнего трения.

01
📋
Квиз
Пользователь отвечает на вопросы о вкусе, текстуре, предпочтениях
02
🎭
Профиль
Система выдаёт profile_code — уникальный вкусовой вектор
03
🔐
Авторизация
Google OAuth через Supabase. Создаётся сессия и user_id
04
💾
Сохранение
profile_code записывается в quiz_results, привязан к user_id
05
🍷
Рекомендации
FastAPI на Render возвращает топ-N вин с similarity score

Компоненты

Шесть слоёв
системы

Каждый компонент решает одну задачу. Минимальная связность, максимальная замена.

🖥
Frontend
Tilda UI
Пользовательский интерфейс. Квиз, авторизация, экран рекомендаций. Профиль временно живёт в localStorage.
  • /quiz — вопросы и ответы
  • /auth — логин
  • /callback — возврат после OAuth
  • /wines_list — карточки вин
🔑
Auth
Supabase Auth
Google OAuth через Supabase. Принимает логин, создаёт пользователя, возвращает session и user.id.
  • Google OAuth provider
  • Supabase session management
  • Безопасный callback flow
🗃
Database
Supabase DB
Три таблицы: каталог вин, результаты квиза и batch-рекомендации (legacy fallback).
  • wines — каталог с признаками
  • quiz_results — user ↔ profile
  • profile_recommendations — кэш
🤖
ML Model
ContentWineRecommender
Content-based + rule-based hybrid. Переводит profile_code в feature vector, считает similarity, отдаёт top-N.
  • Wine set.xlsx → feature matrix
  • Жёсткие фильтры + similarity score
  • Не collaborative filtering
⚡
API
FastAPI on Render
HTTP обёртка над моделью. Принимает profile_code, вызывает рекомендер, возвращает JSON. Публичный endpoint.
  • GET / — healthcheck
  • GET /recommend/{profile_code}
  • taste-engine-api.onrender.com
🐙
Source Control
GitHub
Source-of-truth. Render подтягивает код из GitHub при каждом деплое. Секреты — не здесь.
  • Модель и API в репозитории
  • Deploy source for Render
  • Ноутбуки и датасеты

Архитектура

Целевой
runtime-контур

Полный путь данных от пользователя до рекомендации. Живой API — целевой путь, batch-слой — legacy fallback.

ПОЛЬЗОВАТЕЛЬ 👤 Пользователь Браузер · Tilda frontend FRONTEND 🖥 Tilda /quiz · /auth · /callback · /wines_list · localStorage(profile_code) AUTH 🔑 Supabase Auth Google OAuth · session · user.id /auth → /callback API LAYER ⚡ FastAPI / Render GET /recommend/{profile_code} taste-engine-api.onrender.com DATABASE 🗃 Supabase DB wines каталог quiz_results профиль profile_rec legacy / cache profile_recommendations — batch fallback / legacy quiz_results — связь user_id ↔ profile_code ML LAYER 🤖 ContentWineRecommender profile_code → feature vector content-based + rule-based hybrid similarity score · top-N · жёсткие фильтры 📊 Wine set.xlsx feature matrix · каталог признаков JSON ответ РЕЗУЛЬТАТ 🍷 Карточки вин wine_name · region · similarity · explanation 🐙 GitHub source-of-truth deploy source → Render — — — legacy / batch path ──── целевой live path Live API Supabase

Реестр интерфейсов

Точки
интеграции

Восемь интерфейсов системы. Входы, выходы, назначение.

Quiz UI → profile_code
Квиз → Профиль
Ответы пользователя переводятся в profile_code. Временно сохраняется в localStorage как taste_profile_code.
Supabase Auth → session
Google OAuth → Сессия
Supabase принимает Google identity, создаёт пользователя, возвращает session и user.id. Используется на /auth и /callback.
INSERT quiz_results
Callback → База данных
После логина: callback берёт profile_code из localStorage и сохраняет строку (user_id, profile_code, profile_name) в quiz_results.
GET /recommend/{profile_code}
Frontend → Render API
wines_list делает GET-запрос на Render. Получает JSON-массив: wine_id, wine_name, region, similarity_score, explanation.
recommend_for_features()
FastAPI → ML Model
API переводит profile_code в feature vector через PROFILE_TO_FEATURES, вызывает ContentWineRecommender, получает pandas DataFrame.
SELECT profile_recommendations
Legacy / Fallback Path
Batch-слой: wines_list читает заранее рассчитанные рекомендации из Supabase. Используется как fallback или кэш при недоступности API.

Taste Engine · Wine Recommendation MVP · FastAPI · Supabase · Tilda · Python ML

Made on
Tilda