Nuxt 4 documentation site with a built-in shadcn-vue component registry for distributing custom blocks.
pnpm dev— dev serverpnpm lint— ESLint (@nuxt/eslint-based, stylistic enabled: double quotes, semi)pnpm lint:fix— auto-fixpnpm typecheck—nuxt typecheckpnpm registry:build— generate registry JSON files intopublic/r/
CI order: lint → typecheck (no tests)
- Nuxt 4 compat mode (
future.compatibilityVersion: 4) — app code lives underapp/ app/components/ui/— shadcn-vue UI primitives (shadcn-nuxtmodule, no prefix)app/components/content/— global MDC components (pathPrefix: false)app/components/_internal/,app/components/examples/— excluded from Nuxt auto-importsapp/registry/blocks/— distributable components; each block = directory withindex.ts+.vuecontent/docs/— Markdown docs (@nuxt/contentv3, D1 database)public/r/— generated output fromregistry:build(should be gitignored)
pnpm registry:build runs scripts/registry-build.ts:
shadcn-vue-registrygenerates registry.json fromapp/registry/shadcn-vue buildoutputs per-item JSON topublic/r/*.json- Intermediate file
app/registry/registry.jsonis auto-deleted
Config: registry.config.ts and components.json registries field.
- ESLint stylistic: double quotes, semicolons
- Tailwind v4 via
@tailwindcss/viteplugin — notailwind.configfile - shadcn-vue style:
new-york, baseColor:neutral, CSS variables enabled - Icons:
lucide-vue-next
content.config.tsdefines the docs collection withcategoryfield:element | chat | overview@nuxt/contentv3 with D1 database (content.database.type: "d1")- Markdown highlight disabled;
nuxt-shikimodule handles syntax highlighting instead
- NuxtHub (
@nuxthub/core) — Cloudflare D1/SQLite bindings hub.db: "sqlite"— uses SQLite for local development