The workshop's design system: react-components (jsr) + a self-built docs site.
  • TypeScript 72.3%
  • SCSS 22.4%
  • Shell 4.1%
  • JavaScript 0.7%
  • HTML 0.5%
Find a file
PerishFire e27e118908
All checks were successful
guard / guard (push) Successful in 4m43s
ship: verify names the build it found (#45)
2026-07-21 14:36:38 +00:00
.forgejo release: a tag names one history, and says so when it does not (#41) 2026-07-21 13:18:11 +00:00
.runseal ship: verify names the build it found (#45) 2026-07-21 14:36:38 +00:00
apps/react-docs docs: step onto the plugin that dropped its dead job (#42) 2026-07-21 13:30:59 +00:00
packages library: the emitted modules name their own extensions (#32) 2026-07-21 09:55:42 +00:00
.gitignore docs: each language gets its own page (#35) 2026-07-21 10:33:28 +00:00
.npmrc release: each package sits on the registry that fits it (#23) 2026-07-21 08:23:19 +00:00
AGENTS.md ship: verify names the build it found (#45) 2026-07-21 14:36:38 +00:00
biome.json release: two packages ride one lane (#5) 2026-07-21 05:25:51 +00:00
LICENSE birth: seat the design system monorepo 2026-07-21 11:29:03 +08:00
negentropy.toml docs: hand-written props, machine-guarded (#34) 2026-07-21 10:23:18 +00:00
package.json design: the system takes its own name (#3) 2026-07-21 04:50:40 +00:00
pnpm-lock.yaml docs: step onto the plugin that dropped its dead job (#42) 2026-07-21 13:30:59 +00:00
pnpm-workspace.yaml docs: the site eats what we shipped (#33) 2026-07-21 10:04:30 +00:00
README.md design: the typeface travels as a url, not a module (#21) 2026-07-21 07:42:52 +00:00
runseal.toml birth: seat the design system monorepo 2026-07-21 11:29:03 +08:00
vocabulary.toml birth: seat the design system monorepo 2026-07-21 11:29:03 +08:00

design

The workshop's design system. A monorepo:

  • @perish/react-components — a React component library, published to jsr as raw ts + scss (no pre-build). Each component co-locates its style.
  • @perish/vite-plugin-design — the vite plugin this system's publish shape needs. The library ships stylesheets but never imports them, so the plugin injects each component's co-located X.scss as it compiles X.tsx. It also Without it you get the components with no styling. The typeface needs nothing from the plugin: the library's scss declares @font-face against a pinned URL, so the browser fetches Spectral on its own and falls back to Georgia if it cannot.
  • a self-built docs site at react.design.perish.uk — gallery, interactive knobs, and hand-written, drift-guarded prop docs in English and 简体中文.

The system is internal-general house work, reused across the workshop's sites. Nothing here is pre-built for publish: the library ships source, and the plugin is how a consumer's vite reads that source.