Технологии в трёх корзинах

Стена логотипов ничего не говорит о глубине. Поэтому делим стек на то, за что отвечаем в проде, то, что применяли, и то, что возьмём по запросу.

подобрать стек под задачу
слойядроопытпо запросу
Языки
ядро TypeScript JavaScript Python SQL
—
по запросу Go
Frontend
ядро React Next.js Vue 3 Astro
опыт Nuxt Svelte
—
Мобильные iOS и Android
ядро React Native Expo офлайн-синхронизация
опыт нативные модули сканирование QR и штрихкодов
—
Backend
ядро Node.js NestJS FastAPI REST WebSocket
опыт GraphQL gRPC
—
Данные
ядро PostgreSQL Redis
опыт ClickHouse S3-совместимые хранилища pgvector
по запросу Spark
Очереди и интеграции
ядро 1С: УНФ, УТ, ERP OData и HTTP-сервисы 1С Telegram Bot API платёжные API
опыт RabbitMQ Kafka Bitrix24 и amoCRM API
по запросу EDI SAP
AI в проде у заказчиков
ядро OpenAI и Anthropic API RAG: pgvector, Qdrant эмбеддинги оценка качества ответов
опыт LangChain LlamaIndex локальные модели: Ollama, vLLM агенты с инструментами
по запросу обучение моделей, PyTorch компьютерное зрение
Инфраструктура
ядро Docker Compose Nginx GitHub Actions GitLab CI Linux
опыт Kubernetes Terraform Prometheus Grafana Sentry
по запросу managed Kubernetes
Качество
ядро Playwright Vitest ESLint сквозная типизация
опыт k6
по запросу пентест с партнёрами

Три контура размещения. Ваши или наши серверы, облака в России, зарубежные облака. Данные остаются там, где этого требует ваш регулятор; инфраструктура описана кодом и переезжает вместе с системой.

Как мы выбираем стек

  1. PostgreSQL по умолчанию. Другая база — когда есть измеренная причина, а не предпочтение.
  2. Монолит, пока не доказана нужда в сервисах. Границы модулей — заранее, разрез — по факту нагрузки.
  3. Сквозная типизация. От схемы базы до формы в браузере один контракт, который проверяет сборка.
  4. Наблюдаемость с первого дня. Метрики, логи и трассировка — до первого пользователя, а не после первого инцидента.
  5. Спорное решение — в ADR. Почему так, а не иначе — читается через год и новым человеком.