Блог

Разборы из практики

Что делал, что измерил, что получилось. Flutter, Node.js, SEO и всё, что вокруг ЧатЯдра. Подписка — RSS.

Lighthouse 100/100/100/100 на Eleventy: бандл CSS, Метрика, которая не роняет оценку, и CSP без сюрпризов

Как этот сайт получил четыре сотни в Lighthouse и не потерял их после установки Яндекс.Метрики и заголовков безопасности. С цифрами, кодом и одной ловушкой, в которую легко попасть.

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

Как ЧатЯдро попало в RuStore за девять дней: что скрывают поля консоли, за что отказали на модерации, как собрать сборку без своего апдейтера и как правильно проверять, что внутри APK.

Медиа в чате: как библиотека видео похудела с 630 до 204 МБ, а фото с 3,8 МБ до 729 КБ

Разбор медиа-пайплайна ЧатЯдра: сжатие фото средствами браузера без библиотек, перекодирование видео до 720p на сервере с ffmpeg, превью первым кадром, кэш подписанных ссылок и проценты загрузки. С параметрами и цифрами до/после.

Проверка орфографии в PWA на Flutter: hunspell на сервере, своя таблица опечаток и разбор текста в два шага

В вебе у Flutter нет системной проверки текста. Оказалось, подчёркивание он рисует сам, а источник вердикта подключаемый. Как сделан сервис на nspell с русским словарём: замеры, кэши, почему встроенный подборщик не чинит «превед» и что нельзя отправлять на сервер.

Лента без машинного обучения: непросмотренное вперёд, окно в семь дней и не больше двух постов подряд от автора

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