DOC PLAYBOOK.HTMLACCESS PUBLICREADERS HUMAN + AISTATUS ● ACTIVE
// Site Build & Client Interview System
SITE BUILDPLAYBOOK
One brief, read by two operators. Hand this URL to an AI as a
/goal and it takes a bare Linux box all the way to a live, hardened
customer website. Work the interview below with the client first —
on a call, or via the ready-to-send email at the bottom — and the AI
builds from their own words.
Paste this URL into the /goal skill of a fresh Claude Code on
a clean Ubuntu box. Part I is the full build sequence —
twelve phases, each with a hard verification gate. The agent collects
the inputs, then executes.
Mode 2 · The Human
A client interview kit
Part II is an 18-section discovery script — every question
needed to build a site that is genuinely the client's. Run it on a
call, or send the email in Part III. Transcribe the answers and
hand them to the AI alongside this URL.
// The pipeline
01
Interview
Call or email the client
02
Transcribe
Answers → plain text
03
/goal + URL
Brief the AI agent
04
AI Builds
12 gated phases
05
Live Site
Hardened & backed up
I
Part I
The Build Playbook
Instructions to the AI agent. A fresh Ubuntu VPS in, a live customer
website out. Static HTML/CSS only — no framework, no build step, no
database. The site is reachable because cloudflared dials out;
nothing dials in. Work the phases in order. Never skip a GATE.
// Step 1 — Inputs you must collect first
Ask the human for anything you do not have,
in one batched message. Never guess a secret.
Input
For
Source
Customer domain
the site address
Customer owns it; nameservers already moved to Cloudflare.
Cloudflare API token
DNS, Tunnel, Email, tuning
CF dashboard → My Profile → API Tokens → Custom. Scopes below.
Cloudflare Account ID
API calls
Dashboard → any domain → Overview → sidebar.
GitHub auth
private backup repo
gh auth login, or a fine-grained PAT.
Tailscale auth key
join the tailnet headlessly
Tailscale admin → Settings → Keys.
Customer contact email
form delivery + analytics
From the customer.
Customer's existing inbox
where domain email forwards
A Gmail/Outlook they already read.
Web3Forms access key
static contact-form backend
web3forms.com — free; bind to the contact email.
Customer assets
logo, photos, copy, colors
From the customer — see the interview, Part II.
▣ Cloudflare API token — exact scopes (one custom token)
MCPPlaywright — verify every page, desktop + mobile
MCPcontext7 — current docs for nginx & Cloudflare
// Step 3 — The twelve phases
Phase A
Harden & optimize the VPS
Invoke vps-lockdown. Patch & upgrade; set hostname/timezone;
confirm a non-root sudo user with key auth; enable unattended security
upgrades; apply sysctl tuning; add a 2 GB swapfile if
RAM ≤ 2 GB; stage SSH hardening but do not
restart sshd yet.
GATE A — box patched, tuned, swap on. The
public firewall waits for Phase B, to avoid a lockout.
Phase B
Install Tailscale & lock down to zero public ports
Join the tailnet, verify you can reach the box over Tailscale,
then raise the firewall. Order is safety-critical.
tailscale + ufw
sudo tailscale up --auth-key="$TS_AUTHKEY" --ssh --hostname="<customer>"
tailscale ip -4 # verify reachability BEFORE the next block
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow in on tailscale0
sudo ufw --force enable # no 80/443/22 public — site still works
GATE B — external nmap shows
all ports filtered. Admin works only over Tailscale.
Phase C
Interview the customer
Run Part II of this document — the 18-section script. Ask
in small batches, listen, probe vague answers, write it all into
intake.md.
GATE C — intake.md complete
and customer-approved.
Phase D
Turn the conversation into a build plan
From intake.md produce: a sitemap & nav order; a
per-page content outline (one h1 each); design tokens
(palette + two fonts as CSS variables); the image list (heroes
16:9); structured-data facts; the contact-form spec.
GATE D — customer approves sitemap,
outline, look.
Phase E
Graphics — write Midjourney prompts, process the images
From the image list, write one Midjourney prompt per image. Use a
shared style suffix so all images match; heroes are
--ar 16:9 (square images cannot fill a banner); one
concrete subject per prompt; never use the words "palette", "collage"
or "moodboard" (they trigger swatch/grid artifacts). Deliver the set as
one copy-paste block — the human runs them on midjourney.com. Then
crop with convert and export .webp with
cwebp -q 82.
GATE E — every image optimized in
site/assets/img/, correctly cropped, no artifacts.
Phase F
Build the website
Invoke static-site. Plain semantic HTML5 + one shared
stylesheet; no framework, no build step. One page per service; shared
header/nav/footer; one h1 per page; accessible (alt text,
labelled fields, focus states, contrast, 44px targets, mobile
breakpoint). Match the customer's voice — no AI-tell punctuation.
Web3Forms contact form. A friendly 404.
GATE F — every page passes the Playwright
MCP at ~1280px and ~390px.
Phase G
SEO
Invoke seo-launch: sitemap.xml,
robots.txt, JSON-LD structured data on every page
(LocalBusiness / Person), FAQPage schema, unique
hand-written titles & meta descriptions, canonical tags, Open Graph
+ Twitter cards, favicons.
GATE G — structured data validates; titles
& descriptions unique.
Phase H
Hosting — nginx, Tunnel, Email Routing, Analytics
nginx origin on localhost:80 — HTML
Cache-Control: no-cache, assets immutable, the config a
symlink in sites-enabled. Then the tunnel via API:
cloudflare tunnel — api driven
RESP=$(curl -s -X POST "$API/accounts/$ACC/cfd_tunnel" "${AUTH[@]}" \
--data "{\"name\":\"$DOMAIN-site\",\"config_src\":\"cloudflare\"}")
# PUT ingress: hostname -> http://localhost:80 ; POST proxied CNAMEs
sudo cloudflared service install "$(echo "$RESP" | jq -r .result.token)"
Tune the zone (SSL full, Always-HTTPS, Brotli). Enable
Cloudflare Email Routing — forward hello@domain
to the customer's inbox (they must click the verification email). Add
the cookieless Cloudflare Web Analytics beacon to every page.
GATE H — both hostnames load over HTTPS;
tunnel healthy; ports still closed; a test email forwards.
Phase I
GitHub backup repo
gh repo create <owner>/<domain> --private.
The repo holds site/, server/,
source-assets/, a per-box CLAUDE.md operating
manual, an empty runbook.md, and sync.sh.
Run git remote -v before every push.
GATE I — private repo created, first commit
pushed, origin matches.
Phase J
Deploy
Invoke web-deploy: copy site/ to the web root,
chown www-data, then always
systemctl reload nginx — a cp can
leave open_file_cache with a stale size and 502 the whole
site; a reload clears it.
GATE J — every page returns HTTP 200
publicly.
Phase K
Self-healing, backups, monitoring
nginx Restart=always; a 15-minute healthcheck timer that
restarts dead services, re-checks that nginx actually answers, and
reclaims disk past 85%; a nightly backup timer; a
recovery/RECOVERY.md.
GATE K — timers enabled; kill nginx and the
healthcheck revives it within 15 minutes.
Phase L
Verify & hand off
Playwright every page, desktop + mobile; submit the contact form for
real; test hello@domain; re-confirm zero open ports. Hand
the customer the live URL, a plain summary, and a quote that separates
one-time build from annual hosting/maintenance.
GATE L — every checklist item passes.
// Golden rules — never violate
VERIFYPass every gate before moving on.
STATICNo framework, no build step — ever.
OUTBOUND-ONLYNo public inbound ports.
ORDERTailscale up & verified before the firewall.
DEPLOYReload nginx after every deploy.
CACHEHTML no-cache; assets immutable; bump ?v=.
HEROESWide 16:9 source images only.
SECRETSNever enter the repo. It is private regardless.
Contact form delivers a real test message; customer handed URL + quote.
II
Part II
The Client Interview
Eighteen sections — everything needed to build a site that is
genuinely the client's, not a template. Run it as a conversation, not an
interrogation: ask in small batches, listen hard, repeat back what you
heard, chase the vague answers. The recording is transcribed and handed to
the AI with this URL — so capture the client's own words;
they become the copy.
01
The Business at a Glance
Get this wrong and everything downstream is wrong. Nail the one-sentence version.
What is the business name, exactly as it should appear?
In one sentence, what do you do?
When did you start — and what's the short origin story?
What genuinely makes you different from others who do this?
Do you have a tagline, or a phrase you already use a lot?
02
The People Behind It
People buy from people. The About page is often the second-most-visited.
Who owns and runs the business — names and roles?
Who should appear on the site, with a bio and headshot?
Years of experience, individually and as a business.
Why do you do this work? Give me a human detail for the About page.
03
Services & Offerings
Every service becomes a page and a nav item. Miss one and the site feels incomplete.
List every service or product you offer.
For each — who is it for, and what does it include?
Which is your bread-and-butter? Which do you want to grow?
Pricing — show prices, ranges, "starting at", or "contact for a quote"?
What do people ask for that you don't do?
04
Who the Website Is For
Every word and image is aimed at this person. The sharper we see them, the sharper the site.
Describe your ideal customer — age, situation, what's going on in their life.
What problem or worry brings them to you?
What fears or objections do they have before they get in touch?
Are they on a phone, in a hurry, researching, comparing?
What do they need to see before they trust you?
05
Goals — What the Site Must Do
A site that looks nice but drives nothing is a failure. Define the win.
The single most important action a visitor should take — call, form, book, download?
What does a "win" look like three months after launch?
Any secondary goals — credibility, explaining a confusing topic, fewer repeat questions?
What does your current or old site do badly that we must fix?
06
The Competition & The Field
We position against a field. Know it, then beat it.
Name two or three competitors — what do they do well, where do they fall short?
Show me two or three websites you like — what specifically appeals?
Show me one or two you dislike — what should we avoid?
How should you be positioned — premium, friendly, the expert, the affordable choice?
07
Brand & Visual Identity
Colour and type set the mood before a single word is read.
Do you have a logo? In which file formats? (Please send them.)
Existing brand colours or fonts? Any brand guide?
If starting fresh — three words for the brand's personality.
Colours or styles you love? Any you hate or that clash with your field?
Warm and human, clean and clinical, bold and modern, or classic and established?
08
Voice & Tone
The site should sound like the client on their best day — not like a brochure.
Formal or conversational? "We", or first-person "I"?
Words and phrases you love. Words you never want used.
How much does your audience already know — explain everything, or talk peer-to-peer?
Should the writing mostly reassure, persuade, inform, or sell?
09
Pages & Site Map
The sitemap is the skeleton. Agree it before any page is built.
Which pages do you need — Home, a page per service, About, Contact, FAQ, Resources, Blog?
What should the top navigation menu say, in order?
Is there a must-have page unique to your business?
Any printable resources, checklists, or downloads to offer?
10
The Home Page
Most visitors judge the business in the first screen of the home page.
If a visitor reads only one sentence, what should it say?
The three things you most want them to know immediately?
What should the big hero image show?
What is the home-page call-to-action button?
11
Proof & Credibility
Claims tell, proof sells. This is what turns a reader into a lead.
Testimonials or reviews we can quote? (Send them, with names or initials.)
Notable numbers — years, clients served, homes sold, results.
Awards, press, certifications, partnerships to display?
Any guarantee, free consultation, or "no obligation" offer?
A Google Business Profile or review page we should point to?
12
Photography & Graphics
Real, specific imagery beats generic stock every time. Decide the look now.
Do you have professional photos and headshots? (Please send them.)
Photos of your work, your space, your team, your town?
If we generate imagery — describe the setting, the people, the mood.
Any imagery we should absolutely avoid — stocky, cliché, off-brand?
NOTE Any image gaps are filled with custom
Midjourney art generated from the answers here.
13
Contact & Turning Visitors Into Leads
The whole site exists to produce this moment. Make it effortless.
Best phone number and email to publish.
A physical address, or "serving [area], by appointment"?
Hours of operation.
Exact service area — cities, counties, "within X miles".
Contact-form fields — name, email, phone, message, plus anything specific?
When a lead comes in — who responds, and how fast?
14
Social, Listings & Existing Presence
We link to a living presence, never a dead one.
Social profiles you actively maintain.
Google Business Profile, industry directories, association listings.
Is there an existing website? Keep anything, or full replace?
Reviews or content on other platforms we should reflect?
15
Domain, Email & Technical
Boring — but a launch fails on one wrong DNS detail. Get it exact.
The domain name for the site — do you own it, and where is it registered?
Desired email address(es) on the domain (e.g. hello@, yourname@).
Existing email or hosting that must keep working?
Anyone else who needs access or to be kept informed?
16
Legal, Compliance & Industry Rules
Some industries have wording rules. Cheaper to ask now than to fix later.
Required disclaimers, license numbers, or regulator text to display.
Industry rules that affect wording or claims (real estate, health, finance).
Do you need a privacy policy or terms page?
Any accessibility expectations or obligations?
17
Content — Who Writes What
Clarify who supplies words, or the build stalls waiting on them.
Do you have existing copy, brochures, or marketing materials? (Send them.)
Happy for us to write the copy from this interview, for your review?
Who has final sign-off on words and design?
Anything time-sensitive — a seasonal offer, an event, a launch date?
18
Timeline, Budget & After Launch
Scope, schedule and sign-off — agreed up front, no surprises.
Target launch date — and is anything driving it?
Budget range for the build, so we scope it right.
Who is the decision-maker, and what is the approval process?
After launch — who maintains the site, and how often will it change?
How would you like to receive updates from us during the build?
CLOSE "Is there anything I should have asked
and didn't? Anything you want this site to do that we haven't covered?"
III
Part III
The Client Email
When the client can't take a call, send this. It's the interview
compressed to the essentials — grouped, low-pressure, built so they
can answer inline in a reply. When their reply comes back, hand it to the
AI together with this URL. Fill the [bracketed] fields before
sending.
TO [client email]SUBJ A few questions so we can build your website
Hi [Client first name],
Thanks again for the chance to build your new website - I'm looking forward to it.
To make the site genuinely yours, I need to understand your business in your own
words. The best way is a quick 20-30 minute call, but if that's hard to schedule,
just reply to this email with your answers. Don't worry about polish - bullet
points, half-sentences and "you know what I mean" are all perfectly fine. I'll
shape it all into a finished site for your review.
Feel free to attach your logo and any photos you'd like used.
Here's what would help most - answer right under each line:
THE BUSINESS
- The business name, exactly as it should appear:
- In a sentence or two, what you do:
- What makes you different from others who do the same thing:
- How long you've been doing this:
YOUR CUSTOMERS
- Who your ideal customer is, and the situation they're in when they need you:
- The worries or questions they usually have before getting in touch:
YOUR SERVICES
- The services you offer (and which one matters most):
- Show prices, or "contact for a quote"?
THE SITE'S JOB
- The ONE thing you want a visitor to do - call, fill in a form, book...:
- Which pages you want (Home, About, Contact and a page per service are typical):
LOOK & FEEL
- Do you have a logo and brand colours? (If so, please attach.)
- Three words for how the site should feel:
- Any websites you love - or hate? Links are great:
PROOF
- Testimonials, reviews, or notable numbers (years, clients, results) to feature:
- Awards, licenses, or memberships to display:
CONTACT DETAILS
- Best phone and email to publish:
- Your address or service area, and your hours:
PRACTICAL
- The domain name for the site (and do you own it yet?):
- A target launch date, if you have one:
- Anything else you'd like me to know:
Reply whenever it's convenient - there are no wrong answers, and I'll follow up
if I need to dig into anything.
Thanks,
[Your name]
[Your phone] - [Your email]
After they reply: paste the returned email to the AI agent
along with this page's URL as a /goal. The agent treats their
answers as intake.md and proceeds from Phase D.