Основной проект
КНИА «Кабар»
Национальное информационное агентство Кыргызстана: шесть языковых версий, свыше
100 тысяч материалов, не считая архива. Единственный разработчик проекта: бэкенд и инфраструктура
целиком на мне, фронтенд дорабатываю поверх вёрстки подрядчика.
01
Одна система, шесть языков
Киргизская, русская, английская, турецкая, китайская и арабская версии работают на общей кодовой
базе: всё, чем они отличаются, от раскладки блоков на главной до письма справа налево, вынесено
в настройки.
У каждой версии своя база и свой кэш, поэтому отказ одной не задевает остальные, а обновление
кода приезжает на все шесть одной командой.
02
Редакционная система
Материал собирается из блоков: текст, галерея с мультизагрузкой, видео, опрос, похожие публикации
по тегам, встроенные посты из соцсетей, и размечается категориями, регионами и тегами.
Материалы «Кабара» встраиваются на площадку китайского агентства «Синьхуа», его виджет стоит на
главной русской и английской версий.
03
Автопубликация пресс-релизов
Письма от пресс-служб ведомств превращаются в черновики материалов автоматически: проверка
подлинности отправителя по криптографической подписи письма, разбор вложений, определение языка,
затем языковая модель размечает заголовок, категорию, теги и подпись источника.
04
Производительность
Три слоя кэша: готовые страницы для анонимных читателей, кэш приложения на Redis и отдельное
пространство под изображения.
Изображения нарезаются на несколько ступеней под разные экраны и готовятся в момент публикации,
а не при первом обращении читателя. Ступени подобраны замером, а не на глазок: видно, какой
размер браузер выбирает на реальных телефонах с учётом плотности пикселей.
Core Web Vitals по данным реальных пользователей зелёные: на мобильных LCP 1,1 с, INP 83 мс,
CLS 0.
05
Локализация
Интерфейс переведён через gettext: единый набор строк в шаблонах и коде и шесть каталогов
перевода, по одному на язык. Ни одна подпись не зашита в разметку, поэтому новая формулировка
правится в одном месте, а не разъезжается по шести копиям шаблона.
Часть задач словарём не решается и сделана отдельно: даты выводятся в правильном падеже, маска
поля даты подписана на языке сайта, а не на языке операционной системы посетителя, арабская
версия получает зеркальную вёрстку.
06
SEO и доступность
Структурированные данные (статья, хлебные крошки, издание, видео), новостная и общая карты сайта,
ленты для агрегаторов, мгновенное уведомление поисковых систем о публикации и межъязыковая
разметка шести версий.
Сайт работает с клавиатуры и со скринридером: видимый фокус на интерактивных элементах,
корректная семантика заголовков и навигации, диалоги с перехватом фокуса, осмысленные описания
изображений.
07
Эксплуатация и защита
Проект развёрнут в трёх окружениях: дев, стейджинг и прод. Любая правка сначала обкатывается на
деве, потом на стейджинге, и только после этого попадает на боевой сервер. Почасовые резервные
копии баз и зеркало медиатеки уходят на отдельный сервер.
Защита от злоупотреблений собрана слоями: ограничение частоты запросов, автоматические блокировки
по поведению, ограничение числа соединений, белые списки типов загружаемых файлов.