A powerful orchestration system that generates complete, SEO-optimized local service websites with automated image scraping, lead capture forms, and location-based pages. Built on Claude Code's agent architecture with mandatory human oversight and visual testing.
This is a service website generation system that automatically creates fully-functional local service websites for any niche (plumbers, electricians, HVAC, lawyers, etc.). The system uses Claude Code as the orchestrator with specialized subagents for each task:
- π§ Claude (Orchestrator) - Manages the 200k context, creates todos, coordinates all agents
- π§ Service Generator - Creates service lists for any niche
- πΌοΈ Image Scraper - Fetches high-quality images from Unsplash via Jina AI (s.jina and r.jina)
- ποΈ Database Agent - Sets up Supabase for forms and lead capture
- βοΈ Coder - Generates location + service combination pages with SEO optimization
- ποΈ Tester - Verifies everything with Playwright (screenshots, navigation, forms)
- π Stuck - Human escalation when ANY issue occurs
- Service List Generation: Automatically generates comprehensive service lists for any niche
- Location-Based Pages: Creates service + location combination pages (e.g., "Plumber in Galway City")
- SEO-Optimized Content: Clickbait titles, meta descriptions, and structured content
- Responsive Design: Mobile-first templates that work on all devices
- Automated Image Scraping: Uses Jina AI (s.jina.ai and r.jina.ai) to fetch Unsplash images
- Context-Aware Images: Images match service type and location context
- Optimized Assets: Properly sized and formatted images
- Supabase Integration: Automated database setup for form submissions
- Contact Forms: Pre-built forms on every page for lead generation
- Data Validation: Client and server-side form validation
- No Fallbacks: When ANY problem occurs, you get asked - no assumptions
- Visual Testing: Playwright screenshots verify every page
- Link Verification: Every header/footer link gets a real page - NO 404s
- Human Control: Stuck agent ensures you're always in the loop
- Claude Code CLI installed (get it here)
- Node.js (for Playwright MCP)
- Jina AI API Key (get it here)
- Supabase Account (optional, for forms)
# Clone this repository
git clone https://github.com/IncomeStreamSurfer/claude-code-agents-wizard-v2.git
cd claude-code-agents-wizard-v2
# Start Claude Code in this directory
claudeThat's it! The agents are automatically loaded from the .claude/ directory.
When you want to generate a service website, provide the niche, location, and API keys:
You: "Generate a plumber website for Galway. Jina API key: abc123"
Claude will automatically:
- Create a detailed todo list for the entire website
- Invoke service-generator to create comprehensive service lists
- Invoke image-scraper to fetch relevant images from Unsplash via Jina
- Invoke database agent to set up Supabase (if needed)
- Invoke coder to generate each location + service page with SEO optimization
- Invoke tester to verify every page (screenshots, navigation, forms)
- If ANY problem occurs, stuck agent asks you what to do
- Continue until complete website is generated
USER: "Generate [service] website for [location]"
β
CLAUDE: Creates detailed website todos with TodoWrite
β
CLAUDE: Invokes service-generator subagent
β
SERVICE-GENERATOR: Creates service list (e.g., drain cleaning, pipe repair, etc.)
β
CLAUDE: Invokes image-scraper subagent
β
IMAGE-SCRAPER: Uses Jina AI (s.jina/r.jina) to fetch Unsplash images
β
βββ Problem? β Invokes STUCK β You decide β Continue
β
CLAUDE: Invokes database subagent
β
DATABASE: Sets up Supabase tables for forms
β
CLAUDE: Invokes coder for each page
β
CODER: Generates service + location pages with SEO content
β
βββ Problem? β Invokes STUCK β You decide β Continue
β
CLAUDE: Invokes tester subagent
β
TESTER: Playwright verification (screenshots, links, forms)
β
βββ Test fails? β Invokes STUCK β You decide β Continue
β
TESTER: Reports success
β
CLAUDE: Marks todo complete, moves to next page
β
Repeat until all pages generated β
Specialized Service List Creation
- Generates comprehensive service lists for any niche
- Creates SEO-friendly service names and descriptions
- Provides service categories and subcategories
- Returns structured data for page generation
When it's used: First step in website generation process
Jina AI Integration for Unsplash
- Uses s.jina.ai to search Unsplash for relevant images
- Uses r.jina.ai to scrape image URLs and metadata
- Filters images by service type and location context
- Returns optimized image URLs for page generation
When it's used: After service list generation, before page creation
Supabase Setup & Configuration
- Creates Supabase tables for form submissions
- Sets up authentication (if needed)
- Configures API keys and environment variables
- Returns connection details for forms
When it's used: Before generating pages with forms
Page Generation & Implementation
- Generates location + service combination pages
- Creates SEO-optimized titles and meta descriptions
- Implements contact forms with Supabase integration
- Writes responsive HTML/CSS/JavaScript
- Never uses fallbacks - invokes stuck agent immediately
When it's used: For generating each website page
Playwright Visual Verification
- Uses Playwright MCP to test rendered pages
- Takes screenshots of every page layout
- Tests navigation links (header/footer)
- Verifies form submissions work
- Checks responsive design on multiple viewports
- Never marks failing tests as passing
When it's used: After every page generation
Human Escalation Point
- Gets invoked when ANY subagent hits a problem
- ONLY subagent that can ask you questions
- Presents clear options for you to choose
- Blocks progress until you respond
- Returns your decision to the calling agent
When it's used: Whenever ANY problem occurs
This is the key differentiator:
Traditional AI: Hits error β tries workaround β might fail silently This system: Hits error β asks you β you decide β proceeds correctly
Every agent is hardwired to invoke the stuck agent rather than use fallbacks. You stay in control.
You: "Generate a plumber website for Galway. Jina API key: jina_abc123xyz"
Claude creates todos:
[ ] Generate plumbing service list
[ ] Scrape plumber images from Unsplash via Jina
[ ] Set up Supabase for contact forms
[ ] Generate homepage with hero section
[ ] Generate service pages (drain cleaning, pipe repair, etc.)
[ ] Generate location pages (Galway City, Salthill, Oranmore, etc.)
[ ] Generate service + location combo pages
[ ] Create header navigation with all links
[ ] Create footer with service links
[ ] Test all pages and navigation
Claude invokes service-generator("plumber services")
Service-Generator: Creates list:
- Emergency Plumbing
- Drain Cleaning
- Pipe Repair
- Water Heater Installation
- Bathroom Fitting
- etc.
Claude invokes image-scraper("plumber images", "jina_abc123xyz")
Image-Scraper: Uses s.jina.ai to search Unsplash
Image-Scraper: Uses r.jina.ai to scrape image URLs
Image-Scraper: Returns 20+ relevant plumber images
Claude invokes database("setup contact form tables")
Database: Creates Supabase table 'contact_submissions'
Database: Returns connection string
Claude invokes coder("Generate homepage with hero section")
Coder: Creates index.html with:
- SEO title: "Best Plumber in Galway - 24/7 Emergency Service"
- Hero image from scraped Unsplash images
- Contact form connected to Supabase
- Service list links
- Location links in footer
Claude invokes tester("Verify homepage loads and form works")
Tester: Launches Playwright
Tester: Takes screenshot of homepage
Tester: Clicks "Contact Us" button
Tester: Fills out form
Tester: ERROR - Form submission returns 403
Tester: Invokes stuck subagent
Stuck: Asks YOU:
"Form submission failed with 403 Forbidden. How to proceed?"
Options:
- Check Supabase API key configuration
- Disable form validation temporarily
- Review CORS settings
You choose: "Check Supabase API key configuration"
Stuck: Returns your decision to tester
Tester: Verifies API key is correct
Tester: Form now works
Tester: Reports success to Claude
Claude: Marks homepage todo complete β
Claude invokes coder("Generate 'Drain Cleaning in Galway City' page")
... and so on until all pages generated
.
βββ .claude/
β βββ CLAUDE.md # Orchestration instructions for main Claude
β βββ agents/
β βββ service-generator.md # Service list generation agent
β βββ image-scraper.md # Jina AI Unsplash scraper agent
β βββ database.md # Supabase setup agent
β βββ coder.md # Page generation agent
β βββ tester.md # Playwright testing agent
β βββ stuck.md # Human escalation agent
βββ .mcp.json # Playwright MCP configuration
βββ .gitignore
βββ README.md
- SEO Grove - AI-powered SEO automation platform
- ISS AI Automation School - Join our community to learn AI automation
- Income Stream Surfers YouTube - Tutorials, breakdowns, and AI automation content
Have questions or want to share what you built?
- Join the ISS AI Automation School community
- Subscribe to Income Stream Surfers on YouTube
- Check out SEO Grove for automated SEO solutions
This is an open system! Feel free to:
- Add new specialized agents
- Improve existing agent prompts
- Share your agent configurations
- Submit PRs with enhancements
This system leverages Claude Code's subagent system:
- CLAUDE.md instructs main Claude to be the orchestrator
- Subagents are defined in
.claude/agents/*.mdfiles - Each subagent gets its own fresh context window
- Main Claude maintains the 200k context with todos and project state
- Playwright MCP is configured in
.mcp.jsonfor visual testing - Jina AI integration uses s.jina.ai (search) and r.jina.ai (reader) endpoints
The magic happens because:
- Claude (200k context) = Maintains big picture, manages todos, coordinates all agents
- Service-Generator (fresh context) = Creates service lists for specific niches
- Image-Scraper (fresh context) = Fetches images via Jina AI's Unsplash integration
- Database (fresh context) = Sets up Supabase for one website at a time
- Coder (fresh context) = Generates one page at a time with SEO optimization
- Tester (fresh context) = Verifies one page at a time with Playwright
- Stuck (fresh context) = Handles one problem at a time with human input
- Provide clear requirements - Specify niche, location, and any API keys upfront
- Review screenshots - The tester provides visual proof of every page
- Make decisions when asked - The stuck agent needs your guidance
- Verify navigation - Ensure all header/footer links have actual pages (no 404s)
- Test forms - Check Supabase integration works for lead capture
- Check SEO - Review generated titles and meta descriptions
- Use
/agentscommand to see all available subagents - Claude maintains the todo list in its 200k context - check anytime
- Screenshots from tester are saved and can be reviewed
- Each subagent has specific tools - check their
.mdfiles - Subagents get fresh contexts - no context pollution!
- s.jina.ai is for searching Unsplash, r.jina.ai is for scraping content
- Always verify ALL header/footer links have corresponding pages created
MIT - Use it, modify it, share it!
Built by Income Stream Surfer
Powered by Claude Code's agent system, Playwright MCP, and Jina AI.
Ready to generate a service website? Just run claude in this directory and tell it what niche and location you want! π