The Wardnet design system: visual language, design tokens, brand assets, and UI components shared across the Wardnet ecosystem (admin site, PWAs, marketing site, the My Account SPA, and wardnet-cloud).
A yarn 4 + Turborepo workspace of three independently-versioned packages:
| Package | What it is | Runtime deps |
|---|---|---|
@wardnet/brand |
Brand kit — logo/icon/mark SVG vectors (text source + outlined dist), brand fonts, the visual brand guide, and the wardnet-brand-png rasterizer |
@resvg/resvg-js |
@wardnet/styles |
CSS design tokens, theme, typography scale + roles | none |
@wardnet/ui |
Domain-agnostic React primitives + brand components, documented in Storybook | @wardnet/styles |
yarn install
yarn build # turbo: all packages
yarn workspace @wardnet/ui storybook # component dev (http://localhost:6006)
yarn type-checkBrand assets ship as outlined, self-contained SVGs in
packages/brand/assets/dist. Regenerate them from
the text sources after editing assets/src/ (re-outlines <text> → <path>
with the brand fonts):
yarn workspace @wardnet/brand buildRasterize any vector to a PNG on demand (favicons, PWA icons, email art):
yarn wardnet-brand-png packages/brand/assets/dist/wardnet-icon.svg 512 icon-512.pngPackages publish to GitHub Packages under the @wardnet scope. GitHub
Packages requires a token for every read (even of public packages), so consumers
route the scope and authenticate with a token that has read:packages:
# .yarnrc.yml
npmScopes:
wardnet:
npmRegistryServer: "https://npm.pkg.github.com"
npmAuthToken: "${GH_TOKEN-}"First-party repos managed by gt already export a per-repo GH_TOKEN via
direnv — add the scope once with gh auth refresh -s read:packages and installs
just work. In CI, set GH_TOKEN from the built-in GITHUB_TOKEN and grant the
job permissions: packages: read.
Versioning is via Changesets; publishing is tag-gated (merging never publishes):
- PRs include a changeset (
yarn changeset). yarn changeset versionopens a release-prep PR (bumps + changelogs).- Merge it — nothing publishes yet.
yarn changeset tag && git push --follow-tags— the per-package tags (@wardnet/ui@x.y.z) trigger theReleaseworkflow, which publishes to GitHub Packages.
The Storybook is published to GitHub Pages on every push to main. Design
decisions live in docs/; design-system→Claude Design sync config lives
in .design-sync/.