Files
site/README.md
T
влад 12c983c0fc Шхуна не тонет: security, infra и доки на русском.
Безопасность довёл до ума — 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

Код готов к плаванию. Капитан может идти писать фронт.
2026-07-15 00:06:13 +03:00

113 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Compton Platform
Если вы открыли этот файл — поздравляем: перед вами monorepo с React, FastAPI и амбициями выйти в production. Амбиции живут в [docs/release.md](docs/release.md), код — в `apps/`, секреты — **не** в git.
Платформа Compton Organic Tech: лендинг, auth, профиль, CMS, админка в стиле WESP/zootech. ТЗ: [docs/TZ.md](docs/TZ.md).
## Быстрый старт
```bash
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 § восстановление](docs/deploy.md#восстановление-секретов).
**Не делайте:** Docker `web` и `pnpm --filter web dev` одновременно — оба хотят порт **5173**.
## Демо-аккаунты (dev)
Подробнее: [docs/deploy.md § стандартные логины](docs/deploy.md#стандартные-логины-dev).
| Email | Пароль | 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`).
## Тесты
```bash
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/README.md) | Оглавление |
| [docs/project.md](docs/project.md) | Структура, архитектура, API, маршруты |
| [docs/security.md](docs/security.md) | Auth, JWT revoke, секреты, чеклист prod |
| [docs/deploy.md](docs/deploy.md) | Dev/staging/prod, бэкапы, troubleshooting |
| [docs/release.md](docs/release.md) | QA gates, k6, ZAP, go-live |
| [docs/TZ.md](docs/TZ.md) | Техническое задание |
## Работа с Git
**Репозиторий:** https://git.groupkomton.ru/Matvey/site.git
**Ветка:** `main` (одна ветка, без сюрпризов)
```bash
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/](docs/README.md). Там схемы, таблицы и вещи, которые не помещаются в README без страданий.*