docs: expand registry module catalogue with new categories and planned modules

- Add `storage`, `observability`, and `analytics` categories (with module tables) to the registry docs
- Add planned entries for `supabase` (auth + db), `turso`, `postmark`, `storybook`, `netlify`, `render`, and `fly`
- Tighten category table descriptions and drop redundant examples from the "What it covers" column
This commit is contained in:
2026-06-09 17:33:31 -04:00
parent 4df8d80c79
commit 0cb8d27245
2 changed files with 61 additions and 20 deletions
+59 -18
View File
@@ -11,21 +11,24 @@ Inspired by [shadcn/ui](https://ui.shadcn.com), third parties can publish their
A category has two independent properties: its **cardinality** — `one` (single-choice, like `framework` or `auth`) or `many` (coexisting, like `testing`) — and its **home**, where a module's output lands (`app`, `repo`, or `package`). See [Concepts](/docs/concepts#categories) for the full mental model.
| Category | Cardinality | Home | What it covers |
| ----------- | ----------- | ------- | ----------------------------------------------------------- |
| `framework` | one | app | App shell + router (Next, TanStack Start, Expo, …) |
| `api` | one | package | Typed RPC layer between framework and services |
| `ai` | one | package | AI SDK + provider wiring |
| `auth` | one | package | Authentication (Better Auth, Clerk, …) |
| `db` | one | package | Database driver (Postgres, SQLite) |
| `orm` | one | package | Schema + query layer (Drizzle, Prisma) |
| `ui` | one | package | Styling system + component primitives (Tailwind, shadcn, …) |
| `payments` | one | package | Checkout + webhooks (Stripe, Polar, …) |
| `email` | one | package | Transactional email (Resend) |
| `tooling` | one | repo | Lint/format toolchain |
| `testing` | many | app | Unit + e2e (Vitest, Playwright) |
| `deploy` | many | repo | Deploy targets (Vercel, Cloudflare, …) |
| `monorepo` | one | repo | Monorepo task runner (Turborepo) |
| Category | Cardinality | Home | What it covers |
| --------------- | ----------- | ------- | ---------------------------------------------- |
| `framework` | one | app | Web app shell + router |
| `api` | one | package | Typed RPC layer between framework and services |
| `ai` | one | package | AI SDK + provider wiring |
| `auth` | one | package | Authentication, user accounts |
| `db` | one | package | Database driver |
| `orm` | one | package | Schema + query layer |
| `ui` | one | package | Styling system + component primitives |
| `payments` | one | package | Checkout + webhooks |
| `email` | one | package | Transactional email |
| `storage` | one | package | Object / file storage |
| `observability` | many | app | Product analytics, error tracking |
| `analytics` | many | app | Privacy-friendly site analytics |
| `tooling` | one | repo | Lint/format toolchain |
| `testing` | many | app | Unit + E2E |
| `deploy` | many | repo | Deployment targets |
| `monorepo` | one | repo | Monorepo task runner |
Single-choice categories with `home: "app"` (currently `framework`) are enforced **per app** — a multi-app project can pick `next` for the web app and `expo` for a native app side by side. See [Concepts → Apps](/docs/concepts#apps).
@@ -69,6 +72,7 @@ Single-choice, installs into `packages/auth/`.
| `better-auth` | 🟢 Available | Local data. Peers on `orm` and `framework`. |
| `clerk` | 🟢 Available | Hosted database & UI. Peers on `framework`. |
| `workos` | 🟨 Planned | WorkOS AuthKit. |
| `supabase` | 🟨 Planned | Supabase Auth; constrains `db`. |
## Database
@@ -78,6 +82,8 @@ Single-choice, installs into `packages/db/`.
| ---------- | ----------------- | ------------------------ |
| `postgres` | 🟢 Available | `postgres` driver. |
| `sqlite` | 🟢 Available | `better-sqlite3` driver. |
| `supabase` | 🟨 Planned | Hosted Postgres. |
| `turso` | 🟨 Planned | libSQL (edge SQLite). |
## ORM
@@ -115,9 +121,40 @@ Single-choice, constraint-bearing. Installs into `packages/payments/`, plus a Be
Single-choice, installs into `packages/email/`.
| Module | Status | Notes |
| -------- | ----------------- | ----------------------------------------------------------------------------------------------------- |
| `resend` | 🟢 Available | `resend` SDK + a sample `react-email` template; framework-native `/api/webhook/resend` Svix-verifier. |
| Module | Status | Notes |
| ---------- | ----------------- | ----------------------------------------------------------------------------------------------------- |
| `resend` | 🟢 Available | `resend` SDK + a sample `react-email` template; framework-native `/api/webhook/resend` Svix-verifier. |
| `postmark` | 🟨 Planned | `postmark` SDK + framework-native webhook handler. |
## Storage
Single-choice, installs into `packages/storage/`.
| Module | Status | Notes |
| ------------- | --------------- | ------------------------------ |
| `s3` | 🟨 Planned | AWS S3 (`@aws-sdk/client-s3`). |
| `r2` | 🟨 Planned | Cloudflare R2 (S3-compatible). |
| `uploadthing` | 🟨 Planned | Managed uploads (UploadThing). |
## Observability
Coexisting, app-scoped.
| Module | Status | Notes |
| --------- | --------------- | --------------------------------------- |
| `posthog` | 🟨 Planned | Product analytics, error tracking, etc. |
| `sentry` | 🟨 Planned | Heavier focus on error tracking |
| `axiom` | 🟨 Planned | Logs + event analytics. |
## Analytics
Coexisting, app-scoped — privacy-friendly site analytics, distinct from `observability`'s product analytics and error tracking.
| Module | Status | Notes |
| ----------- | --------------- | --------------------------- |
| `plausible` | 🟨 Planned | Privacy-first, open source. |
| `umami` | 🟨 Planned | Self-hostable, open source. |
| `fathom` | 🟨 Planned | Privacy-first, hosted. |
## Tooling
@@ -137,6 +174,7 @@ Coexisting, app-scoped. Vitest and Playwright are independent and routinely run
| ------------ | ----------------- | ----------------------------------------------------------------- |
| `vitest` | 🟢 Available | Unit + integration; `jsdom` + RTL; `test`/`test:watch` scripts. |
| `playwright` | 🟢 Available | e2e; per-framework `webServer`; `test:e2e`/`test:e2e:ui` scripts. |
| `storybook` | 🟨 Planned | Component workshop + stories. |
## Deploy
@@ -148,6 +186,9 @@ Coexisting, repo-scoped.
| `cloudflare` | 🟨 Planned | Workers / Pages adapter per framework (e.g. Vite plugins, `wrangler.json`, …). |
| `railway` | 🟨 Planned | `railway.toml` + Dockerfile. |
| `docker` | 🟨 Planned | Generic `Dockerfile` + compose for self-host. |
| `netlify` | 🟨 Planned | `netlify.toml` + framework adapter. |
| `render` | 🟨 Planned | `render.yaml` + Dockerfile. |
| `fly` | 🟨 Planned | `fly.toml` + Dockerfile (Fly.io). |
## Monorepo
@@ -24,7 +24,7 @@ function NavLink({ url, name, pathname }: { url: string; name: ReactNode; pathna
params={{ _splat: toSplat(url) }}
aria-current={active ? "page" : undefined}
className={cn(
"block rounded px-2 py-1 text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring",
"block px-2 py-1 text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring",
active && "bg-accent font-medium text-accent-foreground",
)}
>
@@ -82,7 +82,7 @@ export function DocsSidebar({ tree }: { tree: Root }) {
<>
{/* Mobile: a disclosure above the content so docs stay navigable < md. */}
<details className="group my-4 md:hidden">
<summary className="flex cursor-pointer list-none items-center justify-between rounded-md border border-border px-3 py-1.5 text-sm font-medium transition-colors hover:bg-accent [&::-webkit-details-marker]:hidden">
<summary className="flex cursor-pointer list-none items-center justify-between border border-border px-3 py-1.5 text-sm font-medium transition-colors hover:bg-accent [&::-webkit-details-marker]:hidden">
Documentation
<IconChevronRight
aria-hidden="true"