Creates production-ready UI immediately from any description. Generates complete pages, components, and realistic mock data in FIRST response. Uses Next.js 14 + Tailwind + shadcn/ui. Never asks questions - infers everything from context. Triggers: UI creation, page building, component generation, build interface, screen design, layout requests.
Create beautiful, functional UI immediately. No questions. No waiting.
<core_principle>
User describes idea → User sees working UI → Same prompt, no follow-up needed
This is what makes Lovable magical. We replicate it here. </core_principle>
<default_to_action> NEVER ask:
ALWAYS do:
<component_architecture>
src/
├── app/
│ ├── layout.tsx # Root layout with providers
│ ├── page.tsx # Home/Dashboard
│ ├── globals.css # Tailwind + custom styles
│ └── [feature]/
│ └── page.tsx # Feature pages
├── components/
│ ├── ui/ # shadcn/ui components
│ ├── layout/ # Header, Sidebar, Footer
│ ├── features/ # Feature-specific components
│ └── shared/ # Reusable components
├── lib/
│ ├── utils.ts # cn() helper
│ └── mock-data.ts # Realistic mock data
├── stores/ # Zustand stores
└── types/ # TypeScript types
</component_architecture>
<shadcn_components>
import { Button } from "@/components/ui/button"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
import { Input } from "@/components/ui/input"
<mock_data_rules>
Mock data language depends on project language setting in CLAUDE.md.
const mockUsers = [
{ id: 1, name: "John Smith", email: "john@company.com", role: "Admin" },
{ id: 2, name: "Sarah Johnson", email: "sarah@company.com", role: "User" },
{ id: 3, name: "Michael Davis", email: "michael@company.com", role: "Editor" },
]
const mockProducts = [
{ id: 1, name: "House Blend Drip Coffee", price: 4.50, stock: 45 },
{ id: 2, name: "Matcha Green Tea Latte", price: 5.25, stock: 32 },
{ id: 3, name: "Hot Chocolate", price: 3.75, stock: 28 },
]
const mockStats = {
totalRevenue: 15842,
ordersToday: 47,
newCustomers: 12,
conversionRate: 3.2,
}
// NEVER DO THIS
const users = [
{ name: "Test User", email: "test@test.com" },
{ name: "User 1", email: "user1@email.com" },
]
const products = [
{ name: "Product A", price: 100 },
{ name: "Lorem Ipsum", price: 999 },
]
Always create: src/lib/mock-data.ts
Export typed data for components to import
</mock_data_rules>
<styling_rules>
p-4 md:p-6 lg:p-8p-4 md:p-6gap-4 or gap-6mb-6 or mb-8text-2xl font-semibold (page title), text-lg font-medium (section)text-sm or text-basetext-slate-500 or text-muted-foreground// Mobile-first, always
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
{/* Cards */}
</div>
<div className="flex flex-col md:flex-row gap-4">
{/* Layout items */}
</div>
</styling_rules>
<page_templates>
export default function DashboardPage() {
return (
<div className="p-4 md:p-6 space-y-6">
{/* Stats Row */}
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
<StatCard title="Today's Revenue" value="$12,450" change="+12%" />
<StatCard title="Orders" value="47" change="+5%" />
{/* ... */}
</div>
{/* Main Content */}
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
<Card className="lg:col-span-2">
{/* Chart or Table */}
</Card>
<Card>
{/* Recent Activity */}
</Card>
</div>
</div>
)
}
export default function ListPage() {
return (
<div className="p-4 md:p-6 space-y-4">
{/* Header with Search + Add Button */}
<div className="flex flex-col md:flex-row md:items-center justify-between gap-4">
<h1 className="text-2xl font-semibold">Products</h1>
<div className="flex gap-2">
<Input placeholder="Search..." className="w-full md:w-64" />
<Button>Add Product</Button>
</div>
</div>
{/* Table */}
<Card>
<Table>
{/* ... */}
</Table>
</Card>
</div>
)
}
export default function FormPage() {
return (
<div className="p-4 md:p-6 max-w-2xl mx-auto">
<Card>
<CardHeader>
<CardTitle>Add New Product</CardTitle>
</CardHeader>
<CardContent>
<form className="space-y-4">
{/* Form fields */}
<div className="flex justify-end gap-2">
<Button variant="outline">Cancel</Button>
<Button>Save</Button>
</div>
</form>
</CardContent>
</Card>
</div>
)
}
</page_templates>
<interaction_states>
// Use Skeleton from shadcn
<Skeleton className="h-4 w-full" />
<Skeleton className="h-32 w-full" />
<div className="flex flex-col items-center justify-center py-12 text-center">
<Package className="h-12 w-12 text-slate-300 mb-4" />
<h3 className="text-lg font-medium">No items yet</h3>
<p className="text-slate-500 mb-4">Start by creating your first item</p>
<Button>Add New Item</Button>
</div>
// Cards
<Card className="hover:shadow-md transition-shadow cursor-pointer">
// List items
<div className="hover:bg-slate-50 transition-colors">
// Buttons already have states from shadcn
</interaction_states>
<output_checklist>
npm run dev will work immediately
</output_checklist><anti_patterns>
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer