§ 05 · Технологии
Из чего собран
продукт
Раскрытие соответствует пункту 2 приказа Минцифры № 511 («информация об используемых языках программирования и инструментах разработки»). Состав указан точно — расхождение с реальным кодом нарушило бы требование о достоверности.
§ 05.1
Языки
программирования
| Язык | Где используется |
|---|---|
| Python 3.13 | Backend · бизнес-логика, API, фоновые задачи |
| TypeScript 5.x | Frontend и API-клиент, генерируемый из OpenAPI |
| JavaScript (ESM) | Сборка, конфиги, минимальные ручные скрипты |
| SQL | PostgreSQL · миграции, FTS-запросы, views |
| Bash / PowerShell | Скрипты бэкапа, инфраструктуры, dev-tooling |
§ 05.2
Инструменты разработки
и OSS-компоненты
Каждый компонент проверен на совместимость лицензии с коммерческим
использованием. Полный список и точные версии — в pyproject.toml и package.json репозитория.
Слой 01
Backend
- FastAPI 0.115+ MIT
- Uvicorn BSD-3-Clause
- Pydantic v2 MIT
- SQLAlchemy 2.0 async MIT
- Alembic MIT
- PyJWT[crypto] MIT
- Procrastinate · очередь в Postgres MIT
- slowapi · rate limiting MIT
- purgatory + tenacity · circuit breaker MIT
- structlog Apache-2.0
- aiosmtplib + Jinja2 · email MIT
- aiogram 3 · Telegram MIT
Слой 02
Frontend
- React 19 MIT
- Vite MIT
- shadcn/ui + Tailwind CSS 4 MIT
- @dnd-kit · drag-and-drop MIT
- TanStack Query MIT
- Zustand · UI-стейт MIT
- FullCalendar.io MIT
- Recharts MIT
Слой 03
Хранилища и инфраструктура
- PostgreSQL 16 PostgreSQL License
- Redis 7 BSD-3-Clause до 7.4 / RSALv2 далее
- nginx BSD-2-Clause
- Docker / Docker Compose Apache-2.0
- Yandex Cloud / Selectel · хостинг коммерческая услуга
- Bugsink · self-hosted Sentry-совместимый Funded OSS / MIT
- Uptime Kuma · мониторинг MIT
Слой 04
Качество кода
- ruff · lint + format MIT
- mypy --strict MIT
- pytest + pytest-asyncio MIT
- pytest-alembic · round-trip миграций MIT
- hypothesis · property-based тесты MPL-2.0
- testcontainers[postgres] MIT
- schemathesis · OpenAPI fuzz MIT
- Playwright · E2E Apache-2.0
§ 05.3
Архитектура
Модульный монолит на FastAPI: один процесс с двенадцатью изолированными модулями. Рядом — отдельный процесс Procrastinate для фоновых задач.
React SPA (TypeScript-клиент авто-генерируется из openapi.json)
│ HTTPS
▼
FastAPI · api/modules/
┌──────────────┬──────────────┬───────────────────────┐
│ auth │ spaces │ notifications │
│ users │ cards │ search │
│ ... │ ... │ billing · checklists │
└─┬────────────┴──────┬───────┴─────────┬─────────────┘
▼ ▼ ▼
PostgreSQL 16 Redis 7 Файлы на диске
5 schemas: кэш + сессии /data/uploads
auth · app · + LISTEN/NOTIFY (nginx X-Accel)
billing ·
notifications ·
audit
▲ ▲
│ │
Procrastinate worker (отдельный процесс)
generate_recurring · send_email · send_telegram
daily_digest · daily_backup · check_schedules § 05.4
Безопасность
- 01
Аутентификация
JWT RS256 (PyJWT) с короткими access-токенами 15 – 30 минут и refresh с rotation. Скомпрометированный refresh обнаруживается reuse-detection'ом и приводит к мгновенному отзыву всей семьи токенов через denylist в Redis.
- 02
Изоляция в БД
Пять Postgres schemas (auth / app / billing / notifications / audit), у каждой свой DB-пользователь с минимальными правами. SQL-инъекция в основном API не дотягивается до таблиц с паролями или платёжными данными.
- 03
Idempotency-Key middleware
Каждый POST/PUT/PATCH/DELETE принимает Idempotency-Key. Финансовые операции — через UNIQUE-таблицу в Postgres, остальные — через Redis SETNX. Защита от двойных кликов, retry мобильника и повторных webhook'ов.
- 04
Circuit breaker · внешние сервисы
Telegram Bot API и SMTP обёрнуты в purgatory. 5 ошибок подряд → 60 секунд OPEN-состояния: мгновенный отказ без таймаутов и без DDoS-ретраев в упавший внешний сервис.
- 05
Rate limiting
slowapi · 10 req/sec на write-эндпоинты, 5 попыток / 15 минут на /auth/login (brute-force защита), отдельный лимит на приёмники webhook.
- 06
RFC 9457 Problem Details
Все ошибки — типизированная иерархия DomainException с полем code (snake_case), фронтенд кодит на коды, не на строки. Без утечки трейсов и SQL-имён клиенту.
- 07
Audit log
Все изменения в схеме audit — append-only. Кто, что и когда сделал, хранится годами. На Enterprise — экспорт по запросу.
- 08
Резервное копирование
pg_basebackup + WAL-G для PITR, ежесуточный архив файлов рядом. RPO ≤ 1 ч, RTO ≤ 4 ч. Скрипт восстановления тестируется ежемесячно на staging.
§ 05.5
Соответствие
требованиям
-
152-ФЗ
Размещение данных только в РФ (Yandex Cloud / Selectel). Уведомление в Роскомнадзор подано. Договор-оферта содержит согласие на обработку.
-
Реестр российского ПО
Программа разработана российской компанией с долей участия 100 %, использует только open-source компоненты с подходящими лицензиями. Подача — параллельно с выходом из закрытой беты.
-
Аккредитация Минцифры
ОКВЭДы 62.01 / 62.02 / 63.11, штатные ИТ-специалисты, доля профильной выручки > 30 %. Подача — после получения реестровой записи.
-
Приказ № 511 от 02.06.2025
Сайт раскрывает реквизиты, ОКВЭДы, описание продукта с ценами, технологии разработки, исключительные права, данные реестра — все требования закрыты.