Orium Studios

PRJ-04Перевозка собак

Dog Transport USA: каждый пиксель на месте, всё под ним заменено.

Сайт компании по перевозке собак в Южной Флориде, пересобранный студией на её собственном коде. Владельцам их сайт нравился, и дизайн они сами утвердили, поэтому задача была обратной редизайну: сохранить то, что видит посетитель, с проверкой до пикселя по замороженной копии оригинала, и заменить всё, что под ним читают поисковик и ИИ-ассистент.

Клиент · Paw Super Stars LLC, Южная Флорида

dogtransportusa.com

PRJ-04-AОбъём работ

Чем занимается бизнес.

Перевозка собак от двери до двери. Компания базируется в Южной Флориде и работает по всей Флориде и по всем Соединённым Штатам: дальние и междуштатные поездки, индивидуальные и совместные перевозки, встреча и доставка в аэропорт, перевозка из приютов и к новым хозяевам, срочные поездки. Страницы маршрутов ведут из Флориды в Вермонт, Пенсильванию, Нью-Джерси, Нью-Йорк, Иллинойс и Калифорнию, а для транспортных компаний и для заводчиков у неё есть отдельные предложения.

Сайт, которым владельцы были довольны, у них был. Не хватало слоя под ним: того, что ранжирует поисковик и что читает ИИ-ассистент, прежде чем посоветовать перевозчика.

В чём сложность.

Сайт выглядел правильно, а машины читали его плохо. Замер до начала работ: заголовок главной был просто доменным именем, ни на одной странице не было описания, тегов Open Graph и структурированных данных, а на главной не было ссылки, по которой можно позвонить одним касанием. Шесть услуг были якорными ссылками на одной странице, поэтому поисковик видел одну страницу там, где было написано шесть.

Правило безопасности перед сайтом отказывало краулерам ChatGPT, Claude, Perplexity и Bing, а Googlebot страницу получал, так что ассистенты, у которых хозяин собаки мог спросить про перевозчика, прочитать сайт не могли. Редизайн не исправил бы ничего из этого и выбросил бы ту единственную часть, которой владельцы были довольны.

PRJ-04-BВыноски

Что построено.

У каждого пункта указан файл, который это доказывает. Пути даны относительно репозитория клиента.

A

Сайт, который утвердили владельцы, пересобран до пикселя и измерен

Оригинал заморозили до начала работ: скриншоты целой страницы и каждого раздела при ширине 390, 768 и 1440 пикселей, вычисленные стили и отданный сервером HTML. Новая сборка снимается при тех же трёх ширинах и сравнивается с оригиналом раздел за разделом, пиксель за пикселем. Каждое намеренное отличие записано в одном файле вместе с причиной, а всё остальное, что расходится больше небольшого допуска на сглаживание и перекодирование картинок, валит сравнение. Страницы, которых на старом сайте не было, собраны только из компонентов, чьи версии на главной это сравнение проходят.

Доказательство

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

B

Каждый факт о бизнесе живёт в одном файле, вместе с источником

Телефоны, регистрационный номер, адрес, цены, время в пути по маршрутам, список аэропортов, даты и количества не набраны ни на одной странице. Каждый из них это запись в одном файле, и у каждой записи есть источник: предложение, найденное слово в слово в замороженной копии старого сайта, датированный файл от клиента или снимок официальной страницы. Guard-тест на каждом прогоне сверяет каждую цитату с замороженным текстом, поэтому факт, «улучшенный» хотя бы на одно слово, его не проходит.

Доказательство

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

C

Неподтверждённый факт валит продакшен-сборку

Факт, который клиент не подтвердил, в превью показывается видимой заглушкой, а продакшен-сборку останавливает. Это держат четыре слоя, и каждый сначала упал на фикстуре и только потом попал в репозиторий: функция, читающая факт, в продакшене бросает ошибку; проверка собранных страниц не пропускает заглушку, незаполненный токен или картинку, названную по имени генератора изображений; guard-тесты по исходникам не пропускают похожее на факт число, набранное прямо в тексте, цитату, которой нет в доказательствах, и переведённую страницу, выпущенную раньше, чем её прочитал человек; а скрипт деплоя не выкладывает продакшен без отметки гейта именно для этого коммита и этой сборки.

Доказательство

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

D

20 страниц на английском, те же 20 на русском, одна на сербском

Сайт запустился с 41 страницей: 20 на английском, те же 20 на русском и одна сербская страница для заводчиков, собранные из одного набора компонентов и одного реестра страниц, из которого строятся и карта сайта, и пары hreflang. Русская или сербская страница могла выйти только после того, как перевод прочитал человек. После запуска добавились маршрут из Флориды в Нью-Йорк на обоих языках и одна страница на испанском.

Доказательство

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

E

Слова владельцев сохранены слово в слово

Если на старом сайте предложение уже было, новый сайт его сохраняет. Два отчёта о поездках, с заголовками, подписями и цитатами, на каждом прогоне сверяются с замороженным оригиналом, и одно изменённое слово проверку валит.

Доказательство

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

F

ИИ-краулеров снова пускают, и это измерено до и после

На старом сайте проверили каждый краулер с его собственным user agent, дважды: GPTBot, ClaudeBot, PerplexityBot и bingbot получали отказ 403, а Googlebot страницу получал. Та же проверка тем же методом после запуска: страницу получает каждый из них. Оба файла лежат в репозитории рядом, и скрипт сравнения отказывается сравнивать файлы, снятые разными методами или с разных сайтов.

Доказательство

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

G

Каждая страница подписана для поиска и для пересылки

У каждой страницы свой заголовок, описание, канонический адрес, теги Open Graph и картинка для превью, на каждой странице структурированные данные LocalBusiness, а там, где это уместно, ещё Service, FAQ и хлебные крошки. Сборка не пропускает индексируемую страницу, на которой чего-то из этого нет.

Доказательство

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

H

Статический сайт и один способ его выложить

Каждая страница собирается заранее, и ничего не рендерится в момент запроса. Сайт отдаётся с Cloudflare Pages, а выложить его можно только одним скриптом. Каждый ответ сервера называет коммит, из которого собран, поэтому проверить, та ли сборка сейчас отдаётся, можно одним запросом.

Доказательство

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

I

Переключение затронуло сайт и ничего больше

Почта компании осталась на том сервере, где была: запуск поменял записи для сайта, записи почты не тронул, и после переключения почту проверили. Старые адреса перенаправляют на новые страницы. Форма заявки доставляет письма в почту компании, и тестовая заявка, отправленная через живой сайт, дошла.

Доказательство

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

PRJ-04-PНа пути клиента

Что изменилось в устройстве бизнеса.

  1. 01 Находят, чинит эта сборка
  2. 02 Интерес, чинит эта сборка
  3. 03 Доверие
  4. 04 Контакт
  5. 05 Квалификация
  6. 06 Догон
  7. 07 Продажа

Находят · Интерес

  • Роботы ChatGPT, Claude, Perplexity и Bing, которым раньше отказывали, теперь получают сайт.
  • У каждой страницы, английских, русских и сербской, свой заголовок, описание и структурированные данные.

PRJ-04-CСправка

Где это живёт.

Репозиторий клиента. Собран Orium Studios после аудита 21 сентября 2026 года, работает на dogtransportusa.com с 2 октября 2026 года, и с запуска студия поддерживает его каждый месяц.

Что этот лист оставляет за кадром, и намеренно. Здесь нет ни трафика, ни позиций в поиске, ни числа заявок: сайт запущен 2 октября 2026 года, и цифра за первые недели была бы шумом, выданным за результат. Здесь нет ни контактов компании, ни регистрационных номеров, ни цен, не названы владельцы и не сказано, сколько стоила сборка. Испанскую страницу носитель языка ещё не читал. И это сайт, а не система: своей базы у него нет, и ни одна из инженерных цифр, которые этот сайт измеряет по трём системам, его не включает.

Система
Dog Transport USA
Репозиторий
dogtransportusa
Ремесло
Перевозка собак

Файлы, названные на этом листе

  • dogtransportusa · content/facts.ts, каждый факт о бизнесе вместе с источником
  • dogtransportusa · scripts/visual-diff.mjs, попиксельная сверка с замороженным оригиналом
  • dogtransportusa · scripts/gate-output.mjs, гейт на выходе сборки
  • dogtransportusa · scripts/deploy.mjs, единственный способ выложить сайт

Это не CRM, и общего кода с тремя системами у него нет. Общее у них правило, по которому они собраны: факт живёт в одном месте, и сборка падает, когда страница перестаёт с ним совпадать.

Ко всем работам