# twelveux: I hosted a shadcn registry and shipped Glass in one afternoon

Source: https://www.michaelchurley.com/blog/twelveux-hosted-shadcn-registry-glass  
Published: 2026-08-15  
Author: Michael C. Hurley  
Tags: twelveux, shadcn, glass, webgl, nextjs, catppuccin, max, martech, registry

![twelveux Glass playground, circle and NEW MATERIAL card](/blog/twelveux-hosted-shadcn-registry-glass/screenshots/playground.png)

## Who

I still install UI the shadcn way. Copy the files. Own the code. The default face is still Inter. The default kit is still New York.

That is fine for a starter. It is not the system I already run on uncap.us and hms: Max type, phi type scale, Catppuccin surfaces.

twelveux is for operators who want that system as a registry namespace they can install. Frontend builders who already type `npx shadcn add`. People who remember twelve.ux from the WHATWG-era chrome. Anyone who wants liquid glass from the actual shader, not a CSS blur.

## What

I built a hosted shadcn/ui registry. Next.js 15. React 19. Tailwind 4. Package version 0.1.0.

Three installable items ship in `public/r` today: **max**, **theme**, **glass**.

**Max** is the typeface. Local woff faces, weights 100 through 900, roman and italic.

**theme** is phi type and spacing, Catppuccin light and dark CSS variables, Max as sans. Same grammar as uncap.us and hms.

**Glass** is the first real component. Official pen.dev `glass.glsl`. Wrapper. Circle defaults baked in. GlassText is a second path with softer defaults for type.

The playground is the product surface. Live circle. Live card. CIRCLE PROPS sliders. Same wrapper on a shadcn button and a navbar over a photo.

![2012 twelve.ux chrome mock](https://raw.githubusercontent.com/michaelmonetized/twelveux/main/public/og/mock-full.jpg)

`/og` is the archive: exact 2009-2012 twelve.ux chrome. `/kit` is the same chrome under glass.

![glass kit](/blog/twelveux-hosted-shadcn-registry-glass/screenshots/kit-page.png)

## Where

Live on Vercel: https://twelveux.vercel.app (playground, `/og`, `/kit`, and `/r` JSON).

Repo: https://github.com/michaelmonetized/twelveux

`registry.json` still says homepage https://twelveux.com. That name has no public DNS as of this writing. The host that answers is the Vercel app.

![scene backdrop](https://raw.githubusercontent.com/michaelmonetized/twelveux/main/public/scene.jpg)

## When

**2009-2012.** twelve.ux chrome. The mock on `/og` still wears that date.

**2026-08-15, 4:42 PM ET.** Initial commit: registry, Glass playground, Max fonts, og/kit mocks, built `public/r`.

**4:44.** Vercel install freeze fix. **4:46.** Production typecheck fix for Glass. **4:58.** Phone playground. **5:15.** Accordion panes and price ribbon. HEAD `8b9773b`.

Five Production deploys the same evening. Five commits. One afternoon.

## Why

I already had a visual system (Max, phi, Catppuccin) living on uncap.us and hms as CSS and fonts. I could not `npx` it into a fresh app.

I wanted Glass as installable files: the real shader and the circle props.

I also still have the 2012 chrome in my head. studioTWELVE. twelve.ux. Putting `/og` and `/kit` next to the 2026 playground keeps the timeline honest.

The registry is the portable form. The playground is the proof. The archive is the old chrome, still online.

What would you install first on a greenfield Next app: `@twelveux/max`, `@twelveux/theme`, or `@twelveux/glass`?
