Перейти к основному содержимому

Технологический стек

Зачем нужно

Документ фиксирует обязательный технологический стек, в котором реализуется экосистема. Стек выбран один на всю платформу, чтобы домены были взаимозаменяемы по навыкам разработчиков и инфраструктуре.

Backend

СлойТехнологияВерсия
ЯзыкTypeScript5.4+
RuntimeNode.js22 LTS
ФреймворкNestJS10+
Менеджер пакетовpnpm9+
ORMPrisma5+
ВалидацияZod3+
Логированиеpino9+
HTTP-клиентundici (через NestJS HttpModule)
Очереди / шинаRedis Streams через BullMQ для задач, NATS JetStream для domain events; Kafka допустима только через будущий ADR
КэшRedis7+
ТестыVitest, supertest

Все 7 доменов используют один backend-стек. Любое отклонение — через ADR.

База данных

НазначениеТехнология
Основная OLTPPostgreSQL 16+
Кэш и сессииRedis 7+
ПоискPostgreSQL FTS / pg_trgm, Meilisearch для расширенного поиска по витрине и task-bank
АналитикаClickHouse (опционально для management; стартуем с PostgreSQL + materialized views)
ФайлыS3-совместимое хранилище (MinIO в dev, S3 в prod)

Подробности conventions: data-baseline.md.

Frontend

СлойТехнология
ЯзыкTypeScript 5.4+
ФреймворкNext.js 14+ (App Router)
UI-библиотекаReact 18+
StateTanStack Query, Zustand
ФормыReact Hook Form + Zod
СтилиCSS Modules + общие токены (platform/ui-system.md); Tailwind не используется для приложений, допускается для лендингов витрины
СборкаTurbopack (Next.js native)
ТестыVitest, Playwright
Иконкиshared icon set из UI Kit

Витрина может использовать дополнительный SSG-режим Next.js или отдельный тонкий сервер (Astro) — решается через ADR на этапе разработки storefront.

Инфраструктура

НазначениеТехнология
КонтейнерыDocker, Docker Compose в dev
ОркестрацияKubernetes (target prod)
CIGitHub Actions
Реестр образовGHCR / private registry
СекретыKubernetes Secrets + sealed-secrets, dev — .env (никогда в git)
МониторингOpenTelemetry → Grafana + Prometheus + Loki + Tempo
ErrorsSentry
Email/SMSвнешние транспорты, абстракция в identity (transports.md)

Языки и инструменты разработки

  • pnpm workspaces для монорепо;
  • ESLint + Prettier с общим preset;
  • Commitlint и conventional commits;
  • Changesets для версионирования внутренних пакетов;
  • Husky/lefthook опционально для локальных хуков;
  • Renovate для зависимостей.

Структура монорепо

systematika/
├── apps/
│ ├── identity-api/
│ ├── identity-admin-web/
│ ├── storefront-api/
│ ├── storefront-web/
│ ├── crm-api/
│ ├── crm-web/
│ ├── lms-api/
│ ├── lms-web/
│ ├── task-bank-api/
│ ├── task-bank-web/
│ ├── competitions-api/
│ ├── competitions-web/
│ ├── management-api/
│ └── management-web/
├── packages/
│ ├── api-contracts/ # общие DTO и Zod-схемы
│ ├── auth-client/ # клиент identity для других доменов
│ ├── events-bus/ # клиент шины событий
│ ├── reference-data/ # справочники subject/level/format
│ ├── ui-kit/ # общие React-компоненты и токены
│ ├── observability/ # logger, tracer, metrics
│ ├── permissions/ # модель permissions и проверки
│ └── testing/ # фикстуры и хелперы
├── infra/
│ ├── docker/
│ ├── k8s/
│ └── migrations/
└── docs-site/

Что запрещено

  • Использовать в одном домене другой backend-фреймворк или язык без ADR.
  • Реализовывать собственный логгер, формат ошибок, валидатор поверх Zod внутри домена.
  • Подключать ORM, отличный от Prisma, без ADR.
  • Использовать собственные UI-токены и компоненты, дублирующие UI Kit.
  • Хранить секреты в коде, конфигах репозитория или в .env.example с реальными значениями.

Связанные документы