Most build services describe their process in four friendly verbs. This is the runbook, gates included.
1. Keyword and topic research
Search data for the domain's subject, deduplicated across exports and clustered by intent rather than volume. What matters is not the head term — it is the low-difficulty pockets, where a new site can actually win, and those are rarely the obvious keywords. Where a cluster returns AI Overviews and People Also Ask blocks, the pages targeting it get explicit question-and-answer structure, because that is how a page becomes the quoted source.
2. Entity model and scope
Every site is built around one repeated core page type — the entity. Rose varieties. Resorts. Stockyards. Top-level domains. Choosing it correctly decides whether the site has 15 genuinely distinct pages or 15 near-duplicates. Alongside it, the category split, the grouping scheme behind related links, and the guide list. Agreed in writing before anything is designed — the last point at which the full refund applies.
3. Logo, palette, and the contrast gate
The logo is drawn as SVG with letterforms converted to paths, so it renders identically with no font installed anywhere: primary lockup, reverse, compact, square mark, favicons at 32, 48, 180, 192, and 512 pixels, plus an .ico.
The palette comes from the logo and is tested for contrast before any content is written. The accent is usually the link colour, so an accent landing at 3.4:1 against a near-white background fails WCAG AA on every content page at once. Finding that after 70 pages exist means redoing the design; finding it on day two means changing a variable.
4. Fact research
Facts are gathered into structured research files with sources recorded. Anything unverifiable is flagged, then omitted or hedged explicitly. Where a Wikipedia or Wikidata article exists its URL is captured for the EntityMap's sameAs reference, and each is checked to confirm it resolves to a real article, not a redirect or a disambiguation page.
5. Long-form writing
Content is written against a house style brief: analytical rather than promotional, specialist terms defined inline on first use, parallel structure in lists, varied sentence length, a willingness to say something is a bad idea. Profiles run 1,000 to 1,800 words, guides 1,100 to 1,800, index introductions 900 or more, tool explainers 900 to 1,200. Nothing is thin, because thin is the failure mode of this category.
6. Generation
A Python build emits every page as clean HTML at a trailing-slash URL with root-relative paths. The generator writes the head — title, description, canonical, Open Graph, Twitter card, favicons, font preloads — plus JSON-LD, breadcrumbs, contextual links, the for-sale module, and the footer. CSS and JavaScript are separate minified cacheable files. No inline styles, no inline script but JSON-LD, no inline event handlers.
7. The verification gates
Two scripts run against the generated site. Both exit non-zero on failure; nothing ships until both pass.
- Zero broken internal links and zero missing assets.
- No thin pages. Every profile, guide, and index comfortably over 700 words.
- Head hygiene. One h1 per page, title within 65 characters, description within 158, canonical present, no duplicate titles or descriptions site-wide.
- Heading order. No skipped levels. The two that recur: a band of third-level headings directly under the h1, and footer headings set below where content ended.
- Colour contrast. Every palette pair at 4.5:1 or better, computed from the CSS variables — accent against page background, card background, tinted states.
- EntityMap validity. Required fields present, chunks within 600 characters, publisher name matching exactly, no dangling relations, every sameAs verified canonical.
- Lighthouse mobile. Performance, Accessibility, and SEO on one page of every template, with Largest Contentful Paint under 2.5 seconds, Cumulative Layout Shift under 0.1, Total Blocking Time under 200 milliseconds. The template that breaks is never the homepage.
- Image alt text. A specific alt on every image, no alt equal to a filename, no alt repeated site-wide, decorative inline SVGs hidden from assistive technology.
- Font discipline. Every declared font face preloaded, no page requesting an unpreloaded weight, bold pinned to a weight that ships.
- Package integrity. The deploy zip contains .htaccess, with contents at the archive root.
- Renders correctly. Screenshots of the homepage, a profile, a guide, a tool page and the contact page, over a local HTTP server rather than a file path, looked at by a person. No gate catches a layout that is valid but visually wrong.
One more step, the one most people skip: the gates are themselves tested. An alt attribute and an SVG title are deleted from a copy of the output and the verifier re-run to confirm it fails. A gate that has never failed is not proven to work.
8. Packaging
Two archives: a deploy zip with the site contents at the archive root, and a full project archive with the generator, content, research, and logo sources. A README covers deployment, reverting to a lander, and the warning that many unzip tools silently skip or rename dotfiles — which is how a correct .htaccess goes missing.
9. Live-host verification
Included with Authority and Flagship, an add-on for Foundation. A build that passes every local gate can still break in production, and the symptoms do not look like their cause:
- Is .htaccess actually being read? If the host sets AllowOverride None the file uploads fine and is silently ignored. A trailing-slash redirect is not proof — Apache adds those natively. The decisive test is a line of garbage at the top of the file: a 500 response means it is being read.
- Does the root serve the homepage rather than a directory listing?
- Does the canonical hostname redirect, and does HTTP upgrade to HTTPS?
- Does a missing URL return the styled 404?
- Are compression and cache headers on for HTML and fonts?
Then the performance test is re-run against the live URL. A local score is measured over loopback with no server configuration in play: it reads high and shows nothing about compression or caching.