A Nuxt 4 starter for internal tools and admin consoles: a dashboard, an approval queue, ops notices, an audit log, settings groups, billing plans and UI strings. All of that copy is content in .contentrain/, so none of it is hard-coded in Vue templates.
Built on Contentrain, the content governance ecosystem for teams and AI agents:
- models, content and the generated typed client live in git next to the code;
- every change is reviewable;
- AI agents edit content through the same validated models as people do.
- Server-only content reads. Nitro routes in
server/api/query the generated#contentrainclient. Pages and the sharedAdminShellload the data withuseFetch, as the Nuxt guide recommends. The content stays out of the client bundle. - Operator copy as structured content. Approval states, queue items, notices, audit events and settings matrices are typed collections. Overview, navigation, footer, SEO and site settings are singletons.
- A dictionary for UI strings.
ui-copyholds the admin chrome strings./localizationlists them next to the settings and plan names that depend on them. - A model overview.
/architecturelists the models by domain, read from.contentrain/models.
- Click Use this template to create your own repository.
- Connect that repository to Contentrain Studio. Your team can then edit, review and publish the content in the browser, and every change stays a git commit.
Requires Node 22 and pnpm 10.
pnpm install
pnpm dev| Command | What it does |
|---|---|
pnpm dev |
Start the dev server |
pnpm check |
Type-check with nuxt typecheck |
pnpm build |
Production build |
pnpm preview |
Serve the production build |
pnpm contentrain:generate |
Regenerate .contentrain/client after changing models or content |
pnpm exec contentrain validate |
Validate models and content |
pnpm deploy:netlify |
Build with the Netlify preset |
Demo routes: /, /localization, /operations, /architecture.
Domains: system, app, ops. Locale: en.
| Model | Kind | Domain | Fields |
|---|---|---|---|
footer |
singleton | system | blurb, columns, legal_notice |
navigation |
singleton | system | announcement_label, cta_href, cta_label, items |
seo-defaults |
singleton | system | canonical_base, meta_description, meta_title, og_image |
site-settings |
singleton | system | default_locale, og_image, site_name, site_tagline, theme_name |
billing-plan |
collection | app | cadence, cta_href, cta_label, featured, features, name, price_label, status_badge |
dashboard-overview |
singleton | app | environment_badge, eyebrow, primary_cta_href, primary_cta_label, status_note, summary, title |
dashboard-stat |
collection | app | delta, label, note, trend, value |
settings-group |
collection | app | items, summary, title |
ui-copy |
dictionary | app | (key → value) |
work-queue-item |
collection | app | due_label, href, owner, priority, status, summary, title |
audit-event |
collection | ops | actor, severity, summary, target, timestamp, title |
ops-notice |
collection | ops | body, cta_href, cta_label, title, tone |
Models live in .contentrain/models/ and content in .contentrain/content/. After editing either, run pnpm contentrain:generate to refresh the typed client that the server routes import as #contentrain.
- Netlify: the build command is
pnpm deploy:netlify(set innetlify.toml). Nitro manages the publish directory. - Netlify CLI: run
pnpm dlx netlify-cli initto connect the repository for continuous deployment. If the site already exists, runpnpm dlx netlify-cli linkinstead. - Any Node host: run
pnpm build, thennode .output/server/index.mjs.
Contentrain has four parts: the open-source tools, Studio, Migrate and Bridge.
- Contentrain AI, MCP, CLI and SDK: ai.contentrain.io
- Query SDK: ai.contentrain.io/packages/sdk
- Nuxt guide: ai.contentrain.io/guides/frameworks#nuxt-3
- Contentrain Studio: contentrain.io/studio
- Edit with an AI agent: @contentrain/mcp locally, or Studio MCP Cloud for teams
- Open-source tools (MIT): github.com/Contentrain/ai
- Migrate, WordPress to Astro: migrate.contentrain.io
- Bridge, a free WordPress plugin that exports content as a Contentrain store: github.com/Contentrain/wordpress-bridge
MIT, see LICENSE.


