- name
- web-artifacts-builder
- description
- Build elaborate, multi-component claude.ai HTML artifacts with modern frontend tech (React 18, TypeScript, Vite, Tailwind CSS, shadcn/ui) bundled into a single self-contained HTML file. Use for complex artifacts needing state management, routing, multiple views, or shadcn/ui components - NOT for simple single-file HTML/JSX snippets. Triggers (EN): "build a web artifact", "react artifact", "multi-component artifact", "shadcn artifact", "interactive dashboard artifact", "complex claude.ai artifact". Triggers (FR): "construis un artifact web", "artifact react", "artifact multi-composants", "artifact shadcn", "dashboard interactif en artifact", "artifact complexe".
# Web Artifacts Builder
To build powerful frontend claude.ai artifacts, follow these steps:
1. Initialize the frontend repo using `scripts/init-artifact.sh`
2. Develop your artifact by editing the generated code
3. Bundle all code into a single HTML file using `scripts/bundle-artifact.sh`
4. Display artifact to user
5. (Optional) Test the artifact
**Stack**: React 18 + TypeScript + Vite + Parcel (bundling) + Tailwind CSS + shadcn/ui
## Single-voice craft (do NOT parallelize)
Building one artifact is ONE coherent build held by ONE design voice — do not fan out to parallel sub-agents. Splitting the UI across agents fractures the visual language (spacing rhythm, color system, typography, component anatomy) and produces a Frankenstein artifact. Keep state design, layout, and styling decisions in a single head from init → bundle. (If you also need an independent *design critique*, run it as a separate pass AFTER the artifact exists — never as a concurrent builder.)
Craft upgrades:
- **Design a system before components.** Pick one type scale, one spacing unit (e.g. 4px), one accent color, and one corner-radius value up front, then apply them everywhere. Avoid AI-slop tells: no centered-everything, no purple gradients, no uniform pill corners, no default Inter.
- **State & routing first, polish second.** Map the views and the shared state shape (single store or lifted props) before styling. A clean data flow prevents the rework that bloats artifacts.
- **Worked example — a multi-view dashboard:** `bash scripts/init-artifact.sh sales-dashboard` → build `Sidebar` + `<Tabs>` (Overview / Revenue / Customers) with shadcn `Card`, `Table`, `Badge`, sharing one `useState` selected-range filter → `bash scripts/bundle-artifact.sh` → open `bundle.html` and click each tab to confirm state persists → share `bundle.html`.
## Output contract & verification
- **Produces:** a single self-contained `bundle.html` (all JS/CSS/deps inlined) in the project root, plus the editable source project. The ONLY artifact you hand the user is `bundle.html`.
- **Verify before sharing (required):**
1. `bash scripts/bundle-artifact.sh` exits 0 with no Parcel build errors.
2. `bundle.html` exists, is non-empty, and contains inlined JS (`grep -c '<script' bundle.html` ≥ 1) — no external `src=`/`href=` to local files.
3. Open `bundle.html` (Playwright/Puppeteer if testing) and confirm it renders without a blank screen and the browser console is clean of app errors.
- **Evidence / no-hallucination:** Only claim a feature works after observing it in the bundled `bundle.html` — not from the source code (Law L1: runtime is the only truth). Do NOT invent shadcn/ui component names or props; confirm them against https://ui.shadcn.com/docs/components. If a component isn't in the pre-installed set, add it explicitly rather than assuming it exists.
## Design & Style Guidelines
VERY IMPORTANT: To avoid what is often referred to as "AI slop", avoid using excessive centered layouts, purple gradients, uniform rounded corners, and Inter font.
## Quick Start
### Step 1: Initialize Project
Run the initialization script to create a new React project:
```bash
bash scripts/init-artifact.sh <project-name>
cd <project-name>
```
This creates a fully configured project with:
- ✅ React + TypeScript (via Vite)
- ✅ Tailwind CSS 3.4.1 with shadcn/ui theming system
- ✅ Path aliases (`@/`) configured
- ✅ 40+ shadcn/ui components pre-installed
- ✅ All Radix UI dependencies included
- ✅ Parcel configured for bundling (via .parcelrc)
- ✅ Node 18+ compatibility (auto-detects and pins Vite version)
### Step 2: Develop Your Artifact
To build the artifact, edit the generated files. See **Common Development Tasks** below for guidance.
### Step 3: Bundle to Single HTML File
To bundle the React app into a single HTML artifact:
```bash
bash scripts/bundle-artifact.sh
```
This creates `bundle.html` - a self-contained artifact with all JavaScript, CSS, and dependencies inlined. This file can be directly shared in Claude conversations as an artifact.
**Requirements**: Your project must have an `index.html` in the root directory.
**What the script does**:
- Installs bundling dependencies (parcel, @parcel/config-default, parcel-resolver-tspaths, html-inline)
- Creates `.parcelrc` config with path alias support
- Builds with Parcel (no source maps)
- Inlines all assets into single HTML using html-inline
### Step 4: Share Artifact with User
Finally, share the bundled HTML file in conversation with the user so they can view it as an artifact.
### Step 5: Testing/Visualizing the Artifact (Optional)
Note: This is a completely optional step. Only perform if necessary or requested.
To test/visualize the artifact, use available tools (including other Skills or built-in tools like Playwright or Puppeteer). In general, avoid testing the artifact upfront as it adds latency between the request and when the finished artifact can be seen. Test later, after presenting the artifact, if requested or if issues arise.
## Reference
- **shadcn/ui components**: https://ui.shadcn.com/docs/components
عرض على GitHub