Service Website Generator
Build complete service-based websites with hundreds of local SEO pages in one automated workflow.
Stack: NextJS 14 + TypeScript + Tailwind CSS + PostgreSQL + Prisma ORM + Jina AI + Unsplash
Quick Start
Step 0: Collect User Inputs (REQUIRED)
Before proceeding, collect these inputs:
- •Service Niche: What service business? (e.g., "Plumber", "Pressure Washing", "HVAC")
- •Service Area: Main city/region (e.g., "Port Orange, Florida", "Galway, Ireland")
- •Business Name (optional): For personalization (e.g., "Murphy's Plumbing Services")
- •Jina API Key: Required for research and Unsplash image gathering
- •HTML/CSS/JS Design (optional): User provides OR system generates
DO NOT proceed until you have: Service niche, service area, and Jina API key confirmed.
Step 1: Design Generation
IMPORTANT: Use the frontend-aesthetics skill guidelines when generating designs!
If user did NOT provide design:
Invoke: design-generator agent
Input:
- Service niche
- Target audience (local customers)
- MUST follow frontend-aesthetics skill guidelines:
- Typography: Use distinctive fonts (Plus Jakarta Sans, Space Grotesk, Cabinet Grotesk)
- Colors: Industry-specific palettes, NOT purple gradients
- Motion: CSS animations for delight
- Backgrounds: Layered gradients, subtle patterns
- Tailwind v4: Use gap-* not space-x-*, no custom CSS resets
Output: /design/index.html, /design/styles.css, /design/script.js
If user DID provide design:
Save their design to /design/ folder.
Step 2: Location Discovery
Invoke: location-generator agent Input: Service area, service niche, Jina API key Output: /locations.json (20-50+ locations with metadata)
Discovers all towns, suburbs, and neighborhoods within service radius (typically 15-50 miles depending on geography).
Step 3: Service Schema Creation
Invoke: service-schema-creator agent Input: Service niche, Jina API key, sample locations Output: /service-schema-template.json (5-15 services with comprehensive schema)
Step 4: Database Setup
Invoke: database-agent agent Input: Project directory, service niche, service area Output: PostgreSQL + Prisma ORM configured
Creates tables: ContactForm, QuoteRequest, CallbackRequest, PageView, EmailSubscriber, ServiceAreaLead
Step 5: Calculate Page Generation Strategy
Total pages = Services × Locations Agents needed = Total pages ÷ 12 (average pages per agent) Example: 15 services × 48 locations = 720 pages → 60 agents
Step 6: Spawn Page Generators (PARALLEL)
CRITICAL: Spawn ALL agents simultaneously, not sequentially!
Invoke: service-page-generator agents (N agents in parallel) Input per agent: - Service schema template path - Assigned service+location combinations (10-15 pages) - Jina API key (for Unsplash image scraping) - Service niche context Output: /pages/*.json (10-15 files per agent)
Each agent:
- •Searches Unsplash via Jina for relevant images
- •Generates service descriptions, benefits, process, FAQ
- •Creates complete JSON files with all data + images
Step 7: NextJS Site Build
Invoke: nextjs-builder agent Input: Design files, all JSON pages, service schema, locations Output: /website/ folder with complete NextJS app
Creates:
- •Homepage with service overview
- •Main services page
- •Main locations page
- •Individual service+location pages (e.g., /emergency-plumber-athenry)
- •Service category pages
- •Location pages
- •Click-to-call functionality
- •Trust signals and CTAs
Step 8: Playwright Testing
# Start dev server in background cd [project]/website && npm run dev & # Invoke playwright-tester agent # Tests all pages, validates SEO, checks images # Kill dev server after tests kill [PID]
Step 9: GitHub Deployment
cd [project-directory] git init git add -A git commit -m "Initial commit: [Service Niche] in [Service Area] website" gh repo create [repo-name] --public --source=. --push
If gh CLI unavailable, provide manual instructions.
Available Agents
| Agent | Purpose | Invocation |
|---|---|---|
business-researcher | Research specific business (if name provided) | Once, Step 1 |
design-generator | Generate HTML/CSS/JS design | Once, Step 1 |
location-generator | Discover locations in service area | Once, Step 2 |
service-schema-creator | Create service list and schema | Once, Step 3 |
database-agent | Set up PostgreSQL + Prisma | Once, Step 4 |
service-page-generator | Generate 10-15 pages with images | N agents, parallel |
nextjs-builder | Build complete NextJS website | Once, Step 7 |
playwright-tester | Test all pages and functionality | Once, Step 8 |
Design & Style Guidelines
CRITICAL: Follow the frontend-aesthetics skill to avoid "AI slop"!
Typography (from frontend-aesthetics)
- •Never use: Inter, Roboto, Open Sans, Lato, Arial, system fonts
- •Good choices: Plus Jakarta Sans, Space Grotesk, Cabinet Grotesk, Outfit, Bricolage Grotesque
- •Use extremes: 100/200 weight vs 800/900, size jumps of 3x+
Colors by Service Type
- •Pressure Washing/Cleaning: Strong blue (#1e40af) + Orange (#ea580c) + Green (#059669)
- •Plumbing: Water blue (#0284c7) + Emergency red (#dc2626) + Eco green (#16a34a)
- •HVAC: Cool blue (#0369a1) + Warm orange (#ea580c) + Green (#059669)
- •Electrical: Electric yellow (#eab308) + Professional blue (#1e40af) + Red (#dc2626)
- •Landscaping: Natural green (#15803d) + Earth brown (#92400e) + Blue (#0284c7)
- •Marketing/B2B: Navy (#0A66C2) + Purple accent (#8B5CF6) + Success green (#10B981)
Tailwind v4 Compatibility (CRITICAL)
- •Never use:
space-x-*,space-y-*(removed in v4) - •Always use:
gap-*with flex/grid containers - •Don't add: Custom
* { margin: 0 }resets (breaks mx-auto) - •Add:
@config "../tailwind.config.ts"to CSS if using config
Service Website Requirements
- •Strong CTAs (Call Now buttons, Get Quote forms)
- •Click-to-call functionality on mobile
- •Trust signals (certifications, guarantees, reviews)
- •Local phone numbers prominently displayed
- •Service area coverage clearly shown
- •Before/after image galleries
- •Motion/animations for page loads and interactions
File Structure
project-root/ ├── design/ │ ├── index.html │ ├── styles.css │ └── script.js ├── pages/ │ └── [service]-[location].json (200+ files) ├── website/ │ ├── app/ │ │ ├── [slug]/page.tsx │ │ ├── services/page.tsx │ │ ├── locations/page.tsx │ │ └── ... │ ├── components/ │ └── package.json ├── prisma/ │ └── schema.prisma ├── locations.json ├── service-schema-template.json └── business-profile.json (if business name provided)
Example Workflow
User: "Make me a service website for pressure washing in Port Orange, Florida"
- •Collect inputs (niche: pressure washing, area: Port Orange FL, Jina key)
- •Generate design with trust signals, CTAs, blue/orange color scheme
- •Discover 48 locations within 15-mile radius
- •Create 15 pressure washing services schema
- •Set up PostgreSQL with 6 lead capture tables
- •Calculate: 15 × 48 = 720 pages → spawn ~60 agents
- •Generate all service+location JSON files with Unsplash images
- •Build NextJS site with 214+ pages
- •Run Playwright tests (target: 80%+ pass rate)
- •Push to GitHub
- •Report: Repository URL, run instructions, deploy instructions
Critical Rules
DO:
- •Collect ALL inputs before starting
- •Generate design FIRST if not provided
- •Discover locations BEFORE creating pages
- •Create service schema BEFORE generating pages
- •Spawn ALL page generator agents SIMULTANEOUSLY
- •Test with Playwright BEFORE deployment
- •Provide clear deployment instructions
NEVER:
- •Skip input collection phase
- •Proceed without Jina API key
- •Spawn agents sequentially (must be parallel!)
- •Build NextJS site before all pages ready
- •Skip Playwright testing
- •Leave user without next steps
Success Criteria
- • Design exists (generated OR user-provided)
- • 20-50+ locations discovered
- • 5-15 services in schema
- • 200+ service+location pages generated
- • All pages have Unsplash images
- • NextJS website built and running
- • Playwright tests pass (80%+ rate)
- • Code committed to git
- • User has deployment instructions