The Missing CMS for Your V0.dev App
You generated a beautiful React component with V0.dev. It looks pixel-perfect. But the content is hardcoded — and your team can't update it without regenerating the entire component.
The V0 Content Problem
V0.dev by Vercel generates polished Next.js and React UI components from prompts. It's excellent for design and layout. But every component it produces has the same limitation: content is static JSX.
- Content changes require regeneration — Updating a headline means re-prompting V0 or editing source code
- No content editing interface — Your marketing team can't change copy without a developer
- No media management — Images are static imports or placeholder URLs
- No content relationships — Blog posts, products, and categories require custom data logic
- No publishing workflows — No drafts, no revisions, no scheduled publishing
- Scaling is manual — Adding 50 blog posts means 50 hardcoded component instances
V0.dev + Decoupled.io = Dynamic Apps
V0 generates Next.js code. Decoupled.io provides a typed client built for Next.js. They pair perfectly.
Typed Client for V0 Components
The decoupled-client package gives you full TypeScript autocomplete for your CMS content. V0 generates the UI — Decoupled.io feeds it real data:
import { createClient } from 'decoupled-client'
import { createTypedClient } from './schema/client'
const base = createClient({
baseUrl: process.env.NEXT_PUBLIC_DRUPAL_BASE_URL!,
clientId: process.env.DRUPAL_CLIENT_ID!,
clientSecret: process.env.DRUPAL_CLIENT_SECRET!,
})
const client = createTypedClient(base)
// Fetch articles with full type safety — autocomplete for every field
const articles = await client.getEntries('NodeArticle', { first: 10 })
// Render in your V0-generated component
articles.items.map(article => (
<BlogCard
key={article.id}
title={article.title}
image={article.fieldImage.url}
summary={article.fieldSummary}
/>
))
MCP Tools Inside Your Editor
Our 25+ MCP tools let AI agents manage your CMS directly from your IDE. Create content types, import content, and generate the typed client — all from natural language:
You: "Create a content type for case studies with title, client name,
industry, challenge, solution, results, and a hero image"
Claude: Done. Created case_study content type with 7 fields,
synced your typed client, and added 2 sample entries.
Visual Page Builder
Your marketing team builds and updates landing pages with drag-and-drop. 10 professional components, AI-assisted content generation, and live preview. No developer needed for content changes.
Quick Start
Install the typed client and sync your schema:
npm install decoupled-client
npx decoupled-cli schema sync
Then use the generated typed client in your V0 components:
import { createClient } from 'decoupled-client'
import { createTypedClient } from './schema/client'
const base = createClient({
baseUrl: process.env.NEXT_PUBLIC_DRUPAL_BASE_URL!,
clientId: process.env.DRUPAL_CLIENT_ID!,
clientSecret: process.env.DRUPAL_CLIENT_SECRET!,
})
const client = createTypedClient(base)
// Get a landing page by its URL path
const page = await client.getEntryByPath('/services')
Key Features
| Feature | What You Get |
|---|---|
| Typed Client | Full TypeScript autocomplete generated from your Drupal schema |
| Visual Editor | Drag-and-drop page builder for non-technical users |
| MCP Tools | 25+ AI tools for content modeling, migration, and management |
| AI Content | Generate copy, meta descriptions, and alt text with AI assistance |
| Zero Infrastructure | Managed Drupal on Kubernetes — we handle updates, scaling, and security |
| Next.js Native | Built for the same framework V0 generates — no adapter needed |
Get Started
Create your Drupal space in seconds. Free tier included — no credit card required.