Jason Stedwell 822d8e41e6
ci / build-and-design (push) Failing after 13s
visual upgrade
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00
2026-07-23 04:23:19 -05:00

@jason/ui-kit

Shared design foundation for all my apps. One brand system, reused everywhere — so new apps start polished and existing apps have a clear upgrade path.

Built on the stack I already use (React + Vite + Tailwind + TypeScript) and guarded by Impeccable so nothing ships looking like a generic AI-generated template.

What's inside

  • Generated design tokens + Tailwind preset — accessible dark/light palettes, semantic foregrounds, radius/shadow/motion scales, and a parity check that prevents CSS/TypeScript drift.
  • Theme runtime + optional self-hosted fonts — persisted dark/light/system mode, a no-flash script, and Latin variable-font delivery.
  • cn() helper (clsx + tailwind-merge) — the standard everywhere.
  • Primitives — Button, Card, FormField, Input, Select, Checkbox, Switch, Tabs, Tooltip, Badge, Dialog, DropdownMenu, Table, Pagination, Skeleton, and Toaster. Radix-backed, accessible, pre-themed.
  • MotionFadeIn, Stagger (framer/motion, reduced-motion aware).
  • AnimatedAnimatedNumber (count-up stats), SpotlightCard (cursor glow).
  • Blocks — responsive AppShell (desktop sidebar + mobile drawer), CommandPalette (⌘K), Hero, FeatureGrid, Pricing.
  • Living showcase — executable coverage of themes, states, product UI, and marketing blocks.
  • Impeccable wired in — DESIGN.md / PRODUCT.md design context, config, and a CI anti-slop detector.

Install (in a consuming app)

This package publishes to the Gitea npm registry. Add an .npmrc (see .npmrc.example):

@jason:registry=https://git.alwisp.com/api/packages/jason/npm/
//git.alwisp.com/api/packages/jason/npm/:_authToken=${GITEA_NPM_TOKEN}

Then:

npm install @jason/ui-kit

Wire up Tailwind

// tailwind.config.js
module.exports = {
  presets: [require("@jason/ui-kit/preset")],
  content: [
    "./index.html",
    "./src/**/*.{ts,tsx}",
    "./node_modules/@jason/ui-kit/dist/**/*.js", // so kit classes aren't purged
  ],
};
// app entry (main.tsx)
import "@jason/ui-kit/styles.css";

Load the branded variable fonts as an opt-in asset:

import "@jason/ui-kit/fonts.css";
import "@jason/ui-kit/styles.css";

Use it

import {
  Button, FormField, Input, ThemeProvider, ThemeScript, Toaster
} from "@jason/ui-kit";

<ThemeScript />
<ThemeProvider>
  <FormField label="Workspace name" description="Shown in navigation.">
    <Input />
  </FormField>
  <Button>Save</Button>
  <Toaster />
</ThemeProvider>

Develop

npm ci
npm run dev          # tsup watch build
npm run demo         # root demo.html using the real kit components
npm run showcase     # living component review surface
npm run check        # tokens, types, tests, builds, and design detector

The portable project entry is demo.html. Open http://localhost:5173/demo.html after running npm run demo.

Publish a new version

npm version patch      # or minor / major
npm publish            # builds via prepare, pushes to Gitea registry

Extending with 21st.dev

This kit is the base layer. For richer one-off blocks, pull 21st.dev components (shadcn-registry compatible) into an app, then re-theme them with these tokens and, if broadly useful, promote them into src/blocks/ here. Run /impeccable polish on anything new before it ships.

See DESIGN.md for the full system spec and MIGRATION.md for adopting the kit in apps that already exist.

S
Description
@alwisp/ui — shared design foundation: MPM-branded tokens, Tailwind preset, shadcn-style components, motion, app shell + marketing blocks. Guarded by Impeccable (anti-AI-slop). Baseline for all new apps + upgrade path for existing ones.
Readme 219 KiB
Languages
TypeScript 86.7%
JavaScript 6.9%
CSS 3.3%
HTML 3.1%