From claude-skills
End-to-end AI website generation pipeline: research business data, acquire media, emit Bolt-style multi-file artifacts, upload to R2, update D1 status. Supports all business types.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-skills:15-site-generationorg:website_buildThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Run the end-to-end AI website generation pipeline: research→media→Bolt artifact emission→R2 upload→D1 status for all business types.
_real-ua.mjsblog-import.mjsbolt-artifact-protocol.mdbuild-breaking-rules.mdbuild-image-redirects.mjsbuild-prompts.mdcheck-routes.shdomain-features.mdenhance-blog-posts.mjshomepage-block-library.mdlocal-seo.mdmedia-acquisition.mdnon-technical-owner-onboarding.mdpage-set-expansion.mdpseo-templates.mdquality-gates.mdresearch-pipeline.mdscan-assets.mjssmall-business-mode.mdsource-fidelity-loop.mdRun the end-to-end AI website generation pipeline: research→media→Bolt artifact emission→R2 upload→D1 status for all business types.
Model migration note (pass-78, 2026-06-09):
DALL-E→ GPT Image 1.5 +GPT-4o→ GPT Image 2 vision. Perplatform.openai.com/docs/deprecations. Generation pipeline unchanged.
<boltArtifact> XML envelope spec — ordered file/shell actions, PLAN.md-first, runtime parser + executor, ~$6/site at 80K output tokenssrc/data/blog-posts.tsmegabytespace/template.projectsites.dev — Vite + React + Tailwind + shadcn/ui, 15 local components, CSS var brand slots. Use for: restaurant, salon, medical, legal, fitness, contractor, retail, etc.megabytespace/saas-starter — Hono + D1 + Clerk + Stripe + Inngest + Resend on CF Workers. Use for: SaaS products, APIs, dev tools, platforms._form_data.json.category)restaurant|cafe|salon|spa|medical|dental|legal|fitness|automotive|construction|photography|real_estate|education|financial|retail|pet_services|wedding|church|nonprofit|government → template.projectsites.devsaas|api|platform|devtool|marketplace → saas-starterAfter ANY change to skills 05-15, evaluate: "Does this improve template?" If yes → push to appropriate template repo same prompt.
Model emits ONE <boltArtifact> XML envelope with ordered <boltAction type="file" filePath="…"> and <boltAction type="shell"> actions. See bolt-artifact-protocol.md.
PLAN.md (route tree, design-token diff, media count, file count, validators)npm…build shell action; failures re-prompt (max 2 retries)container (default — git clone template → npm install → vite build → upload dist/) | r2-files (pre-built static)Phase 0: Pre-Research + Media Acquisition (ALL BUILD MODES)
→ Google Places, scraping, social verification, brand extraction, media discovery
→ Download ALL images from original; stock via Pexels/Pixabay; AI via GPT Image 1.5 / Stability AI
→ YouTube/Pexels video embeds
→ Output: _research.json, _scraped_content.json, _assets/
→ HARD GATE: <10 images = build NOT complete
Phase 1: Claude Opus 4.8 Bolt-Artifact Emission (Worker OR Container)
→ Reads all _ context files; emits ONE <boltArtifact> envelope
→ First action ALWAYS PLAN.md
→ Customizes pre-installed Vite+React+Tailwind+shadcn/ui template
→ Builds 1:N-page site MATCHING source sitemap (every URL recreated, max 1000)
→ Clean URL slugs (never copy CMS garbage like -1 suffixes)
Phase 2: Post-Build Verification (Worker)
→ Screenshot via microlink.io → GPT Image 2 vision scoring
→ D1 status update → email notification
CRITICAL — In manual/prompt-based builds (no container), Phase 0 runs INLINE as first step. Agent MUST: (1) WebFetch original site pages + extract all image URLs; (2) download images to public/; (3) search + download stock photos; (4) generate AI images if API keys available. ALL BEFORE writing any React code. Text-only site = failed build.
_research.json — business profile + hours + phone + address + reviews + geo_brand.json — colors + fonts + personality + logo URL + color_source_citations.json — APA 7th bibliography keyed by refId per citations.md_scraped_content.json — all pages by URL_assets.json — image manifest w/ metadata_image_profiles.json — GPT Image 2 vision analysis per image: quality + placement + colors_videos.json — YouTube/Pexels embed URLs + metadata_places.json — Google Places enrichment: photos + reviews + rating_form_data.json — user-submitted from /create_domain_features.json — category-specific feature requirementsassets/. Never external URLs (hotlinking blocked).assets/hero-*. Gallery: full-width slider w/ ALL images. No image left unused.max(30, original_image_count × 1.4, page_count × 6_home_or_4_sub) — 4-page rebuild ⇒ 30-50 images; 50-page ⇒ 200+; 500-page ⇒ 2000+<ResponsiveImage>, never raw <img> w/ PNG/JPG src.{deleted-url:canonical} to Worker redirect map.<video> + <source> + <iframe src*=youtube|vimeo|wistia|loom> + data-video-id + CSS background-video + autoplay-loop hero MP4s + animated WebPs + lottie .json_videos.json keyed by source URL w/ {src, poster, duration, dims, transcript?, captions_vtt?, original_route, slot_hint}<VideoEmbed> lazy-loads, poster-first, captions if VTT exists, respects prefers-reduced-motion<video> and embed accounted for in _videos.json; missing = failEvery AI-generated image brief MUST include: (1) route + section (/about hero); (2) page topic + intent; (3) brand palette tokens by hex from _brand.json; (4) composition + aspect ratio; (5) subject specificity (named noun + modifiers + lighting + lens metaphor); (6) negative prompt (no text, no watermarks, no AI artifacts, no extra fingers, no logos).
Build _image_briefs.json per site BEFORE generation — one brief per slot, reused across fallback chain (GPT Image 1.5 → Ideogram → Recraft). Generic "create a hero image" = fail; discarded + brief regenerated.
SPAs swap meta on useLocation() change via <PageHead /> reading src/data/page-meta.ts. Each entry: title 50-60ch keyphrase-first | desc 120-156ch | canonical + og:+ twitter: + JSON-LD (Org/Service/BlogPosting/BreadcrumbList/FAQPage). Hard gate: every <Route path> has page-meta.ts entry or data-derived meta.
index.html <head>: <link rel="preload" as="style"> + animate.css + html:not(.fonts-loaded) body { opacity: 0 } + inline document.fonts.ready.then(reveal) + setTimeout(reveal, 1200) safety net.
Every hero image/video literally depicts page topic — /mass-schedule gets stained-glass-window, /donate gets volunteers-serving. AI-vision QA scores image_matches_page_topic 0-10 per hero; <8 = replace.
Gate every third-party widget on env var: {import.meta.env.VITE_TURNSTILE_SITEKEY ? <div className="cf-turnstile" data-sitekey={...} /> : null}. Same for Stripe pk, PostHog snippet, Resend embed. Empty data-sitekey="" = console error on every render.
scripts/scan-assets.mjs — Playwright concurrency 6, captures console errors/warnings + requestfailed + response.status>=400 per routescripts/check-routes.sh — curl every route + every blog slug for non-200@keyframes animationsbg-white/5 backdrop-blur-md border-white/10) | gradient text on key headingsscrollIntoView, never #href jumps)tel: links | email → mailto: linksnpx claudepluginhub heymegabyte/claude-skillsGenerates complete websites from natural language prompts via the EvoWeb API. Creates HTML, CSS, JavaScript, and content. Build landing pages, portfolios, and business sites quickly.
Clones inspiration websites exactly via browser extraction, customizes section-by-section with user content and AI-generated images, then deploys conversion-focused landing pages to Vercel.
Guides creation of production-ready Power Pages code sites as SPAs using React, Angular, Vue, or Astro, from requirements discovery to deployment with live dev server previews and git commits.