Наш стек

Что мы используем сами в production и что отдаём в открытый код. Каждый компонент выбран не «потому что модно», а из-за конкретных производственных преимуществ.

Незнакомый термин подчёркнут пунктиром — наведите или коснитесь для пояснения.

Основной production-стек

Frontend
SvelteKit 2 + Svelte 5 runes + Tailwind 4 + shadcn-svelte
Контентные сайты
Astro: статика + интерактивные «острова» + SSR-роуты, серверная аналитика конверсий
Backend / данные
Supabase Postgres 17 + RLS + Edge Functions на Deno
Аутентификация
Keycloak — единый вход (OIDC / SSO), внешние провайдеры, основа для 2FA
Workflow engine
Hatchet TS SDK v1 — фоновые задачи на том же Postgres, retry + observability
AI / база знаний
LightRAG (RAG-граф) — общая база знаний: AI-первая линия в MAX + ИИ-поиск по сайту
PDF: дизайн шаблонов
PDFme + собственный pdfme-plugins-cruise-pack
PDF: HTML → PDF рендер
Gotenberg 8 (stateless HTMLPDF через Chromium)
Платежи
Альфа-банк SBP C2B + ЮKassa
Поддержка клиентов
Канал в MAX (AI-первая линия на RAG) + Chatwoot CE (операторский инбокс)
Мост к legacy
mTLS + HMAC + Idempotency
Деплой / инфраструктура
Dokploy (self-hosted PaaS) + Traefik (авто-TLS) + Docker Swarm
Тулинг / DX
pnpm 11 + TypeScript 6 + vitest
AI-усиление
Claude Code SDK + Hermes Stack (9 docker-сервисов)

Почему именно эти компоненты

  1. SvelteKit 2 + Svelte 5 runesКомпилируемый фреймворк без virtual DOM. Bundle 30-50 KB vs 150-300 KB для React/Next. SSR-first, гидрация по островам. Runes API даёт прозрачную реактивность без useEffect-беспорядка.
  2. AstroСупербыстрые сайты для контента и продуктовых страниц: статика + интерактивные «острова» + SSR-роуты в одном проекте. Гидрируется только то, что действительно интерактивно — минимум клиентского JS, отличные Core Web Vitals (LCP/INP/CLS). SSR-роуты дают серверную аналитику конверсий без трекер-скриптов (хеш IP, гео, контекст страницы — first-party, дружественно к 152-ФЗ). Статический HTML с запечённым контентом (цены, FAQ, разметка) виден поисковым и AI-ботам без выполнения JS — чистый SEO/AEO. На Astro построен этот сайт.
  3. Supabase Postgres 17 + RLSЕдиный Postgres с row-level security вместо отдельных микросервисов. Edge Functions на DenoTypeScript на edge без Lambda cold-start.
  4. Keycloak (единый вход)Open-source identity-провайдер: OIDC/OAuth2, realms под проекты, внешние IdP (Яндекс ID), задел под 2FA и MAX-аутентификацию. Не пишем свою подсистему паролей и сессий.
  5. Hatchet TS SDK v1Workflow engine на том же Postgres (schema isolation), не отдельный Temporal-кластер. State в БД, observability через OpenTelemetry, retry + backoff из коробки.
  6. LightRAG (база знаний для ИИ)RAG-граф знаний: одна изолированная база с guardrails питает и AI-первую линию в MAX, и ИИ-поиск по сайту. Ответ строится из релевантных фрагментов + ссылки на источники, без галлюцинаций «из головы».
  7. PDFme + pdfme-plugins-cruise-packOpen-source headless PDF designer. Шаблоны рисуются в визуальном редакторе (drag-n-drop полей, pixel-perfect разметка), сохраняются как JSON-схема, рендерятся из неё + данных в production. Альтернативный путь к Gotenberg для деловых документов с фиксированной вёрсткой: ваучеры, билеты, путёвки, квитанции. Наш собственный плагин pdfme-plugins-cruise-pack — компоненты под речные круизы (схема палубы, расписание стоянок, маршрут с pinpoint-картой, QR-код посадочного). Менеджер сам редактирует шаблон в браузере без кода — не нужно дёргать разработчика на каждое «нужно сдвинуть подпись на 2 мм».
  8. Gotenberg 8Stateless HTMLPDF через Chromium. 70+ млн Docker pulls. Используем для документов на основе HTML/CSS-шаблонов (когда вёрстка адаптивная). Заменяет Puppeteer/Playwright (проще, без headless-Chrome боли).
  9. Альфа-банк SBP C2B + ЮKassaРоссийские платёжные системы. SBP даёт мгновенные QR-платежи без комиссий банков-эквайеров. ЮKassa — 80+ способов оплаты.
  10. Канал поддержки в MAX (AI-первая линия)Клиентская поддержка в отечественном мессенджере MAX (серверы в РФ, 152-ФЗ). AI-первая линия на RAG отвечает первой из выделенной изолированной базы знаний с guardrails (не обещать цены и сроки); при неуверенности или просьбе клиента диалог бесшовно уходит живому оператору. Кнопка «в MAX» на сайте идёт через серверный редирект с сохранением контекста страницы — канал сшивается с сайтом в одну воронку. Плюс рассылки строго по opt-in.
  11. Chatwoot CE (операторский инбокс)Open-source платформа поддержки на self-host (РФ-периметр, 152-ФЗ). Назначения диалогов, шаблоны ответов, часы работы, CSAT — из коробки, не пишем свою админку операторов. Подключаем мессенджер-каналы (в т.ч. MAX) через API channel: бот эскалирует сложное обращение в Chatwoot, оператор отвечает из единого интерфейса, ответ автоматически возвращается клиенту в его мессенджер. Без vendor lock-in.
  12. mTLS + HMAC + Idempotency (мост к legacy)Двойная защита legacy bridge (transport + application layer) + защита от дублирующих запросов. Зрелый паттерн для интеграций нового стека с legacy PHP API.
  13. Dokploy + Traefik + Docker SwarmДеплой-платформа на своих серверах: Dokploy как self-hosted PaaS (домены, секреты, откаты), Traefik как reverse proxy с авто-TLS (Let’s Encrypt), Docker Swarm как оркестратор. Пришли на смену связке Caddy + systemd + docker-compose — единое управление, воспроизводимые выкатки, быстрый откат на предыдущий образ.
  14. Claude Code SDK + Hermes StackНаш AI-усилитель: 9 docker-сервисов (browser-harness, crm-worker, scheduled-tasks-worker, notifications-worker, pdf-tasks-worker, координатор) + Telegram-бот оповещений. Ежедневные SEO-снимки, оперативный контроль проектов через AI-агентов. Это даёт нам производительность 3-5× от типовой команды.

Собственные продукты и open-source

Внутренние продукты и открытые технологии, которые мы используем в работе.

Внутренние продукты

Document Platform v2

Конструктор PDF-шаблонов на pdfme + GrapesJS + Handlebars + Hatchet/Gotenberg. Визуальный редактор в админке, версионирование шаблонов, end-to-end рендер за ~3 секунды.

Gemma Oracle — локальный fine-tune LLM на корпоративные данные

Локальная fine-tune Google Gemma на закрытых корпоративных данных. On-premise inference без отправки запросов в облако. Решение для 152-ФЗ и государственных систем.

Hermes — рой AI-агентов для оперативного контроля

Внутренняя система роевой работы AI-агентов: cron-задачи, Telegram-канал, Я.Метрика-аналитика, deploy-мониторинг — для оперативного контроля собственных проектов.

Hermes Stack

9-сервисный Docker-стек AI-агентов для оперативного контроля проектов. Мониторинг сайтов, ежедневные SEO-снимки, фоновые worker'ы и единая шина уведомлений в Telegram.

Канал поддержки в MAX

Клиентская поддержка в отечественном мессенджере MAX (серверы в РФ, 152-ФЗ): AI-первая линия на RAG отвечает первой, сложное бесшовно уходит оператору в Chatwoot. Плюс рассылки по opt-in.

Obsidian Tasks Vault

Operational task vault на Obsidian с авто-генерируемыми Канбанами, junction-ссылками на память проектов и интеграцией с brainstorming workflow. 28 задач, 6 проектов, 7 дашбордов.

Paperclip — knowledge-management для агентств и проектов

Система управления знаниями: компании, проекты, агенты, рутины, бюджеты, входящие сообщения — единая среда для оперативной работы команды агентств.

river-mcp

MCP-сервер для legacy-БД с 60+ бизнес-операциями. Превращает PHP/MariaDB в queryable knowledge layer для Claude. Дисциплина app→SP→SQL.

Open-source

Astro

Супербыстрые сайты: статика + острова интерактива + SSR-роуты для серверной логики и аналитики конверсий. Минимум клиентского JS, отличные Core Web Vitals, чистый SEO/AEO.

Chatwoot CE

Open-source операторский инбокс (self-host, 152-ФЗ): назначения, шаблоны ответов, часы работы, CSAT. Подключаем мессенджер-каналы (в т.ч. MAX) через API channel — не пишем свою админку операторов.

Open-source стек

Используем production-проверенный open-source: Astro, Tailwind 4, PostgreSQL, Supabase, Hatchet, Gotenberg, Caddy, Pagefind, SvelteKit. Никакого vendor lock-in.

@webshturm/pdfme-plugins-cruise-pack

Открытый npm-пакет плагинов для туристических документов: GroupedTable (таблица кают), маршруты на карте, расписание стоянок. Используется Document Platform v2.

Частые вопросы о стеке

Почему SvelteKit, а не React/Next.js?
SvelteKit с Svelte 5 runes — компилируемый фреймворк без virtual DOM: меньше клиентского JS (бандл 30–50 KB против 150–300 KB у React/Next), SSR-first и гидрация по островам. Runes дают прозрачную реактивность без useEffect-беспорядка, что упрощает поддержку и ускоряет загрузку (лучше Core Web Vitals).
Почему Supabase вместо набора микросервисов?
Supabase — это управляемый Postgres 17 с row-level security, аутентификацией и Edge Functions на Deno в одном решении. Один Postgres с RLS вместо россыпи микросервисов снижает сложность инфраструктуры и стоимость поддержки. Edge Functions — TypeScript на edge без cold-start Lambda.
Почему Dokploy + Traefik, а не Caddy/Kubernetes?
Dokploy — self-hosted PaaS на своих серверах: деплой, домены, секреты и откаты из одной панели, без сложности и накладных расходов Kubernetes. Traefik отвечает за маршрутизацию и авто-TLS (Let’s Encrypt), Docker Swarm — за оркестрацию контейнеров. Эта связка пришла на смену Caddy + systemd + docker-compose: единое воспроизводимое управление выкатками и быстрый откат на предыдущий образ, при этом вся инфраструктура остаётся под нашим контролем (важно для 152-ФЗ).
Что такое Hatchet и зачем он нужен?
Hatchet — workflow engine для фоновых задач (генерация PDF, уведомления, расписания). Работает на том же Postgres с изоляцией по схеме, а не как отдельный кластер. Состояние процессов хранится в БД, есть retry с backoff и observability через OpenTelemetry из коробки — надёжнее самописных очередей.
Зачем Keycloak и LightRAG в стеке?
Keycloak — единый вход (OIDC/SSO) для клиентов и сотрудников: realms под проекты, внешние провайдеры (Яндекс ID), задел под 2FA — не пишем свою подсистему паролей. LightRAG — RAG-граф знаний: одна изолированная база с guardrails питает и AI-первую линию поддержки в MAX, и ИИ-поиск прямо по сайту, отвечая фактами из источников, а не выдумкой.
Почему для контентных сайтов вы выбираете Astro?
Astro сочетает статику, интерактивные «острова» и SSR-роуты в одном проекте. Гидрируется только то, что реально интерактивно — минимум JS и отличные Core Web Vitals. Статический HTML с запечённым контентом (цены, FAQ, разметка) виден поисковым и AI-ботам без выполнения JS — чистый SEO/AEO. На Astro построен этот сайт.