Skip to content

Repository files navigation

Yummy — MVP сервиса surprise-боксов (anti-food-waste)

Маркетплейс «спаси еду»: кофейни и пекарни Астаны продают свежие, но не проданные за день товары боксами со скидкой 40–70%, пользователи бронируют, оплачивают и забирают самовывозом. Бизнес режет списания — люди едят дешевле.

Это рабочий MVP, максимально близкий к реальному продукту: полный флоу публикация → бронь → оплата → код/QR → выдача с правилами no-show и возврата.

Три поверхности (одно приложение)

Роль Что умеет
🛍 Магазин (покупатель) каталог боксов на ленте, фильтр по району, карточка с «ориентировочной ценностью» и FOMO «осталось N», бронь + демо-оплата, QR-код и код выдачи, «Мои заказы»
🧑‍🍳 Партнёр (кофейня) создать бокс за минуту, список своих боксов и броней, выдача заказа по коду
🛠 Админ метрики пилота (GMV, fill rate, no-show, возвраты, take-rate), все заказы, возвраты

Бизнес-правила (как в реальном продукте)

  • Surprise box — точный состав может отличаться, это набор остатков дня.
  • No-show — если не забрал в окне самовывоза, заказ сгорает, предоплата не возвращается.
  • Возврат — если заведение не выдало, полный refund (бокс возвращается в наличие).
  • Бронь атомарно уменьшает остаток; повторная выдача одного кода блокируется.

Стек

Python · FastAPI · SQLite (stdlib) · ванильный JS · segno (QR локально). Без внешних зависимостей и тяжёлых фреймворков — быстрый и дешёвый запуск.

Запуск

uv venv --python 3.12 .venv && source .venv/bin/activate
uv pip install -r requirements.txt
uvicorn app.main:app --reload      # http://localhost:8000  ·  /docs — API
pytest                              # тесты бизнес-логики

База наполняется демо-данными Астаны при первом старте (6 заведений, 7 боксов).

Про оплату (важно)

Оплата в MVP — демо-заглушка. В проде нужен Kaspi Pay / Kaspi QR — это основной платёжный рельс в Казахстане (люди не вводят карты). Интеграция Kaspi — отдельный и самый весомый технический пункт следующего этапа.

Дорожная карта (после пилота)

  • Kaspi Pay/QR — реальная оплата.
  • Карта + геолокация, пуши «появились боксы рядом», избранные точки.
  • Реферальная программа, промокоды, рейтинг боксов.
  • Комиссия 5–12% с заказа после валидации спроса.

MVP проверяет 3 гипотезы: supply (партнёры публикуют), demand (люди покупают), operations (бронь/выдача без хаоса) — прежде чем вкладываться в полноценное приложение.

Запуск в продакшен (чеклист)

  1. Деплой бэкенда — Render → New → Blueprint → этот репозиторий (render.yaml).
  2. Переменные окружения — заполнить по .env.example: YUMMY_SECRET_KEY (обязательно), YUMMY_ENFORCE_AUTH=1, YUMMY_ADMIN_EMAILS, YUMMY_CORS_ORIGINS.
  3. Админ-доступ — зарегистрироваться на сайте с email из YUMMY_ADMIN_EMAILS → аккаунт получает роль admin (JWT открывает /admin/*).
  4. Партнёры — заведение регистрируется с ролью «Заведение» → его JWT открывает публикацию боксов и выдачу по коду/QR-сканеру.
  5. Оплата — после регистрации мерчанта Kaspi вписать KASPI_SERVICE_ID в app/static/index.html (кнопка Kaspi появится сама).
  6. Telegram-вход/уведомления — токен от @BotFather в TELEGRAM_BOT_TOKEN.

Разработка: make help (dev / test / docs / seed / zip).

About

Spasibox — MVP anti-food-waste маркетплейса surprise-боксов для Астаны: кофейни продают остатки дня боксами со скидкой, юзеры бронируют и забирают самовывозом. FastAPI + SQLite + JS, магазин/партнёр/админ, QR-выдача.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages