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 brief
Onboarding Specialist
Brief template
1 hour
Build the site
Manus AI (directed by Specialist)
Manus
2–4 hours
Review & audit
Onboarding Specialist
W3C, WAVE, PageSpeed, AI Friendliness
1–2 hours
Launch
Onboarding Specialist
GitHub, Cloudflare Pages, Registrar
Under 1 hour
Add monitoring
Onboarding Specialist
UptimeRobot
5 minutes
Hand off to Quarterback
Onboarding Specialist
Go-live email template
15 minutes
Ongoing maintenance
Client Success Quarterback
Manus, GitHub, Cloudflare Pages
15–30 min/request
Escalation (if needed)
Tech Product Owner + contractor
Varies
As needed
Overview
The Philosophy
Why we are changing the model, and what we are building toward.
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.
The Stack
Tech Stack Overview
Every tool in the system — what it does, who uses it, and what it costs.
🤖
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.
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 SpecialistQuarterbacksFree
☁️
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 SpecialistTech Product OwnerFree 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.
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 SpecialistFree / ~$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.
QuarterbacksOnboarding SpecialistFree — 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.
The Stack
Audit Standards
Every site must pass all four audits before it goes live. No exceptions.
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.
Validates that the HTML code follows web standards. Catches structural errors, missing attributes, and deprecated elements that can cause rendering issues across browsers.
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.
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.
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.
Build Process
Client Brief
Everything to collect on the onboarding call. The quality of the brief determines the quality of the first build.
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.
Business Basics
Business name — exactly as it should appear on the site
Primary phone number
Primary email address
Physical address (if applicable — some trades companies are service-area-only)
Service area — cities, counties, or radius
Business hours — every day of the week
Year established (if they want to feature it)
License numbers (if applicable and they want to display them)
Services
Complete list of services offered — be specific. "HVAC" is not enough; we need "AC installation, AC repair, furnace installation, furnace repair, heat pump installation."
Primary service — the one they most want to rank for and generate leads from (this goes first in the prompt)
Any services they do NOT want featured — sometimes companies are phasing out certain work
Brand
Logo file — PNG or SVG with transparent background preferred
Brand colors — hex codes if known; if not, describe the colors and we will match from the logo
Any fonts they use (if known)
Tone preference: professional and formal, friendly and approachable, bold and confident, etc.
Content
About the company — 2–3 paragraphs or bullet points: who they are, how long they've been in business, what makes them different
Owner or team bio (if they want to feature the team)
Awards, certifications, or affiliations they want to highlight
Customer testimonials — 3–5 preferred; if they don't have them written, we pull from their Google reviews
Photos — team photos, truck photos, job site photos, before/after photos — the more the better
Technical
Current website URL (if they have one — we use it as a reference)
Google Business Profile URL (if they have one)
Social media profiles — Facebook, Instagram, etc.
Any third-party tools that need to be integrated (booking software, review widgets, chat tools)
Goals
Primary goal of the website — generate phone calls, form submissions, drive foot traffic, etc.
Any specific pages they want beyond the standard set (standard: Home, Services, About, Contact)
Anything they specifically like or dislike about their current website
Build Process
Build Prompt Template
Copy this prompt into Manus, fill in every bracketed field, and submit. Do not submit with unfilled brackets.
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"]
Reference sites (visual inspiration): [URLs — or "none"]
---
## SECTION 4: PAGES REQUIRED
Build the following pages. Each page must be a separate HTML file.
Home (index.html):
- Sticky header with logo, navigation, and phone number (tap-to-call on mobile)
- Hero section: headline, subheadline, primary CTA button, hero image
- Trust bar: years in business, license number, service area, key differentiator
- Services grid: cards for each service with icon, name, and 1-sentence description
- About/Why Choose Us: 2–3 paragraphs + photo
- Photo gallery: 6–8 images in a responsive grid
- Testimonials: 3–5 customer reviews with name and star rating
- Service area section: list of cities/counties served
- CTA band: bold call-to-action with phone number and form link
- Contact section: phone, email, address/service area, embedded contact form
- Footer: logo, nav links, contact info, social links, copyright, Privacy/Terms links
Services page (services.html):
- Individual section for each service with heading, description, and CTA
About page (about.html):
- Company story, founding year, mission
- Team section with photos and bios (if provided)
- Certifications, awards, affiliations
Contact page (contact.html):
- Phone number (tap-to-call), email, address/service area
- Full contact form (Formspree)
- Google Maps embed (if physical address provided)
- Business hours
Privacy Policy page (privacy.html): Generate standard privacy policy
Terms of Service page (terms.html): Generate standard terms of service
[ANY ADDITIONAL PAGES]: [DESCRIBE]
---
## SECTION 5: 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 6: 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 7: 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 8: 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
- No horizontal scrolling on any device
PERFORMANCE (PageSpeed 100 required — mobile AND desktop):
- All images in WebP format with explicit width and height attributes
- Hero image: loading="eager" fetchpriority="high"
- All other images: loading="lazy"
- No render-blocking scripts or stylesheets
- Fonts loaded with preconnect and display=swap
- Total page weight under 500KB
- No unused CSS
- No console errors
ACCESSIBILITY (WAVE zero errors required):
- Every image has descriptive alt text (decorative images use alt="")
- One h1 per page, logical heading hierarchy (h1 → h2 → h3)
- All form fields have visible label elements
- All color combinations pass WCAG AA contrast ratio (4.5:1 for normal text)
- All interactive elements are keyboard-navigable
- Skip-to-content link at the top of every page
- html lang="en" on every page
- ARIA roles and labels on navigation and interactive components
SEO & AI FRIENDLINESS:
- 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 with all available business data
- sitemap.xml listing all pages with lastmod dates
- robots.txt allowing all crawlers
- llms.txt in the root with complete business information in plain text
FILES TO DELIVER:
- index.html, services.html, about.html, contact.html, privacy.html, terms.html
- css/styles.css
- js/main.js
- images/ folder with all WebP images
- sitemap.xml
- robots.txt
- llms.txt
- All files in a single ZIP named: [business-name-slug]-website.zip
---
## SECTION 9: REFERENCE
Existing website: [CURRENT URL — or "no existing site"]
Additional notes: [SPECIFIC REQUESTS, THINGS TO AVOID, CLIENT PREFERENCES]
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.
Build Process
Launch Process
Six steps from audit-passing site to live URL with SSL. Under one hour for a standard build.
1
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
2
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
3
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)
4
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
5
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
6
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
Build Process
Maintenance Workflow
How Client Success Quarterbacks handle ongoing updates, and when to escalate.
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:
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]."
Manus makes the edit and produces updated files.
The Quarterback reviews the change visually — does it look right? Is the information accurate?
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.
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.
Operations
Getting Started
Every account, setup task, and skill the team needs before we can run this workflow at scale.
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
Operations
Cost Model
What the new infrastructure costs vs. the old model, and how the hosting margin works.
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.
Operations
Transition Plan
How we handle the 286 existing clients across Duda, WordPress, and Next.js + Payload.
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
Operations
QA Checklist
Interactive pre-launch checklist. Click each item to check it off. Progress is tracked below.
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
Team & Roles
Org Model
The five-track structure that replaces the old specialist chain. Each track has its own people, accountability, and handoff points.
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
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.
Team & Roles
Client Success Quarterbacks
The ongoing client relationship role — two tiers, a graduation model, and a visible identity system.
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.
Play-by-Play
Play-by-Play
Every step of the website build process — from signed contract to live site — broken into individual plays with detailed instructions for each.
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.
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.
Play-by-Play · Play 1
Play 1: Kickoff Call
Collect everything needed to build the site in a single 45-minute call. Leave with a completed brief — not a list of follow-up questions.
Input
Output
Who
Time
Signed contract, client contact info
Completed client brief (all fields filled)
Onboarding Specialist
45–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, plan level, 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:
Section
What to Capture
Common Gaps
Business basics
Legal business name, DBA (if different), physical address, phone number, email, website URL (if existing), year established
Clients often give a cell number — confirm this is the number they want on the site
Service area
Cities and counties served, whether they travel outside the area, any areas they explicitly do not serve
Ask "Is there anywhere you won't go?" — this surfaces important exclusions
Services offered
Complete list of services, any specialties or certifications, services they want to emphasize vs. de-emphasize
Ask "What's the job you most want the phone to ring for?" — this shapes the homepage hero
Business hours
Hours for each day of the week, whether they take emergency/after-hours calls, holiday closures
Many clients say "by appointment" — clarify if they want that on the site
Unique selling points
Why do clients choose them over competitors? Years in business, certifications, guarantees, awards, family-owned, locally owned
Ask "What do your best customers say about you?" — this surfaces authentic differentiators
Google reviews
Google Business Profile URL, current star rating, number of reviews
Ask them to share their screen and navigate to their Google Business Profile so you can capture the exact URL
Ask for each platform individually — clients often forget they have profiles
Photos
Project photos (before/after, finished work), team photos, logo file
If they have no photos, note this — stock photos will be used and client should be told
Reference sites
2–3 competitor or aspirational sites they like, what specifically they like about each
Ask "Is there a website — anyone's, not just competitors — that you think looks great?" — this calibrates visual expectations
Domain
Do 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 preferences
Tone (professional, friendly, authoritative), any words or phrases they always use, anything they never want on the site
Ask "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." Photos have been received or a stock-photo decision has been made. The brief is saved and ready to be converted into a Manus prompt.
PLAY-BY-PLAY · PLAY 1B
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.
Input
Client’s existing website URL
Output
Full site inventory: all copy, images, logos, custom integrations, and SEO data
Who Runs It
Manus AI (directed by Onboarding Specialist)
Time
30–60 minutes
Pass Criteria
Every 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
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
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.
Input
Client contact (phone or email)
Output
Domain registrar access confirmed, DNS records documented, hosting credentials on file
Who Runs It
Onboarding Specialist
Time
15–30 minutes
Pass Criteria
Onboarding 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:
Item
Where to Find It
Why We Need It
Domain registrar name
GoDaddy, Namecheap, Google Domains, etc.
Know where to make DNS changes
Registrar login credentials
Client email + password (or invite us as user)
Access to make DNS changes at launch
Domain expiration date
Registrar dashboard
Prevent domain expiry during project
Current DNS records
Registrar DNS management panel
Document before making any changes
Current hosting provider
Where the old site is hosted
Know 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
Convert the completed client brief into a formatted Manus build prompt. The quality of this prompt directly determines the quality of the first build output.
Input
Output
Who
Time
Completed client brief
Formatted Manus build prompt, ready to submit
Onboarding Specialist
15–30 min
The Anatomy of a Good Build Prompt
A Manus build prompt has six 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 six sections are:
Section
Purpose
What Happens If Missing
1. Project context
Tells Manus what kind of business this is, who the audience is, and what the site needs to accomplish
Manus writes generic copy that doesn't reflect the client's voice or market
2. Reference site URL
Gives Manus a visual and structural target to match
Manus invents a layout that may not match client expectations
3. Business information
All factual content: name, address, phone, hours, services, service area
Placeholder text appears in the built site; revision round required
4. Brand assets
Logo file path, color preferences, font preferences, photo file paths
Manus uses default colors and stock photos; visual identity is generic
5. Page list
Explicit list of every page to build with a one-sentence description of each
Manus may build extra pages or miss required pages
Manus may not run audits or may stop at a lower quality bar
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.
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 the Reference Site
The reference site is the single most important input in the prompt. It tells Manus exactly what the finished site should look like. If the client provided a competitor site they like, use that. If not, use the most recent Dotcom Design site in the same trade vertical. The reference site URL goes in the prompt as: "Build this site to match the visual design, layout, and quality of: [URL]".
Play 2 complete when
The Manus prompt is written using the Build Prompt Template. All six sections are filled. All client assets are uploaded to the Manus task. The reference site URL is included. The prompt is ready to submit — no further editing needed.
Play-by-Play · Play 3
Play 3: Site Build
Submit the build prompt to Manus and monitor the build. Know when to intervene and when to let it run.
Input
Output
Who
Time
Formatted Manus build prompt + uploaded assets
Complete site files in sandbox, deployed to preview URL
Manus 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:
Situation
What to Do
Manus asks a clarifying question
Answer it directly and concisely. Do not add new requirements at this point.
Manus appears stuck on the same step for more than 10 minutes
Type "Please continue" or "What's blocking you?" to prompt it forward.
Manus reports it cannot access the reference site
Provide an alternative reference site URL or describe the desired layout in plain language.
Manus asks for login credentials to deploy
Do not provide credentials in chat. Instead, use the browser takeover feature to log in manually.
Manus reports the build is complete
Do 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.
Play-by-Play · Play 4
Play 4: Visual QA
Compare every page of the built site against the reference site at both mobile and desktop viewports. Document every discrepancy before touching any code.
Input
Output
Who
Time
Preview URL + reference site URL
Discrepancy list, all fixes applied and verified
Onboarding 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 Page
Common Failure Mode
Header: logo visible, nav links correct, CTA button correct
Logo invisible (white text on white background in mobile nav)
Mobile (390px): hamburger at far right of nav bar
Hamburger missing margin-left: auto, sits next to logo
Mobile (390px): tap hamburger — logo fully visible in nav panel
Logo top line invisible (inline style="color:#fff" on white background)
Hero: correct image, correct H1 text, correct CTA
Generic stock photo instead of client-specific image
All body copy matches reference word-for-word
Truncated paragraphs, missing sections, placeholder text
Signature lines (e.g., "— The DTO Team") present and styled in gold italic
Signature invisible due to CSS specificity conflict
Stats bar: full-width dark background, all stats correct
Stats bar renders as a white box instead of full-width dark bar
Footer: all columns present, all links correct, phone number correct
Missing footer column, wrong phone number
Contact page: hours table complete, all days and times correct
Missing days, wrong hours
Gallery page: all images load, captions correct
Broken 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.
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.
Play-by-Play · Play 5
Play 5: Technical QA
Run all four automated audits on the deployed preview URL. Zero violations required before advancing. Run audits after every fix — not just once.
Input
Output
Who
Time
Deployed preview URL (after Visual QA is complete)
All four audits passing with target scores
Manus AI (runs audits + fixes)
30–60 min
The Four Required Audits
Audit
Tool
Target
What It Catches
Accessibility
axe-core (WCAG 2.0 AA)
0 violations on all pages
Color contrast failures, missing alt text, form label issues, ARIA errors
Font audit
compare_fonts.py script
0 mismatches vs. reference
Missing font weights (synthesized bold), wrong letter-spacing, wrong font family
Performance
PageSpeed Insights
90+ mobile, 100 desktop
Uncompressed images, render-blocking resources, missing fetchpriority, large JS payloads
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-BY-PLAY · PLAY 5B
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.
Input
Deployed preview URL + SEO baseline from Play 1B
Output
All meta titles, descriptions, schema, sitemap, and robots.txt verified and corrected
Who Runs It
Manus AI (directed by Onboarding Specialist)
Time
30–45 minutes
Pass Criteria
Zero 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:
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)
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.
Input
Deployed preview URL
Output
PageSpeed 90+ mobile, all images compressed to WebP, fonts self-hosted, lazy loading applied
Who Runs It
Manus AI (directed by Onboarding Specialist)
Time
30–60 minutes
Pass Criteria
PageSpeed 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):
Record the scores and the top 3 opportunities listed. The most common issues are:
Issue
Fix
Impact
Images not in WebP format
Convert all images to WebP at quality 75–85
High
Images not sized correctly
Resize to max display size + 2x for retina
High
LCP image not preloaded
Add fetchpriority="high" to hero image
High
Render-blocking resources
Move CSS inline or defer non-critical CSS
Medium
Google Fonts (external)
Self-host all fonts as .woff2 files
Medium
Google Maps iframe
Add loading="lazy" to all iframes
Medium
Unused JavaScript
Remove or defer scripts not needed on load
Medium
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)
Verify every piece of factual content against the client brief. One wrong phone number or incorrect business hour can cost the client a customer.
Input
Output
Who
Time
Deployed preview URL + completed client brief
All factual content verified accurate
Onboarding Specialist
20–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.
Footer, contact page, Google Maps embed, JSON-LD schema
Wrong suite number, wrong zip code
Business hours
Contact page hours table, footer, JSON-LD schema
Wrong closing time, missing Saturday/Sunday
Service list
Homepage services section, services page, nav dropdown
Missing service, wrong service name
Service area
Homepage, about page, footer, meta description
Missing city, wrong county name
Year established
About page, stats bar, footer
Off by one year
Google review count and rating
Reviews page, stats bar, homepage
Outdated count, wrong rating
Social media links
Footer, contact page
Wrong URL, link goes to wrong profile
License/certification numbers
Footer, about page
Wrong 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.
Play-by-Play · Play 7
Play 7: Deploy to Preview
Push the final QA-passing site to a shareable preview URL for client review. This is the URL you send to the client.
Input
Output
Who
Time
QA-passing site files
Live preview URL (e.g., clientname.ddwebsitepreview.com)
Onboarding Specialist
15 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.
Play-by-Play · Play 8
Play 8: Client Review
Send the preview URL to the client with clear instructions for how to review and how to submit feedback. Set expectations for the revision process.
Input
Output
Who
Time
Live preview URL
Client approval or consolidated revision list
Onboarding 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.
Play-by-Play · Play 9
Play 9: Revisions
Apply the client's revision list in a single pass. Re-run QA after every revision deployment — client changes can introduce new technical issues.
Input
Output
Who
Time
Client revision list
Updated site with all revisions applied, QA re-passed
Manus 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).
Play-by-Play · Play 10
Play 10: Go Live
Connect the client's domain to the site and confirm the live URL is working with HTTPS. This is the only play that requires access to the client's domain registrar.
Input
Output
Who
Time
Client approval + domain registrar access
Site live on client domain with HTTPS
Onboarding Specialist
30–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-BY-PLAY · PLAY 10B
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.
Input
Live site URL (on client’s custom domain)
Output
Google Search Console verified, Google Analytics active, uptime monitor configured
Who Runs It
Onboarding Specialist
Time
20–30 minutes
Pass Criteria
GSC shows site as verified; GA4 shows live data; uptime alert configured
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-BY-PLAY · PLAY 11B
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.
Input
Live site URL on client’s custom domain
Output
GBP website field updated, NAP consistent across GBP and website, photos refreshed if needed
Who Runs It
Onboarding Specialist
Time
15–20 minutes
Pass Criteria
GBP 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.
Update to the new live URL: https://[clientdomain.com]
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):
Field
GBP Value
Website Value
Match?
Business name
Check GBP
Check footer/contact page
Must match
Phone number
Check GBP
Check header/contact page
Must match
Street address
Check GBP
Check contact page
Must match
City, State, ZIP
Check GBP
Check contact page
Must match
Business hours
Check GBP
Check contact page
Must match
Website URL
Check GBP
New live URL
Must 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
Handle client change requests efficiently using Manus. Every change goes through the same three-step process: understand the request, direct Manus, verify the result.
Input
Output
Who
Time
Client change request (email or call)
Updated live site, client confirmed
Client Success Quarterback
15–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 Type
Typical Manus Instruction
Time
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.
Operations
Tokens
All API tokens and credentials used across the Dotcom Design workflow. Update this page whenever tokens are rolled. Always refer here before starting a task that requires API access.
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.
Field
Value
Token
GVeoPzBYxrIp88l8bpVi6UdgdSd55aizl5IJ0SM2
Where to find it
Manus app → your profile → Share / Collaborate → copy the agent token
When to roll it
If you suspect it has been exposed; Manus generates a new one automatically when you click Roll
Last updated
March 2026
Cloudflare Workers / Pages API Token
Used to interact with the Cloudflare API — checking deployment status, triggering redeployments, and managing Workers and Pages projects.
Field
Value
Token
GnqlQAPESrB-3DHFYpRmeQ79EExyjye2FsYznMXy
Where to find it
Cloudflare Dashboard → My Profile (top-right avatar) → API Tokens → Edit token or Create Token
If exposed or compromised; go to API Tokens and click Roll on the token
Last updated
March 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.
Field
Value
Token
ghu_rrRKV8tzwJhdh8mfl6RUEuqW9bKamn3ob8Qu
Where to find it
GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic) or Fine-grained tokens
Required scopes
repo (full), workflow, read:org
When to roll it
If exposed or expired; generate a new token and update the Manus agent environment and this page
Last updated
March 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 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.