15 — Site Generation
SkillWeb & browsingEnd-to-end AI website generation pipeline. Claude Opus 4.8 emits Bolt-style <boltArtifact> envelopes (multi-file, plan-first) that customize Vite+React+Tailwind templates from pre-researched business data. Pre-research via APIs, media acquisition, brand extraction, visual inspection via GPT Image 2 vision, R2 upload (per-file content-type by extension), D1 status updates. Supports all business types: SaaS, portfolio, non-profit, restaurant, salon, medical, legal, retail, tech.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the 15 — Site Generation skill
What this skill tells your AI
The instructions your AI receives, as published by heymegabyte/claude-skills in 15-site-generation/SKILL.md and read by ahel’s review.
Run 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.
Submodules
- research-pipeline — API-driven business research, scraping, enrichment
- media-acquisition — image/video/logo sourcing across 17 engines (Flux 1.1 Pro Ultra, Ideogram 3.0, Recraft V3, GPT Image 1.5, Sora) — Pexels-first / AI-fallback, pHash dedup
- build-prompts — master prompt + enhancement phases
- quality-gates — Lighthouse CI v0.15+, axe-core / playwright v4.11+ WCAG 2.2 AA, source-parity diff, 3-tier visual regression, console-error gate, Recommendations Loop
- domain-features — category-specific for 18+ business types
- template-system — Vite + React + Tailwind + shadcn/ui starter
- local-seo — citation building, GBP sync, review generation, trust badges, local conversion tracking
- bolt-artifact-protocol —
<boltArtifact>XML envelope spec — ordered file/shell actions, PLAN.md-first, runtime parser + executor, ~$6/site at 80K output tokens - blog-import.mjs — RSS-first crawl + Squarespace JSON fallback → strip CMS residue → GPT Image 2 vision-mini typed-block restructure → pHash dedup →
src/data/blog-posts.ts - validate-assets.mjs — post-build R2/dist gate — 13 mandatory files + every img/link/script/source ref resolves OR matches allowlist
Dual-Template Architecture (TWO REPOS — NEVER CONFUSE)
- Local Business:
megabytespace/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. - SaaS:
megabytespace/saas-starter— Hono + D1 + Clerk + Stripe + Inngest + Resend on CF Workers. Use for: SaaS products, APIs, dev tools, platforms.
Template selection (from _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-starter- Unknown → local business
Auto-sync
After ANY change to skills 05-15, evaluate: "Does this improve template?" If yes → push to appropriate template repo same prompt.
Generation Protocol
Model emits ONE <boltArtifact> XML envelope with ordered <boltAction type="file" filePath="…"> and <boltAction type="shell"> actions. See bolt-artifact-protocol.md.
- First action ALWAYS
PLAN.md(route tree, design-token diff, media count, file count, validators) - Runtime parser validates first-action-is-PLAN.md + required-files +
npm…buildshell action; failures re-prompt (max 2 retries) - Executor modes:
container(default —git clone template → npm install → vite build → upload dist/) |r2-files(pre-built static)
Pipeline
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.
Context Files (written before model runs)
_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 percitations.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 requirements
Build Rules (NON-NEGOTIABLE)
Images
- USE ALL images in
assets/. Never external URLs (hotlinking blocked). - Hero:
assets/hero-*. Gallery: full-width slider w/ ALL images. No image left unused. - Minimum count:
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+ - Per-page floor: home ≥6, every sub-page ≥4. Minimum 5 AI-generated GPT Image 1.5 originals per site.
- All images through optimization pipeline (skill 12): WebP + AVIF at 320/640/1280/1920w, blur placeholders, dominant color extraction. Use
<ResponsiveImage>, never raw<img>w/ PNG/JPG src. - Dedupe via 301 not deletion — md5-hashed twins keep canonical, emit
{deleted-url:canonical}to Worker redirect map.
Video
- Walker captures
<video>+<source>+<iframe src*=youtube|vimeo|wistia|loom>+data-video-id+ CSSbackground-video+ autoplay-loop hero MP4s + animated WebPs + lottie.json - Output
_videos.jsonkeyed by source URL w/{src, poster, duration, dims, transcript?, captions_vtt?, original_route, slot_hint} - Template's
<VideoEmbed>lazy-loads, poster-first, captions if VTT exists, respectsprefers-reduced-motion - Augment via Pexels Video API (free) + YouTube Data API search-by-topic for missing background loops
- Video count gate: every original
<video>and embed accounted for in_videos.json; missing = fail
GPT Image 1.5 Purpose-Craft (per-slot prompts — never generic)
Every 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.
Per-Route SEO
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.
Font-Flash Mitigation
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.
Hero Context Match
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.
Empty-Config Widgets
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.
Post-Deploy Parallel Scan (BOTH scripts required — deploy not verified without both)
scripts/scan-assets.mjs— Playwright concurrency 6, captures console errors/warnings +requestfailed+response.status>=400per routescripts/check-routes.sh— curl every route + every blog slug for non-200
Design
- Dark-first, brand-extracted base color (skill 10 — MANDATORY) | 10+
@keyframesanimations - Glassmorphism cards (
bg-white/5 backdrop-blur-md border-white/10) | gradient text on key headings - Parallax-style depth on hero | 25+ inline SVG decorative elements
- Every interactive element has hover + active + focus states
- Smooth scroll for ALL same-page nav (
scrollIntoView, never#hrefjumps)
Content
- Word count MATCH OR EXCEED original — never ship less content; 5000+ words minimum
- Migrate ALL blog posts, news, events, team bios from scraped content
- About page 2000+ words | every claim factually accurate from research
- Blog → individual routes per post with RSS feed
- Addresses → Google Maps links | phone →
tel:links | email →mailto:links
See submodules for: research-pipeline, media-acquisition, build-prompts, quality-gates, domain-features, template-system, local-seo, bolt-artifact-protocol, page-set-expansion, source-fidelity-loop, build-breaking-rules.
Signals
- GitHub stars
- 21
- Forks
- 4
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
site-generation- Source
- github.com/heymegabyte/claude-skills