← Проекты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

Задача
Когда есть 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/*.