Безопасность довёл до ума — Cursor-генерацию переписал руками. IDOR закрыл, CSRF задушил, refresh rotation теперь как надо. HSTS на staging, ENABLE_DOCS=false, install.env recovery протестил. Backend: - jwt_denylist + auth_epoch: мгновенный revoke access JWT (logout/block/reset) - auth/admin/users: bump epoch, logout с Bearer, forgot_password skip для blocked - install_secrets: путь всегда apps/api/data/secrets/ (bootstrap из корня не ломает Docker) - seed: SEED_DEMO_USERS=false на prod/staging - тесты: jwt revoke, integration, coverage gate 90% Frontend: - logout шлёт Bearer, обработка TOKEN_REVOKED - guards TypeScript fix - E2E: blocked user → 401 сразу после block Infra: - staging/prod compose, TLS nginx, deploy-скрипты - k6 §17.2, backup/health/smoke scripts Docs: - docs/ на русском: project, security, deploy, release (старые md слили) - README короткий + план ТЗ + стандартные логины dev Код готов к плаванию. Капитан может идти писать фронт.
5.4 KiB
Compton Platform
Если вы открыли этот файл — поздравляем: перед вами monorepo с React, FastAPI и амбициями выйти в production. Амбиции живут в docs/release.md, код — в apps/, секреты — не в git.
Платформа Compton Organic Tech: лендинг, auth, профиль, CMS, админка в стиле WESP/zootech. ТЗ: docs/TZ.md.
Быстрый старт
python apps/api/scripts/bootstrap_install.py # один раз, до первого up
docker compose --profile docker-web up -d --build
curl http://localhost:8000/api/v1/health # Windows: curl.exe
| URL | Что там |
|---|---|
| http://localhost:5173 | Лендинг / + SPA (/login, /admin, …) |
| http://localhost:8000/api/v1/health | API жив? |
| http://localhost:8000/api/v1/docs | OpenAPI (только dev) |
Логин для пробы: admin@compton.example / Admin1234 → /admin.
Bootstrap до первого
docker compose up. Иначе Postgres скажет «password authentication failed» — см. docs/deploy.md § восстановление.
Не делайте: Docker web и pnpm --filter web dev одновременно — оба хотят порт 5173.
Демо-аккаунты (dev)
Подробнее: docs/deploy.md § стандартные логины.
| Пароль | Env | Роль | Superuser | |
|---|---|---|---|---|
| admin@compton.example | Admin1234 | ADMIN_INITIAL_PASSWORD |
admin | да — Security, Diagnostics, secrets |
| ops@compton.example | OpsAdmin1234 | DEMO_OPS_PASSWORD |
admin | нет — Users, Content, Activity |
| user@compton.example | User1234 | DEMO_USER_PASSWORD |
user | — |
CMS после seed: /pages/about, /pages/privacy, /pages/terms.
В production/staging demo-users выключены (SEED_DEMO_USERS=false).
Тесты
pnpm --filter web test:ci # frontend, cov ≥ 85%
cd apps/api && python -m pytest --cov=app --cov-fail-under=90
pnpm --filter web e2e # Playwright, API :8001
Документация
Вся нормальная дока — в docs/, на русском, без водянистого README на 500 строк:
| Файл | О чём |
|---|---|
| docs/README.md | Оглавление |
| docs/project.md | Структура, архитектура, API, маршруты |
| docs/security.md | Auth, JWT revoke, секреты, чеклист prod |
| docs/deploy.md | Dev/staging/prod, бэкапы, troubleshooting |
| docs/release.md | QA gates, k6, ZAP, go-live |
| docs/TZ.md | Техническое задание |
Работа с Git
Репозиторий: https://git.groupkomton.ru/Matvey/site.git
Ветка: main (одна ветка, без сюрпризов)
git pull origin main # перед работой — всегда
git status && git diff # перед коммитом — тоже всегда
git add .
git commit -m "Сделал то-то на русском"
git push origin main
Коммиты — только на русском. Плохо: fix, WIP, asdf.
Не коммитить: .env, install.env, node_modules/, логи, кэши.
Не делать git push --force на main без согласования.
| Команда | Зачем |
|---|---|
git log --oneline -10 |
что было |
git checkout -- файл |
откатить файл |
git stash / git stash pop |
спрятать / вернуть правки |
План по ТЗ (§16)
| Фаза | Задачи | Статус |
|---|---|---|
| 0 — Подготовка | Monorepo, Docker Compose, UI kit, CI/coverage gates, Playwright smoke | Выполнено |
| 1 — MVP | Landing, Auth+SMTP, Profile, Content, Admin, staging + полный регресс | В процессе |
| 2 — v1.0 | Celery/notifications, Catalog+Orders, Analytics, k6 + monitoring | Когда начнём? |
| 3 — Scale | Read replica PG, Celery workers, CDN, horizontal API | Когда начнём? |
Фаза 1 — детализация
| # | Задача | Модули | Статус |
|---|---|---|---|
| 1.1 | Landing (перенос заглушки) | landing | Выполнено |
| 1.2 | Auth + SMTP | auth | Выполнено |
| 1.2b | Security baseline | core, auth | В процессе |
| 1.3 | Profile CRUD + avatar | profile | Выполнено |
| 1.4 | Content pages | content | Выполнено |
| 1.5 | Admin panel | admin | Выполнено |
| 1.6 | Staging deploy + полный регресс (§15.7) | — | В процессе |
Критерии приёмки MVP — §17.1 ТЗ (k6 50 CCU, Lighthouse ≥85, E2E 10/10, coverage gates).
Дальше — docs/. Там схемы, таблицы и вещи, которые не помещаются в README без страданий.