HanDev
← Проекты
npm · Design System · 2025–2026

HanDev PlatformShared

Монорепо Core.PlatformShared с тремя npm-пакетами, которые потребляет каждый сервис студии. Авто-публикация в GitLab Package Registry: на каждый push в master версия MAJOR.MINOR.<PIPELINE_IID> уезжает на тег latest; на develop — next с суффиксом -dev.

  • @handev/tailwind-preset — общий Tailwind preset (цвета, fonts, breakpoints)
  • @handev/platform-auth — PlatformAuthClient + PlatformAuthVerifier (JWKS), тройной retry
  • @handev/platform-ui — PlatformLayout, Header, ServiceSwitcher, AuthGuard, SidebarItems
  • Авто-версионирование MAJOR.MINOR.PIPELINE_IID через GitLab CI
pnpm workspacetsupReact 18TailwindRadix UI
HanDev PlatformShared — интерфейс проекта

Задача

Когда есть 3-4 SPA на одном стеке, копировать header/sidebar/auth-клиент между ними — антипаттерн. Нужна общая дизайн-система и общий auth-клиент в виде npm-пакетов, которые без боли подключаются и обновляются.

Что сделали

  • @handev/tailwind-preset — общий Tailwind preset (цвета, fonts, breakpoints, components).
  • @handev/platform-auth — PlatformAuthClient (фронтовый: .me() / .services() / .login() / .logout()) и PlatformAuthVerifier (бэковый: JWKS-верификация). Тройной retry на 401.
  • @handev/platform-ui — компоненты: PlatformProvider, PlatformLayout, Header, Footer, ServiceSwitcher, UserMenu, AuthGuard, PlatformSidebarGroup, PlatformSidebarItem (с asChild через Radix Slot), MobileSidebarTrigger.
  • Авто-версионирование в GitLab CI: версия в package.json задаёт major.minor; CI добавляет PIPELINE_IID как patch.
  • Регистрация в .npmrc каждого консьюмера: group-level endpoint и отдельный токен только на чтение реестра.
  • TypeScript types и ESM из коробки. tsup собирает .js + .d.ts в dist/.

Результат

  • Один источник истины для UI и auth по всей платформе.
  • Bump версии = git push → CI публикует новую версию автоматически.
  • Каждый сервис подтягивает обновления через pnpm update @handev/*.

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

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

✉ info@handev.org