Проекты03 / 05

Неофициальный справочник по GTA 6, где факт — это запись, а не предложение: четыре статуса, цепочка источников, и статус нельзя сменить без причины с датой.

thecity.gg

Опровергнутое утверждение на Leonida Ledger: зачёркнутая формулировка, цепочка источников и история статусов
Одно утверждение целиком: формулировка, источники, что изменилось и когда.
Продукт
Неофициальный справочник по GTA 6; не связан с Rockstar Games и Take-Two
Роль
Разработка: контент-модель, сайт, админ-панель, хостинг
Период
Сентябрь – октябрь 2026
Стек
Next.js 16, React 19, TypeScript, PostgreSQL 17, Claude API, Docker
Онлайн
thecity.gg

Большинство сайтов о GTA 6 смешивают официальные факты, догадки по трейлерам и слухи в одном предложении, и читатель не может отличить одно от другого. Здесь они разделены. Каждое фактическое утверждение — отдельная запись с одним из четырёх статусов (подтверждено, сообщается, слух, опровергнуто), списком источников и тем, что подразумевал каждый источник на момент появления.

Статьи ссылаются на эти записи, а не перепечатывают их. Когда слух подтверждается или умирает, запись меняется один раз, и за ней следуют все страницы, ленты и виджеты, которые её цитируют. Опровергнутое утверждение остаётся на виду, зачёркнутым. Новая дата — это новое утверждение, а не правка.

Девиз — «факты с чеками», и это буквально: смысл чека в том, что утверждение можно проверить, не доверяя магазину.

  1. 01

    Утверждение как единица

    У каждого утверждения есть формулировка, статус, источники и история, в которую можно только дописывать. Правила держит код: последняя запись истории должна совпадать с текущим статусом, каждый шаг должен начинаться там, где закончился предыдущий, а ссылку на несуществующее утверждение сохранить нельзя.

  2. 02

    Всё выводится, ничего не ведётся вручную

    Журнал изменений, RSS, страница исправлений, сайтмапы, llms.txt и Markdown-двойник каждой страницы генерируются из одних и тех же записей, поэтому ничего нельзя тихо пропустить.

  3. 03

    Админка, которая публикует без деплоя

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

  4. 04

    Семь языков

    Английский, немецкий, французский, испанский, японский, китайский и хинди. Перевод идёт через Claude с одной главной инструкцией: не добавлять, не смягчать и не усиливать ни одно утверждение. Машинные переводы подписаны на странице как машинные.

  5. 05

    Намеренно открыто для машин

    llms.txt, JSON-эндпоинт на каждое утверждение, ленты по языкам, ClaimReview и другие структурированные данные на каждом типе страниц, а ещё встраиваемый виджет в sandbox-iframe, который не делит с хост-страницей ни кода, ни стилей.

Как это устроено

  1. Источники

    • Официальные каналы
    • Видео и прессаи что каждый подразумевал на тот момент
  2. Реестр

    • Утверждениестатус, источники, история
    • Валидациявесь сайт при каждом сохранении
  3. Цитаты

    • Плашки статусана страницах, по id
    • [[claim:id]]живой статус внутри текста
  4. Всё остальное

    • Журнал изменений, RSS, исправления
    • Виджеты, API, llms.txt
Реестр утверждений со счётчиками по каждому статусу
Реестр: между слухом и подтверждением одна строка, и их можно различить.

То, что обычно не попадает в портфолио. Всё это было на самом деле, и всё это есть в истории коммитов.

  1. Сбой 01

    Первая настоящая проверка реестра поймала сам реестр

    Симптом
    29 октября в реестре появилось утверждение, что Rockstar не называла композитора. Статус: подтверждено, сверено по двум постам. В тот же день Rockstar имя назвала.
    Причина
    Когда утверждение писали, всё было верно. По словам самого сайта, оно было правдой на момент внесения и перестало быть правдой в течение суток.
    Решение
    На следующий день оно перешло Confirmed → Debunked с датированной причиной, и я прошёл одно утверждение от начала до конца: страница утверждения, Markdown-двойник, JSON, журнал изменений, RSS, исправления, виджет, llms.txt, японская версия. Всё сошлось. Это первая настоящая проверка, а не послужной список, и она показывает, где гарантия заканчивается: факт, процитированный по id, следует за реестром, а факт, набранный в тексте поста, нет. Утверждения распространяются, проза — нет.
  2. Сбой 02

    Бюджет в 1,5 секунды и исправление, отозванное через 7,5 минуты

    Симптом
    Бюджет был заложен в дизайн: LCP меньше 1,5 с на медленном 4G. Ранние цифры выглядели отлично, потому что появились раньше фотографий.
    Причина
    Первое исправление оказалось неверным, и это зафиксировано: content-visibility не придержал запросы картинок галереи, и через 7,5 минуты коммит взял сказанное обратно и записал настоящие цифры. Сама фотография весит 17–27 КБ. Цена складывается арифметически: задержка, потом очередь за документом, двумя шрифтами и фреймворком.
    Решение
    Исправления, которое бы это спрятало, нет. Фото на первом экране выбрано осознанно, а промах записан. Замеры на сегодня: текстовые страницы 1,14–1,38 с, в пределах бюджета; страницы, которые начинаются с фотографии, 2,2–2,4 с, сверх него. Большинство сайтов такой промах закапывают. Здесь есть публичный след: неверное исправление, отзыв и заявленный компромисс.
  3. Сбой 03

    Защитная проверка, ставшая аварией

    Симптом
    Новостной пост мог упасть с HTTP 500.
    Причина
    Неверную ссылку на утверждение намеренно сделали жёсткой ошибкой, и для файлов это правильно: падает сборка, и до читателя ничего не доходит. Но новостные посты живут в Postgres и через сборку не проходят. Тот же throw переехал со времени сборки на время запроса, и опечатка стала живым 500.
    Решение
    Одно правило стало двумя. При рендере никогда не бросать исключение: отбросить ссылку и предупредить. При сохранении отказывать и подсказывать ближайший реальный id по расстоянию редактирования. Где выполняется проверка, важно не меньше, чем что она проверяет.
  4. Сбой 04

    Как сделать «полностью статичный» сайт редактируемым без деплоя

    Симптом
    За три недели до выхода игры без сборки могли меняться только новости. Каждое исправление в утверждении означало коммит и деплой.
    Причина
    Пересборка на каждую правку медленная и тяжёлая. Перенос всего в базу выбрасывает ревью и откат из git. И сборка не видит базу, поэтому пререндеренные страницы показывали бы старую версию поверх правки редактора.
    Решение
    Три слоя. Файлы в git — основа. Строка в Postgres с ключом по точному пути файла заменяет этот файл, поэтому остальная система не знает о существовании базы. Запросы обслуживает оверлей в памяти. От пререндера отказались, а вместе с ним и от «полностью статичного». Результат: 63 из 85 живых утверждений существуют только в Postgres, добавлены в течение двух дней после того коммита, без единой зависимости от CMS.
  5. Сбой 05

    Семь языков, один макет, ни одного веб-шрифта

    Симптом
    Японский, китайский и хинди должны были уместиться в дизайн на высоких узких капсах, плотном трекинге и line-height 0,92, не выходя из бюджета производительности.
    Причина
    CJK-веб-шрифт стоит мегабайты, а типографика, определяющая внешний вид, вредит этим письменностям: отрицательный трекинг их сминает, а line-height 0,92 сталкивает строки деванагари. Дальше шли допущения, верные только для английского: порядок слов в шаблонах, toLowerCase(), длина заголовка в символах.
    Решение
    Системные шрифты для каждого языка, более высокий line-height, никакого отрицательного трекинга, японские заголовки переносятся между фразами, ширина заголовка считается в пикселях, шаблоны не зависят от порядка слов. Замеренный результат: японская главная весит на 3 КБ больше английской при том же LCP. Работа свелась к удалению допущений, а не к добавлению шрифтов.

  • утверждений в реестреподтверждено 42, сообщается 34, слух 4, опровергнуто 5; 30 октября 2026
  • утверждения добавлено через админку за 48 часовбез коммита и без деплоя
  • URL в сайтмапахсемь языков, 43 новостных поста
  • японская страница против английскойLighthouse: 424 против 421 КБ
  • доступность, лучшие практики, SEOLighthouse на пяти страницах, каждый прогон; производительность 95–100
  • коммитов за 8 активных днейзелёные 22 из 23 прогонов CI: линт, типы, валидация всего сайта, обход JSON-LD. Юнит-тестов нет

Пульс проекта

Каждый коммит в репозиториях проекта на одной линии. Чем выше столбик, тем жарче было.

сент. 2026 г.окт. 2026 г.
  1. Движок за один вечер: утверждения, история, восемь типов страниц
  2. Семь языков с разницей в 31,5 минуты: инфраструктура, затем контент
  3. thecity.gg выходит на собственном домене
  4. Исправлен 500 в новостях, сайтмапы и редиректы
  5. Каждый раздел редактируется без деплоя

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

Написать бриф

Быстро отвечаю в WhatsApp и Telegram

Или спросите о нём цифровой разум
Следующий кейсLA Abramova