From 45d7512d2b7060936202cb847c79491160bdef6a Mon Sep 17 00:00:00 2001 From: zabudko-ru Date: Sat, 17 Oct 2026 19:45:51 +0400 Subject: [PATCH] Monorepo skeleton, Prisma schema, core domain and services with tests Co-Authored-By: Claude Opus 5.5 (1M context) --- .editorconfig | 7 + .env.example | 49 + .gitignore | 11 + docs/PRD.md | 328 ++ docs/design/landing-v2.zip | Bin 0 -> 216381 bytes docs/design/landing-v2/MainV2.dc.html | 222 ++ docs/design/landing-v2/README.md | 21 + docs/design/landing-v2/support.js | 48 + docs/design/landing-v2/vendor/react-dom.js | 267 ++ docs/design/landing-v2/vendor/react.js | 31 + infra/docker-compose.dev.yml | 29 + infra/seaweed-s3.json | 9 + package.json | 28 + packages/core/package.json | 19 + packages/core/src/assignment.ts | 77 + packages/core/src/cancellation.ts | 31 + packages/core/src/catalog.ts | 210 ++ packages/core/src/deeplink.ts | 71 + packages/core/src/domain.test.ts | 269 ++ packages/core/src/flows/definitions.ts | 132 + packages/core/src/flows/flows.test.ts | 166 + packages/core/src/flows/index.ts | 3 + packages/core/src/flows/machine.ts | 122 + packages/core/src/flows/types.ts | 63 + packages/core/src/index.ts | 14 + packages/core/src/membership.ts | 59 + packages/core/src/params.ts | 91 + packages/core/src/payments.ts | 36 + packages/core/src/pricing.ts | 87 + packages/core/src/promo.ts | 26 + packages/core/src/settings.ts | 44 + packages/core/src/slots.ts | 74 + packages/core/src/time.ts | 65 + packages/core/src/types.ts | 28 + packages/core/tsconfig.json | 1 + packages/db/package.json | 29 + packages/db/prisma.config.ts | 11 + .../20261017153138_init/migration.sql | 824 +++++ .../db/prisma/migrations/migration_lock.toml | 3 + packages/db/prisma/schema.prisma | 749 +++++ packages/db/src/index.ts | 21 + packages/db/src/seed/index.ts | 351 +++ packages/db/tsconfig.json | 1 + packages/services/package.json | 23 + packages/services/src/assignment.ts | 279 ++ packages/services/src/availability.ts | 69 + packages/services/src/catalog.ts | 72 + packages/services/src/clients.ts | 205 ++ packages/services/src/context.ts | 62 + packages/services/src/index.ts | 10 + packages/services/src/orders.ts | 410 +++ packages/services/src/providers.ts | 197 ++ packages/services/src/queries.ts | 216 ++ packages/services/src/reminders.ts | 34 + packages/services/src/settings.ts | 11 + packages/services/test/flows.test.ts | 327 ++ packages/services/test/global-setup.ts | 23 + packages/services/test/helpers.ts | 87 + packages/services/tsconfig.json | 1 + packages/services/vitest.config.ts | 11 + pnpm-lock.yaml | 2679 +++++++++++++++++ pnpm-workspace.yaml | 11 + tsconfig.base.json | 18 + turbo.json | 11 + 64 files changed, 9483 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 docs/PRD.md create mode 100644 docs/design/landing-v2.zip create mode 100644 docs/design/landing-v2/MainV2.dc.html create mode 100644 docs/design/landing-v2/README.md create mode 100644 docs/design/landing-v2/support.js create mode 100644 docs/design/landing-v2/vendor/react-dom.js create mode 100644 docs/design/landing-v2/vendor/react.js create mode 100644 infra/docker-compose.dev.yml create mode 100644 infra/seaweed-s3.json create mode 100644 package.json create mode 100644 packages/core/package.json create mode 100644 packages/core/src/assignment.ts create mode 100644 packages/core/src/cancellation.ts create mode 100644 packages/core/src/catalog.ts create mode 100644 packages/core/src/deeplink.ts create mode 100644 packages/core/src/domain.test.ts create mode 100644 packages/core/src/flows/definitions.ts create mode 100644 packages/core/src/flows/flows.test.ts create mode 100644 packages/core/src/flows/index.ts create mode 100644 packages/core/src/flows/machine.ts create mode 100644 packages/core/src/flows/types.ts create mode 100644 packages/core/src/index.ts create mode 100644 packages/core/src/membership.ts create mode 100644 packages/core/src/params.ts create mode 100644 packages/core/src/payments.ts create mode 100644 packages/core/src/pricing.ts create mode 100644 packages/core/src/promo.ts create mode 100644 packages/core/src/settings.ts create mode 100644 packages/core/src/slots.ts create mode 100644 packages/core/src/time.ts create mode 100644 packages/core/src/types.ts create mode 100644 packages/core/tsconfig.json create mode 100644 packages/db/package.json create mode 100644 packages/db/prisma.config.ts create mode 100644 packages/db/prisma/migrations/20261017153138_init/migration.sql create mode 100644 packages/db/prisma/migrations/migration_lock.toml create mode 100644 packages/db/prisma/schema.prisma create mode 100644 packages/db/src/index.ts create mode 100644 packages/db/src/seed/index.ts create mode 100644 packages/db/tsconfig.json create mode 100644 packages/services/package.json create mode 100644 packages/services/src/assignment.ts create mode 100644 packages/services/src/availability.ts create mode 100644 packages/services/src/catalog.ts create mode 100644 packages/services/src/clients.ts create mode 100644 packages/services/src/context.ts create mode 100644 packages/services/src/index.ts create mode 100644 packages/services/src/orders.ts create mode 100644 packages/services/src/providers.ts create mode 100644 packages/services/src/queries.ts create mode 100644 packages/services/src/reminders.ts create mode 100644 packages/services/src/settings.ts create mode 100644 packages/services/test/flows.test.ts create mode 100644 packages/services/test/global-setup.ts create mode 100644 packages/services/test/helpers.ts create mode 100644 packages/services/tsconfig.json create mode 100644 packages/services/vitest.config.ts create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 tsconfig.base.json create mode 100644 turbo.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..4ba6ec8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +root = true +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +insert_final_newline = true diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..44a2c2e --- /dev/null +++ b/.env.example @@ -0,0 +1,49 @@ +# ---- Общие ---- +NODE_ENV=development +TZ=Asia/Yerevan + +# ---- База и очереди (значения совпадают с infra/docker-compose.dev.yml) ---- +DATABASE_URL=postgresql://barev:barev@localhost:5434/barev +REDIS_URL=redis://localhost:6380 + +# ---- Telegram ---- +# Токены из BotFather. Без них API работает, а боты не стартуют. +CLIENT_BOT_TOKEN= +PRO_BOT_TOKEN= +# username ботов без @ — используется в deep-link на лендинге +CLIENT_BOT_USERNAME=barev_club_bot +PRO_BOT_USERNAME=barev_pro_bot +# Время жизни initData в секундах +TG_INIT_DATA_MAX_AGE=86400 + +# ---- Адреса приложений ---- +LANDING_DOMAIN=localhost:3000 +LANDING_URL=http://localhost:3000 +API_URL=http://localhost:4000 +CLIENT_MINIAPP_URL=http://localhost:5174 +PRO_MINIAPP_URL=http://localhost:5175 +ADMIN_URL=http://localhost:5173 +API_PORT=4000 + +# ---- Админка ---- +# Секрет для подписи сессий админки (любая длинная случайная строка) +ADMIN_SESSION_SECRET=change-me-to-a-long-random-string +# Первый владелец создаётся seed-скриптом +SEED_OWNER_EMAIL=owner@barev.local +SEED_OWNER_PASSWORD=barev-owner-123 + +# ---- Объектное хранилище (S3-совместимое) ---- +S3_ENDPOINT=http://localhost:9000 +S3_REGION=us-east-1 +S3_BUCKET=barev-private +S3_ACCESS_KEY=barev +S3_SECRET_KEY=barev-secret + +# ---- Мониторинг ---- +SENTRY_DSN= + +# ---- Только для локальной разработки ---- +# Если токенов ботов ещё нет, initData для браузера подписывается этими значениями. +# В production не используется. +DEV_CLIENT_BOT_TOKEN=000000:dev-client-token +DEV_PRO_BOT_TOKEN=000000:dev-pro-token diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b55b9d0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +node_modules +dist +.next +.turbo +coverage +*.log +.env +.env.* +!.env.example +.DS_Store +packages/db/src/generated diff --git a/docs/PRD.md b/docs/PRD.md new file mode 100644 index 0000000..638daad --- /dev/null +++ b/docs/PRD.md @@ -0,0 +1,328 @@ +# 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. Каналы и поверхности + +1. **Лендинг** (веб, адаптив) — за основу дизайн «Лендинг v2 · плотный». +2. **Клиентский Telegram-бот** — точка входа, онбординг, уведомления, ретрансляция чата. +3. **Клиентский Mini App** — основной интерфейс клиента. +4. **Бот исполнителей + его Mini App** — отдельный бот: назначения, принятие заказов, пошаговые статусы, чек-листы, фотоотчёты, заработок; роль «диспетчер компании» для компаний-партнёров. +5. **Веб-админка** — для операторов, 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/?start=`. Payload несёт язык, UTM и код агентства, если он есть в URL лендинга (`?a=`). +- **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/`): действительна ли карта, уровень. Персональных данных кроме имени не показывать. +- **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. +- **Персональные данные:** + - сканы паспортов и документов хранятся в приватном объектном хранилище с шифрованием; + - доступ по временным ссылкам только у оператора и назначенного исполнителя «Документы»; + - автоудаление через **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. Ключевые пользовательские сценарии +1. **Клиент из агентства:** QR в договоре → лендинг или сразу бот с кодом агентства → язык → согласие → подарочный Barev+ → заказ клининга со скидкой → статус «Назначен» → чат с клинером → «Готово» с фотоотчётом → оценка. +2. **Трансфер:** заказ с номером рейса → водитель назначен → «Водитель ждёт» → «В пути» → «Завершён». +3. **Ремонт со сметой:** мастер на месте → вносит смету → клиент согласует → ремонт → фото → закрытие. +4. **Документы:** клиент выбирает «Соцкарта» → загружает сканы → оператор проверяет → «Нужны доп. документы» или «Подача» → «Готово». +5. **Языки:** покупка пакета из M уроков → расписание → каждый урок закрывается преподавателем → прогресс «урок N из M». +6. **Скидка у партнёра:** клиент показывает карту → партнёр открывает страницу проверки → использование логируется. +7. **Админ:** новый заказ появляется в канбане → «Назначить: <подсказанный исполнитель>» → исполнитель принимает. + +--- + +## 11. Этапы +- **Этап 1 (MVP-ядро):** + - монорепо, БД, i18n, `packages/ui`; + - лендинг v2; + - бот с онбордингом и кодами агентств; + - Mini App клиента: каталог, заказ, «Мои заявки», статусы; + - услуги **Клининг и Трансфер**; + - админка: канбан, назначение, справочники услуг и исполнителей; + - бот исполнителей и его Mini App для клинера и водителя (частные исполнители и диспетчер компании); + - уведомления; оплата отмечается вручную; + - машинный перевод на 5 языков со статусом `needs_review`. +- **Этап 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). + +**Ещё открыто (спроси перед стартом, а пока используй дефолты из скобок):** +1. Цены по услугам, % скидки Barev+ по направлениям и цена подписки (пока seed-значения-заглушки в админке). +2. Какой % получают агентства и как долго клиент «закреплён» за агентством (пока 10% и 12 месяцев, обе настройки — в админке). +3. Размер удержания при поздней отмене (пока 0%, настройка по услугам). +4. Платёжный провайдер для Этапа 3. diff --git a/docs/design/landing-v2.zip b/docs/design/landing-v2.zip new file mode 100644 index 0000000000000000000000000000000000000000..50cf7985b51dd2af8cd4e86a4b40e1380b493c47 GIT binary patch literal 216381 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ν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 literal 0 HcmV?d00001 diff --git a/docs/design/landing-v2/MainV2.dc.html b/docs/design/landing-v2/MainV2.dc.html new file mode 100644 index 0000000..3aa72ce --- /dev/null +++ b/docs/design/landing-v2/MainV2.dc.html @@ -0,0 +1,222 @@ + + + + +Barev Club — лендинг v2 + + + + + + + + + + +

+
+ +
+
+ +
Barev Club
+
+ +
+ + + +Открыть в Telegram +
+
+ +
+
+
Для тех, кто переехал в Ереван
+

{{title}}

+

{{sub}}

+ +
+
1
Открой бота в Telegram
+
2
Выбери услугу и время
+
3
Следи за статусом в приложении
+
+
+ +
+
+
Мои заявки
в приложении
+
Трансфер · аэропорт → дом
Сегодня 12:30
Ждёт вас
+
Клининг · генеральная
Сб 16:00
Назначен
+
Соцкарта
Документы проверяются
В работе
+
Армянский A1 · урок 3
Сегодня 15:00 · онлайн
Сегодня
+
+
+
+
+ +
5
+
+
языков:
RU EN 中文 HY ES
+
+
+
Без установки
+
Всё внутри Telegram
+
+
+
+
+ +
+
+
Быт
+
+
+
Клинингот [ЦЕНА] ֏
+
Ремонтот [ЦЕНА] ֏
+
Трансферот [ЦЕНА] ֏
+
+
Проверенные исполнители, статус заказа в приложении.
+Заказать → +
+
+
Документы
+
+
+
Соцкартаот [ЦЕНА] ֏
+
Перевод паспортаот [ЦЕНА] ֏
+
ВНЖот [ЦЕНА] ֏
+
+
Нотариальный перевод и сопровождение до готового документа.
+Оформить → +
+
+
Обучение и карьера
+
+
+
Армянскийот [ЦЕНА] ֏
+
Английскийот [ЦЕНА] ֏
+
Карьерный консультантот [ЦЕНА] ֏
+
+
Онлайн и офлайн, в удобное время.
+Записаться → +
+
+
Скидки и подарки
+
+
до −[N]%
+
+Кофейни +Рестораны +Подарки партнёров +
+
Покажи клубную карту в Telegram на кассе.
+Смотреть партнёров → +
+
+ +
+
+

Как это работает

+
+
1
Отсканируй QR
Из договора аренды или с сайта
+
2
Выбери язык
Пять языков на выбор
+
3
Закажи услугу
Время, адрес, оплата
+
4
Следи за статусом
Чат с исполнителем внутри
+
+
+
+
+
Сняли квартиру через [АГЕНТСТВО]?
+
Код на месяц Barev+ уже в договоре.
+
+
+
Подарок!
+
1 месяц Barev+
+
+
+
+ +
+
+
Barev
0 ֏
+
+
Скидки и подарки партнёров
+
Все услуги по обычной цене
+
Статусы заявок и чат
+
+Вступить бесплатно +
+
+
Barev+
[ЦЕНА] ֏/мес
+
+
Всё из Barev
+
−[N]% на документы и быт
+
−[N]% на обучение и карьеру
+
+Попробовать Barev+ +
+
+
Вопросы
+ +
+ + +
{{q.a}}
+
+
+
+
+
+ + +
+
+ + + + diff --git a/docs/design/landing-v2/README.md b/docs/design/landing-v2/README.md new file mode 100644 index 0000000..7c6c4e9 --- /dev/null +++ b/docs/design/landing-v2/README.md @@ -0,0 +1,21 @@ +# Лендинг v2 · плотный — design reference + +This is a design mockup created in a visual design tool, exported as a +standalone page. Treat it as a REFERENCE MOCKUP, not production code: +the markup and inline styles carry the design's precise values — colors, +font sizes, spacing, radii, shadows, layout — which an implementation +should replicate faithfully in its own components and styling system +rather than copy wholesale. + +## Contents + +- `MainV2.dc.html` — the artboard (a Design Component: an `` + template + a small logic class). The values to replicate live in its + inline `style="…"` attributes and the `