Install
openclaw skills install web-ui-builderGenerate complete frontend page code using React 19 + Vite 8 + Tailwind CSS 4 + lucide-react from UI descriptions or images. Outputs project structure, component code, and start commands.
openclaw skills install web-ui-builderAutomatically generate complete frontend page code from visual descriptions or image references. Fixed tech stack: React 19 + Vite 8 + Tailwind CSS 4 + lucide-react.
| Technology | Version | Purpose |
|---|---|---|
| React | 19+ | UI framework |
| Vite | 8+ | Build tool |
| Tailwind CSS | 4+ | Styling (CSS-driven, no tailwind.config.js) |
| lucide-react | 1.17+ | Icon library |
| @vitejs/plugin-react | latest | Vite React plugin |
Tailwind CSS 4 uses CSS-driven configuration, no tailwind.config.js or postcss.config.js needed:
/* src/index.css — replaces tailwind.config.js + postcss */
@import "tailwindcss";
/* Custom theme colors */
@theme {
--color-brand-50: #eef2ff;
--color-brand-100: #e0e7ff;
--color-brand-500: #6366f1;
--color-brand-600: #4f46e5;
--color-brand-700: #4338ca;
}
/* Custom component classes */
@layer components {
.card { @apply rounded-xl bg-white p-6 shadow-sm border border-gray-100; }
.btn-primary { @apply rounded-lg bg-brand-600 px-4 py-2.5 text-sm font-medium text-white hover:bg-brand-700 transition-colors; }
}
Key changes:
@tailwind base/components/utilities → @import "tailwindcss"@theme directive instead of tailwind.config.js theme.extend@layer componentspostcss.config.js needed (handled by Vite)tailwind.config.js content configuration needed{
"dependencies": {
"react": "^19.0.0",
"react-dom": "^19.0.0",
"lucide-react": "^1.17.0"
},
"devDependencies": {
"@vitejs/plugin-react": "^latest",
"tailwindcss": "^4.0.0",
"vite": "^8.0.0"
}
}
project/
├── package.json
├── vite.config.js
├── index.html
└── src/
├── main.jsx # React entry point
├── index.css # @import "tailwindcss" + @theme customization
├── App.jsx # Root component
├── LoginPage.jsx # (on demand) Login page
├── DashboardPage.jsx # (on demand) Dashboard
├── Sidebar.jsx # (on demand) Sidebar
├── Header.jsx # (on demand) Header
└── ... # (on demand) Other components
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
})
User input (description/image) → Extract functional modules → Compose skeleton + content modules → Generate files → Return directory + start command
Instead of predefined page types, identify functional modules from user descriptions and compose them on demand:
| Component | Use Case |
|---|---|
TopNav | Page top navigation (links/brand/search/user menu) |
Sidebar | Side menu (icons+labels/hierarchy/user info) |
Header | Content area top bar (title/breadcrumbs/actions/notifications) |
Footer | Page footer (links/copyright/social) |
| Module | Detection Keywords |
|---|---|
HeroBanner | "banner/hero/welcome/featured" |
FormSection | "form/input/register/login/feedback" |
StatsCards | "statistics/metrics/KPI/overview" |
DataTable | "table/list/data rows/records" |
CardGrid | "cards/grid/gallery/showcase" |
ChartSection | "chart/trend/distribution/visualization" |
Timeline | "timeline/progress/flow/steps" |
Modal | "modal/dialog/confirmation" |
Tabs | "tabs/switch/categories" |
SearchBar | "search/filter/filtering" |
Examples:
Sidebar + StatsCards + DataTableFormSection(login) + background decorationTopNav + CardGrid + Footer@theme in index.cssrounded-xl, buttons rounded-lg, inputs rounded-lgshadow-smhttps://images.unsplash.com/photo-{id} or picsum.photosgrid-cols-1 md:grid-cols-2 lg:grid-cols-3node_modules/npm install && npm run devtailwind.config.js or postcss.config.js