A rubric for how AI answer engines read a website, shipped as a live front end with the scan engine still on paper.

Solo build2026Landing live, engine unbuilt

01The problem

Search stopped being ten blue links. Buyers now ask a model directly, and the model answers with whatever it believes about a brand, including errors it inherited from a stale third-party page. Running marketing for three companies, the same blind spot kept surfacing: there was no repeatable way to see what those models actually say about a company, in which languages, and what to change.

The workaround was to open each chatbot, type the same prompts by hand, screenshot the answers, then argue about whether the sample was representative. The monitoring tools appearing in this category were all English-first, so a brand selling into Chinese-language markets had no read at all on the models its customers actually use.

02What I built

A public product surface for a scoring rubric: a URL scanner, a zero-to-one-hundred agent-readiness score plotted against an industry reference band, plain-language findings instead of raw metrics, and a fix attached to every failed check. The rubric is the substance of the work. The site that presents it is live on its own domain; the engine that would produce the numbers is not.

  • A five-category rubric of sixteen checks, scoring a site against the standards agents actually use to consume it rather than against classic ranking signals.
  • Discoverability, content accessibility, bot access control, API and MCP discovery, and agent commerce protocols, each with its own weighted checks.
  • Nine answer engines in the coverage model with Chinese models treated as launch-day scope, plus bring-your-own-key for any compatible endpoint.
  • A fix layer: every failed check ships a remedy, escalating from advice to copy-paste-ready configuration snippets.
  • A public tool endpoint in the design, so agents could call the scoring service directly. Specified, never deployed, and it does not resolve.
  • A reference-range visual borrowed from blood-test reports: value, industry band, zone, status. It makes a score legible without a chart legend.
Schematic of the scanner screen A drawn, abstracted representation of the interface: a top bar with a URL field and a scan control, a score track with a shaded industry reference band and a single value marker, and a list of individual checks with pass, fail and not-applicable marks. All values are placeholder. AEOSEOCHECKER SCAN SCORE BAND, PLACEHOLDER CATEGORY CHECK STATUS SIXTEEN CHECKS, FIVE GROUPS

Drawn, not captured. The field at the top takes a URL, the band below it places a score against an industry reference range, and the rows are the individual checks with pass, fail and not-applicable marks. Every value shown is illustrative: no scan engine exists, so this screen has never produced a real score.

03As a product

Who buys it
In-house marketing and SEO leads who now have to answer "why does the model not recommend us" to a CMO, agencies that need a reportable metric for a service line clients already ask about, and brands selling into Chinese-language markets that Western tools do not cover.
Value
Replaces an unrepeatable manual audit — prompts typed into five chatbots and screenshotted — with one scored, repeatable scan that both names the gap and hands over the code to close it.
Positioning
The visible competitors are venture-funded and English-first. The deliberate wedge is the opposite end: Chinese-native queries as launch scope, plus a free public tool endpoint so agents themselves cite the service. A five-tier price ladder is designed on history depth and refresh frequency, never on query count.
Status
Not commercialised. Public landing live and stable on its own domain; scan engine, tool endpoint and billing specified but not implemented. No account has ever been created and no card has ever been charged.

04How it works

Stack
Next.js on the App Router with React and TypeScript, Tailwind with custom-property design tokens, hand-rolled component utilities, deployed on Vercel with the domain pointed at the project. Declared but unwired: a database and auth layer, a payments provider, an email sender, analytics, a bot-check gate and a cheap model pass for insight parsing.
Shape
One statically rendered page today. The scanner is a client component that owns its own input and state machine; on submit it runs a deterministic placeholder rather than calling an API that does not exist.
Designed scan pipeline, six levels, shipped branch marked A vertical flow in six levels. A submitted URL reaches a scan level that divides into two branches: a designed branch that carries on down the pipeline, and a shipped branch that ends at a fixture, because what runs today derives a score from the domain string rather than from a scan. The designed branch probes a site for sixteen machine-readable signals across five categories, fans the same brand prompts out across nine answer engines, and is reduced by a cheap model pass into a handful of findings, which would be served two ways: a public result page and a set of tools for agents. The first edge is annotated to say that nothing has ever crossed it, and the levels below the split are annotated as designed. Every band is drawn at equal width and none is measured: no scan engine exists, so nothing in this pipeline has ever been instrumented. SUBMIT One URL, bot-checked, daily NOTHING HAS EVER CROSSED THIS EDGE SCAN Designed path, or a fixture DESIGNED FIXTURE PROBE Sixteen signals per site DESIGNED: 16 CHECKS IN 5 CATEGORIES FAN-OUT Nine engines, pooled or own DESIGNED: 9 ENGINE ANSWERS SCORE Insights and fixes stored CHEAP MODEL PASS, NOT A RANKING FUNCTION SERVE Result page, or MCP tools PAGE MCP

Width uniform throughout — nothing in this pipeline has ever been instrumented, so every band is drawn at equal width and no quantity is claimed.

The branch that ends is the one that shipped. A visitor today gets a number derived from the domain they typed, and every level below the split is a specification — which is the honest reason no score on this product has ever been measured rather than mocked.

The decision I spent longest on

The obvious build was a classic SEO checker with an AI label on it. I scored against agent-consumption standards instead — bot-rule RFCs, API catalogues, tool server cards, agent skill indexes, the new commerce protocols — which are young, moving, and mostly unmeasured by anyone. It is a harder rubric to keep current and it dates faster. It is also the only version of the product that is not commoditised on day one.

05Retrieval architecture

This one runs backwards. Every other system in this chapter retrieves in order to answer; this one is about being retrieved — what a site has to do to be found, fetched, parsed and quoted by an engine that was never going to click a link. Read that way, the sixteen checks are not ranking signals. They are one machine reading path in order: find it, fetch it in a usable form, be allowed to use it, act on it, and transact.

The inversion is worth stating twice because it changes what each layer below is for: the material being retrieved is the customer’s, the index is unreachable by anyone, and the retrieving model belongs to somebody else. The half of the product that would measure any of this is designed and not built, and the rows below say so where it applies.

ModelInverted — the retrieving model is not ours. The engines being measured do the retrieving; the only model in the design is a cheap pass that reads what they answered.

Corpus
Two corpora, neither of them owned here. One is the customer’s own site as a machine sees it: robots rules, a sitemap, link headers, negotiated plain markup, structured metadata, an API catalogue, a tool server card, a skills index and the commerce protocols — sixteen signals across five categories. The other is what nine answer engines already believe about the brand, which exists only as whatever they say when asked. Nothing has been fetched from either: the scanner that ships today derives its score from the domain string.
Ingestion
Designed in two halves. A probe would fetch one submitted site behind a bot check at one free scan per address per day and test each of the sixteen signals directly. In parallel, a fan-out would send the same brand prompts to each enabled engine in the customer’s own languages, on pooled keys or the customer’s own. Neither half has run: no site has been probed and no prompt has been fanned out, so every number on the live page is a fixture rather than a reading.
Index
None. Nothing is stored, so there is nothing to pre-structure — the rubric is sixteen deterministic protocol checks, and a robots rule is either present at a known location or it is not, which makes a check a fetch and a comparison rather than a lookup. The database that would hold results is a declared dependency that no source file imports yet. The other half could not be indexed even in principle: nobody outside an answer engine can inspect its index, which is exactly why the measurement design is a black box that asks rather than a crawler that reads.
Query
None. The input is a URL, not a question. There is nothing to parse, disambiguate or expand, because a domain is already a complete instruction, and the prompts sent out to the engines are a fixed set generated from the brand and its target markets rather than typed by anyone. The only natural language in the system travels the other way: it is what the engines say back, and it arrives as material to be read rather than as a request to be understood. Building a query layer here would mean inventing an interpretation step for an input that has none, and the failure mode would be a product that guesses at what a customer meant by their own domain name.
Selection
Selection happens on the answers, not on the corpus. Every one of the sixteen checks is run — there is no shortlist, because the rubric is the point — so the reducing step is on the other side: a cheap model pass reads what nine engines returned and keeps three to five findings out of it, a wrong attribution, a language the brand does not appear in, a competitor holding the citation. The shaping is fixed rather than ranked: check results are grouped into five categories and mapped onto a nought-to-one-hundred score plotted against a reference band, and every failed check is paired with a remedy that escalates from advice to a copy-paste snippet. Nothing is ordered by relevance, so there is nothing to rerank; the order is the reading path itself. All of it is designed and none of it has executed.
Grounding
The rubric is the ground truth, and it was chosen so that it could be one: a check passes only if a named standard is actually present at a named location, which is a fact a customer can go and verify rather than a judgement to argue with. The model is deliberately kept off the scoring — it never decides what an engine believes, only phrases what an engine returned, which is why the measurement is a black box rather than a guess. The honest failure is one layer up and worth stating plainly: the shipped page states its fixtures in the present tense, so the product currently breaks the rule its own design is built on.

Present — this layer exists and runs.Absent by decision — the layer is not there, and the sentence beside it is the reason. Every one of the six is answered on every system in this chapter, so the rows can be read across pages.

06Numbers

Measure Figure Basis
Individual checks in the scoring rubric 16 Verified
Answer engines in the coverage model 9 Verified
Application source shipped 857 lines Verified
Build to live for the public landing 1 day Verified
Navigation routes still returning 404 4 of 4 Verified
Launch revenue target set before build USD 1,500 Projected
Time saved per brand audit, per language 15-45 min Projected

Verified — counted in the shipped source, in the commit log, and by request against the live domain on 2026-08-12. Projected — the revenue figure is a planning target recorded before launch: nothing has launched, nothing has been billed, and no customer exists. The time saving is modelled from the manual alternative at roughly five prompts per engine, not measured against a stopwatch or validated with a user.

07Timeline

  1. 2026-04 Definition day. Positioning, price ladder, engine coverage and the three differentiators were settled by arguing the idea through five adversarial framings, which killed an earlier plan to route the product through an existing agency client base.
  2. 2026-04 One sprint, four commits, same day: scaffold, landing, the reference-range visual, the scanner shell and the state-driven hero indicator.
  3. 2026-04 First deploy rejected. The host blocks any deployment whose commit author email is not on the team and reports it as an empty error; a repo-level identity override fixed it and became a standing first step.
  4. 2026-08 Still live on its own domain, unchanged since the sprint. Scan engine, tool endpoint and paid tiers still unbuilt.

08Looking back

What broke

The sequencing. A landing page that presents a scoring product in the present tense went live before anything could produce a score, and the sample figures on that page are hardcoded fixtures rather than results. Four of the four navigation routes it advertises still return 404. None of that is a bug report; it is a description of a product whose front end outran its engine and then stopped. The deploy failure was the memorable technical one only because it surfaced as an empty error message and had to be diagnosed through the deployments API.

What it changed

It forced a clean separation between day-job work and an independent product. I chose not to dogfood the tool on employer clients, which gave up the easiest early distribution in exchange for a brand that owes nothing to anyone. The rubric itself outlived the sprint as reusable thinking: audit a site for what a machine reader can consume, not for what a human ranking algorithm rewards.

Where it stands

Dormant since the initial sprint. Live landing, complete design system and rubric, no engine, no accounts, no revenue. The honest next step is one working scan, not another page.

Back to Top