RUEN
Обсудить проект

Продукт студии · 2026

RussiaOnline.wiki

Энциклопедия игрового мира: справочник с фасетными фильтрами, интерактивная карта, реестр номеров, настольный помощник и своя CMS.

просмотров за первый месяц
143,7 тыс
посетителей
25,0 тыс
трафика из поиска
92%

Открыть сайт — russiaonline.wiki ↗

Главная страница RussiaOnline.wiki

Энциклопедия игрового мира «Россия Онлайн» — ролевого проекта о жизни в современной Москве. Не «ещё одна вики», а база данных с инструментами: типизированные характеристики, фасетные фильтры, табличный режим, сравнение объектов, интерактивная карта и полноценная админка.

Сегодня на сайте 790 материалов, 170 меток на карте и 11 разделов.

Три дня до открытия

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

Одна сущность вместо десяти таблиц

Ключевое решение, которое сделало три дня возможными. Вместо параллельных таблиц «транспорт», «предметы», «работы» и так далее — одна модель Entry с полем типа и типизированным JSON-полем характеристик.

Отсюда следует всё остальное: один поисковый индекс на весь сайт, а не десять разных запросов; один редактор в админке вместо десяти форм с дублирующейся логикой; одна история правок и один SEO-слой. Новый тип контента добавляется описанием схемы, а не миграцией базы.

То, по чему реально фильтруют и сортируют, продублировано в индексированные колонки — база отсекает большую часть строк ещё до приложения.

Одно описание поля управляет пятью частями интерфейса

Схема характеристик — единственный источник правды. Описание поля задаёт сразу: форму в админке, инфопанель статьи, панель фасетных фильтров, колонку в табличном режиме и направление «лучше» в режиме сравнения.

Поставили полю признак «фильтруемое» — оно само появилось в панели фильтров раздела. Указали, что меньшее значение лучше, — режим сравнения начал подсвечивать лучшее в строке. Ручной вёрстки под каждый тип нет вообще.

Что показала Метрика за первый месяц

Сводка Яндекс Метрики: 143,7 тыс просмотров, 48,7 тыс визитов, 25,0 тыс посетителей

Яндекс Метрика, 20 августа — 25 сентября 2026: от запуска сайта до момента снимка.

143,7 тысячи просмотров, 48,7 тысячи визитов, 25 тысяч посетителей за чуть больше месяца. Время на сайте — 2 минуты 58 секунд, глубина просмотра — 2,95 страницы, отказы — 13,8%.

Самое важное здесь не общая цифра, а её состав: 131,9 тысячи просмотров из 143,7 пришли из поисковых систем. Это 92%. Прямых заходов — 8 113, переходов по ссылкам — 1 232, из социальных сетей — 269.

Так выглядит справочник, который поиск считает полезным: серверный рендеринг, предрассчитанный индекс, разметка и структура URL заложены с первого дня, а не прикручены потом.

Дизайн, иконки и наполнение — наши

Проект пришёл без макетов. Дизайн-система, палитра, типографика, иконки и содержимое сделаны нами целиком.

Палитра выведена из фирменного стиля самого проекта: тёплый графит вместо чистого чёрного, тёплый off-white вместо белого, фирменный красный как акцент. Обе темы — тёмная и светлая — описаны токенами: ни один компонент не знает конкретных значений цвета.

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

Отдельно — 47 трёхмерных иконок разделов, нарисованных под проект, и тысячи изображений материалов, приведённых к единому виду.

Интерактивная карта

Карта Москвы на Leaflet в плоской системе координат: не географические широты и долготы, а координаты игрового мира. 170 меток по категориям, фильтры и поиск, состояние в адресе страницы — ссылкой на конкретный вид можно поделиться.

Номерограм

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

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

Два решения, которые стоили отдельной работы:

  • Нормализация. Формат взят из нашей же статьи про игровые номера, а не из общих знаний о российских знаках. Человек вводит номер как придётся: латиницей, строчными, с пробелами и дефисами. В индекс кладётся только приведённая форма — иначе поиск не находит ничего, и сервис выглядит сломанным при полностью исправном коде.
  • «Почти» — отдельный исход, а не разновидность «найдено». Настоящие снимки показали, что когда распознавание ошибается, оно ошибается ровно в одном знаке. Отбрасывать такое молча значит выбрасывать почти всю пользу проверки. А ложное «найдено» усыпляет модератора: он привыкает доверять пометке и однажды пропустит подделку.

Помощник

Настольное приложение для государственных структур проекта: найти статью закона по номеру, увидеть состав и санкцию, скопировать формулировку. 5 680 статей 82 действующих законов трёх серверов, плюс отменённые с пометкой «утратил силу».

Два решения, которые определяют всё поведение:

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

В игру помощник не лезет и ничего в неё не печатает — это отдельное окно, формулировку вставляет человек.

Контент приходит сам

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

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

Как это стоит на сервере

nginx с TLS, сжатием и ограничением частоты запросов, приложение под systemd от отдельного системного пользователя без права входа, с NoNewPrivileges и ProtectSystem.

Выкладка автоматическая: пуш в основную ветку → проверки в CI → сервер сам забирает код своим ключом на чтение. Ключ выкладки в GitHub ограничен на стороне сервера: sshd выполняет только обёртку выкатки и игнорирует то, что просит клиент. Утёкший ключ не даёт ни оболочки, ни копирования файлов, ни проброса портов — только тот же деплой, который и так идёт на каждый пуш.

TypeScript · Next.js 16 · React 19 · Prisma 7 · SQLite · Tailwind CSS 4 · Leaflet · TipTap · Tesseract · Electron · Python · nginx · systemd