Do this first. The HL pipeline and fields define what data flows through the entire system. Everything downstream depends on this.
Pipeline & Fields
Set up pipeline stages
New Lead → Assets Generated → Demo Ready → Visit Scheduled → Call with Pascal → Contract Sent → Paid → In Production → Live → Maintenance
Add custom fields on contact
Business name, address, phone, email, existing website URL, Google Maps URL, improvement notes (textarea), contact person name/email/phone (optional)
Add custom fields on opportunity
Demo site URL (filled by automation), upsell notes, estimated go-live hours, color palette (from status.json)
Decide on intake method
Option A: built-in HL "Add Opportunity" form with custom fields. Option B: dedicated HL form your partner fills in from mobile. Pick one and configure it.
Create HL workflow: webhook on New Lead
When opportunity is created or moves to "New Lead", fire a webhook to n8n with all custom field data as JSON payload.
Create HL workflow: notify partner on Demo Ready
When stage moves to "Demo Ready", send partner a WhatsApp or email with business name, demo URL, and upsell notes. Auto-populated from opportunity fields.
One-time setup on lima-city. Once done, every demo run is fully automated. Do this before building the n8n pipeline.
Server & Hosting
Install Node.js + Claude Code
SSH into lima-city. Install Node.js (v18+), then
npm install -g @anthropic-ai/claude-code. Verify with claude --version.Authenticate Claude Code
Run
claude once interactively and complete OAuth login. Token persists for the user that n8n's SSH session will run as. Critical: same user for SSH and for auth.Create /var/www/demos/ + /var/www/skills/
Create both directories. Set permissions so your SSH user can write to demos/. Configure nginx to serve demos/ with directory-based routing so each slug is accessible automatically.
Set up demos subdomain
Point
demos.raidpixels.com to your server IP. Add nginx vhost serving /var/www/demos/. Set up SSL via Let's Encrypt (certbot). Test with a static index.html.Manual end-to-end Claude Code test
Pick a real local business. Run Claude Code manually on the server with a hand-written prompt. Verify it creates a full demo folder and writes status.json correctly. Iterate before automating.
The quality layer. These files live at
/var/www/skills/ and are referenced in every Claude Code run. They encode your agency standards. Build and iterate these before automating.Core skill files
DESIGN.md
CSS custom properties, modern layout (Grid, container queries), animations (View Transitions, Intersection Observer, GSAP if needed), generated SVGs for all icons and decorative elements, mobile-first, vanilla JS only, no frameworks for demos.
LOCAL_BUSINESS.md
Required sections (hero, services, about, testimonials, maps, contact, footer), extraction rules from scraped content, German legal requirements (Impressum, Datenschutz stubs), phone/address formatting, GMB embed rules.
SEO.md
Title tag format, meta description (155 chars), OG tags, LocalBusiness JSON-LD schema with address/phone/hours, canonical URL, lang="de", sitemap.xml stub, heading hierarchy rules, above-fold performance basics.
OUTPUT.md
Exact status.json schema (status, demo_url, missing_assets, upsell_flags, color_palette, estimated_golive_hours, notes), nav-map.json format, ROADMAP.md required sections. Must always write these even on error.
INTERACTIONS.md
Every nav link must be wired. Every button does something (navigate, open modal, show state). Mobile hamburger, contact form with fake submit → success state, scroll-triggered reveals, hover micro-interactions. No dead clicks.
KIRBY_CONVERSION.md
Used at go-live only. Kirby folder structure, how to split HTML into templates/snippets, blueprint field definitions, German panel labels, standard blueprints for home/default/contact pages.
MASTER_PROMPT.md template
The base prompt n8n fills per prospect. Variables: business_name, business_type, address, phone, maps_url, scraped_content, notes, slug. References all skill files. Includes fallback: "if scraped content empty, build from business type + notes alone."
Build this after HL fields, server setup, and at least one successful manual Claude Code run. The pipeline automates what you've already proven works manually.
n8n automation flow
Webhook node — receive HL trigger
Catch the HL webhook. Extract and validate all fields. Sanitize business name into a URL-safe slug (e.g. "Bäcker Maier" → "baecker-maier"). Abort with alert if required fields are missing.
HTTP Request — scrape existing website
Fetch old site HTML. Extract: title, meta description, visible body text, h1–h3 headings. Handle failures gracefully — if site is down, set scraped_content = "" and continue. Never block the pipeline on a bad scrape.
Anthropic API — generate outreach email + sales script
HTTP Request to api.anthropic.com. Prompt includes scraped content, notes, business type. Returns: outreach email template and visit sales script. Save both to HL contact notes via HL API.
Build + write prompt file to server
Assemble the full Claude Code prompt by filling MASTER_PROMPT.md template with all extracted data. Write it to
/tmp/prompt-[slug].txt on the server via SSH write command.SSH node — trigger Claude Code
Create demo folder, then run:
claude --print "$(cat /tmp/prompt-[slug].txt)" --allowedTools "Edit,Write,Bash". Set SSH timeout to 15+ minutes. Claude builds the entire demo folder.SSH node — read status.json
Read
/var/www/demos/[slug]/status.json. Parse result. Branch: success → update HL + notify partner. Error → alert Pascal via WhatsApp with error_message.HL API — update opportunity + move stage
Write demo URL and upsell notes to opportunity custom fields. Move pipeline stage to "Demo Ready". This triggers the HL workflow that notifies your partner.
End-to-end test with real prospect data
Run the full pipeline with a real business as test data. Verify: webhook fires, scrape works, Claude Code builds, status.json is read, HL updates correctly, partner gets notified. Fix until it's reliable.
Per client, after contract + payment. The demo already exists — this is the conversion and polish phase. Triggered manually per client, not automated.
Per-client go-live checklist
Domain + hosting setup
Point client domain to your server. Add nginx vhost. SSL via Let's Encrypt. Recommended: keep on your server at €15–20/month maintenance — gives you control and recurring revenue.
Kirby conversion via Claude Code
Run Claude Code on the demo folder using KIRBY_CONVERSION.md as primary skill. Converts static HTML into Kirby templates, snippets, and blueprints. Review output, install Kirby, verify Panel login works.
Purchase Kirby license
€99 one-time per site at getkirby.com. Buy after contract is signed. Can be passed through to client as part of the project cost.
Real content + assets
Collect from client: real photos, logo file, final copy, social links, opening hours confirmation. Upload via Kirby Panel. Replace all [PLACEHOLDER] sections.
SEO fields + sitemap
Fill per-page SEO titles and meta descriptions in Kirby Panel. Verify JSON-LD LocalBusiness schema has real data. Check sitemap.xml generates correctly.
Client review + sign-off
Share staging URL with client. Collect feedback. Make revisions. Get explicit written sign-off before going live. Move HL stage to "Live" once done.
Client handoff + training
Record a 15-min Loom walkthrough of the Kirby Panel. Write a one-page "How to update your website" PDF in German. Hand over credentials. Confirm maintenance contract is signed.
Don't start selling until the pipeline is tested. Your partner needs a reliable demo URL in hand before the first visit. One broken demo early kills trust.
Sales process setup
Define pricing structure
Suggested: website build €800–1500 one-time, hosting + maintenance €15–25/month, upsells (shop, booking) €300–800 each. Lock this in before first pitch so partner isn't winging it.
Define partnership terms with your partner
Who owns client relationships if the partnership ends? Revenue split? Who handles support calls? Get this in writing before you have 15 shared clients.
Create contract template
One-page contract covering: scope (pages, features), price, payment terms (upfront + go-live split), maintenance terms, what happens if client wants to leave. Use a lawyer or adapt a standard German web agency template.
Prepare the "AI website" pitch framing
Local businesses don't care about the tech. Frame it as: "we built you a preview of your new website — free, no obligation." The demo does the talking. "AI-built" is optional context, not the pitch.
First 3 real demos as a test batch
Run the full pipeline on 3 real local businesses before your partner starts actively selling. Review quality, fix skill files, refine the prompt. These are your proof of concept.