← все кейсы // кейс

Городской портал Новокузнецка: с Битрикса на собственный движок

Город НК — городской портал Новокузнецка с афишей, новостями, общением, играми и социальными возможностями.

Городской портал Новокузнецка: с Битрикса на собственный движок

01 Задача

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

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

02 Решение

Написан собственный движок на Node.js без внешней СУБД и без сборщика фронтенда: серверный рендеринг EJS, встроенный в Node модуль node:sqlite (WAL + полнотекстовый поиск FTS5), 41 таблица, миграции применяются автоматически при старте.

Что сделано сверх переноса:

Автосбор контента. Шесть источников новостей по RSS с определением кодировки (часть городских лент до сих пор в windows-1251), фильтр по географии — в очередь попадает только то, что относится к городу. Материал автоматически раскладывается по 12 рубрикам по словарям (происшествия, ЖКХ, транспорт, экология и т.д.), в черновике сохраняется ссылка на первоисточник. Отключения воды и электричества собираются с сайта водоканала и городской ленты, даты вычисляются из текста, просроченные не публикуются, текст переписывается нейросетью. Афиша собирается разбором микроразметки Schema.org с площадок города.

Живые городские данные. Погода и качество воздуха — Open-Meteo без ключей, с индексом AQI и режимом НМУ, кэш на диске. Карта заведений на Яндекс.Картах, координаты — через геокодер. Каталог организаций наполняется пакетно из OpenStreetMap: адрес, часы работы, категория определяется автоматически, обложка забирается с сайта заведения, описание пишет нейросеть.

Возвращаемость. Push-уведомления (VAPID, с автоочисткой мёртвых подписок), пятничный дайджест письмом, письмо об ответе на комментарий, напоминания о событиях, автопостинг новых материалов в Telegram и ВКонтакте. PWA — портал ставится на домашний экран.

Пользовательские разделы. Барахолка с антиспам-лимитами и автоистечением объявлений, вакансии с фильтрами по графику, опыту и району, справочники, «Фото недели» с голосованием, «Вопрос городу», народный рейтинг заведений с номинациями, городские оповещения.

Производительность и SEO. Все загружаемые изображения ужимаются и дублируются в WebP, разметка Schema.org на всех типах страниц, канонические адреса, Open Graph, карта сайта, RSS.

Отдельно — интеграция с игровой платформой «Грани Историй»: движок игр открывается внутри портала на его домене (см. другой кейс).

03 Результат

Портал полностью съехал с Битрикса: лицензия не нужна, весь стек — свободное ПО, база — один файл.
242 адреса проверены смоук-тестом после каждого обновления, все отвечают 200.
Библиотека изображений: минус 62 % при сохранении качества; вся отдача дополнительно в WebP.
Публикация новости — одна форма и одна кнопка вместо нескольких экранов админки Битрикса; правки доступны с телефона.
Лента наполняется без редактора: из 170 собранных ссылок за прогон фильтр отбирает городские, остальное отсеивает; отключения, афиша и погода обновляются по расписанию сами.
Новости автоматически разложены по 12 рубрикам — раньше всё лежало одной лентой.

Telegram
WhatsApp
ВКонтакте
MAX