PRJ-04Dog transport

Dog Transport USA: every pixel kept, everything under it replaced.

The website of a dog transport business in South Florida, rebuilt by the studio on its own code. The owners liked their site and had approved its design, so the brief was the opposite of a redesign: keep what a visitor sees, measured to the pixel against a frozen copy of the original, and replace everything a search engine or an AI assistant reads underneath it.

Client · Paw Super Stars LLC, South Florida

dogtransportusa.com

PRJ-04-AScope of work

What the business does.

Door-to-door dog transport, based in South Florida and working across Florida and throughout the United States: long-distance and interstate trips, private and shared runs, airport pickup and drop-off, rescue and adoption transport, and last-minute journeys. Its route pages run from Florida to Vermont, Pennsylvania, New Jersey, New York, Illinois and California, and it has offers of its own for transport companies and for breeders.

The owners had a site they were happy with. What it lacked was the layer underneath: the parts a search engine ranks and an AI assistant reads before it recommends a transporter.

The problem shape.

The site looked right and read badly. Measured before any work began, the homepage title was the bare domain name, none of the pages carried a description, Open Graph tags or structured data, and the homepage had no tap-to-call link. The six services were anchor links on one page, so a search engine saw one page where six had been written.

A security rule in front of the site refused the crawlers behind ChatGPT, Claude, Perplexity and Bing while Googlebot was served the page, so the assistants a dog owner might ask for a transporter could not read it. A redesign would have fixed none of this, and it would have thrown away the one part the owners were happy with.

PRJ-04-BDetail callouts

What was built.

Each item names the file that proves it. The paths are relative to the client's repository.

A

The site the owners approved, rebuilt to the pixel and measured

The original was frozen before any work began: full-page and per-section screenshots at 390, 768 and 1440 pixels wide, its computed styles and its served HTML. The new build is screenshotted at the same three widths and compared with the original section by section, pixel by pixel. Every intentional difference is declared in one file with its reason, and anything else that differs by more than the small allowance for anti-aliasing and image re-encoding fails the comparison. Pages the old site never had are built only from components whose homepage versions pass it.

Proof

scripts/visual-diff.mjs, design/deviations.mjs, evidence/live-site-2026-09-23/

B

Every fact about the business lives in one file, with its source

Phone numbers, the registration number, the address, prices, route times, the airport list, dates and counts are not typed into any page. Each one is an entry in one file, and each entry carries its source: a sentence found word for word in the frozen copy of the original site, a dated file from the client, or a snapshot of an official page. A guard re-reads every quoted sentence against the frozen text on every run, so a fact improved by a single word fails it.

Proof

content/facts.ts, content/sources.ts, tests/guards/facts-sourced.test.ts

C

An unconfirmed fact fails the production build

A fact the client has not confirmed shows as a visible placeholder in a preview and stops the production build. Four layers hold that, and each was shown failing on a fixture before it was committed: the fact lookup throws in production; a scan of the built pages refuses a placeholder, an unfilled token or an image named after an image generator; source guards refuse a fact-shaped number typed into the copy, a quote that is not in the evidence, and a translated page set live before a person has read it; and the deploy script refuses production without the gate's record for that exact commit and build.

Proof

lib/facts.ts, scripts/gate-output.mjs, tests/guards/, scripts/deploy.mjs

D

20 pages in English, the same 20 in Russian, one in Serbian

The site launched with 41 pages: 20 in English, the same 20 in Russian and one Serbian page for breeders, built from one set of page components and one page registry that also writes the sitemap and the hreflang pairs. A Russian or Serbian page could go live only once a person had read the translation. Since launch a Florida to New York route has been added in both languages, and one page in Spanish.

Proof

content/pages.ts, tests/guards/pages-reviewed.test.ts

E

The owners' words, kept word for word

Where the old site already had a sentence, the new one keeps it. The two trip reports, with their headings, captions and quotes, are checked against the frozen original on every run, and a single changed word fails the check.

Proof

content/stories.ts, tests/guards/stories-verbatim.test.ts

F

The AI crawlers let back in, measured before and after

Tested on the old site with each crawler's own user agent, twice: GPTBot, ClaudeBot, PerplexityBot and bingbot were refused with a 403, and Googlebot was served the page. The same test by the same method after launch: every one of them is served the page. The two files sit side by side in the repository, and the comparison script refuses two files measured by different methods or against different sites.

Proof

reaudit/2026-09-23-before.json, reaudit/2026-10-02-after.json, scripts/reaudit-compare.mjs

G

Every page labelled for search and for sharing

Each page has its own title, description, canonical address, Open Graph tags and preview image, with LocalBusiness structured data on every page and Service, FAQ and breadcrumb data where they apply. The build refuses an indexable page that is missing any of them.

Proof

lib/seo/page-metadata.ts, lib/schema.ts, tests/guards/lib/seo-complete.mjs

H

A static site, and one way to deploy it

Every page is built ahead of time and nothing renders on request. The site is served from Cloudflare Pages, and the only way to deploy it is one script. Every response names the commit it was built from, so whether the new build is the one being served is one request away.

Proof

next.config.ts, scripts/deploy.mjs, scripts/gate-output.mjs

I

The switch moved the website and nothing else

The business email stays on the server it was already on: the launch changed the records for the website, left the mail records alone, and the mail was checked after the switch. The old addresses redirect to the new pages. The quote form delivers to the business inbox, and a test request sent through the live site reached it.

Proof

docs/LAUNCH_RUNBOOK.md, public/_redirects, functions/api/quote.ts

PRJ-04-POn the customer path

What changed in how the business works.

  1. 01 Discovery, repaired by this build
  2. 02 Interest, repaired by this build
  3. 03 Trust
  4. 04 Contact
  5. 05 Qualification
  6. 06 Follow-up
  7. 07 Sale

Discovery · Interest

  • The crawlers behind ChatGPT, Claude, Perplexity and Bing, refused before, are served the site.
  • Every page, the English and Russian ones and the Serbian page, has its own title, description and structured data.

PRJ-04-CReference

Where this lives.

The client's repository. Built by Orium Studios after the audit of 21 September 2026, live on dogtransportusa.com since 2 October 2026, and supported by the studio every month since launch.

What this sheet leaves out, on purpose. It quotes no traffic, no search ranking and no lead figure: the site went live on 2 October 2026, and a number from its first weeks would be noise presented as a result. It prints none of the business's contact details, registration numbers or prices, names neither owner, and does not say what the build cost. The Spanish page has not yet been read by a native speaker. And this is a website, not a system: it has no database of its own, and none of the engineering figures this site measures across the three systems include it.

System
Dog Transport USA
Repository
dogtransportusa
Trade
Dog transport

Files named on this sheet

  • dogtransportusa · content/facts.ts, every fact about the business, with its source
  • dogtransportusa · scripts/visual-diff.mjs, the pixel comparison with the frozen original
  • dogtransportusa · scripts/gate-output.mjs, the output gate
  • dogtransportusa · scripts/deploy.mjs, the only way the site is deployed

Not a CRM, and it shares no code with the three systems. What it shares with them is the rule they are built by: a fact lives in one place, and the build fails when a page stops agreeing with it.

Back to the drawing index

SHT-10Issued for construction

Start with the free check.

Three questions, one page the same day, and a 15-minute call if you want one. If the answer is that you do not need us yet, the page says that.

  • Where your business shows up, and where it does not, including what ChatGPT answers
  • The three biggest leaks on the path from the search to the booked job
  • The one thing to fix first, and whether you can do it yourself
  • What the next step would be, with its published price
Check my business →

About a minute · one page the same day · no card