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.
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 |
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.
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.
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.
Tech Stack Overview
Every tool in the system — what it does, who uses it, and what it costs.
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.
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.
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.
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.
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.
Audit Standards
Every site must pass all four audits before it goes live. No exceptions.
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.
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.
Client Brief
Everything to collect on the onboarding call. The quality of the brief determines the quality of the first build.
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 Prompt Template
Copy this prompt into Manus, fill in every bracketed field, and submit. Do not submit with unfilled brackets.
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
Build a complete, production-ready website for [BUSINESS NAME],
a [TYPE OF BUSINESS] serving [SERVICE AREA].
Business details:
- Phone: [PHONE NUMBER]
- Email: [EMAIL ADDRESS]
- Address: [ADDRESS, or "service-area only — no physical storefront"]
- Hours: [BUSINESS HOURS]
- Year established: [YEAR, or omit if unknown]
Services to feature (in order of priority):
[LIST ALL SERVICES, one per line, primary service first]
Brand:
- Primary color: [HEX CODE or color description]
- Secondary color: [HEX CODE or color description]
- Tone: [e.g., "professional and trustworthy, with a friendly approachable feel"]
- Logo: [Attach the logo file, or note "no logo — create a text-based wordmark"]
Pages required:
- Home (hero, services overview, trust signals, testimonials, contact form)
- Services (section or page for each service listed above)
- About (company story, team, values, certifications)
- Contact (phone, email, address/service area, form, Google Maps embed)
- [ANY ADDITIONAL PAGES REQUESTED]
Content to include:
[PASTE ABOUT SECTION, TESTIMONIALS, AND ANY OTHER PROVIDED CONTENT]
Technical requirements — non-negotiable:
- Plain HTML5, CSS3, vanilla JavaScript only. No frameworks. No build tools.
- Must pass W3C validation with zero errors and zero warnings
- Must pass WAVE WebAIM accessibility audit with zero errors
- Must achieve a score of 100 on Google PageSpeed Insights (mobile AND desktop)
- Must pass AI Friendliness audit — include llms.txt, JSON-LD LocalBusiness
schema, sitemap.xml, and robots.txt
- All images in WebP format with descriptive alt text
- No render-blocking scripts or stylesheets
- Contact form via Formspree (endpoint: [FORMSPREE URL or "use placeholder"])
- Fully responsive on mobile, tablet, and desktop
Reference: [CURRENT WEBSITE URL or "no existing site"]
Additional notes: [SPECIFIC REQUESTS, THINGS TO AVOID, CLIENT CONTEXT]
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.txtfile exists and contains accurate business information - Confirm the
sitemap.xmlexists and lists all pages - Confirm the
robots.txtexists 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
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.
Launch Process
Six steps from audit-passing site to live URL with SSL. Under one hour for a standard build.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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 |
| 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
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
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
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
Cost Model
What the new infrastructure costs vs. the old model, and how the hosting margin works.
Monthly Infrastructure Costs: Old vs. New
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.
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.
Transition Plan
How we handle the 286 existing clients across Duda, WordPress, and Next.js + Payload.
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.
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.
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 |
QA Checklist
Interactive pre-launch checklist. Click each item to check it off. Progress is tracked below.
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
- 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
deferattribute - 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
- PageSpeed Insights score: 100 on desktop
- PageSpeed Insights score: 100 on mobile
- All images in WebP format
- All images have explicit
widthandheightattributes - Hero image uses
loading="eager"andfetchpriority="high" - All other images use
loading="lazy" - No render-blocking resources
- Google Fonts loaded with
preconnectanddisplay=swap
Accessibility
- 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
- 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.xmlpresent and validrobots.txtpresent and correctllms.txtpresent with complete business information- AI Friendliness audit: Pass
Functionality & Content
- 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