Skip to content

Soft-launch чеклист

Контрольный список перед публичным запуском платформы. Проходим каждый блок по порядку и фиксируем результат в трекере (Linear/issues/#status).

1. Юридическая база

  • [ ] Зарегистрировано ИП на УСН 6% (или ООО на УСН 15%); ОКВЭД 62.01, 62.02, 63.11. Расчётный счёт в банке открыт.
  • [ ] Реквизиты подставлены в .env (LEGAL_*); страница /legal/requisites (см. frontend/src/pages/legal/Requisites.vue) показывает правильные ИНН/ОГРНИП/адрес.
  • [ ] Опубликована публичная оферта (/legal/offer), утверждена дата вступления в силу (LEGAL_EFFECTIVE_DATE, LEGAL_OFFER_VERSION).
  • [ ] Опубликована политика конфиденциальности (/legal/privacy), проверена юристом.
  • [ ] Опубликовано согласие на обработку ПД (/legal/consent).
  • [ ] Подана уведомление оператора ПД в РКН (или подтверждено, что мы попадаем под исключения ст. 22 152-ФЗ). После регистрации в реестре номер записан в LEGAL_PDN_OPERATOR_ID.
  • [ ] Регистрационная форма требует двух отдельных согласий (оферта + ПД); даты согласий хранятся в users.accepted_offer_at, users.accepted_pdn_at.

2. Платежи (ЮKassa)

  • [ ] Магазин в ЮKassa переведён в боевой режим, прошёл проверку.
  • [ ] Боевые YOOKASSA_SHOP_ID и YOOKASSA_SECRET_KEY лежат в infra/secrets/.env.enc (sops/age).
  • [ ] В личном кабинете ЮKassa заведены webhook-ы: payment.succeeded, payment.canceled, payment.waiting_for_capture, refund.succeeded. URL — https://app.<домен>/webhooks/yookassa?secret=<YOOKASSA_WEBHOOK_SECRET>.
  • [ ] IP-allowlist ЮKassa активен на Caddy (см. infra/caddy/Caddyfile).
  • [ ] Чеки 54-ФЗ проходят: тестовый платёж → email с чеком получен.
  • [ ] Возвраты: проверен сценарий рефанда из ЛК ЮKassa → payment.status = refunded, баланс пользователя списан.
  • [ ] СБП и YooMoney включены как способы оплаты (если нужны).

3. Безопасность

  • [ ] Пройден OWASP ZAP baseline (workflow .github/workflows/zap-baseline.yml); все HIGH-алерты закрыты или обоснованно перенесены в .github/zap/rules.tsv.
  • [ ] HTTPS-рейтинг по SSL Labs ≥ A.
  • [ ] HSTS, CSP, X-Frame-Options проверены через securityheaders.com — рейтинг ≥ A.
  • [ ] Nuclei-сканер прошёл по списку популярных шаблонов (запуск из CI).
  • [ ] Все секреты в .env.enc зашифрованы sops/age, ключ от age хранится только в GitHub Secrets и у ответственного DevOps.
  • [ ] Резервная копия age-ключа сохранена офлайн (бумажный QR/seed-фраза в сейфе).
  • [ ] Включена двухфакторная аутентификация (TOTP) для аккаунтов с ролью admin.

4. Резервирование данных

  • [ ] Workflow .github/workflows/backup.yml отрабатывает успешно (тестовый запуск через workflow_dispatch).
  • [ ] Дамп app-postgres восстановлен на резервный инстанс, проверен SELECT count(*) FROM users; и payments.
  • [ ] Retention 30 дней действует, S3-bucket приватный, ACL=private.

5. Наблюдаемость

  • [ ] Все *Down-алерты Prometheus тестово триггерились (kill контейнера) и доставлялись в Telegram (@llmgw_alerts).
  • [ ] Grafana-дашборды llmgw · Overview, llmgw · LiteLLM & OpenRouter, llmgw · FastAPI загружены и отображают данные.
  • [ ] Loki ловит логи с level=error за последние 24 часа, отфильтровано по request_id.

6. Бизнес-проверки

  • [ ] Welcome-бонус 150 ₽ выдаётся один раз при пополнении ≥ 1000 ₽ (проверено bonuses table).
  • [ ] Триал 30 ₽ начисляется при подтверждении email только однажды.
  • [ ] При balance ≤ 0 все ключи блокируются, при пополнении — снова активируются (e2e сценарий пройден).
  • [ ] Тарифы синхронизированы с LiteLLM (pricing_sync прошёл без ошибок); цены в ₽ за 1M токенов отображаются в кабинете.

7. Документация и поддержка

  • [ ] VitePress-доки на docs.<домен> доступны, /quickstart копируется без ошибок.
  • [ ] В docs/index.md обновлены контакты поддержки и ссылка на Telegram-канал.
  • [ ] Email support@<домен> настроен на единый ящик; SLA в оферте соответствует реальному.
  • [ ] Telegram-канал статуса t.me/llmgw_status создан и закреплён.

8. Smoke-тест перед публикацией

bash
# 1. Регистрация
curl -X POST https://app.<домен>/api/v1/auth/register \
  -H 'Content-Type: application/json' \
  -d '{"email":"smoke@test.example","password":"Test12345!",
       "accept_offer":true,"accept_pdn":true}'

# 2. Подтверждение почты, создание ключа, минимальное пополнение 100 ₽
# 3. curl на боевой LiteLLM
curl https://api.<домен>/v1/chat/completions \
  -H "Authorization: Bearer $LLMBOX_KEY" \
  -d '{"model":"openai/gpt-4o-mini",
       "messages":[{"role":"user","content":"ping"}]}'

# 4. Проверка списания: баланс уменьшился, balance_ledger содержит запись.

9. Анонс

  • [ ] Лендинг готов, в Open Graph указаны корректные ссылки.
  • [ ] Telegram-канал статуса работает.
  • [ ] Подготовлен пост в Telegram-канал/VC.ru с описанием тарифов и особенностей.
  • [ ] План пост-MVP (рефералы, чат, Telegram-бот) согласован.

10. Откат

  • [ ] infra/scripts/restore.sh проверен на staging.
  • [ ] DNS-записи имеют TTL ≤ 300 секунд (быстрый rollback).
  • [ ] Документ «Disaster Recovery» (этот файл + раздел README) актуален.

© llmgw