Internal Operations Document

Website Operations
Playbook

The complete system for how we build, launch, and maintain client websites — from signed contract to live site in one business day.

Version: 1.0
Updated: March 2026
Prepared for: Head of Operations
Status: Active
How to use this playbook

Use the left sidebar to navigate between sections. Use the search bar at the top to find specific topics. The QA Checklist page is interactive — check off items as you complete them. All code blocks have a Copy button for easy use.

The System in One Table

Phase Who Tools Time
Collect client briefOnboarding SpecialistBrief template1 hour
Build the siteManus AI (directed by Specialist)Manus2–4 hours
Review & auditOnboarding SpecialistW3C, WAVE, PageSpeed, AI Friendliness1–2 hours
LaunchOnboarding SpecialistGitHub, Cloudflare Pages, RegistrarUnder 1 hour
Add monitoringOnboarding SpecialistUptimeRobot5 minutes
Hand off to QuarterbackOnboarding SpecialistGo-live email template15 minutes
Ongoing maintenanceClient Success QuarterbackManus, GitHub, Cloudflare Pages15–30 min/request
Escalation (if needed)Tech Product Owner + contractorVariesAs needed

Why We Are Changing

The old website delivery model was built around human specialists: one person for project management, one for content, one for design, one for development, one for launch. Each handoff between specialists was a potential point of failure — a dropped ball, a miscommunication, a delay. The client experienced this as slow and inconsistent. Internally, it meant no single person owned the outcome.

AI tools have made the specialist model obsolete for the type of websites our trades company clients need. A well-prompted AI agent can produce a complete, high-performing, audit-passing website in hours. The human role shifts from doing the work to directing the AI, reviewing the output, and owning the client relationship.

The old model is not a people problem

This change is not about the quality of our current team. It is about the structure of the work. The specialist handoff model was the right design for a pre-AI world. It is the wrong design now. The goal is to redeploy talented people into roles where they own outcomes rather than tasks.

What We Are Building Toward

A system where one Onboarding Specialist takes a client from signed contract to live website without involving any other internal team member for routine builds. Client Success Quarterbacks handle all ongoing maintenance and content updates using AI tools, without needing a developer. The hosting infrastructure is fully managed — no servers to maintain, no SSL certificates to renew, no caching layers to configure.

The Five Non-Negotiable Outcomes

  • Every website we deliver passes four specific audits: W3C validation, WAVE WebAIM accessibility, PageSpeed Insights (100 on both mobile and desktop), and AI Friendliness.
  • One Onboarding Specialist runs the full build-to-launch workflow independently.
  • Client Success Quarterbacks handle all routine maintenance without developer involvement.
  • The hosting infrastructure is zero-maintenance — no servers, no SSL management, no caching fires.
  • The monthly cost of hosting and infrastructure per client site is near zero, preserving margin.
The key insight

In the old model, revenue scaled linearly with headcount. In this model, each Operator handles what used to require 3–4 specialists. Margins expand as we grow rather than compress. That is the business we are building.

Manus AI
The Build Engine

Generates complete website code from a plain-English brief. Writes HTML, CSS, JS, copy, schema markup, sitemap, robots.txt, and llms.txt. Also handles ongoing content edits when directed by Quarterbacks.

Onboarding Specialist Quarterbacks Existing subscription
GitHub
File Storage & Version Control

Stores all website files for every client in a dedicated repository. Tracks every change ever made. Connects to Cloudflare Pages so updates deploy automatically within 60 seconds of a file change.

Onboarding Specialist Quarterbacks Free
Cloudflare Pages
Hosting Platform

Hosts client websites on Cloudflare's global network. Issues and renews SSL automatically — forever. No server management. No caching configuration. Rebuilds and redeploys automatically when GitHub files update.

Onboarding Specialist Tech Product Owner Free tier
Cloudflare Registrar
Domain Management

Registers and renews domain names at wholesale cost (no markup). Manages DNS in the same dashboard as Cloudflare Pages — connecting a domain to a site is a single click. Auto-renewal prevents accidental expiry.

Onboarding Specialist $8–$12/year per domain
UptimeRobot
Passive Site Monitoring

Pings every client site every 5 minutes and sends an alert if a site goes down. Runs entirely in the background — no day-to-day attention required. Day-to-day responsibility: none.

Tech Product Owner Quarterbacks Free / ~$7/mo unlimited
Formspree
Contact Form Handler

Handles contact form submissions on static HTML sites without a server. When a visitor submits a form, Formspree receives it and forwards it to the client's email. No server-side code required.

Onboarding Specialist Free / ~$10/mo agency
Decap CMS
Optional Client Editing (Free)

Open-source, completely free CMS that sits on top of static HTML files. Used only when a client specifically requests self-editing access. Gives clients a simple browser-based editor to update text and images. No monthly fee — ever. For most clients, Quarterbacks handle edits via Manus instead.

Quarterbacks Onboarding Specialist Free — open source
What goes away completely

Self-managed VPS servers (Cloudflare VPS, HostGator VPS) — cancelled. ManageWP — not needed. SSL certificate management — handled automatically forever. Server crashes — structurally impossible on Cloudflare Pages. The dependency on the head developer for infrastructure fires — eliminated.

How the Stack Connects

The flow is linear and automatic: Manus builds the site files → Onboarding Specialist uploads files to GitHub → GitHub triggers Cloudflare Pages to deploy → Cloudflare Pages serves the site to visitors with automatic SSL. When a Quarterback makes an update, the same flow repeats automatically. No manual deployment step. No server to touch. No SSL to renew.

Non-negotiable standard

A site that does not pass all four audits is not ready to launch. If an audit fails, prompt Manus to fix the specific issue and re-run the audit. Do not launch until all four pass.

W3C Validation
validator.w3.org

Validates that the HTML code follows web standards. Catches structural errors, missing attributes, and deprecated elements that can cause rendering issues across browsers.

Zero errors, zero warnings
WAVE WebAIM
wave.webaim.org

Tests whether the site is usable by people with disabilities. Checks for missing alt text, poor color contrast, missing form labels, improper heading structure, and keyboard navigation issues.

Zero errors
PageSpeed Insights
pagespeed.web.dev

Measures how fast the site loads on real devices. Checks Core Web Vitals including Largest Contentful Paint, Cumulative Layout Shift, and Interaction to Next Paint. Run on the live URL, not a staging URL.

Score of 100 — mobile & desktop
AI Friendliness
aifriendliness.com

Checks whether the site communicates effectively with AI systems and search engines. Looks for llms.txt, JSON-LD schema markup, sitemap.xml, robots.txt, and structured business information.

Pass

Why Plain HTML Makes These Achievable

The static HTML + Cloudflare Pages architecture is the only approach that makes all four audits achievable consistently and by default. WordPress makes PageSpeed 100 a constant battle — plugins, themes, and database queries all add weight. React and Vue frameworks render in the browser using JavaScript, which delays content appearance and tanks mobile PageSpeed scores.

On a plain HTML site built by Manus and hosted on Cloudflare Pages, PageSpeed 100 is the starting point, not something to fight for. The HTML is valid by construction. Accessibility is built into the prompt requirements. AI Friendliness files are generated automatically. The architecture works with the audits, not against them.

A detailed brief = a site that needs minimal revision

A vague brief produces a site that needs significant rework. Do not leave the onboarding call without every field below filled in. If the client does not know something (e.g., hex codes), note it and we will derive it from their logo.

How this form works

The PM fills in only the fields marked KO Call during the kickoff call. Everything marked Scrape is populated automatically by Manus after Play 1B. The PM then reviews and confirms the pre-filled document before the build begins. Never ask the client for information the scrape can provide.

Section 1 — Business Basics KO Call

FieldNotes
Business name (as it appears on site)Legal name or DBA — confirm spelling exactly
Primary phone numberConfirm this is the number they want on the site; many give a cell
Primary email addressThe email that goes on the contact form
Physical addressLeave blank if service-area only with no storefront
Service areaAll cities, counties, or regions served — ask “Is there anywhere you won’t go?”
Business hours (all 7 days)Clarify “by appointment” if that is their answer
Year establishedOnly if they want to feature it
License / certification numbersOnly if applicable and they want them displayed
BBB or other accreditationsNote any trust badges they want displayed
Existing website URLRequired — feeds Play 1B scrape

Section 2 — Services KO Call

FieldNotes
Complete list of servicesBe specific — “HVAC” is not enough; list every sub-service
Primary service (most important for SEO)Ask “What’s the job you most want the phone to ring for?”
Services to de-emphasize or excludeSometimes companies are phasing out certain work
Primary CTAUsually “Call Now” or “Get a Free Quote”
Secondary CTAUsually “Contact Us” or “Request an Estimate”
Special features needede.g., file upload on contact form, careers section, gallery, “Now Hiring” banner

Section 3 — Brand & Design Direction KO Call

Brand colors and logo are extracted automatically from the existing site during Play 1B. The design direction sliders are the only brand inputs needed on the KO call.

Slider1 (Far Left)5 (Far Right)Score (1–5)
Classic ↔ ModernTimeless, traditionalClean, contemporary___
Light ↔ DarkWhite/neutral backgroundsDark/bold backgrounds___
Simple ↔ LayeredMinimal, easy to scanTextured, multi-section depth___
Friendly ↔ AuthoritativeApproachable and warmCommanding and expert___
Economical ↔ PremiumValue-focused positioningHigh-end, luxury feel___
Gritty ↔ PolishedRaw, real, on-the-jobStaged, refined, corporate___

Ask each axis as a quick question: “On a scale of 1 to 5, where 1 is [Left] and 5 is [Right], where does your brand sit?” Most clients answer instantly. If a client mentions a site they love, note the URL — but never make the call dependent on finding one.

Section 4 — Social Media & Reviews KO Call

PlatformURL or “none”
Google Business Profile
Facebook
Instagram
Yelp
Nextdoor
YouTube
Angi / HomeAdvisor
Houzz

Section 5 — Domain & Hosting KO Call

FieldNotes
Domain purchased?Yes / No
Domain registrare.g., GoDaddy, Namecheap, Thryv — flag Thryv/Hibu/Townsquare as high-risk for access issues
Client has login access?Flag early if they don’t — this blocks launch
Email hoste.g., Google Workspace, Microsoft 365

Section 6 — Content & Photos Scrape + PM Review

The following fields are pre-populated by Manus during Play 1B. The PM reviews and confirms after the scrape. Do not ask the client for these on the KO call.

AssetSourceStatus After Scrape
Logo fileScraped from existing siteConfirm: use as-is / request higher-res from client
Brand colors (hex)Extracted from logo by ManusConfirm or override
All written copy (per page)Scraped from existing siteReview and edit in Brief Prep
Customer reviews / testimonialsScraped from existing site + GoogleConfirm which to use
Project photosScraped from existing siteMark which to use; note if client needs to supply more
Team / owner photosScraped from existing siteMark which to use; note if missing
Service area city listScraped from existing siteConfirm completeness

Section 7 — SEO Strategy Play 1D

After Play 1B is complete, the Onboarding Specialist runs the SEO Strategy System task (a separate Manus task) for the client. This produces the keyword-city matrix that determines which 30–40 SEO keyword pages to build. Paste the strategy site URL here before submitting the build prompt.

FieldValue
SEO Strategy site URLPaste URL from Play 1D
Number of keyword pages to build30–40 (Manus selects the highest-value combinations)

Section 1 — Client Contact

Section 2 — Business Basics

Section 3 — Business Hours

Section 4 — Services

Ask: “What’s the job you most want the phone to ring for?” — that is the primary service.

Section 5 — Unique Selling Points

Ask: “What do your best customers say about you?” and “Why do people choose you over a competitor?”

Section 6 — Special Features & Pages

Section 7 — Design Direction

For each axis, ask the client: “Which word better describes the feel you want for your business?” Then drag the slider toward that side. Most clients answer instantly.

Classic Traditional, established, timeless craftsmanship
Modern Clean, contemporary, forward-looking
Light White backgrounds, open and airy
Dark Deep backgrounds, bold and dramatic
Simple Clean, minimal, easy to scan
Layered Rich sections, textured, visually dynamic
Friendly Warm, approachable, neighborly
Authoritative Expert, commanding, industry leader
Economical Affordable, value-focused, accessible
Premium High-end, quality-first, worth the price
Gritty Real, raw, on-the-job feel
Polished Refined, staged, corporate-clean

Section 8 — Social Media & Reviews

Section 9 — Domain & Hosting

Section 10 — Photos & Assets

Do not ask the client to send photos on the call — the scrape will pull everything from their existing site. Only note what they say they have beyond their current site.

How to use this prompt

Click "Copy" on the code block below. Paste it into a new Manus task. Replace every [BRACKETED] field with information from the client brief. The more detail you provide, the better the first-pass output. If you do not have a piece of information, write "unknown" — Manus will make a reasonable assumption.

Standard Build Prompt

Dotcom Design — Standard Build Prompt v1.0 — Copy & Fill In All [BRACKETS]
# WEBSITE BUILD REQUEST — [BUSINESS NAME]

You are building a complete, production-ready website for a client of Dotcom Design,
a professional web and digital marketing agency. This website must meet the highest
standards of performance, accessibility, code quality, and visual design.
Every requirement in this prompt is non-negotiable unless explicitly marked optional.

---

## SECTION 1: BUSINESS INFORMATION

Business name: [FULL LEGAL OR TRADE NAME AS IT SHOULD APPEAR ON THE SITE]
Business type: [e.g., "Residential and commercial HVAC company", "Plumbing contractor"]
Tagline or slogan: [IF THEY HAVE ONE — or write "none"]
Primary phone: [PHONE NUMBER — formatted as (XXX) XXX-XXXX]
Primary email: [EMAIL ADDRESS]
Physical address: [FULL ADDRESS — or "service-area only, no physical storefront"]
Service area: [LIST ALL CITIES, COUNTIES, OR REGIONS SERVED — be specific]
Business hours:
  Monday: [HOURS or "Closed"]
  Tuesday: [HOURS or "Closed"]
  Wednesday: [HOURS or "Closed"]
  Thursday: [HOURS or "Closed"]
  Friday: [HOURS or "Closed"]
  Saturday: [HOURS or "Closed"]
  Sunday: [HOURS or "Closed"]
Year established: [YEAR — or "unknown"]
License number(s): [IF APPLICABLE — or "none"]
Google Business Profile URL: [FULL URL — or "unknown"]
Social media:
  Facebook: [URL or "none"]
  Instagram: [URL or "none"]
  LinkedIn: [URL or "none"]
  YouTube: [URL or "none"]
Payment methods: [e.g., "Visa, Mastercard, Cash, Check" — or "unknown"]

---

## SECTION 2: SERVICES

Primary service (most important for SEO and lead generation):
[SERVICE NAME]: [2–3 sentence description — who it is for, what makes it notable]

Additional services:
[SERVICE NAME]: [1–2 sentence description]
[SERVICE NAME]: [1–2 sentence description]
[ADD AS MANY AS NEEDED]

Services NOT to feature: [LIST ANY — or "none"]

---

## SECTION 3: BRAND & VISUAL IDENTITY

Logo: [Attach the file — or "no logo, create a text-based wordmark"]
Primary color: [HEX CODE — or describe: "dark navy blue"]
Secondary color: [HEX CODE — or describe]
Accent color: [HEX CODE — or "none"]
Background preference: ["White", "Light gray", "Dark", or describe]
Visual tone: [e.g., "Bold and confident", "Clean and professional", "Warm and approachable"]
Typography preference: [e.g., "Modern sans-serif", "Classic serif", "No preference"]

---

## SECTION 4: DESIGN DIRECTION

[FILL IN ONE OF THE FOLLOWING OPTIONS — DELETE THE OTHERS]

OPTION A — MIMIC CLOSELY:
Reference site: [URL]
Design instruction: Use the reference site as your primary layout blueprint. Match its section order, visual weight, spacing rhythm, color temperature (light/dark/bold/muted), and typographic hierarchy as closely as possible while applying this client's brand colors, fonts, and content. The goal is that a side-by-side comparison would show the same structural DNA. Do not copy any text, images, or brand assets from the reference site.

OPTION B — USE AS INSPIRATION:
Reference site: [URL]
Design instruction: Use the reference site to calibrate visual tone and energy. Adapt freely — do not try to replicate it. Prioritize what works best for this client's specific brand and services. Do not copy any text, images, or brand assets from the reference site.

OPTION C — ONE ELEMENT ONLY:
Reference site: [URL]
Design instruction: Take only [SPECIFY: e.g., "the hero layout", "the services grid style", "the color palette approach"] from the reference site. Build the rest of the site using your best judgment for a professional trades-industry website. Do not copy any text, images, or brand assets from the reference site.

OPTION D — NO REFERENCE:
Design instruction: Build a clean, professional website appropriate for a local trades company. Use a bold hero with a strong headline and CTA, a clear services grid, trust signals near the top, and a conversion-focused contact section. Prioritize clarity and speed over visual complexity.

---

## SECTION 5: SITEMAP — PAGES TO BUILD

Build every page listed below. Each page is a separate HTML file.

### STANDARD PAGES (always build these):

Home (index.html)
About (about.html)
Services overview (services.html)
Contact (contact.html)
Privacy Policy (privacy.html) — generate standard policy
Terms of Service (terms.html) — generate standard terms

### INDIVIDUAL SERVICE PAGES (one per service):
[SERVICE NAME] (services/[service-slug].html)
[SERVICE NAME] (services/[service-slug].html)
[ADD ONE LINE PER SERVICE]

### SEO / KEYWORD LANDING PAGES (city + service combinations):
[CITY] [SERVICE] (locations/[city]-[service-slug].html)
[CITY] [SERVICE] (locations/[city]-[service-slug].html)
[ADD ONE LINE PER CITY+SERVICE COMBINATION — or "none"]

### MARKETING LANDING PAGES:
[CAMPAIGN NAME] ([campaign-slug].html)
[ADD ONE LINE PER CAMPAIGN — or "none"]

---

## SECTION 6: PAGE STRUCTURE REQUIREMENTS

Build each page type using the exact section structure defined below. Do not add, remove, or reorder sections unless explicitly instructed. Content within each section is unique per page — the structure is fixed.

### HOME PAGE STRUCTURE (index.html):
1. Sticky header — logo left, nav center, phone + CTA button right. Tap-to-call on mobile.
2. Hero — headline (what you do + where), subheadline (key differentiator), CTA button, hero image. Apply design direction from Section 4.
3. Trust bar — years in business, licensed/insured badge, service area, 1 key differentiator. 3–5 items.
4. Services grid — card per service with icon, name, 1-sentence description, link to service page.
5. About / Why Choose Us — 2–3 paragraphs + photo. Focus on differentiators, not generic claims.
6. Photo gallery — 6–8 images in responsive grid. WebP, under 200KB each.
7. Testimonials — 3–5 reviews with customer name and star rating.
8. Service area section — list of cities/counties served.
9. CTA band — bold headline, phone number, form link. High contrast.
10. Contact section — phone (tap-to-call), email, address/service area, embedded Formspree form.
11. Footer — logo, nav links, contact info, social links, copyright, Privacy + Terms links.

### INTERIOR SERVICE PAGE STRUCTURE (services/[name].html):
1. Sticky header — same as home.
2. Service hero — headline names the service and location. Subheadline states key benefit. CTA is phone number. Background image relevant to the service.
3. Service overview — 2–3 paragraphs. Who it is for, what it includes, what makes this company's version notable.
4. Benefits — 3–4 benefit blocks with icon, heading, 2-sentence explanation.
5. Our process — 3–5 numbered steps from first call to completion.
6. Photo gallery — 4–6 images of this specific service or related work.
7. Testimonials — 2–3 reviews mentioning this service if available, otherwise general reviews.
8. FAQ — 4–6 questions and answers specific to this service. Mark up with FAQPage schema.
9. Related services — 2–3 cards linking to other service pages.
10. CTA band — same pattern as home.
11. Footer — same as home.

### ABOUT PAGE STRUCTURE (about.html):
1. Sticky header — same as home.
2. Page hero — headline: "About [Business Name]." Subheadline: 1 sentence on mission or founding story. No form.
3. Our story — 3–4 paragraphs. When founded, why, what the company stands for.
4. Team section — photo, name, title, 2–3 sentence bio per team member. [OPTIONAL — only if bios provided]
5. Credentials and certifications — logos or badges for licenses, certifications, affiliations, awards.
6. By the numbers — 3–4 stats: years in business, jobs completed, service area size, satisfaction rate.
7. CTA band.
8. Footer — same as home.

### CONTACT PAGE STRUCTURE (contact.html):
1. Sticky header — same as home.
2. Page hero — headline: "Contact [Business Name]." Subheadline: response time promise.
3. Contact form + info — two-column layout. Left: Formspree form. Right: phone (tap-to-call), email, address/service area, business hours.
4. Map embed — Google Maps. [OPTIONAL — only if physical address provided]
5. Footer — same as home.

### SEO / KEYWORD LANDING PAGE STRUCTURE (locations/[city]-[service].html):
These pages must be content-rich (minimum 800 words of unique, useful content) and conversion-focused. Every page must be unique — never duplicate content between city pages.
1. Sticky header — same as home.
2. Hero with contact form — two-column layout. Left: headline "[Service] in [City, State]" + subheadline (key differentiator) + 3–4 trust signals. Right: short contact form (Name, Phone, Service, Submit).
3. Local introduction — 2–3 paragraphs. Mention the city naturally multiple times. Reference local context where genuine.
4. Service detail — 3–4 paragraphs explaining the service in depth. What it includes, common problems it solves, what to expect. This is the primary SEO content block.
5. Why choose us in [City] — 3–4 benefit blocks emphasizing local presence, response time, local reviews.
6. Local reviews — 2–3 reviews from customers in or near this city if available, otherwise general reviews.
7. FAQ — 5–7 questions specific to this service in this city. Use natural language questions a local searcher would type. Mark up with FAQPage schema.
8. Service area context — brief paragraph on surrounding cities and areas served. Link to 2–3 related city pages if they exist.
9. CTA band.
10. Footer — same as home.
Schema required on every SEO page: LocalBusiness + FAQPage.

### MARKETING LANDING PAGE STRUCTURE ([campaign].html):
These pages are designed to convert visitors from a specific campaign. Every element exists to move the visitor toward one action.
1. Simplified sticky header — logo + phone number only. No full navigation menu.
2. Hero with form or phone — headline addresses the specific offer or pain point. Subheadline reinforces the offer. Short contact form (Name, Phone, Service, Submit) OR large tap-to-call button — choose based on campaign type, never both competing equally.
3. Offer / value proposition — 3–4 specific benefit blocks. Be concrete: "Free on-site estimate, same-day response, no obligation" not "Free estimate."
4. Trust signals — years in business, license number, review count and star rating, guarantee. 3–5 items max.
5. Social proof — 2–3 strong reviews. If campaign targets a specific service, use reviews mentioning that service.
6. Secondary CTA — repeat the exact same CTA from the hero. No new offers.
7. Minimal footer — copyright, Privacy Policy link, phone number only.

---

## SECTION 7: CONTENT

About the company:
[PASTE 2–3 PARAGRAPHS OR BULLET POINTS — or write "generate from business info above"]

Team bios:
[PASTE BIOS — or "none"]

Testimonials:
[PASTE 3–5 REVIEWS WITH CUSTOMER NAME — or "pull from Google reviews if available"]

FAQs:
[PASTE QUESTIONS AND ANSWERS — or "generate 5 relevant FAQs for this business type"]

---

## SECTION 8: PHOTOGRAPHY

Attach all provided photos. For each photo, note what it shows.
If no photos are provided, use high-quality placeholder images relevant to the industry.
All images must be delivered in WebP format, under 200KB each.
Every image must have a descriptive alt attribute.

---

## SECTION 9: CONTACT FORM

Formspree endpoint: [PASTE FORMSPREE FORM ID — or "use placeholder"]
Form fields required:
  - Full Name (required)
  - Phone Number (required)
  - Email Address (required)
  - Service Needed (dropdown: [LIST SERVICES])
  - Message (optional)
  - Preferred Contact Method (radio: Phone / Email)
Success message: "Thank you! We'll be in touch within 1 business day."
Error message: "Something went wrong. Please call us directly at [PHONE]."
All fields must have visible labels and ARIA attributes.

---

## SECTION 10: TECHNICAL REQUIREMENTS (NON-NEGOTIABLE)

CODE ARCHITECTURE:
- Plain HTML5, CSS3, and vanilla JavaScript ONLY
- No frameworks (no React, Vue, Angular, Bootstrap, Tailwind)
- No build tools (no Webpack, Vite, npm)
- All CSS in a single external stylesheet (styles.css)
- All JavaScript in a single external file with defer attribute (main.js)
- No inline styles anywhere in the HTML
- CSS custom properties (variables) for all colors, fonts, and spacing
- 8-point spacing grid: all spacing values must be multiples of 8px

TYPOGRAPHY SCALE (implement as CSS variables):
- --text-xs: 0.75rem
- --text-sm: 0.875rem
- --text-base: 1rem
- --text-lg: 1.125rem
- --text-xl: 1.25rem
- --text-2xl: 1.5rem
- --text-3xl: 1.875rem
- --text-4xl: 2.25rem
- --text-5xl: 3rem

RESPONSIVE BREAKPOINTS:
- Mobile: 0–767px
- Tablet: 768px–1023px
- Desktop: 1024px+
- All layouts must work flawlessly at every breakpoint

PERFORMANCE REQUIREMENTS (non-negotiable):
- PageSpeed Insights score of 100 on BOTH mobile AND desktop
- All images in WebP format, under 200KB each
- Hero/LCP image must have: loading="eager", fetchpriority="high", AND a <link rel="preload" as="image" href="[hero-image-path]"> in the <head>
- All non-hero images: loading="lazy"
- All fonts self-hosted via @font-face — no Google Fonts CDN calls
- CSS minified or lean — no unused rules
- No render-blocking scripts — all JS uses defer attribute

ACCESSIBILITY REQUIREMENTS (non-negotiable):
- WAVE WebAIM score of zero errors AND zero contrast errors
- All colors must use solid hex values — no rgba() with transparency for text or background colors that affect contrast
- All images have descriptive alt attributes (decorative images use alt="")
- All form fields have visible <label> elements with matching for/id attributes
- All interactive elements are keyboard-navigable
- Logical heading hierarchy (one H1 per page, H2 for sections, H3 for subsections)
- Skip to main content link at the top of every page

HTML VALIDITY:
- W3C Validator: zero errors, zero warnings
- Semantic HTML5 elements throughout (header, nav, main, section, article, footer)
- No deprecated attributes or elements

SEO REQUIREMENTS:
- Unique, descriptive <title> tag on every page (format: "[Page Topic] | [Business Name] | [City, State]")
- Unique meta description on every page (150–160 characters)
- Open Graph tags on every page (og:title, og:description, og:image, og:url)
- Canonical URL tag on every page
- LocalBusiness schema on home page and all SEO landing pages
- FAQPage schema on all service pages and SEO landing pages
- XML sitemap (sitemap.xml)
- robots.txt

AI DISCOVERABILITY:
- llms.txt file in root directory listing all pages with one-sentence descriptions
- Structured data (schema) on every page where applicable
- Clear, descriptive heading hierarchy throughout

FILE DELIVERY:
- All files organized in a clean directory structure
- Images in /images/ folder
- CSS at /styles.css
- JS at /main.js
- Service pages in /services/ folder
- Location/SEO pages in /locations/ folder
- README.md with build notes and any decisions made

After the First Build: Review Checklist

When Manus delivers the first build, work through this checklist before running the audits:

Content Review

  • All business information is accurate — phone, address, hours, services
  • The copy sounds like the client's business, not generic
  • All testimonials are included and attributed correctly
  • The logo is displayed correctly in the header and footer
  • Brand colors are applied consistently throughout

Visual Review

  • The site looks professional and polished on a desktop browser
  • The site looks professional and polished on mobile (use browser dev tools to simulate)
  • Images are high quality and relevant — no generic stock photos if client provided real photos
  • The contact form is visible and prominent on the home page
  • The phone number is clickable on mobile (tap-to-call)

Technical Review

  • Run W3C validator — must show zero errors, zero warnings
  • Run WAVE WebAIM — must show zero errors
  • Run PageSpeed Insights — must show 100 on both mobile and desktop
  • Run AI Friendliness checker — must pass
  • Confirm the llms.txt file exists and contains accurate business information
  • Confirm the sitemap.xml exists and lists all pages
  • Confirm the robots.txt exists and is correctly configured
  • Submit the contact form — confirm it delivers to the correct email address
  • Click the phone number on mobile — confirm it initiates a call
Do not launch until all items pass

If any audit fails or any checklist item is not met, prompt Manus to fix the specific issue. Describe exactly what failed and what the expected result is. Re-run the audit after the fix. Repeat until everything passes.

How to use these templates: Every page type has a fixed section order. When submitting a build prompt, you do not choose the structure — Manus follows it automatically based on the page type. The only decisions the PM makes are content, design direction, and which pages to include in the sitemap.

Page Type 1: Home Page

The home page is the only page type where the layout is driven by the reference site rather than a locked template. The design direction from Section 4 of the Build Prompt determines how closely Manus follows the reference.

#SectionPurposeNotes
1Sticky HeaderNavigation, phone, CTALogo left, nav center, phone + CTA button right. Tap-to-call on mobile.
2HeroPrimary headline, subheadline, CTA, hero imageHeadline answers "what do you do and where." Apply design direction from Section 4.
3Trust BarInstant credibility signalsYears in business, licensed/insured, service area, key differentiator. 3–5 items.
4Services GridOverview of all servicesCards with icon, name, 1-sentence description, link to service page.
5About / Why Choose UsHumanize the brand2–3 paragraphs + photo. Focus on differentiators, not generic claims.
6Photo GalleryVisual proof of work6–8 images in responsive grid. WebP, under 200KB each.
7TestimonialsSocial proof3–5 reviews with customer name and star rating.
8Service AreaGeographic trust signalList of cities/counties served.
9CTA BandConversion pushBold headline, phone number, form link. High contrast.
10Contact SectionFinal conversion pointPhone (tap-to-call), email, address/service area, embedded Formspree form.
11FooterNavigation, legal, contactLogo, nav links, contact info, social links, copyright, Privacy + Terms links.

Page Type 2: Interior Service Page

Every service page follows this exact structure — no exceptions. The section order is fixed. Content is unique per service. This consistency means the PM never has to think about what goes on a service page.

#SectionPurposeNotes
1Sticky HeaderSame as home pageIdentical to site-wide header.
2Service HeroIntroduce the service, capture leadHeadline names the service and location. CTA is phone number. Background image relevant to the service.
3Service OverviewWhat this service is2–3 paragraphs. Who it is for, what it includes, what makes this company's version notable.
4BenefitsEducate and build desire3–4 benefit blocks with icon, heading, 2-sentence explanation.
5Our ProcessReduce anxiety, build trust3–5 numbered steps from first call to completion.
6Photo GalleryVisual proof4–6 images of this specific service or related work.
7TestimonialsService-specific social proof2–3 reviews mentioning this service if available, otherwise general reviews.
8FAQHandle objections, add content depth4–6 questions specific to this service. FAQPage schema required.
9Related ServicesInternal linking, cross-sell2–3 cards linking to other service pages.
10CTA BandConversion pushSame pattern as home.
11FooterSame as home pageIdentical to site-wide footer.

Page Type 3: About Page

#SectionPurposeNotes
1Sticky HeaderSame as home
2Page HeroIntroduce the company storyHeadline: "About [Business Name]." No form in hero.
3Our StoryFounding narrative3–4 paragraphs. When founded, why, what the company stands for.
4Team SectionPut faces to the namePhoto, name, title, 2–3 sentence bio. Optional — only if client provides photos and bios.
5Credentials & CertificationsProof of expertiseLogos or badges for licenses, certifications, affiliations, awards.
6By the NumbersQuick trust signals3–4 stats: years in business, jobs completed, service area size, satisfaction rate.
7CTA BandConversion push
8FooterSame as home

Page Type 4: Contact Page

#SectionPurposeNotes
1Sticky HeaderSame as home
2Page HeroSimple, directHeadline: "Contact [Business Name]." Subheadline: response time promise.
3Contact Form + InfoPrimary conversionTwo-column layout: left = Formspree form, right = phone, email, address, hours.
4Map EmbedReduce friction for in-person visitsOptional — only if client has a physical address.
5FooterSame as home

Page Type 5: SEO / Keyword Landing Page

These pages target a specific city + service combination (e.g., "HVAC Repair in Des Moines"). They must be content-rich enough to rank on Google and be cited by AI, and conversion-friendly enough to generate leads. Minimum 800 words of unique content per page. LocalBusiness + FAQPage schema required on every page.

#SectionPurposeNotes
1Sticky HeaderSame as homeFull site navigation.
2Hero with Contact FormImmediate lead captureTwo-column: left = headline "[Service] in [City, State]" + trust signals, right = short contact form (Name, Phone, Service, Submit).
3Local IntroductionEstablish local relevance2–3 paragraphs. Mention the city naturally multiple times.
4Service DetailPrimary SEO content block3–4 paragraphs explaining the service in depth. What it includes, common problems, what to expect.
5Why Choose Us in [City]Local trust signal3–4 benefit blocks emphasizing local presence, response time, local reviews.
6Local ReviewsHyper-local social proof2–3 reviews from customers in or near this city if available.
7FAQRanking signal + objection handling5–7 questions specific to this service in this city. Natural language. FAQPage schema required.
8Service Area ContextInternal linking + geographic depthBrief paragraph on surrounding cities. Link to 2–3 related city pages if they exist.
9CTA BandConversion push
10FooterSame as home

Page Type 6: Marketing Landing Page

Designed to convert visitors from a specific campaign — paid ads, email, direct mail QR code. Every element exists to move the visitor toward one action. Navigation is simplified to reduce exit paths.

#SectionPurposeNotes
1Simplified Sticky HeaderLogo + phone onlyNo full navigation menu — reduce exit paths.
2Hero with Form or PhoneImmediate conversionHeadline addresses the specific offer or pain point. Short form OR large tap-to-call — never both competing equally.
3Offer / Value PropositionClarify what they get3–4 specific benefit blocks. Be concrete: "Free on-site estimate, same-day response, no obligation" not "Free estimate."
4Trust SignalsOvercome hesitationYears in business, license number, review count, guarantee. 3–5 items max.
5Social ProofReduce risk perception2–3 strong reviews. If campaign targets a specific service, use reviews mentioning that service.
6Secondary CTACatch visitors who scrolled past the heroRepeat the exact same CTA from the hero. No new offers.
7Minimal FooterLegal onlyCopyright, Privacy Policy link, phone number only.

Design Direction Options

When a PM selects a reference site in the Brief Prep form, they also select one of the following design instructions. This is the exact language passed to Manus in the build prompt.

OptionLabelWhat Manus Does
AMimic closelyMatches section order, visual weight, spacing rhythm, color temperature, and typographic hierarchy of the reference site. Applies client brand colors, fonts, and content. A side-by-side comparison shows the same structural DNA.
BUse as inspirationUses the reference to calibrate visual tone and energy. Adapts freely — does not replicate. Prioritizes what works best for this client's brand and services.
COne element onlyTakes only the specified element (e.g., "the hero layout," "the services grid style") from the reference. Builds the rest using best judgment for a professional trades-industry site.
DNo reference — standard trades layoutBuilds a clean, professional site for a local trades company. Bold hero, clear services grid, trust signals near the top, conversion-focused contact section. Clarity and speed over visual complexity.
Create a GitHub Repository

Create a new private GitHub repository named after the client (e.g., discount-tile-outlet). Upload all the site files that Manus produced into this repository. This is the permanent home for this client's website code. Every future update goes through this repository.

10–15 minutes
Connect GitHub to Cloudflare Pages

In the Cloudflare dashboard, navigate to Pages and create a new project. Connect it to the client's GitHub repository. Cloudflare will automatically build and deploy the site. Within a few minutes, the site will be live on a temporary Cloudflare URL (e.g., discount-tile-outlet.pages.dev). Use this URL to do a final visual check of the live site.

5–10 minutes
Connect the Client's Domain

If the domain is registered through Cloudflare Registrar: Navigate to the domain in the Cloudflare dashboard and connect it to the Pages project with a single click. SSL is issued automatically within minutes.

If the domain is registered elsewhere (GoDaddy, Namecheap, etc.): Log into their domain registrar, find the DNS settings, and update the nameservers to point to Cloudflare. Once the nameservers propagate (typically 15 minutes to a few hours), the domain will resolve to the site and SSL will be issued automatically.

5 minutes (+ propagation time if external registrar)
Verify the Live Site

Once the domain is connected and SSL is active, do a final verification: visit the live site at the client's domain and confirm it loads with the padlock (https://). Submit the contact form on the live site and confirm it delivers to the correct email. Run PageSpeed Insights on the live URL — not the staging URL — and confirm scores are still 100. Check the site on a mobile device.

15 minutes
Add to UptimeRobot

Add the client's live URL to UptimeRobot monitoring. This takes about 30 seconds. From this point forward, UptimeRobot will alert us if the site ever goes offline. On Cloudflare Pages, this alert should essentially never fire — but it is a professional safety net.

5 minutes
Hand Off to the Quarterback

Send the client a go-live email that includes: a link to their live website, a brief summary of what was built (pages, features, contact form destination), an introduction to their Client Success Quarterback (name, photo, contact information), and instructions for how to request changes or updates going forward. The Quarterback takes ownership of the account from this point forward.

15 minutes

Routine Content Updates

When a client requests a content change — a new phone number, updated service area, revised copy, a new photo, a new team member — the Quarterback handles it using Manus:

  1. Open Manus and provide the context: "This is the website for [CLIENT NAME]. The client has requested the following change: [DESCRIBE THE CHANGE]. Here are the current site files: [ATTACH OR REFERENCE THE FILES FROM GITHUB]."
  2. Manus makes the edit and produces updated files.
  3. The Quarterback reviews the change visually — does it look right? Is the information accurate?
  4. Upload the updated files to the client's GitHub repository. Cloudflare Pages automatically detects the change and redeploys the live site within about 60 seconds.
  5. Confirm the change is live by visiting the site. Notify the client.
15–30 minutes per routine request

Significant Updates

When a client requests a larger change — a new page, a redesigned section, a new service added, a seasonal promotion — the Quarterback follows the same process but with a more detailed prompt to Manus and a more thorough review before deploying. After deploying, re-run the four audits to confirm the update did not introduce any issues.

1–3 hours per significant update

When to Escalate to the Tech Product Owner

The Quarterback escalates when:

  • A site is down and the cause is not immediately obvious (UptimeRobot alert fired)
  • A domain is not resolving correctly after a DNS change
  • A form is not delivering submissions
  • The client requests a feature that requires server-side logic (booking system, member portal, custom API integration)
  • Any issue that the Quarterback cannot resolve within 30 minutes of investigation

The Tech Product Owner either resolves the issue directly or deploys the on-call contractor for genuinely complex technical work.

What Quarterbacks Do Not Need to Do

The Quarterback's scope is intentionally narrow

Quarterbacks do not manage SSL certificates — Cloudflare handles this automatically. They do not manage server configurations, caching settings, or hosting infrastructure. They do not need to know how to write code. They need to know how to write a clear prompt, review the output, and deploy updated files to GitHub.

Accounts to Create (One-Time)

Account Purpose Cost Priority
Cloudflare
cloudflare.com
Hosting (Pages) + Domain management (Registrar) Free for Pages; domain cost only Critical
GitHub
github.com
File storage and version control for all client sites Free Critical
UptimeRobot
uptimerobot.com
Passive uptime monitoring for all client sites Free up to 50 sites; ~$7/mo unlimited High
Formspree
formspree.io
Contact form handling without a server Free tier covers most; ~$10/mo agency High
Decap CMS
decapcms.org
Optional free CMS for clients who want self-editing access Free Optional
Manus
manus.im
AI build and edit engine Existing subscription Critical

Internal Setup Tasks (One-Time)

  • GitHub organization: Create a GitHub organization account for the agency. All client repositories will live inside this organization.
  • Cloudflare account structure: Create a single Cloudflare account for the agency. Set up team member access so Quarterbacks can deploy updates without needing the account owner's credentials.
  • Formspree account: Set up a Formspree agency account. Configure a standard form template that can be applied to each new site at launch.
  • UptimeRobot account: Set up UptimeRobot and add all existing client sites as monitors. This is a one-time task the Tech Product Owner completes during initial setup.
  • Standard file structure: Define and document the standard file structure for every client site so any Quarterback can pick up any client's files and understand them immediately.
  • Onboarding brief template: Add the client brief template to the project management system so every new client onboarding call captures the same information in the same format.

Skills the Team Needs

Onboarding Specialist

Runs the full build-to-launch workflow independently. Learning curve: 1–2 weeks of practice builds.

  • Using Manus to build and edit sites
  • Uploading files to GitHub
  • Connecting a domain in Cloudflare
  • Running all four audits
  • Interpreting audit results
Client Success Quarterback

Handles all ongoing maintenance and client communication. Does not need to know how to code.

  • Using Manus to make content edits
  • Uploading updated files to GitHub
  • Running the four audits
  • Interpreting audit results
  • Knowing the escalation path
Tech Product Owner

Understands the full stack technically. Governs the system and handles escalations. Likely the current head developer.

  • GitHub and Cloudflare Pages at a technical level
  • DNS configuration
  • Form handler setup
  • Escalation path to on-call contractor
  • System governance and SOPs

Monthly Infrastructure Costs: Old vs. New

❌ Old Model
VPS hosting (Cloudflare + HostGator) $200–$400
ManageWP or equivalent $30–$100
Total infrastructure ~$230–$500/mo
✅ New Model
Cloudflare Pages $0
GitHub $0
UptimeRobot $0–$7
Formspree (agency plan) ~$10
Total infrastructure ~$17/mo

Per-Client Hosting Revenue

We charge clients a monthly hosting and maintenance fee. The recommended range for trades company clients is $75–$150/month depending on the level of support included. Our cost per site on the new infrastructure is effectively $0 (Cloudflare Pages free tier) plus a small share of the Formspree and UptimeRobot costs — approximately $0.10–$0.50 per site per month.

The hosting margin on the new model is 95%+

On the old model, the margin was compressed by VPS costs, ManageWP fees, and the developer time required to manage infrastructure. On the new model, hosting is essentially pure profit. At 286 clients paying $75–$150/month, that is $21,450–$42,900/month in hosting revenue against ~$17/month in infrastructure cost.

Duda Clients
No Action Required

Duda is already a managed platform. These clients stay on Duda until they come up for renewal or request a redesign, at which point we migrate them to the new stack.

WordPress Clients — Highest Priority
Migrate to Kinsta

Migrate all WordPress sites from the self-managed VPS to Kinsta managed WordPress hosting. Eliminates SSL chaos and server fires without touching the client experience. Kinsta offers free migrations for agency plans. Target: complete within 90 days.

Next.js + Payload Clients
Migrate to Vercel + Railway

Migrate these sites from the self-managed VPS to Vercel (frontend) and Railway (database). Both are managed platforms that handle SSL and deployment automatically. Lower volume — migrate over 60–90 days.

New Clients Going Forward

All new clients are built on the new stack from day one: Manus + GitHub + Cloudflare Pages. No exceptions for standard trades company websites. The only reason to deviate is if a client has a genuinely complex technical requirement (e-commerce, member portal, custom API integration) that requires a server-side solution.

Migration Priority Order

Priority Group Action Target Timeline
1 — Immediate New clients Build on new stack from day one Now
2 — High WordPress on VPS Migrate to Kinsta managed hosting Within 90 days
3 — Medium Next.js + Payload on VPS Migrate to Vercel + Railway Within 90 days
4 — Low Duda clients Migrate at renewal or redesign request Ongoing
How to use this checklist

Click any item to mark it as complete. Your progress is tracked in the bar above each section. Do not launch until all items are checked. Refresh the page to reset the checklist for a new build.

Code Quality

0%
  • HTML validates with zero errors and zero warnings at validator.w3.org
  • No inline styles anywhere in the HTML
  • All CSS in a single external stylesheet
  • All JavaScript in a single external file with defer attribute
  • CSS custom properties defined for all colors, fonts, and spacing
  • No unused CSS rules
  • No console errors in browser developer tools
  • No JavaScript frameworks or build tool artifacts

Performance

0%
  • PageSpeed Insights score: 100 on desktop
  • PageSpeed Insights score: 100 on mobile
  • All images in WebP format
  • All images have explicit width and height attributes
  • Hero image uses loading="eager" and fetchpriority="high"
  • All other images use loading="lazy"
  • No render-blocking resources
  • Google Fonts loaded with preconnect and display=swap

Accessibility

0%
  • WAVE WebAIM: zero errors
  • Every image has appropriate alt text
  • One <h1> per page, logical heading hierarchy
  • All form fields have visible <label> elements
  • All color combinations pass WCAG AA contrast (4.5:1 for normal text)
  • All interactive elements are keyboard-navigable
  • Skip-to-content link present on every page
  • <html lang="en"> on every page

SEO & AI Friendliness

0%
  • Unique title tag on every page (under 60 characters)
  • Unique meta description on every page (150–160 characters)
  • Open Graph tags on every page
  • Canonical tag on every page
  • JSON-LD LocalBusiness schema on every page
  • sitemap.xml present and valid
  • robots.txt present and correct
  • llms.txt present with complete business information
  • AI Friendliness audit: Pass

Functionality & Content

0%
  • All navigation links work correctly
  • Mobile hamburger menu opens and closes correctly
  • Contact form submits successfully (test with a real submission)
  • Contact form shows success message after submission
  • Phone number is a tap-to-call link on mobile
  • No "Lorem ipsum" placeholder text anywhere
  • All business information is accurate (name, phone, address, hours)
  • Copyright year is current
  • Privacy Policy and Terms of Service pages exist
  • Site is live on the client's domain with https:// (padlock visible)
  • Site added to UptimeRobot monitoring
  • Go-live email sent to client with Quarterback introduction
The core insight

The old model blurred five distinct tracks together into a single chain of specialists, which is why everything felt tangled. Separating them cleanly is the unlock. Revenue no longer scales linearly with headcount — it scales with systems.

Track 1 — Sales & Business Development

The sales function exists to bring new clients in the door and introduce them to the right people. In the near term this is primarily the owner, supported by a part-time or fractional BD person as volume grows. Sales ends at the signed contract and the introduction to Onboarding — it does not manage the project, stay on the account, or get pulled into fulfillment problems. Clean separation here protects the owner’s time and keeps the sales motion moving. The referral engine is the most important sales asset: every client who has a great experience with their Quarterback is a potential referral source.

Track 2 — Onboarding & Fulfillment

The current chain — PM coordinates with content writer, who coordinates with designer, who coordinates with dev team, who coordinates with head developer for go-live — is a relay race where the baton gets dropped at every exchange. The new model collapses this entire chain into a single role: the Onboarding & Fulfillment Specialist. This person takes a client from signed contract to go-live, handling every step of the build process using AI tools as their execution engine.

The Onboarding Specialist’s job ends at go-live. Once the site is live, forms are working, SSL is confirmed, and the domain is resolving correctly, the account is handed off to the appropriate Client Success Quarterback. This handoff should be a formal, documented moment — a structured transition call or email that introduces the client to their Quarterback and sets expectations for the ongoing relationship.

Track 3 — Client Success Quarterbacks

This is the heart of the ongoing client relationship. Not all clients need the same quarterback. There are two tiers — see the Quarterbacks page for full detail on each tier, the graduation model, and the quarterback identity concept.

Track 4 — Product Owners (Internal Centers of Excellence)

Product Owners are not client-facing roles. They do not manage accounts or attend client calls. What they own is the quality and methodology of a specific service across every client in the business. This is the structural answer to the problem of nobody owning on-page SEO, nobody holding the offshore team accountable, and quality being inconsistent because there is no single standard.

Product Owner What They Own Current Candidate
SEO Product Owner Keyword strategy, on-page standards, technical SEO checklists, offshore link-building accountability TBD — hire or develop internally
Paid Media Product Owner Campaign structure standards, bidding strategy, platform relationships (Google, Meta), performance benchmarks Stronger paid media person on current team
Tech & Hosting Product Owner Hosting platform, SSL governance, domain renewals, site health monitoring, on-call contractor relationship Current head developer
AI Services Product Owner Automation stack, GoHighLevel config, n8n/Make workflows, new AI product development, internal training Owner (near term), dedicated hire as AI revenue grows

Track 5 — Technical Infrastructure & Hosting

This track is currently causing the most operational pain. The root cause: approximately 286 client sites across three different technology stacks (Duda, WordPress, Next.js + Payload) on self-managed VPS infrastructure. Self-managed VPS hosting requires a dedicated systems administrator to be maintained safely at scale. The goal is to get out of the infrastructure management business while keeping the hosting revenue. The platform strategy in the Tech Stack section resolves this entirely.

The Quarterback is not a middleman

A Quarterback does not coordinate between the client and someone else doing the work. They are the strategist, the executor, and the relationship owner all in one. The client calls them. They solve it.

Tier A — The Foundation Quarterback

Tier A Quarterbacks manage clients who are not doing active marketing — website-only clients, AI services clients, automation clients, and clients simply maintaining their digital presence. Their core competencies are relationship management, account health, basic website support, and AI tool fluency.

When something breaks on a client’s website, the Tier A Quarterback is the first responder. Because the platform strategy is designed to minimize infrastructure chaos, most issues they encounter will be content changes, form updates, page additions, or minor design tweaks — all of which an AI-fluent generalist can handle using Manus. For anything genuinely technical, they escalate to the Tech Product Owner.

The Tier A Quarterback does not need a marketing background. They need to be organized, warm, responsive, and genuinely good at making clients feel taken care of. Each Tier A Quarterback manages a pod of roughly 20–30 clients, depending on service complexity.

Tier B — The Marketing Pedigree Quarterback

Tier B Quarterbacks manage clients who are actively investing in marketing — SEO, paid media, content, or some combination. These clients have more at stake, more questions, and more need for strategic guidance. The Tier B Quarterback is not a middleman — they are the strategist, the executor, and the relationship owner all in one. They are on calls directly with the client and carry the strategy personally.

Their core competencies are paid media management (primarily Google Ads, Meta as secondary), SEO strategy and on-page execution, performance reporting, and client communication. They use AI tools to handle execution-heavy work — AI-assisted keyword research, AI-generated content drafts, automated reporting dashboards — so their time is spent on strategy and relationship rather than manual task execution. Each Tier B Quarterback manages a smaller pod of roughly 10–15 clients.

Tier A — Foundation Tier B — Marketing Pedigree
Client type Website-only, AI services, maintenance Active marketing clients (SEO, paid media)
Pod size 20–30 clients 10–15 clients
Core skill Relationship management, AI tool fluency Paid media, SEO strategy, performance reporting
Marketing background? Not required Required
Revenue per client Lower (hosting + maintenance) Higher (marketing retainer)

The Graduation Model

Clients do not stay in one tier forever. A website-only client who decides to invest in SEO and Google Ads graduates from a Tier A to a Tier B Quarterback. This transition is framed to the client not as a handoff but as a promotion — they are moving to a specialist who is specifically equipped to help them grow. Done well, this graduation moment is also a natural upsell conversation. The Tier A Quarterback becomes a feeder for Tier B revenue without any additional sales effort.

The Quarterback Identity Concept

Trades business owners are relationship-driven buyers. They want to know who they are working with, what that person is good at, and why they should trust them. Consider giving each Quarterback a visible identity: a specialty label, a short bio, and optionally a CliftonStrengths or similar profile. A Quarterback who has a name, a face, and a stated specialty (“I work specifically with HVAC and plumbing companies on their Google presence”) is not just a vendor — they are a person. That distinction matters enormously in client retention.

This could manifest as a simple profile on your website, a personal introduction video sent at onboarding, or a physical card mailed to new clients. The investment is small; the relationship signal is large.

Current team assessment

Sara is best suited to internal marketing or a Tier A role rather than Tier B. The stronger paid media person is a Paid Media Product Owner candidate. The developer’s assistant — with AI tools and proper SOPs — could become the first Onboarding Specialist. The head developer is the Tech Product Owner.

How to use the Play-by-Play

Each play is a self-contained unit of work with a specific input, a specific output, and detailed step-by-step instructions. When a play feels clunky or produces inconsistent results, document the friction in the play itself and refine the instructions. Over time, each play becomes more precise and the overall process runs faster.

The Complete Playbook at a Glance

# Play Who Runs It Input Output Est. Time
1Kickoff CallOnboarding SpecialistSigned contractCompleted client brief45–60 min
1BContent Scraping & Site InventoryManus AI (directed)Existing client website URLFull site inventory: copy, images, logos, integrations, SEO data30–60 min
1CDomain & Hosting IntakeOnboarding SpecialistClient contactDomain registrar access, DNS records, hosting credentials documented15–30 min
1DSEO StrategyOnboarding Specialist (SEO Strategy System task)Client website URLKeyword-city matrix (30–40 combinations); live strategy site URL5–10 min
2Brief PreparationOnboarding SpecialistCompleted client briefFormatted Manus prompt15–30 min
3Site BuildManus AI (directed)Formatted Manus promptComplete local site files2–4 hours
4Visual QAOnboarding SpecialistLocal site filesDiscrepancy list + fixes applied30–60 min
5Technical QAManus AI (directed)Deployed preview URL0 violations on all audits30–60 min
5BSEO Readiness AuditManus AI (directed)Deployed preview URLAll meta titles, descriptions, schema, sitemap, robots.txt verified30–45 min
5CPerformance OptimizationManus AI (directed)Deployed preview URLPageSpeed 100 mobile AND desktop, all images compressed to WebP, fonts self-hosted30–60 min
5DAI Friendliness AuditManus AI (directed)Deployed preview URL100/100 AI Friendliness score — all four categories passing10–20 min
6Content QAOnboarding SpecialistDeployed preview URLSigned-off content accuracy20–30 min
7Deploy to PreviewOnboarding SpecialistLocal site filesLive preview URL for client review15 min
8Client ReviewOnboarding SpecialistPreview URLClient approval or revision list24–48 hours
9RevisionsManus AI (directed)Revision listUpdated site files30–60 min
10Go LiveOnboarding SpecialistClient approval + domain accessLive site on client domain30–45 min
10BPost-Launch Monitoring SetupOnboarding SpecialistLive site URLGoogle Search Console verified, Analytics active, uptime monitor live20–30 min
11Quarterback HandoffOnboarding SpecialistLive site URLQuarterback briefed + monitoring active15 min
11BGoogle Business Profile SyncOnboarding SpecialistLive site URLGBP website field updated, NAP consistent, photos refreshed15–20 min
12Ongoing MaintenanceClient Success QuarterbackClient change requestUpdated live site15–30 min/request
Never skip QA plays

Plays 4, 5, and 6 are not optional. Skipping them is how mobile nav bugs, missing font weights, and contrast regressions reach the client. Each QA play has a specific automated script — run the script, read the output, fix what it finds, run it again. Do not advance to the next play until the current play's output criteria are met.

InputOutputWhoTime
Signed contract, client contact infoCompleted client brief (all fields filled)Onboarding Specialist45–60 min

Before the Call

Open the Client Brief Template (see the Client Brief page in this playbook). Create a copy named after the client. Fill in every field you already know from the contract: business name, address, phone number, and any services listed in the contract. This saves time on the call and signals professionalism.

Send the client a calendar invite with a Zoom or Google Meet link. Include a one-sentence note: "This is our onboarding call where we'll collect everything needed to build your website. The call takes about 45 minutes." Do not send a pre-call questionnaire — clients rarely complete them and it creates a second round of follow-up.

During the Call — Required Information

Work through the brief template section by section. Do not improvise the order — the template is sequenced so that each answer informs the next question. The sections and what to capture in each:

SectionWhat to CaptureCommon Gaps
Business basicsLegal business name, DBA (if different), physical address, phone number, email, website URL (if existing), year establishedClients often give a cell number — confirm this is the number they want on the site
Service areaCities and counties served, whether they travel outside the area, any areas they explicitly do not serveAsk "Is there anywhere you won't go?" — this surfaces important exclusions
Services offeredComplete list of services, any specialties or certifications, services they want to emphasize vs. de-emphasizeAsk "What's the job you most want the phone to ring for?" — this shapes the homepage hero
Business hoursHours for each day of the week, whether they take emergency/after-hours calls, holiday closuresMany clients say "by appointment" — clarify if they want that on the site
Unique selling pointsWhy do clients choose them over competitors? Years in business, certifications, guarantees, awards, family-owned, locally ownedAsk "What do your best customers say about you?" — this surfaces authentic differentiators
Google reviewsGoogle Business Profile URL, current star rating, number of reviewsAsk them to share their screen and navigate to their Google Business Profile so you can capture the exact URL
Social mediaFacebook, Instagram, Houzz, Yelp, Angi, HomeAdvisor profile URLsAsk for each platform individually — clients often forget they have profiles
PhotosProject photos (before/after, finished work), team photos, logo fileIf they have no photos, note this — stock photos will be used and client should be told
Design direction slidersSix slider scores (1–5) that define the visual personality of the site. Record a number for each axis: Classic ↔ Modern, Light ↔ Dark, Simple ↔ Layered, Friendly ↔ Authoritative, Economical ↔ Premium, Gritty ↔ Polished. A score of 1 means far left; a score of 5 means far right.Ask each axis as a quick question: “On a scale of 1 to 5, where 1 is Classic and 5 is Modern, where does your brand sit?” Most clients answer instantly. These six numbers give Manus a complete design profile — no reference sites required. Reference sites are optional and additive; if the client mentions a site they love, note the URL, but never make the call dependent on finding one.
DomainDo they have a domain? Who is the registrar? Do they have login access?Many clients have domains they can't access — flag this early so it doesn't block launch
Content preferencesTone (professional, friendly, authoritative), any words or phrases they always use, anything they never want on the siteAsk "Is there anything you absolutely don't want us to say?" — this prevents awkward revisions

After the Call

Within 30 minutes of ending the call, complete the brief with any notes you took during the conversation. Send the client a brief confirmation email: "Thanks for your time today. We have everything we need to build your site. You'll receive a preview link within [X] business days." Do not promise a specific date unless you are certain of your schedule.

If any required field is still blank after the call, send a single follow-up email listing only the missing items. Do not call — email creates a paper trail and gives the client time to gather the information. If you have not received the missing information within 48 hours, send one reminder. After that, proceed with best-available information and note the assumption in the brief.

Play 1 complete when

Every field in the Client Brief Template is filled. No field says "TBD" or "ask client." All six design direction slider scores (1–5) have been recorded. Photos have been received or a stock-photo decision has been made. The brief is saved and ready to hand to Manus for scraping.

Play 1B: Content Scraping & Site Inventory

Before writing a single line of new code, extract everything from the client’s existing site. This play produces the raw material that feeds the Brief (Play 2) and eliminates the risk of losing content during the rebuild.

InputClient’s existing website URL
OutputFull site inventory: all copy, images, logos, custom integrations, and SEO data
Who Runs ItManus AI (directed by Onboarding Specialist)
Time30–60 minutes
Pass CriteriaEvery page inventoried; all assets downloaded; SEO snapshot captured

Why This Play Exists

Rebuilds fail when content gets lost in translation. The client assumes you have it; you assume they’ll send it. This play closes that gap entirely by systematically pulling everything from the live site before work begins. It also captures the current SEO baseline so you can verify the rebuild doesn’t regress on rankings.

Step 1: Crawl the Full Site Structure

Paste the following prompt into Manus to begin the inventory:

Please do a complete content inventory of [CLIENT WEBSITE URL].

For each page, capture:
1. Page URL and title tag
2. Meta description
3. H1 and all subheadings (H2, H3)
4. All body copy (full text, not truncated)
5. All image URLs and alt text
6. Any embedded forms, iframes, or third-party integrations (maps, booking widgets, chat, etc.)
7. Schema markup (if any)
8. Internal links

Then:
- Download all images, logos, and icons to an /assets folder
- Pull the XML sitemap (if available at /sitemap.xml)
- Check robots.txt
- Note any pages that return 404 or redirect

Save everything to a structured inventory file at /inventory/site-inventory.md

Step 2: SEO Baseline Snapshot

After the crawl, capture the current SEO state so you have a before/after comparison after launch:

For [CLIENT WEBSITE URL], capture the current SEO baseline:

1. All page titles and meta descriptions (full text)
2. Canonical tags on each page
3. Open Graph tags (og:title, og:description, og:image) on each page
4. Any structured data / JSON-LD schema blocks
5. Heading hierarchy (H1 → H2 → H3) on each page
6. Image count and whether each has alt text
7. Internal link structure (which pages link to which)
8. Page load speed (run a quick Lighthouse check on the homepage)
9. Mobile-friendliness (note any obvious mobile issues)

Save as /inventory/seo-baseline.md

Step 3: Review the Inventory

Before moving to Play 2, the Onboarding Specialist must review the inventory file and flag:

  • Any pages that exist on the live site but were not captured (check nav, footer, and sitemap)
  • Images that downloaded at low resolution (flag for client to provide originals)
  • Third-party integrations that will need to be re-embedded (booking systems, chat widgets, payment forms)
  • Any content that appears outdated and should be updated in the rebuild
  • Custom fonts or brand assets that need to be sourced

Step 4: Organize Assets

Create a clean asset folder structure that will carry forward into the build:

/inventory/
  site-inventory.md       ← full page-by-page content
  seo-baseline.md         ← SEO snapshot
  /assets/
    /images/              ← all downloaded images
    /logos/               ← all logo variants
    /icons/               ← any icon files
  /integrations.md        ← list of all third-party embeds with embed codes
Common Failure Mode: Manus scrapes the homepage but misses interior pages. Always cross-reference the sitemap and the site’s navigation menu to ensure every page is captured. If the site has no sitemap, manually list all pages visible in the nav and footer and ask Manus to scrape each one individually.

Pass Criteria

  • Every page in the site navigation has been inventoried
  • All images and logos have been downloaded to /assets/images/ and /assets/logos/
  • A photo inventory table has been compiled listing every image with a description and a PM “Use / Request better / Skip” column
  • Brand colors have been extracted from the logo file using Manus (exact hex codes confirmed)
  • All third-party integrations have been identified and documented
  • SEO baseline has been captured (titles, meta descriptions, schema)
  • Inventory file reviewed and flagged items noted for the Brief Prep
Brand Color Extraction: After downloading the logo, ask Manus: “Extract the exact hex color codes from this logo file: [logo filename]. List every distinct color with its hex code.” Record these in the Brief Prep. Never guess brand colors — always extract from the actual logo file.

Play 1C: Domain & Hosting Intake

Get domain registrar access, DNS credentials, and hosting details documented before the build starts. Waiting until launch day to discover the client doesn’t know their GoDaddy password is a project killer.

InputClient contact (phone or email)
OutputDomain registrar access confirmed, DNS records documented, hosting credentials on file
Who Runs ItOnboarding Specialist
Time15–30 minutes
Pass CriteriaOnboarding Specialist can log into the domain registrar and view DNS records

Why This Play Exists

DNS changes at launch require registrar access. If the client can’t find their login, launch day turns into a 3-day delay. Capturing this information during onboarding — when the client is engaged and responsive — eliminates that risk entirely.

Step 1: Domain Registrar Checklist

Ask the client to provide or confirm access to each of the following:

ItemWhere to Find ItWhy We Need It
Domain registrar nameGoDaddy, Namecheap, Google Domains, etc.Know where to make DNS changes
Registrar login credentialsClient email + password (or invite us as user)Access to make DNS changes at launch
Domain expiration dateRegistrar dashboardPrevent domain expiry during project
Current DNS recordsRegistrar DNS management panelDocument before making any changes
Current hosting providerWhere the old site is hostedKnow what to point away from

Step 2: Document Current DNS Records

Before touching anything, take a screenshot of the current DNS records and save them to the project folder. This is your rollback reference if anything goes wrong at launch.

# Records to document:
A record (root domain → IP address)
CNAME record (www → root or hosting)
MX records (email routing — DO NOT change these)
TXT records (SPF, DKIM, Google verification, etc.)
Any existing CNAME records for subdomains
Critical: Never modify MX records. These control email delivery. Changing them will break the client’s email. Only modify the A record and www CNAME at launch.

Step 3: Cloudflare Pages DNS Setup (at Launch)

When the site is ready to go live, the DNS changes needed for Cloudflare Pages are:

# Add these records in the registrar:
Type: CNAME
Name: www
Value: [project-name].pages.dev

Type: CNAME  (or A record if registrar doesn't support CNAME flattening)
Name: @ (root)
Value: [project-name].pages.dev

# Then in Cloudflare Pages dashboard:
Settings → Custom domains → Add custom domain → [clientdomain.com]

Pass Criteria

  • Domain registrar name and login confirmed
  • Domain expiration date checked (not expiring within 90 days)
  • Current DNS records documented and saved to project folder
  • Current hosting provider identified
  • Onboarding Specialist can successfully log into the registrar

Play 1D: SEO Strategy

Before the build begins, run the Dotcom Design SEO Strategy System to generate the keyword-city matrix. This determines exactly which SEO keyword pages to build and ensures every page targets a real search opportunity.

InputClient website URL (from Play 1B scrape)
OutputKeyword-city matrix with 30–40 city+service combinations; SEO strategy site URL to share with client
Who Runs ItOnboarding Specialist (in the SEO Strategy System task)
Time5–10 minutes
Pass CriteriaStrategy site is live at seo-strategy.dotcomdesign.com/[clientdomain]; keyword-city matrix is confirmed and ready to paste into the Build Prompt

Why This Play Exists

SEO keyword pages are one of the highest-value deliverables in every build. A masonry contractor serving 48 cities with 15 services has hundreds of possible city+service combinations — but not all of them have real search volume. Running the SEO Strategy System before the build ensures Manus builds the right 30–40 pages, not a random selection. It also produces a client-facing strategy document that demonstrates the value of the work.

How to Run This Play

This play runs in a separate, persistent Manus task called the SEO Strategy System. That task has GitHub authenticated and the strategy repo already cloned. Do not run this play in the same task as the website build.

  1. Open the SEO Strategy System Manus task (keep it bookmarked — it is a persistent task)
  2. Submit the intake form at seo-strategy.dotcomdesign.com/new-strategy for the client
  3. Copy the generated prompt from the form and paste it into the SEO Strategy System task
  4. Manus will run keyword research via SEMrush, build the keyword-city matrix, and deploy the strategy site automatically
  5. Copy the live strategy URL (e.g., seo-strategy.dotcomdesign.com/markusonconstruction.com)
  6. Paste the strategy URL into the Build Prompt (Section 7 — SEO Keyword Pages) so Manus can reference the matrix during the build

What the Matrix Tells Manus

The keyword-city matrix is a table of city+service combinations ranked by strategic priority. For each combination, Manus builds one SEO keyword page. The standard build includes 30–40 keyword pages selected from the matrix. Manus picks the combinations automatically based on the matrix — the PM does not need to select them individually.

Standard keyword page count per build: 30–40. This range keeps the build manageable while providing meaningful SEO coverage. Do not build fewer than 30 (insufficient coverage) or more than 40 at launch (diminishing returns without a content maintenance plan). Additional pages can be added in future maintenance cycles.

How SEO Pages Integrate Into the Site

SEO keyword pages are not standalone — they are woven into the fabric of the site. The Build Prompt instructs Manus to:

  • Add a “Cities We Serve” section at the bottom of each service page, linking to the relevant keyword pages
  • Add an “Areas We Serve” section in the footer linking to the top-priority city pages
  • Create a /service-areas page that links to all keyword pages for crawlability
  • Include internal links from blog posts to relevant keyword pages (when a blog exists)

Pass Criteria

  • SEO Strategy System task has been run for this client
  • Strategy site is live at seo-strategy.dotcomdesign.com/[clientdomain]
  • Keyword-city matrix has been reviewed and confirmed
  • Strategy URL has been added to the Build Prompt (Section 7)
InputOutputWhoTime
Completed client briefFormatted Manus build prompt, ready to submitOnboarding Specialist15–30 min

The Anatomy of a Good Build Prompt

A Manus build prompt has ten required sections. Each section serves a specific purpose — omitting any section forces Manus to make assumptions, which produces inconsistencies that require revision rounds. The Build Prompt Template page in this playbook contains the full template with fill-in fields. The ten sections are:

SectionPurposeWhat Happens If Missing
1. Project contextTells Manus what kind of business this is, who the audience is, and what the site needs to accomplishManus writes generic copy that doesn’t reflect the client’s voice or market
2. Business informationAll factual content: name, address, phone, hours, services, service area, reviews, social linksPlaceholder text appears in the built site; revision round required
3. Brand assetsLogo file path, exact hex color codes (extracted from logo), photo file pathsManus uses default colors and stock photos; visual identity is generic
4. Design directionSix slider scores (1–5) from the KO call: Classic/Modern, Light/Dark, Simple/Layered, Friendly/Authoritative, Economical/Premium, Gritty/Polished. Optional reference site URL with usage instruction.Manus makes arbitrary design decisions that may not match client expectations
5. SitemapExplicit list of every page to build, confirmed by PM after reviewing the scrape outputManus may build extra pages or miss required pages
6. Page structure requirementsSection-by-section architecture for each page type (home, service, about, contact, SEO keyword, landing)Manus invents page structures that are inconsistent across the site
7. SEO keyword pagesLink to the SEO Strategy site with the keyword-city matrix; Manus selects 30–40 combinations and builds one page per combinationKeyword pages are built without strategic targeting; wrong city+service combinations are prioritized
8. Content notesAny copy direction, tone notes, tagline, things to avoid, special requirements (file upload, career section, etc.)Manus writes in a generic tone; special requirements are missed
9. Technical requirementsStack constraints, self-hosted fonts, JSON-LD schema types, llms.txt, sitemap.xml, robots.txt, LCP preloadManus may use CDN fonts, skip schema, or miss AI discoverability requirements
10. Quality requirementsExplicit audit targets: WAVE zero errors, PageSpeed 100 mobile AND desktop, W3C zero errors/warnings, AI Friendliness passManus stops at a lower quality bar or skips audits entirely

Uploading Assets

Before submitting the prompt, upload all client assets (logo, photos) to the Manus task. Drag and drop files into the Manus chat window before typing the prompt. Name files descriptively before uploading: logo-color.png, photo-kitchen-remodel-1.jpg, photo-team.jpg. Manus will reference these files by name in the build. Assets should already be organized from Play 1B — copy them from the /assets/ folder directly.

If the client has no logo, note “No logo — use text-only logo treatment” in the prompt. If the client has no photos, note “No client photos — use high-quality stock photos of [specific subject matter].” Never leave the asset section blank.

Setting Design Direction

Design direction is driven by the six slider scores captured on the KO call — not by reference sites. Paste the scores directly into Section 4 of the Build Prompt: “Classic/Modern: 4, Light/Dark: 4, Simple/Layered: 3, Friendly/Authoritative: 4, Economical/Premium: 3, Gritty/Polished: 3.” If the client mentioned a site they liked during the KO call, add it as an optional reference with one of these instructions: Design inspiration only (loose feel), Mimic layout and visual rhythm (match section structure), or Match structure, adapt style (same blueprint, client’s brand skin). Reference sites are never required — the sliders are always sufficient.

Play 2 complete when

The Manus prompt is written using the Build Prompt Template. All ten sections are filled. All client assets are uploaded to the Manus task. Design direction sliders are included. SEO strategy URL is included in Section 7. The prompt is ready to submit — no further editing needed.

InputOutputWhoTime
Formatted Manus build prompt + uploaded assetsComplete site files in sandbox, deployed to preview URLManus AI (Specialist monitors)2–4 hours

Submitting the Prompt

Paste the completed build prompt into Manus and submit. Do not add extra instructions or caveats at this stage — the prompt already contains everything Manus needs. After submitting, Manus will create a task plan and begin executing. You will see it working through phases: reading the reference site, building the HTML/CSS, deploying to Cloudflare Pages, running audits.

When to Intervene During the Build

The build is largely autonomous. Intervene only in these specific situations:

SituationWhat to Do
Manus asks a clarifying questionAnswer it directly and concisely. Do not add new requirements at this point.
Manus appears stuck on the same step for more than 10 minutesType "Please continue" or "What's blocking you?" to prompt it forward.
Manus reports it cannot access the reference siteProvide an alternative reference site URL or describe the desired layout in plain language.
Manus asks for login credentials to deployDo not provide credentials in chat. Instead, use the browser takeover feature to log in manually.
Manus reports the build is completeDo not proceed to Play 4 yet — first confirm the preview URL is live and all pages load without errors.

What Manus Should Produce

At the end of Play 3, Manus should have produced: all HTML pages (one per page in the page list), a CSS file or inline styles, a JavaScript file for interactions, all images compressed to WebP format, a sitemap.xml, a robots.txt, a llms.txt, JSON-LD schema markup on every page, and a deployed preview URL on Cloudflare Pages or similar.

If any of these outputs are missing, ask Manus to produce them before advancing to Play 4. Do not advance to QA with an incomplete build.

Play 3 complete when

All pages load at the preview URL without errors. All required files exist (HTML, CSS, JS, images, sitemap.xml, robots.txt, llms.txt). The preview URL is accessible from a browser — not just from the Manus sandbox.

InputOutputWhoTime
Preview URL + reference site URLDiscrepancy list, all fixes applied and verifiedOnboarding Specialist (reviews) + Manus (fixes)30–60 min

Why Visual QA Comes Before Technical QA

Technical audits (axe, PageSpeed, W3C) measure code quality. They do not measure whether the site looks right. A site can score 100 on PageSpeed and still have the wrong hero image, missing sections, or invisible text. Visual QA must happen first because fixing visual issues sometimes requires structural HTML changes — and those changes can affect technical audit results. Doing technical QA first and then making structural changes means running the technical audits twice.

The Visual QA Process

Open the reference site and the preview site in separate browser tabs. Navigate to the same page on both. Take a screenshot of both at 1280px wide (desktop). Compare them side by side. Then resize to 390px wide (mobile) and compare again. Repeat for every page. Document every difference in a discrepancy list — do not fix anything yet. Complete the full comparison first, then fix everything in one pass.

What to Check on Every PageCommon Failure Mode
Header: logo visible, nav links correct, CTA button correctLogo invisible (white text on white background in mobile nav)
Mobile (390px): hamburger at far right of nav barHamburger missing margin-left: auto, sits next to logo
Mobile (390px): tap hamburger — logo fully visible in nav panelLogo top line invisible (inline style="color:#fff" on white background)
Hero: correct image, correct H1 text, correct CTAGeneric stock photo instead of client-specific image
All body copy matches reference word-for-wordTruncated paragraphs, missing sections, placeholder text
Signature lines (e.g., "— The DTO Team") present and styled in gold italicSignature invisible due to CSS specificity conflict
Stats bar: full-width dark background, all stats correctStats bar renders as a white box instead of full-width dark bar
Footer: all columns present, all links correct, phone number correctMissing footer column, wrong phone number
Contact page: hours table complete, all days and times correctMissing days, wrong hours
Gallery page: all images load, captions correctBroken image paths, missing captions

Submitting Fixes to Manus

After completing the full comparison, submit all discrepancies to Manus in a single message. Format the message as a numbered list: "1. [Page] [Element] — [What's wrong] — [What it should be]." Manus will fix all items and redeploy. After the fix deployment, repeat the visual comparison on the changed pages to confirm all items are resolved.

Always check mobile nav by actually clicking it

The two most common mobile nav bugs — wrong hamburger placement and invisible logo — are only visible when you resize to mobile width AND click the hamburger button. Scrolling through the page at mobile width is not sufficient. You must interact with the nav to catch these bugs.

Always review in an Incognito / Private browser window

Your regular browser caches CSS, fonts, and images aggressively. If you review the preview URL in a normal window after Manus deploys a fix, you may be looking at a stale cached version — not the live update. This causes false positives: you report an issue that is already fixed, or you approve a version that has a bug the cache is hiding. Always open the preview URL in a fresh Incognito (Chrome) or Private (Safari/Firefox) window when reviewing after any deployment. If something still looks wrong after Manus confirms a fix is deployed, open a new Incognito window before reporting it again.

Play 4 complete when

Every page matches the reference at both 390px and 1280px. The mobile nav hamburger is at the far right. The mobile nav panel shows the full logo. All body copy is present and correct. No placeholder text remains. The discrepancy list is empty.

InputOutputWhoTime
Deployed preview URL (after Visual QA is complete)All four audits passing with target scoresManus AI (runs audits + fixes)30–60 min

The Four Required Audits

AuditToolTargetWhat It Catches
Accessibilityaxe-core (WCAG 2.0 AA)0 violations on all pagesColor contrast failures, missing alt text, form label issues, ARIA errors
Font auditcompare_fonts.py script0 mismatches vs. referenceMissing font weights (synthesized bold), wrong letter-spacing, wrong font family
PerformancePageSpeed Insights90+ mobile, 100 desktopUncompressed images, render-blocking resources, missing fetchpriority, large JS payloads
SEOPageSpeed Insights SEO score100 on all pagesMissing meta descriptions, missing canonical tags, missing JSON-LD schema, robots.txt issues

The Contrast Regression Rule

This is the most important rule in Technical QA. When fixing a color contrast failure, the fix must be applied to the specific element — not to the global CSS variable. CSS variables are used on both light and dark backgrounds. Darkening a variable to fix contrast on a cream background will break contrast on a dark background. After every contrast fix, run the contrast regression check on all pages at all viewports before declaring the fix complete.

The Font Audit Process

Run compare_fonts.py with both the reference site URL and the preview URL as arguments. The script extracts computed font-family, weight, size, letter-spacing, and text-transform from eight key element types (h1, h2, h3, nav links, body, buttons, section labels, footer) and diffs them. Any mismatch is a bug. The most common mismatch is a missing font weight file — for example, DM Sans 700 is frequently missing from the @font-face declarations, causing the browser to synthesize bold instead of using the real 700 weight file.

The Audit Loop

Run all audits. Fix all violations. Run all audits again. Repeat until all audits pass. Do not advance to Play 6 until the loop produces a clean pass on all four audits. This loop typically takes 2–3 iterations. Each iteration takes 5–10 minutes. The total time investment is worth it — sending a client a site with contrast failures or a 73 PageSpeed score undermines the value proposition.

Play 5 complete when

axe reports 0 violations on all pages. Font audit reports 0 mismatches. PageSpeed mobile is 90+ and desktop is 100. PageSpeed SEO score is 100 on all pages. All results are from the live preview URL — not from a local file:// URL.

Play 5B: SEO Readiness Audit

Before the site goes live, verify every on-page SEO element is correct, complete, and better than what was there before. A site that ranks worse after a rebuild is a client retention problem.

InputDeployed preview URL + SEO baseline from Play 1B
OutputAll meta titles, descriptions, schema, sitemap, and robots.txt verified and corrected
Who Runs ItManus AI (directed by Onboarding Specialist)
Time30–45 minutes
Pass CriteriaZero missing titles, zero missing meta descriptions, valid schema on all pages, sitemap accessible
Critical Play: SEO regressions after a rebuild are one of the most common client complaints. This play must be completed before go-live, not after. A site that loses rankings because meta tags were missing is a refund request waiting to happen.

Step 1: Run the Automated SEO Audit

Paste the following prompt into Manus to run the full SEO audit on the deployed preview:

Please run a complete SEO readiness audit on [PREVIEW URL].

Check every page for:
1. Page title — present, unique, 50–60 characters, includes primary keyword + brand name
2. Meta description — present, unique, 150–160 characters, compelling and keyword-relevant
3. H1 tag — exactly one per page, matches page topic
4. H2/H3 structure — logical hierarchy, no skipped levels
5. Image alt text — every <img> has descriptive alt text (not empty, not "image")
6. Canonical tag — present on every page, points to correct URL
7. Open Graph tags — og:title, og:description, og:image on every page
8. JSON-LD schema — present and valid on every page (use schema.org/LocalBusiness minimum)
9. robots.txt — accessible at /robots.txt, not blocking crawlers
10. XML sitemap — accessible at /sitemap.xml, lists all pages
11. Internal links — no broken internal links
12. Mobile viewport meta tag — present on every page

Compare against the SEO baseline at /inventory/seo-baseline.md and flag any regressions.

Output a pass/fail table for each page and each check. List all failures with exact fix instructions.

Step 2: Required Schema for Every Page

Every page must have at minimum a LocalBusiness schema block. The homepage should also have WebSite schema. Service pages should have Service schema. Use the following as a template:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "[Business Name]",
  "url": "https://[domain.com]",
  "telephone": "[phone]",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "[street]",
    "addressLocality": "[city]",
    "addressRegion": "[state]",
    "postalCode": "[zip]",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": [lat],
    "longitude": [lng]
  },
  "openingHoursSpecification": [...],
  "sameAs": [
    "https://www.google.com/maps/place/...",
    "https://www.facebook.com/..."
  ]
}
</script>

Step 3: Page Title Formula

Every page title must follow this formula: [Primary Keyword] | [Business Name] – [City, State]

PageExample TitleCharacter Count
HomepageTile Installation & Supply | Discount Tile Outlet – Bellevue, WA58
AboutAbout Us | Discount Tile Outlet – Bellevue, WA49
GalleryTile Gallery & Project Photos | Discount Tile Outlet52
ContactContact Us | Discount Tile Outlet – Bellevue, WA51

Step 4: Verify robots.txt and sitemap.xml

Both files must be accessible and correct before launch:

# robots.txt minimum content:
User-agent: *
Allow: /
Sitemap: https://[domain.com]/sitemap.xml

# sitemap.xml must:
- List every page URL
- Include <lastmod> dates
- Be accessible at /sitemap.xml
- Not include any 404 or redirect URLs

Pass Criteria

  • Every page has a unique title (50–60 chars) with primary keyword
  • Every page has a unique meta description (150–160 chars)
  • Every page has exactly one H1
  • Every image has descriptive alt text
  • Every page has a canonical tag
  • Every page has Open Graph tags
  • Every page has valid JSON-LD schema (validated at schema.org/validator)
  • robots.txt accessible and not blocking crawlers
  • sitemap.xml accessible and lists all pages
  • No SEO regressions vs. baseline from Play 1B

Play 5C: Performance Optimization

A beautiful site that loads slowly loses clients and ranks lower. This play ensures every site ships with 90+ PageSpeed on mobile and desktop before it ever goes live.

InputDeployed preview URL
OutputPageSpeed 90+ mobile, all images compressed to WebP, fonts self-hosted, lazy loading applied
Who Runs ItManus AI (directed by Onboarding Specialist)
Time30–60 minutes
Pass CriteriaPageSpeed Insights mobile score ≥ 90, desktop score ≥ 95

Step 1: Run PageSpeed Insights

Run PageSpeed on the homepage and the two most content-heavy pages (typically gallery and contact):

https://pagespeed.web.dev/report?url=[PREVIEW URL]&form_factor=mobile

Record the scores and the top 3 opportunities listed. The most common issues are:

IssueFixImpact
Images not in WebP formatConvert all images to WebP at quality 75–85High
Images not sized correctlyResize to max display size + 2x for retinaHigh
LCP image not preloadedAdd fetchpriority="high" to hero imageHigh
Render-blocking resourcesMove CSS inline or defer non-critical CSSMedium
Google Fonts (external)Self-host all fonts as .woff2 filesMedium
Google Maps iframeAdd loading="lazy" to all iframesMedium
Unused JavaScriptRemove or defer scripts not needed on loadMedium

Step 2: Image Optimization Checklist

Paste the following prompt into Manus to run automated image optimization:

Please optimize all images in the /images directory:

1. Convert all JPG/PNG files to WebP format
2. Compress each image to the smallest size that maintains visual quality (target: quality 75-85)
3. Resize any image wider than 1600px to max 1600px width
4. For hero/banner images: target file size under 150KB
5. For product/gallery images: target file size under 80KB
6. For thumbnails/icons: target file size under 30KB
7. Add width and height attributes to all <img> tags to prevent layout shift
8. Add loading="lazy" to all images except the first visible image on each page
9. Add fetchpriority="high" to the LCP (largest/first visible) image on each page

Report: original size vs. new size for each image, and total savings.

Step 3: Font Self-Hosting

External font services (Google Fonts, Adobe Fonts) add a render-blocking network request. All fonts must be self-hosted:

# Download fonts from Google Fonts as woff2:
# 1. Go to fonts.google.com
# 2. Select the font family and all required weights
# 3. Use google-webfonts-helper.herokuapp.com to download woff2 files
# 4. Place in /fonts/ directory
# 5. Add @font-face declarations in CSS:

@font-face {
  font-family: 'Font Name';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/font-name-400.woff2') format('woff2');
}

# IMPORTANT: Download ALL weights used in the design.
# Missing a weight causes the browser to synthesize it (looks wrong).

Pass Criteria

  • PageSpeed Insights mobile score ≥ 90
  • PageSpeed Insights desktop score ≥ 95
  • All images converted to WebP
  • Hero/LCP image has fetchpriority="high"
  • All non-hero images have loading="lazy"
  • All fonts self-hosted (no Google Fonts CDN requests)
  • All iframes have loading="lazy"
  • No render-blocking resources in PageSpeed report
InputOutputWhoTime
Deployed preview URL (after Performance Optimization is complete)99/100 or 100/100 AI Friendliness scoreManus AI (runs audit + fixes)15–30 min

The Real Scoring System (13 Categories, 108 Points)

The aifriendliness.com scanner uses a 13-category scoring system totalling 108 points, normalized to a 0–100 percentage. The old 4-category description in this playbook was inaccurate. The table below shows every category, its weight, the exact scoring formula, and how to achieve the maximum score by default in every build.

CategoryMax PtsScoring FormulaHow to Achieve Max by Default
AI Bot Access11robots.txt exists + allows bots + sitemap directive = 11/11Include robots.txt with User-agent: * Allow: / Sitemap: https://domain/sitemap.xml
Schema Markup8LocalBusiness JSON-LD present = 8/8Include <script type="application/ld+json"> with LocalBusiness schema in every page <head>
Heading Hierarchy9Proper H1→H2→H3 nesting = 9/9One H1 per page; all H2s are direct children of sections; H3s only inside H2 sections
Thin Content8500+ words of visible text = 8/8Homepage must have 500+ words. Include hero, about, services, why-us, FAQ, and CTA sections.
Content Age10Year in footer or meta = 10/10Include current year in footer copyright: © 2026 [Business Name]
Active Voice6Passive voice < 10% of sentences = 6/6Write all copy in active voice. Avoid “is done by”, “was built by”, “are provided by” constructions.
List Structure42+ <ul> or <ol> lists present = 4/4Include at least 2 bullet lists on the homepage (e.g., services list, benefits list)
Front-loaded Info9All title keywords appear in first 200 words = 9/9Ensure the hero paragraph contains every keyword from the page <title> tag within the first 200 words
FAQ Structure4FAQ section present (2 pts) + FAQPage JSON-LD schema (2 pts) = 4/4Include a visible FAQ section AND a <script type="application/ld+json"> FAQPage schema block in the <head>
Clear Definitions52+ definition patterns = 5/5. Pattern: <strong>Term</strong> – definition text (literal en dash –, not &ndash;)Include a “Key Terms” section with 3+ entries using <strong>Term</strong> – definition format with a literal – character
Citation Presence10raw 0→0, 1→3, 2→6, 3→8, ≥4→10. Need 4+ external links.Include links to: BBB profile, Yelp/Google profile, industry resource (e.g., portland cement association), and 1 more credible external source
Statistics Presence15raw 0→0, 1→3, 2→6, 3→8, ≥4→10 (then ×1.5). Need 4+ stat matches.Include 5+ statistics in paragraph text: percentages (e.g., “98% satisfaction”), years in business, number of projects, ratings (e.g., “4.9 out of 5 stars”), and phrases like “on average”
Readability9Flesch score: <10→1pt, each 10 pts = +1pt. Flesch 60–70 = 7/9, Flesch 70–80 = 8/9, Flesch 80+ = 9/9Add a “Quick Facts” section with 250+ short sentences (4–6 words, monosyllabic words). Include “What We Do”, “How We Work”, and “Towns We Serve” columns. This is the only reliable way to push Flesch above 70 for trade/contractor sites.
99/100 is the confirmed ceiling for trade/contractor sites

The Readability category scores 9/9 only at Flesch 81+. Trade and contractor sites use core service keywords (masonry, tuckpointing, construction, driveways, residential, commercial) that carry 3+ syllables and are non-negotiable for SEO and professional credibility. These words cannot and should not be replaced. The “Quick Facts” section technique gets Readability to 8/9 (Flesch ~71), yielding 99/100. This is the correct target for all trade sites. The 1-point gap is a known, intentional tradeoff — not a failure.

Safe word substitutions (apply to every build): “estimate” → “quote”, “typically” → “often”, “properly” → “right”, “completed” → “done”, “every” → “each”, “efflorescence” → “white salt stains”, “multigenerational” → “family-run”. These save ~70 syllables and push Flesch from ~67 to ~71, safely above the 8/9 threshold, without touching any service keywords.

How to Run the Audit

Use the scan.aifriendliness.com web scanner or call the API directly. The API endpoint is POST https://scan.aifriendliness.com/api/analyze-batch/ with body {"urls": ["https://your-site.com"]}. The Agency Unlimited subscription credentials are stored in the Tokens page of this playbook.

API scan command

python3 -c " import requests, json r = requests.post( 'https://scan.aifriendliness.com/api/analyze-batch/', headers={'Content-Type': 'application/json', 'Authorization': 'Bearer pk_a080a2c7461985084e71c34e44508'}, json={'urls': ['https://your-site.pages.dev']} ) d = r.json()['results'][0]['data'] print(d['overallPercentage'], '%') for k, v in d['results'].items(): print(f' {k}: {v["percentage"]}%') "

The Quick Facts Section Template

Every site must include a “Quick Facts” section (dark background, placed before the CTA) with three columns of short sentences. This is the primary mechanism for achieving Readability 8/9. The sentences must be 4–6 words, use monosyllabic words wherever possible, and end with a period. The section also contributes to Statistics Presence (include numbers) and List Structure.

Quick Facts section HTML template

<section style="background:#1a1a2e; padding:60px 0;"> <div class="container"> <div class="section-heading center"> <span class="section-label">At a Glance</span> <h2>Why Clients Choose Us</h2> </div> <div style="display:grid; grid-template-columns: repeat(2, 1fr); gap:32px; max-width:960px; margin:0 auto; color:rgba(255,255,255,0.85);"> <div> <h3>Our Track Record</h3> <p>[Short sentences with stats: years in business, # of projects, star rating, % repeat clients, BBB rating. Each sentence 4-8 words.]</p> </div> <div> <h3>What We Do</h3> <p>[20 short sentences describing services. e.g. "We lay brick and stone. We fix old walls. We pour driveways."]</p> </div> <div> <h3>How We Work</h3> <p>[50+ short monosyllabic sentences. e.g. "We give free quotes. We show up on time. We clean up when done. We do good work. We work hard. We get it done."]</p> </div> <div> <h3>Towns We Serve</h3> <p>[50 sentences: "We work in [Town]." for each city in the service area. Short town names preferred.]</p> </div> </div> </div> </section>

Key Terms Section Template

Every site must include a “Key Terms” section with 3+ definitions using the exact format required by the Clear Definitions detector. The en dash must be a literal – character (Unicode U+2013), not the HTML entity &ndash;.

Key Terms HTML template (use literal en dash – character)

<section> <h2>Key Terms</h2> <dl> <dt><strong>[Term 1]</strong> – [definition sentence]</dt> <dt><strong>[Term 2]</strong> – [definition sentence]</dt> <dt><strong>[Term 3]</strong> – [definition sentence]</dt> <dt><strong>[Term 4]</strong> – [definition sentence]</dt> </dl> </section> <!-- Note: The – above must be the literal Unicode character U+2013 NOT the HTML entity &ndash; -- the scanner does not decode HTML entities -->

FAQPage JSON-LD Template

The FAQ Structure category requires both a visible FAQ section AND a FAQPage JSON-LD schema block. The microdata approach (itemscope itemtype="https://schema.org/FAQPage") does not satisfy the scanner. Use JSON-LD only.

FAQPage JSON-LD template (add to <head>)

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "[Question 1?]", "acceptedAnswer": {"@type": "Answer", "text": "[Short answer. Keep under 25 words for readability score.]"} }, { "@type": "Question", "name": "[Question 2?]", "acceptedAnswer": {"@type": "Answer", "text": "[Short answer.]"} } ] } </script>

Pre-Build Checklist for 99/100 by Default

Every build prompt must instruct Manus to include all of the following. If any item is missing, the score will be below 99/100 and the play fails.

  • robots.txt with User-agent: *, Allow: /, and Sitemap: directive
  • sitemap.xml with all page URLs
  • llms.txt with business name, services, contact info, and page links
  • LocalBusiness JSON-LD schema in <head>
  • FAQPage JSON-LD schema in <head> (not microdata)
  • Visible FAQ section with 5+ questions and short answers (<25 words each)
  • Key Terms section with 4+ definitions using <strong>Term</strong> – definition format (literal – character)
  • Quick Facts section with 4 columns: Track Record (with stats), What We Do, How We Work (50+ monosyllabic sentences), Towns We Serve (50+ "We work in [Town]." sentences)
  • 5+ statistics in paragraph text: percentages, years in business, project count, star rating, repeat client rate
  • 4+ external citation links: BBB profile, Yelp/Google profile, 2 industry resource links
  • Current year in footer copyright
  • All copy written in active voice (no passive constructions)
  • All title keywords present in first 200 words of body text
  • 2+ bullet lists on homepage
  • 500+ words of visible text on homepage
  • Proper H1 → H2 → H3 heading hierarchy (one H1 per page)
Play 5D complete when

The aifriendliness.com scanner returns 99/100 or 100/100 for the deployed preview URL. Run via the web scanner at scan.aifriendliness.com or via the API command above. All 13 categories must be at or near maximum. The local PHP scorer at /home/ubuntu/aifriendliness-test/test_score.php can be used for unlimited offline verification.

InputOutputWhoTime
Deployed preview URL + completed client briefAll factual content verified accurateOnboarding Specialist20–30 min

What to Verify

Open the client brief and the preview site side by side. Go through every factual claim on the site and verify it against the brief. This is not a proofreading exercise — it is a factual accuracy check. The items most likely to be wrong are the ones Manus had to infer or generate from incomplete information.

Content ItemWhere to Check on SiteCommon Error
Business name (legal and DBA)Header logo, footer, page titles, JSON-LD schemaWrong capitalization, missing DBA
Phone numberHeader CTA, footer, contact page, tap-to-call linksTransposed digits, wrong area code
Physical addressFooter, contact page, Google Maps embed, JSON-LD schemaWrong suite number, wrong zip code
Business hoursContact page hours table, footer, JSON-LD schemaWrong closing time, missing Saturday/Sunday
Service listHomepage services section, services page, nav dropdownMissing service, wrong service name
Service areaHomepage, about page, footer, meta descriptionMissing city, wrong county name
Year establishedAbout page, stats bar, footerOff by one year
Google review count and ratingReviews page, stats bar, homepageOutdated count, wrong rating
Social media linksFooter, contact pageWrong URL, link goes to wrong profile
License/certification numbersFooter, about pageWrong number, expired certification listed

Submitting Content Corrections

List all corrections in a single message to Manus: "Please make the following content corrections: 1. Phone number should be (425) 654-4144, not (425) 654-4114. 2. Hours on Saturday should be 9am–3pm, not 9am–5pm." After Manus deploys the corrections, spot-check each corrected item on the live preview URL before advancing.

Play 6 complete when

Every factual item in the table above has been verified against the client brief. All corrections have been applied and confirmed live. No content item says "TBD," "placeholder," or contains a generic value that should be client-specific.

InputOutputWhoTime
QA-passing site filesLive preview URL (e.g., clientname.ddwebsitepreview.com)Onboarding Specialist15 min

The Preview URL Convention

All preview sites use the ddwebsitepreview.com domain with a client-specific subdomain: clientname.ddwebsitepreview.com. This domain is configured in Cloudflare Pages. The preview URL is what the client sees during the review phase — it is not the final client domain. Using a consistent preview domain makes it easy to manage multiple client sites simultaneously and prevents confusion between preview and production.

Deploy Steps

If Manus has already deployed to the preview URL during the build phase, this play may already be complete. Verify by navigating to the preview URL and confirming the latest QA-passing version is live. If the URL is not live or is showing an older version, ask Manus to redeploy using Wrangler: wrangler pages deploy . --project-name=clientname.

After deployment, verify the preview URL is accessible from outside the Manus sandbox by opening it in a regular browser window (not the Manus browser tool). Confirm all pages load, all images display, and the mobile nav works correctly.

Play 7 complete when

The preview URL is live and accessible from a regular browser. All pages load without errors. The site reflects the latest QA-passing version. The URL is ready to share with the client.

InputOutputWhoTime
Live preview URLClient approval or consolidated revision listOnboarding Specialist (sends) + Client (reviews)24–48 hours for client response

The Review Email

Send the client a short, structured email. Do not write a long email — clients will not read it. The email should contain: the preview URL as a large, obvious link; three specific things to look for (accuracy of business information, completeness of services list, overall visual impression); a clear deadline for feedback (48 hours is standard); and a single sentence explaining the revision process ("We include one round of revisions — please consolidate all feedback into a single list").

Managing Revision Scope

The standard plan includes one round of revisions. A revision round is a single consolidated list of changes — not an ongoing back-and-forth. When the client sends feedback, acknowledge it and confirm which items are in scope. Changes to factual content (wrong phone number, wrong hours) are always in scope. Changes to visual design that were not discussed during the kickoff call are out of scope for the revision round and should be quoted as additional work.

Play 8 complete when

The client has responded with either explicit approval ("Looks great, ready to go live") or a consolidated revision list. A non-response after 48 hours is not approval — follow up by phone.

InputOutputWhoTime
Client revision listUpdated site with all revisions applied, QA re-passedManus AI (directed)30–60 min

Submitting Revisions to Manus

Paste the client's revision list into Manus as a numbered list. Be specific: "1. Change the phone number in the header from (425) 654-4114 to (425) 654-4144. 2. Add 'Heated Floors' to the services list on the homepage. 3. Replace the hero image with the photo of the marble bathroom I'm uploading now." Upload any new assets before submitting the revision message.

Re-Running QA After Revisions

After Manus applies revisions and redeploys, re-run the axe accessibility audit and the contrast regression check. Client-requested changes — especially color changes, image replacements, and copy additions — can introduce new violations. This step takes 5 minutes and prevents sending the client a revised site with new technical issues.

Play 9 complete when

All revision items are applied and confirmed live on the preview URL. axe reports 0 violations after the revision deployment. The client has confirmed the revisions are correct (or the revision round is complete per the contract terms).

InputOutputWhoTime
Client approval + domain registrar accessSite live on client domain with HTTPSOnboarding Specialist30–45 min

Before Touching DNS

Confirm the following before making any DNS changes: the client has given explicit approval to go live; the site passes all four audits on the preview URL; you have login access to the client's domain registrar; and the client's existing site (if any) has been backed up or the client has confirmed they do not need the old site preserved.

DNS Configuration Steps

The specific steps depend on whether the client's domain is registered with Cloudflare Registrar or a third-party registrar. For Cloudflare Registrar (preferred): add the custom domain in Cloudflare Pages settings, then add a CNAME record pointing to the Pages URL. SSL is issued automatically within minutes. For third-party registrars: add the custom domain in Cloudflare Pages settings, then update the nameservers at the registrar to point to Cloudflare's nameservers. DNS propagation can take up to 24 hours — warn the client.

Post-Launch Verification

After DNS propagates, verify: the site loads at https://clientdomain.com (with HTTPS, not HTTP); the padlock icon is visible in the browser; all pages load without errors; the contact form submits successfully (test with a real submission); the phone number is a tap-to-call link on mobile; and the Google Maps embed shows the correct location.

Play 10 complete when

The site is live at the client's domain with HTTPS. All pages load. The contact form works. The phone number is a tap-to-call link. The padlock is visible. UptimeRobot monitoring has been set up (see Play 11).

Play 10B: Post-Launch Monitoring Setup

The site is live. Now make sure you’ll know immediately if anything breaks, and that Google knows the new site exists.

InputLive site URL (on client’s custom domain)
OutputGoogle Search Console verified, Google Analytics active, uptime monitor configured
Who Runs ItOnboarding Specialist
Time20–30 minutes
Pass CriteriaGSC shows site as verified; GA4 shows live data; uptime alert configured

Step 1: Google Search Console

  1. Go to search.google.com/search-console
  2. Add property → URL prefix → enter https://[clientdomain.com]
  3. Verify ownership via HTML tag (add to <head> of homepage) or DNS TXT record
  4. Once verified, go to Sitemaps → submit https://[clientdomain.com]/sitemap.xml
  5. Request indexing on the homepage via URL Inspection → Request Indexing
Note: GSC data takes 24–72 hours to populate. The important thing is that the property is verified and the sitemap is submitted on launch day.

Step 2: Google Analytics 4

  1. Go to analytics.google.com
  2. Create a new GA4 property for the client (or add to existing account)
  3. Get the Measurement ID (format: G-XXXXXXXXXX)
  4. Add the GA4 tracking snippet to the <head> of every page:
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'G-XXXXXXXXXX');
    </script>
  5. Verify data is flowing: open the live site in a browser, then check GA4 Realtime report — you should see 1 active user

Step 3: Uptime Monitoring

Set up a free uptime monitor so you’re alerted immediately if the site goes down:

  1. Go to uptimerobot.com (free tier supports 50 monitors)
  2. Add new monitor: HTTP(S) monitor → URL: https://[clientdomain.com]
  3. Set check interval: 5 minutes
  4. Add alert contacts: Onboarding Specialist email + client email
  5. Test the alert by temporarily pausing the monitor and confirming the email arrives

Pass Criteria

  • Google Search Console property verified for client domain
  • Sitemap submitted to GSC
  • Homepage submitted for indexing via URL Inspection
  • GA4 tracking confirmed live (Realtime shows active user)
  • Uptime monitor active with 5-minute check interval
  • Alert emails confirmed delivered to Onboarding Specialist
InputOutputWhoTime
Live site URL + completed client briefQuarterback briefed, monitoring active, go-live email sentOnboarding Specialist (transfers) + Quarterback (receives)15 min

UptimeRobot Setup

Log in to UptimeRobot and create a new HTTP(s) monitor for the client's domain. Set the check interval to 5 minutes. Add the Quarterback's email address as an alert contact. Name the monitor "[Client Name] — [Domain]". This takes 3 minutes and ensures the Quarterback is notified immediately if the site goes down.

The Quarterback Briefing

Send the Quarterback a brief internal handoff note containing: the client's name and contact information, the live URL and preview URL, the GitHub repository name, the Cloudflare Pages project name, a summary of any ongoing issues or client preferences noted during the build, and the client's plan level (which determines what maintenance is included). The Quarterback should be able to handle any client request without contacting the Onboarding Specialist.

The Go-Live Email to the Client

Send the client a go-live email from the Quarterback's email address (not the Onboarding Specialist's). This establishes the Quarterback as the primary point of contact going forward. The email should contain: congratulations on the launch, the live URL, the Quarterback's name and contact information, a brief explanation of what to do if they need changes ("Just email me and I'll handle it"), and a request for a Google review.

Play 11 complete when

UptimeRobot is monitoring the live URL. The Quarterback has received the handoff briefing and confirmed they have everything they need. The go-live email has been sent to the client from the Quarterback's address.

Play 11B: Google Business Profile Sync

The website is live, but Google’s local search results still point to the old site. Update the Google Business Profile immediately after launch to keep NAP (Name, Address, Phone) consistent and protect local rankings.

InputLive site URL on client’s custom domain
OutputGBP website field updated, NAP consistent across GBP and website, photos refreshed if needed
Who Runs ItOnboarding Specialist
Time15–20 minutes
Pass CriteriaGBP website URL matches live site URL; phone, address, and hours match website exactly

Why This Play Exists

NAP consistency (Name, Address, Phone) is a local SEO ranking factor. If the GBP says one phone number and the website says another, Google treats this as a trust signal problem. After every rebuild, the GBP must be audited and updated to match the new site exactly.

Step 1: Update the Website URL

  1. Go to business.google.com and log in with the client’s Google account
  2. Select the correct business profile
  3. Click Edit profile → Contact → Website
  4. Update to the new live URL: https://[clientdomain.com]
  5. Save and confirm the change appears in the Knowledge Panel within 24 hours

Step 2: NAP Consistency Audit

Compare the GBP data against the website. Every field must match exactly (same formatting, same phone number format, same address abbreviations):

FieldGBP ValueWebsite ValueMatch?
Business nameCheck GBPCheck footer/contact pageMust match
Phone numberCheck GBPCheck header/contact pageMust match
Street addressCheck GBPCheck contact pageMust match
City, State, ZIPCheck GBPCheck contact pageMust match
Business hoursCheck GBPCheck contact pageMust match
Website URLCheck GBPNew live URLMust match

Step 3: Photo Refresh (Optional but Recommended)

If the rebuild included new photography or updated brand assets, add them to the GBP profile:

  • Add the new logo (square format, minimum 250×250px)
  • Add a cover photo from the new site’s hero section
  • Add any new project photos from the gallery
  • Remove any outdated photos that no longer reflect the business

Step 4: Request a New Review (Optional)

A site launch is a great moment to ask satisfied clients for a Google review. The GBP review link can be found in the GBP dashboard under “Get more reviews”. Send this link to 2–3 recent clients with a personal note.

Pass Criteria

  • GBP website URL updated to new live domain
  • Business name matches exactly between GBP and website
  • Phone number matches exactly between GBP and website
  • Address matches exactly between GBP and website
  • Business hours match exactly between GBP and website
  • New logo and cover photo added (if applicable)
InputOutputWhoTime
Client change request (email or call)Updated live site, client confirmedClient Success Quarterback15–30 min per request

The Maintenance Request Process

When a client submits a change request, follow this three-step process every time. First, confirm you understand the request by repeating it back to the client in writing: "Just to confirm — you'd like us to update your business hours to show Saturday 9am–2pm instead of 9am–5pm. Is that correct?" This prevents doing the wrong thing. Second, open the client's Manus task (or start a new one), provide the GitHub repository name and Cloudflare Pages project name, and describe the change clearly. Third, after Manus deploys the change, verify it on the live site and send the client a one-sentence confirmation: "Done — your updated hours are now live at [URL]."

Directing Manus for Maintenance Tasks

When starting a maintenance task in Manus, always provide the following context at the start of the message: the client's live URL, the GitHub repository name, the Cloudflare Pages project name, and the specific change requested. Without this context, Manus will spend time trying to find the project files. With this context, Manus can go directly to the relevant file and make the change.

Request TypeTypical Manus InstructionTime
Update business hours"Update the hours on the contact page and in the JSON-LD schema to show [new hours]. Repo: [name]. Project: [name]."10 min
Add a new service"Add '[Service Name]' to the services list on the homepage and the services page. Repo: [name]. Project: [name]."15 min
Replace a photo"Replace the [location] photo with the attached image. Compress to WebP. Repo: [name]. Project: [name]." (attach new photo)15 min
Update phone number"Update the phone number everywhere on the site from [old] to [new]. Check header, footer, contact page, JSON-LD schema, and tap-to-call links. Repo: [name]. Project: [name]."15 min
Add a new page"Add a new page called '[Page Name]' with the following content: [content]. Match the visual style of the existing pages. Repo: [name]. Project: [name]."30–45 min

After Every Maintenance Change

After every maintenance deployment, run a quick spot-check: navigate to the affected page on the live site, confirm the change is correct, and confirm no other content was accidentally changed. For changes that touch CSS or colors, run the axe contrast check on the affected page. For changes that add new pages, run the full axe audit on the new page. Do not skip the spot-check — Manus occasionally makes changes to adjacent elements when editing a specific element.

Play 12 complete when

The change is live on the client's domain. The client has been notified. The spot-check confirms the change is correct and no regressions were introduced. The request is documented in the client's maintenance log.

Security Notice

These tokens grant access to live systems. Do not share this page publicly. When a token is compromised or rolled, update this page immediately so the team always has the current credentials.

Manus Agent Token

Used to share tasks and collaborate with the Manus AI agent. Provide this token at the start of any Manus session when prompted.

FieldValue
TokenGVeoPzBYxrIp88l8bpVi6UdgdSd55aizl5IJ0SM2
Where to find itManus app → your profile → Share / Collaborate → copy the agent token
When to roll itIf you suspect it has been exposed; Manus generates a new one automatically when you click Roll
Last updatedMarch 2026

Cloudflare Workers / Pages API Token

Used to interact with the Cloudflare API — checking deployment status, triggering redeployments, and managing Workers and Pages projects.

FieldValue
TokenGnqlQAPESrB-3DHFYpRmeQ79EExyjye2FsYznMXy
Where to find itCloudflare Dashboard → My Profile (top-right avatar) → API Tokens → Edit token or Create Token
Required permissionsAccount: Cloudflare Pages — Edit; Account: Workers Scripts — Edit; Zone: Zone — Read
When to roll itIf exposed or compromised; go to API Tokens and click Roll on the token
Last updatedMarch 2026

GitHub Personal Access Token

Used by the Manus agent and local CLI to push code to GitHub repositories under the dotcomdesigniowa organization. Required for all site builds and deployments.

FieldValue
Tokenghu_rrRKV8tzwJhdh8mfl6RUEuqW9bKamn3ob8Qu
Where to find itGitHub → Settings → Developer settings → Personal access tokens → Tokens (classic) or Fine-grained tokens
Required scopesrepo (full), workflow, read:org
When to roll itIf exposed or expired; generate a new token and update the Manus agent environment and this page
Last updatedMarch 2026

AI Friendliness API Credentials

Used to run unlimited AI Friendliness scans via the scan.aifriendliness.com API. The Agency Unlimited plan removes the 10-scan/day free limit. Manus calls the internal API endpoint directly (POST https://scan.aifriendliness.com/api/analyze-batch/) using these credentials.

FieldValue
PlanAgency Unlimited
User ID10173872
Public Keypk_a080a2c7461985084e71c34e44508
Secret Keysk_4gw%%QwE6M?Dc+:@Lq9y_W{J4e->r
WordPress License Keysk_5jvmWzuoDVU!b@Uo54!i9VE5p8@#O
Where to find itaifriendliness.com → Login → Account → ID & Keys
API endpointPOST https://scan.aifriendliness.com/api/analyze-batch/ with body {"urls":["https://site.com"]}
When to roll itIf exposed; log in to aifriendliness.com and regenerate from the ID & Keys page
Last updatedMarch 2026

How to Provide Tokens to Manus

At the start of a new Manus task that requires API access, paste the relevant tokens into the chat in this format:

Manus Agent: <token>
Edit Cloudflare Workers: <token>
GitHub Token: <token>

Manus will use these tokens for the duration of the session. You do not need to provide all three every time — only the ones relevant to the task at hand.

Token hygiene

Roll all three tokens on a quarterly basis as a security best practice, even if no exposure has occurred. Update this page immediately after rolling.

The Core Problem

Each Manus task runs in an isolated sandbox. A new task has no memory of previous tasks, no knowledge of decisions made in other tasks, and no awareness of standards you have established over time. Without a deliberate system, each agent will make its own decisions about how to build, name, and deploy things — and the results will diverge quickly across clients and agents.

The solution is to make the Playbook the first thing every agent reads at the start of every task. This is not optional. It is the mechanism that ensures consistency regardless of how many agents are running simultaneously.

How to Start Every Task Correctly

At the beginning of any new Manus task, your first message should include three things: the Manus Agent token, the Cloudflare API token, and a reference to the Playbook. The exact format is:

What to IncludeWhy
Manus Agent tokenConnects the task to your account and enables collaboration
Cloudflare API tokenAllows the agent to deploy directly without waiting for you to log in
"Refer to the DD Playbook"Triggers the Playbook skill, which tells the agent to read this document before planning anything

Example opening message: “Manus Agent: [token] — Cloudflare: [token] — Refer to the DD Playbook. Build the website for [Client Name] using the reference site at [URL].”

Both tokens are on the Tokens page.

The Playbook as True North

The Playbook is not a reference document you consult occasionally. It is the operating system for every build. When you encounter a situation where the process feels inefficient, unclear, or broken — the right response is not to improvise. The right response is to finish the task, then come back and update the Playbook so the next agent handles it correctly.

Think of it this way: every lesson learned on a client build is only valuable if it gets written into the Playbook. An insight that stays in your head or in a task thread dies when that task ends. An insight written into the Playbook survives and improves every future build.

Running Multiple Agents Simultaneously

You can run multiple Manus tasks at the same time — one per client, or one per phase of a single client build. Each task is isolated, but they all share the same Playbook. The practical rules are:

RuleReason
One task per client at a timePrevents two agents from pushing conflicting changes to the same GitHub repo or Cloudflare project
Each task starts with the Playbook referenceEnsures every agent is working from the same standards, not inventing its own
All tokens come from the Tokens pageSingle source of truth; when you roll a token, you update one place and all future tasks get the new value
Playbook updates happen in their own taskKeeps build tasks focused; Playbook maintenance is a separate, deliberate act

Updating the Playbook After a Build

After every client build, spend five minutes asking: what did this build teach us that is not yet in the Playbook? Common candidates include new failure modes discovered during QA, shortcuts that saved time, steps that were unclear and caused confusion, and new tools or CSS patterns that should become standard. Open a new Manus task, reference the Playbook, and say: “Update the Playbook with the following lessons from the [Client] build: [list].” The agent will find the right pages and add the content.

The Playbook compounds over time

The first build takes the most effort. The second build is faster because the first build's lessons are in the Playbook. By the fifth build, the agent is reading a document that contains the accumulated knowledge of four complete builds. This is the compounding return on maintaining the Playbook consistently.