bablo / стройплощадка
← Все документы

04 — Tech Stack

Зафиксированный технический стек проекта. Любое отклонение требует ADR в docs/decisions/.

Сводная таблица

LayerТехнологияВерсияОбоснование
RuntimeNode.js22.x LTSУстановлен на rigabase
Package Managernpm10.xУстановлен; альтернативы (pnpm, bun) — на усмотрение разработчика, но без замены документации
Frontend FrameworkNext.js15.x (App Router)Лучшая поддержка Claude Code, SSR, файловый роутинг
LanguageTypeScript5.x (strict)Без any без крайней необходимости
StylingTailwind CSS4.xМинимум boilerplate, дизайн-токены из Vision
UI ComponentsБазовые HTML + Tailwindshadcn/ui допустим, но не обязателен
BackendNext.js Server Actions + API RoutesМинимум boilerplate, типобезопасность end-to-end
DatabasePostgreSQL16-alpine+ pgvector extension для эмбеддингов
ORMDrizzle ORMlatestБлизко к SQL, типы автогенерируются
MigrationsDrizzle KitlatestИдёт в комплекте с Drizzle
AuthLucialatestOpen-source, без vendor lock-in. Альтернатива: Auth.js
File StorageMinIO (S3-compatible)latestЛокальный Docker-контейнер, потом можно мигрировать в Yandex Object Storage
AI: ParsingAnthropic APIClaude Opus 4.7 / Sonnet 4.6 / Haiku 4.5Прямые вызовы из бэкенда
AI: EmbeddingsVoyage AIvoyage-3 (1024 dim)Лучшее качество для русского текста
TelegramgrammYlatestСовременный TypeScript SDK
Transparency SiteAstro4.xСтатический сайт документации
ContainerDocker + Docker Compose29.xПо стандарту инфраструктуры rigabase
Reverse ProxyNginx Proxy ManagerlatestУже работает на rigabase
HTTPSLet’s Encryptавтомат через NPM
LoggingDocker logs + SentryМинимум в Phase 1
MonitoringSentry (SaaS)Для frontend + backend ошибок
CI/CDGitVerse CIМинимум — билд + деплой Стройплощадки

Git хостинг

  • Primary: GitVerse (origin)
  • Mirror: GitHub (mirror)
  • Push в оба ремоут одновременно через локальный alias или git hook

Тестирование

ТипИнструментПрименение
UnitVitestБизнес-логика (расчёты маржи, матчинг, калькуляторы)
IntegrationVitest + supertestAPI endpoints
E2EPlaywrightКритические флоу: загрузка КП, расчёт маржи, контроль подрядчика
LintingESLintTypeScript + Next.js конфиг
FormattingPrettierAuto-format при сохранении
Type checkingtsc —noEmitВ CI и pre-commit

Зависимости — критические версии

{
  "next": "^15.0.0",
  "react": "^19.0.0",
  "react-dom": "^19.0.0",
  "typescript": "^5.5.0",
  "tailwindcss": "^4.0.0",
  "drizzle-orm": "^0.36.0",
  "drizzle-kit": "^0.28.0",
  "postgres": "^3.4.0",
  "lucia": "^3.2.0",
  "@anthropic-ai/sdk": "^0.30.0",
  "grammy": "^1.30.0",
  "pdf-parse": "^1.1.1",
  "exceljs": "^4.4.0",
  "minio": "^8.0.0",
  "voyageai": "^1.0.0"
}

Точные версии и lock-файл — после первого npm install в app/. В этом стартовом пакете lock-файла нет.

Что не используем (и почему)

ТехнологияПочему НЕ
Convex / SupabaseVendor lock-in, серверы вне РФ
PrismaНа больших схемах медленнее Drizzle, бо́льший client
Clerk / Auth0Зарубежные SaaS-auth, не для российских данных
React Native / ExpoMobile — Phase 2+
Redux / MobXServer-first архитектура, минимум клиентского состояния
Webpack / Vite напрямуюИдут в комплекте с Next.js / Astro, не настраивать вручную
Material UI / Ant DesignНе вписываются в дизайн-эстетику (см. Vision)
GraphQLИзбыточно для Phase 1
KubernetesИзбыточно для одного сервера. Docker Compose достаточно
pnpm workspaces / Nx / TurborepoPhase 1 — один пакет в app/, monorepo не нужен
Whisper / расшифровка голосаPhase 2 (клиент сказал — не приоритет)
WhatsApp Business APIPhase 2 (клиент сказал — не нужно)

Используемые внешние API

СервисEndpointИспользованиеСтоимость
Anthropic APIapi.anthropic.comПарсинг документов$3-15 / млн токенов в зависимости от модели
Voyage AIapi.voyageai.comЭмбеддинги$0.06 / млн токенов
Telegram Bot APIapi.telegram.orgLong-polling, отправка сообщенийБесплатно
Sentry*.sentry.ioError reportingБесплатный план до 5K events/мес
Let’s Encryptавтоматически через NPMHTTPS сертификатыБесплатно

Все ключи API хранятся только в .env, никогда в коде, никогда в репозитории.

Развёртывание

Локальная разработка

В Phase 1 разработка — на rigabase напрямую (через Claude Code). Локальная разработка на других машинах возможна, но не обязательна.

Если разворачивать локально для тестирования:

cd /opt/bablo
docker compose up -d
cd app
npm install
npm run dev

Production на rigabase

cd /opt/bablo
git pull
docker compose down
docker compose build
docker compose up -d
docker compose logs -f bablo-app

Подробные скрипты — в infra/scripts/.

Резервные копии

  • PostgreSQL dumps ежедневно в 03:00 МСК
  • MinIO sync ежедневно
  • Удержание: 30 дней локально, далее опционально на внешнее хранилище
  • Скрипт: infra/scripts/backup.sh
  • Восстановление: infra/scripts/restore.sh <date>

Мониторинг и алерты инфраструктуры

В Phase 1:

  • Sentry — приложение и парсер
  • Healthcheck в docker-compose — авто-restart упавших контейнеров
  • (Опционально) Cron-задача проверяет, что бэкап создан → если нет, шлёт в Telegram-бот системного админа

В Phase 2:

  • Полноценный мониторинг (Grafana + Prometheus или альтернативы)
  • Alertmanager → Telegram-канал команды