Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
34 KiB
Barev Club — бизнес-требования для разработки (промпт для Claude Code)
Как использовать. Положи этот файл в корень пустого репозитория как
docs/PRD.mdи напиши Claude Code: «Прочитай docs/PRD.md. Сначала предложи архитектуру, структуру репозитория и план по этапам, задай уточняющие вопросы из раздела 13. Код не пиши, пока я не подтвержу план. Потом реализуй Этап 1».
0. Роль и правила работы для Claude Code
Ты — ведущий full-stack разработчик. Строишь платформу Barev Club по этому документу.
- Работай по этапам (раздел 11). Не начинай следующий этап, пока текущий не принят по критериям из раздела 12.
- Перед кодом каждого этапа покажи план: какие модули, таблицы, эндпоинты, экраны.
- Если требование неоднозначно — спроси, не додумывай бизнес-логику. Технические решения принимай сам и коротко объясняй.
- Секреты только через
.env(+.env.exampleв репо). Никаких токенов в коде. - Покрывай тестами бизнес-логику: статусы заказов, расчёт цены со скидкой, назначение исполнителя, промокоды.
- Добавь seed-данные (услуги, исполнители, партнёры, тестовые заказы), чтобы всё можно было показать без реальных пользователей.
- Все тексты интерфейса — через i18n, ни одной строки хардкодом.
1. Продукт и цель
Barev Club — клуб-сервис для эмигрантов в Ереване. Клиенты приходят через агентства недвижимости (QR/промокод в договоре аренды). Внутри одного Telegram-приложения клиент заказывает услуги по четырём направлениям и пользуется скидками партнёров.
Слоган: «Ереван — как дома. С первого дня.»
Цель MVP: клиент из агентства за 2 минуты открывает бота, выбирает язык, заказывает услугу и видит статус; админ назначает исполнителя; исполнитель проводит заказ по шагам.
Ключевые метрики:
- % лидов от агентства, активировавших бота;
- % активировавших, сделавших первый заказ;
- повторные заказы за 30 дней;
- конверсия в Barev+;
- лиды и выручка в разрезе агентств.
2. Направления и услуги (только эти, ничего не добавлять)
| Направление | Услуги | Формат |
|---|---|---|
| Быт | Клининг (обычная / генеральная / после ремонта), Ремонт (сантехника, электрика, мелкий ремонт), Трансфер (аэропорт ↔ адрес) | на адресе клиента / по городу |
| Документы | Соцкарта, Нотариальный перевод паспорта, ВНЖ | офлайн, с загрузкой документов |
| Обучение и карьера | Языки (армянский, английский; пакет уроков), Карьерный консультант (разбор резюме, план поиска работы) | онлайн / офлайн |
| Скидки и подарки | Скидки и подарки партнёров: кофейни, рестораны, другие | по клубной карте |
Цены — справочник в админке, на фронте показываются как «от N ֏». Конкретные цены и проценты скидок задаёт админ.
3. Роли
| Роль | Где работает | Что делает |
|---|---|---|
| Клиент | Telegram-бот + Mini App | Заказывает услуги, видит статусы, чат с исполнителем, оценивает, пользуется клубной картой, оформляет Barev+ |
| Исполнитель | Отдельный Telegram-бот для исполнителей + его Mini App | Подтипы: клинер, мастер, водитель, преподаватель, карьерный консультант. Видит заказы на день, ведёт по шагам, чек-лист, фотоотчёт, заработок. Исполнитель — либо частное лицо (фрилансер), либо сотрудник компании-партнёра |
| Компания-партнёр (исполнитель) | Тот же бот исполнителей, роль «диспетчер компании» | Клининговая компания, автопарк, языковая школа и т.п. Получает заказы, назначенные на компанию, и распределяет их между своими сотрудниками |
| Админ / оператор | Веб-админка | Канбан заказов, назначение исполнителей, справочники, клиенты, финансы, отчёты по агентствам |
| Агентство | Источник лидов (в MVP без кабинета) | Получает уникальный промокод/deep-link. Получает % от оплаченных заказов привлечённых клиентов; в отчётах видно его лиды, выручку и начисленное вознаграждение |
| Партнёр | В MVP без кабинета | Принимает клубную карту; проверяет её по коду на веб-странице проверки |
4. Каналы и поверхности
- Лендинг (веб, адаптив) — за основу дизайн «Лендинг v2 · плотный».
- Клиентский Telegram-бот — точка входа, онбординг, уведомления, ретрансляция чата.
- Клиентский Mini App — основной интерфейс клиента.
- Бот исполнителей + его Mini App — отдельный бот: назначения, принятие заказов, пошаговые статусы, чек-листы, фотоотчёты, заработок; роль «диспетчер компании» для компаний-партнёров.
- Веб-админка — для операторов, desktop-first.
Домен лендинга у владельца уже есть (значение — в .env, LANDING_DOMAIN). Оба бота создаём в BotFather; токены — в .env (CLIENT_BOT_TOKEN, PRO_BOT_TOKEN).
Языки везде: RU, EN, 中文 (ZH), Հայերեն (HY), ES.
5. Функциональные требования
5.1 Лендинг (LND)
- LND-1. Секции, как в макете v2:
- шапка с языками и кнопкой «Открыть в Telegram»;
- hero: заголовок, подзаголовок, CTA и 3 шага;
- превью «Мои заявки»;
- плашки «5 языков» и «Без установки»;
- 4 блока направлений со списком услуг и ценами «от»;
- «Как это работает» в 4 шага;
- баннер агентства;
- тарифы Barev / Barev+;
- FAQ-аккордеон;
- подвал.
- LND-2. Переключатель 5 языков меняет все тексты; язык запоминается и передаётся в бота.
- LND-3. Все CTA — deep-link в бота
t.me/<bot>?start=<payload>. Payload несёт язык, UTM и код агентства, если он есть в URL лендинга (?a=<agency_code>). - LND-4. SEO-мета на каждом языке, OG-картинка, быстрая загрузка (Lighthouse ≥ 90 на мобильном).
- LND-5. Цены и тексты услуг подтягиваются из справочника, а не хардкодятся.
5.2 Онбординг в боте (ONB)
- ONB-1.
/startс payload: определить язык и агентство, создать клиента и сохранить источник (агентство, UTM). - ONB-2. Если язык не пришёл — выбор из 5 языков.
- ONB-3. Согласие на обработку персональных данных (ссылка на политику), без согласия дальше не пускать.
- ONB-4. Если клиент пришёл с кодом агентства — автоматически активировать подарочный месяц Barev+ и показать сообщение.
- ONB-5. Кнопка «Открыть приложение» запускает Mini App.
- ONB-6. Ручной ввод промокода агентства, если клиент пришёл без deep-link.
5.3 Каталог и заказ (ORD)
- ORD-1. Главная Mini App:
- приветствие;
- блок «Мои заявки» с активными заказами;
- быстрые кнопки;
- плитки 4 направлений;
- нижняя навигация: Главная / Услуги / + / Скидки / Профиль.
- ORD-2. Карточка услуги с параметрами, зависящими от услуги:
- клининг: тип уборки, примерная длительность;
- ремонт: категория и описание проблемы с фото;
- трансфер: рейс, количество пассажиров и багажа, адрес;
- языки: язык, уровень, онлайн/офлайн, пакет уроков;
- консультант: тема, загрузка резюме;
- документы: тип документа, загрузка сканов, для кого (сам / члены семьи).
- ORD-3. Выбор даты и времени из доступных слотов (для трансфера — время рейса).
- ORD-4. Расчёт цены: базовая цена по параметрам минус скидка Barev+ по направлению. Показывать строки «Стоимость», «Скидка Barev+», «Итого».
- ORD-5. Подтверждение заказа → статус «Новый» → уведомление клиенту и в админку.
- ORD-6. Бесплатная отмена и перенос — не позднее чем за 24 часа до начала услуги. Позже — отмена с удержанием (процент настраивается в админке по услугам) или только через оператора. Порог 24 ч тоже хранится в настройках, не в коде.
- ORD-7. Заказ «Повторить» из истории с теми же параметрами.
5.4 Статусы заказов (STS)
Своя последовательность статусов для каждой категории (state machine с проверкой допустимых переходов):
| Категория | Статусы |
|---|---|
| Клининг | Новый → Назначен → В пути → Уборка → Готово |
| Ремонт | Новый → Назначен → На месте → Смета согласована клиентом → Ремонт → Готово |
| Трансфер | Новый → Назначен → Водитель ждёт → В пути → Завершён |
| Языки | Записан → Урок N запланирован → Идёт урок → Урок завершён (прогресс «урок N из M») |
| Карьера | Новый → Консультант назначен → Резюме получено → Встреча → План отправлен |
| Документы | Новый → Документы проверяются → Подача → Готово (+ «Нужны доп. документы») |
Плюс «Отменён» из допустимых состояний. Каждый переход пишется в историю: кто, когда, комментарий. Клиент получает уведомление о каждом переходе.
- STS-1. В ремонте исполнитель вносит смету, клиент принимает или отклоняет её в Mini App. Без согласия переход в «Ремонт» невозможен.
5.5 Кабинет исполнителя (PRO)
- PRO-1. Шапка: имя, роль, статус смены (на смене / не на смене), заработок за день, рейтинг.
- PRO-2. Список заказов на сегодня; «Сейчас» — текущий заказ:
- адрес или «Онлайн»;
- язык клиента;
- заметка клиента.
- PRO-3. Пошаговые кнопки по роли:
- клинер: «Я на месте» → «Начать уборку» → чек-лист зон → «Завершить и отправить фото»;
- мастер: «Я на месте» → «Начать работу» → чек-лист «Диагностика / Смета / Ремонт / Фото» → «Закрыть»;
- водитель: «Я в аэропорту» → «Пассажир в машине» → «Багаж, адрес» → «Завершить поездку»;
- преподаватель: «Открыть урок» → «Начать» → «Повторение / Новая тема / ДЗ» → «Завершить урок»;
- консультант: «Открыть встречу» → «Начать» → «Резюме / План / Материалы» → «Завершить».
- PRO-4. Закрыть заказ нельзя, пока не отмечены все пункты чек-листа. Фото обязательно там, где требует чек-лист.
- PRO-5. Исполнитель принимает или отклоняет назначенный заказ (таймаут настраивается). Отказ возвращает заказ в «Новые».
- PRO-7. Заказ можно назначить на частного исполнителя или на компанию-партнёра. Во втором случае диспетчер компании в боте исполнителей назначает конкретного сотрудника; до этого заказ в админке помечен «Назначен на компанию».
- PRO-8. Выплаты: для фрилансеров ставка задаётся на исполнителе (фикс за услугу или % от заказа — выбирается в профиле исполнителя); для компаний — договорная ставка на уровне компании. Расчёт выплат — в разделе финансов админки.
- PRO-6. История заказов и заработок за период.
5.6 Веб-админка (ADM)
- ADM-1. Канбан заказов: Новые / Назначены / В работе / Готово, фильтр по направлению и услуге, по дате, поиск.
- ADM-2. Сводка: всего заказов, без исполнителя, выручка за день, свободные исполнители.
- ADM-3. Назначение исполнителя:
- система подсказывает свободного исполнителя нужной категории с учётом языка клиента, района и текущей загрузки;
- назначение в один клик или выбор вручную.
- ADM-4. Карточка заказа: параметры, история статусов, переписка, файлы, цена, оплата.
- ADM-5. Справочники:
- направления и услуги с параметрами и ценами;
- исполнители: роль, языки, районы, график, ставка;
- партнёры: категория, скидка, адрес, условия;
- агентства: код, условия вознаграждения;
- промокоды;
- тарифы Barev+ и скидки по направлениям.
- ADM-6. Клиенты: список, профиль, заказы, источник (агентство), статус Barev+.
- ADM-7. Финансы:
- выручка по услугам;
- выплаты исполнителям за период;
- вознаграждение агентствам;
- экспорт в CSV.
- ADM-8. Отчёт по агентствам: лиды → активировали → заказали → оплаченная выручка → начисленное вознаграждение (% агентства от оплаченных заказов его клиентов). Процент задаётся на агентстве; срок, в течение которого клиент «принадлежит» агентству, — настройка (см. раздел 13). Выгрузка акта за месяц в CSV.
- ADM-9. Роли в админке: владелец (всё) и оператор (без финансов и настроек).
5.7 Чат и уведомления (MSG)
- MSG-1. Чат клиент ↔ исполнитель внутри заказа через бота-посредника; номера телефонов не раскрываются. Чат закрывается после завершения заказа + N часов.
- MSG-2. Push в Telegram:
- смена статуса;
- назначение;
- напоминание за 24 часа и за 1 час;
- просьба оценить.
- MSG-3. Все сообщения бота — на языке пользователя.
5.8 Скидки и клубная карта (CRD)
- CRD-1. Клубная карта в Mini App: имя, уровень (Barev / Barev+), QR и короткий код.
- CRD-2. Каталог партнёров: категория, скидка или подарок, адрес, условия.
- CRD-3. Публичная страница проверки карты для партнёра (
/check/<code>): действительна ли карта, уровень. Персональных данных кроме имени не показывать. - CRD-4. Логирование использований карты у партнёров для отчёта.
5.9 Членство Barev / Barev+ (SUB)
- SUB-1. Barev — бесплатно: каталог, клубная карта, скидки партнёров.
- SUB-2. Barev+ — ежемесячная подписка: скидка N% на Документы, Быт, Обучение и карьеру (проценты настраиваются по направлениям).
- SUB-3. Подарочный месяц по коду агентства, один раз на клиента. Напоминание за 3 дня до окончания.
- SUB-4. Экран выбора членства с переключением тарифов, как в макете.
5.10 Оценки (RTG)
- RTG-1. После завершения — оценка 1–5 и комментарий. Рейтинг исполнителя считается автоматически.
- RTG-2. Оценка ≤ 3 создаёт задачу для оператора.
5.11 Оплата (PAY)
- PAY-1. Способ оплаты на старте ещё не выбран. В MVP: заказ имеет поле «способ оплаты» (справочник, настраивается в админке) и статус оплаты; админ или исполнитель отмечает «оплачено» вручную. Никакой реальной интеграции с платёжкой в Этапах 1–2.
- PAY-2. Этап 3: онлайн-оплата и рекуррентная подписка через платёжного провайдера, работающего в Армении (выбор провайдера — открытый вопрос). Архитектуру сразу заложить через абстракцию
PaymentProviderс заглушкойManualPaymentProvider. - PAY-3. Вознаграждение агентств и выплаты исполнителям считаются только по заказам со статусом оплаты «оплачено».
6. Нефункциональные требования
- Безопасность:
- проверка подписи Telegram
initDataна бэкенде для каждого запроса Mini App; - RBAC по ролям;
- админка за логином с 2FA.
- проверка подписи Telegram
- Персональные данные:
- сканы паспортов и документов хранятся в приватном объектном хранилище с шифрованием;
- доступ по временным ссылкам только у оператора и назначенного исполнителя «Документы»;
- автоудаление через 90 дней после завершения заказа (значение в настройках);
- логирование доступа к файлам.
- i18n: 5 языков. RU — исходный язык. EN, ZH, HY, ES — машинный черновой перевод, который делаешь ты; каждый ключ помечается статусом
needs_review, пока носитель языка его не проверит. Сделай простой экран или экспорт (CSV/JSON) для проверки переводов носителями. Направление письма везде LTR. Шрифты с поддержкой кириллицы, армянского и китайского: фолбэк для армянского и китайского, если основной шрифт их не поддерживает. - Время: часовой пояс Asia/Yerevan. Валюта — драм (֏).
- Надёжность:
- ежедневные бэкапы БД;
- логирование ошибок (Sentry или аналог);
- аудит-лог действий админов.
- Производительность: Mini App открывается быстрее 2 секунд на 4G.
- Масштаб MVP: до нескольких тысяч клиентов и сотен заказов в день, без микросервисов.
7. Модель данных (основные сущности)
User (telegram_id, роль, язык, имя, телефон?) · Client (источник/агентство, UTM, статус подписки) · Provider (роль-подтип, частный или сотрудник компании, языки, районы, график, тип ставки и ставка, рейтинг, на смене) · ProviderCompany (название, категории услуг, диспетчеры, договорная ставка) · AgencyCommission (агентство, заказ, % и сумма, период) · Category · Service (параметры как JSON-схема, базовая цена) · Order (клиент, услуга, параметры, слот, адрес/онлайн, цена, скидка, итог, статус, исполнитель, оплата) · OrderStatusHistory · ChecklistItem / OrderChecklist · Estimate (смета ремонта) · OrderFile · Message · Rating · LessonPackage (уроков всего / пройдено) · Partner · CardUsage · Subscription · Agency · PromoCode · Payout · AdminUser · AuditLog.
8. Рекомендуемый стек (можно предложить лучше и обосновать)
- Монорепо (pnpm/turborepo):
apps/landing,apps/miniapp-client,apps/miniapp-pro,apps/admin,apps/bot-client,apps/bot-pro,packages/db,packages/ui,packages/i18n,packages/core(бизнес-логика, state machines). - Фронт: Next.js + TypeScript (лендинг, админка), React + Vite (оба Mini App) с Telegram WebApp SDK.
- Боты: Node.js + grammY, два отдельных бота с общей бизнес-логикой из
packages/core. - БД: PostgreSQL + Prisma.
- Хранилище файлов: S3-совместимое, приватные бакеты.
- Очереди и напоминания: BullMQ + Redis или cron.
- Деплой: Docker. Один сервер на MVP, staging и prod окружения.
9. Дизайн-система (из макетов Barev Club)
- Цвета:
- фон
#FBF6EE, текст#1E1B1A, вторичный текст#5C5550, акцент#B8235A, заголовки на розовом#4A1028; - направления: Быт
#A8C38A, Документы#F9CDB0, Обучение и карьера#CFC8F5, Скидки и подарки#F7DA6E; - дополнительные: розовый
#F6C3D3, голубой#BCD0F2.
- фон
- Шрифты: заголовки Rubik (700–800, приём «жирное + курсив»), текст Onest.
- Форма: крупные скругления (карточки 24–40px, кнопки-таблетки 999px), тёмная нижняя навигация-таблетка с белой «+» по центру, декоративные «цветы» (scalloped shapes).
- Доступность: контраст текста ≥ 4.5:1, зоны нажатия ≥ 44px.
- Сделать
packages/uiс токенами и компонентами, чтобы лендинг, Mini App и админка выглядели единообразно.
10. Ключевые пользовательские сценарии
- Клиент из агентства: QR в договоре → лендинг или сразу бот с кодом агентства → язык → согласие → подарочный Barev+ → заказ клининга со скидкой → статус «Назначен» → чат с клинером → «Готово» с фотоотчётом → оценка.
- Трансфер: заказ с номером рейса → водитель назначен → «Водитель ждёт» → «В пути» → «Завершён».
- Ремонт со сметой: мастер на месте → вносит смету → клиент согласует → ремонт → фото → закрытие.
- Документы: клиент выбирает «Соцкарта» → загружает сканы → оператор проверяет → «Нужны доп. документы» или «Подача» → «Готово».
- Языки: покупка пакета из M уроков → расписание → каждый урок закрывается преподавателем → прогресс «урок N из M».
- Скидка у партнёра: клиент показывает карту → партнёр открывает страницу проверки → использование логируется.
- Админ: новый заказ появляется в канбане → «Назначить: <подсказанный исполнитель>» → исполнитель принимает.
11. Этапы
- Этап 1 (MVP-ядро):
- монорепо, БД, i18n,
packages/ui; - лендинг v2;
- бот с онбордингом и кодами агентств;
- Mini App клиента: каталог, заказ, «Мои заявки», статусы;
- услуги Клининг и Трансфер;
- админка: канбан, назначение, справочники услуг и исполнителей;
- бот исполнителей и его Mini App для клинера и водителя (частные исполнители и диспетчер компании);
- уведомления; оплата отмечается вручную;
- машинный перевод на 5 языков со статусом
needs_review.
- монорепо, БД, i18n,
- Этап 2:
- Ремонт со сметой, Документы с загрузкой файлов, Языки (пакеты уроков), Карьерный консультант;
- чат через бота;
- оценки;
- отчёт по агентствам;
- финансы и выплаты.
- Этап 3:
- клубная карта и партнёры со страницей проверки;
- Barev+ с подарочным месяцем, затем онлайн-оплата и рекуррентная подписка;
- аудит и автоудаление файлов.
12. Критерии приёмки (по этапу 1)
- Лендинг на 5 языках, все CTA ведут в бота с правильным payload (язык, агентство, UTM).
/startс кодом агентства создаёт клиента с источником и активирует подарочный Barev+.- Клиент оформляет клининг и трансфер, видит итог со скидкой, получает уведомление о каждом статусе.
- Недопустимый переход статуса отклоняется бэкендом (тесты на state machine для каждой категории).
- В админке новый заказ появляется в «Новых». Кнопка назначения предлагает свободного исполнителя нужной категории с учётом языка, назначение уходит исполнителю.
- Исполнитель не может закрыть заказ без всех пунктов чек-листа.
- Все строки интерфейса переведены (проверка: нет ключей без перевода).
- Запросы Mini App без валидного
initDataотклоняются. - Seed-данные позволяют пройти все сценарии этапа на staging.
13. Принятые решения и открытые вопросы
Уже решено владельцем:
- Оплата на старте не выбрана → ручная отметка «оплачено», абстракция
PaymentProvider(PAY-1, PAY-2). - Исполнители смешанные: фрилансеры и компании-партнёры (PRO-7, PRO-8).
- Агентства получают % от оплаченных заказов привлечённых клиентов (ADM-8, PAY-3).
- Для исполнителей — отдельный Telegram-бот (раздел 4).
- Бесплатная отмена и перенос — за 24 часа до услуги (ORD-6).
- Сканы документов хранятся 90 дней после завершения заказа (раздел 6).
- Переводы: машинный черновик + проверка носителем (раздел 6).
- Домен есть, ботов ещё нет — создаём в BotFather (раздел 4).
Ещё открыто (спроси перед стартом, а пока используй дефолты из скобок):
- Цены по услугам, % скидки Barev+ по направлениям и цена подписки (пока seed-значения-заглушки в админке).
- Какой % получают агентства и как долго клиент «закреплён» за агентством (пока 10% и 12 месяцев, обе настройки — в админке).
- Размер удержания при поздней отмене (пока 0%, настройка по услугам).
- Платёжный провайдер для Этапа 3.