HanDev
← Проекты
Internal Platform · 2025–2026

HanDev Internal Platform

Внутренняя инженерная платформа HanDevelopment на домене *.handev.org. 4 связанных репозитория и 4 сервиса с единым SSO, общей дизайн-системой и общей PostgreSQL: Identity (auth), UpTime (мониторинг), QA Orchestrator (автотесты), PlatformShared (npm-пакеты). Покрывает повседневные нужды студии: централизованный вход, мониторинг клиентских продуктов, оркестрацию Playwright-тестов и единый UI-стек.

  • 4 сервиса под одним зонтиком *.handev.org с единым SSO через HttpOnly cookie
  • RS256 JWT + JWKS: 15-мин access + 30-дневный refresh с тройным обновлением
  • Service-access gate: JWT отклоняется, если payload.services не содержит ключ сервиса
  • Деплой GitLab CI → Docker → Portainer + Traefik с авто-SSL
Node 22Fastify 5React 18TailwindPostgreSQL 18
HanDev Internal Platform — интерфейс проекта

Задача

У студии 20+ продакшен-сервисов в разных проектах. Без единой платформы это означает: на каждый сервис — отдельная аутентификация, разрозненные дашборды мониторинга, тесты, рассованные по CI разных репозиториев, у каждого сервиса своя навигация и заголовок. Решили вложиться в платформу, которая закроет это «раз и навсегда» — для собственной команды и для будущих клиентских продуктов.

Что сделали

  • 4 независимых сервиса под одним зонтиком *.handev.org с единым SSO через HttpOnly cookie (Domain=.handev.org).
  • Cookie-SSO + JWT с публичным JWKS: Identity подписывает RS256, остальные сервисы верифицируют через JWKS. 15-минутный access + 30-дневный refresh с тройным обновлением: /auth/refresh retry на 401, тик каждые 12 минут, refresh при возврате вкладки из background.
  • Service-access gate: даже валидный JWT отклоняется, если payload.services не содержит ключ текущего сервиса. Это разделяет «токен валиден» и «у пользователя есть доступ к этому сервису».
  • Global roles (admin / devops / qa / developer / customer / manager / marketing) хранятся в Identity и мапятся на внутренние роли каждого сервиса.
  • Общий PostgreSQL 18 на DigitalOcean: отдельная база на сервис. UpTime использует PostgREST + Supabase Edge Functions.
  • Shared npm-пакеты @handev/platform-ui, @handev/platform-auth, @handev/tailwind-preset — публикуются в GitLab Group Package Registry с авто-версионированием (MAJOR.MINOR.PIPELINE_IID).
  • Унифицированный layout: PlatformProvider + PlatformLayout с общим header, service-switcher, user-menu и сайдбаром. Все SPA выглядят и работают одинаково.
  • Деплой через GitLab CI → Docker registry → Portainer webhook. Traefik как reverse-proxy с автоматическими SSL-сертификатами.

Результат

  • Единый вход во все внутренние инструменты: один логин — доступ к Identity / UpTime / QA Orchestrator из одного service-switcher.
  • 4 продакшен-сервиса с единой UI/UX, общим стеком и общей PostgreSQL.
  • Платформа используется для тестирования и мониторинга всех клиентских продуктов.

Давайте
поговорим.

Ответим в течение рабочего дня с первичной оценкой и ближайшим слотом в команде.

✉ info@handev.org