Последние статьи
Мысли о разработке, технологиях и лучших практиках
Стабильность sitemap: почему lastmod никогда не должен быть new Date()
Распространённый баг в Next.js sitemap: lastmod ставится на текущую дату при каждом билде. Google видит каждую страницу как 'обновлённую' при каждом деплое, размывая приоритет обхода. Вот как это исправить.
Деплой Next.js: Vercel vs Fly vs Railway — реальные цифры из 3 клиентских проектов
Я деплоил Next.js в продакшн на Vercel, Fly.io и Railway. Реальные затраты, время холодного старта, опыт деплоя и компромиссы из живых проектов — не бенчмарки.
Миграция с Tailwind 3 на Tailwind 4: путь за 90 минут
Я мигрировал проект на Next.js с 40 компонентами с Tailwind 3 на Tailwind 4 за 90 минут. Вот пошаговый процесс, что сломалось, что пропустил кодмод, и один подводный камень, который стоил мне 20 минут.
Dependabot для соло-разработчика: сгруппированный конфиг, который я реально использую
Dependabot без конфигурации отправляет 30 PR в неделю и превращается в шум, который ты игнорируешь. Вот сгруппированный конфиг, который шлёт 2-3 PR в неделю с осмысленными обновлениями — настройка, которую я использую на каждом клиентском проекте.
Прогрессивное улучшение в эпоху RSC: что работает, что нет
Server Components изменили, какие паттерны прогрессивного улучшения жизнеспособны. Формы стали лучше, чем когда-либо. Клиентская интерактивность требует осознанных решений. Вот что я вынес из релиза RSC-приложений для реальных пользователей.
Куки-баннеры по-правильному (и по закону) — минимум для Словакии/ЕС
Большинство куки-баннеров либо нелегальны (предвыбранные чекбоксы, нет кнопки отказа), либо избыточны (энтерпрайз-платформы согласия для сайта в 5 страниц). Вот минимальный легальный сетап для малых сайтов в ЕС.
A/B-тестирование на малотрафиковом сайте: когда работает, когда карго-культ
У большинства маленьких сайтов недостаточно трафика, чтобы A/B-тесты давали реальные результаты. Вот математика, когда это работает, что делать вместо, и как не обмануть себя статистикой.
Оптимизация изображений в Next.js 16: что изменилось, за чем тянуться
Обработка изображений в Next.js значительно эволюционировала. Вот текущее состояние next/image, когда его использовать, когда пропускать, и оптимизации, которые реально двигают Lighthouse.
Генерация OG-изображений в Next.js 16 без бессонных ночей
Динамические OG-изображения делают ссылки профессиональными в Twitter и Slack. Вот сетап, который работает в продакшне без сюрпризов — и подходы, от которых я отказался.
Schema.org для сервисного бизнеса: JSON-LD, который должен быть в каждом портфолио
Большинство портфолио разработчиков шипят ноль структурированных данных. Вот 4 блока JSON-LD, которые помогают Google понять сервисный бизнес — с копипаст-кодом для Next.js.
Postgres vs DynamoDB vs SQLite для нового SaaS: честный дефолт
Каждому новому SaaS нужна база данных. У Postgres, DynamoDB и SQLite у каждого своя ниша. Вот когда выбирать каждую — на основе проектов, которые я реально шипил.
Server Actions в продакшне: 4 вещи, которые я больше не повторю
Server Actions упрощают мутации в Next.js. Но после шиппинга на трёх клиентских проектах я собрал четыре паттерна, которые выглядели нормально в разработке и ломались в продакшне.
После запуска: 30-дневный план стабилизации, который стоит потребовать от разработчика
Первые 30 дней после запуска — период, когда всплывают большинство предотвратимых проблем. Вот план по неделям, который я запускаю на каждом клиентском проекте — и что попросить у разработчика, если он не предлагает подобного.
App Router vs Pages Router в 2026: ещё актуальный вопрос?
App Router в Next.js стабилен уже больше двух лет. Pages Router по-прежнему работает. Если начинаешь новый проект или поддерживаешь старый — вот честное состояние дел в 2026.
Фича, от которой мы отговорили клиента — и почему он потом поблагодарил
Клиент хотел real-time совместное редактирование в MVP. Мы сказали нет. Через шесть месяцев после запуска он сказал, что это было лучшее совместное решение. Почему.
23 пункта предзапускового чеклиста, который я прогоняю перед каждым клиентским запуском
Каждый клиентский проект получает этот чеклист перед запуском. 23 пункта по безопасности, производительности, SEO, мониторингу и юридическим вопросам. Большинство занимают 5 минут. Вместе предотвращают 90% послезапусковых пожаров.
Выбор CMS для Next.js-сайта: Sanity, Payload или чистый MDX?
Я шипил Next.js-проекты со всеми тремя. Когда каждый из них — правильный выбор, что ломается на масштабе, и почему я по умолчанию беру чистый MDX для большинства solo-dev сайтов.
Когда Lighthouse CI упал на 20 баллов — 8 часов на поиск
Оценка производительности упала с 96 до 76 за ночь. Ни изменений кода, ни новых зависимостей. Причина: комбинация задержки Google Fonts с edge-сервера и изображения, которое не было lazy-loaded.
Как вести еженедельные демо с разработчиком, чтобы ничего не удивило на запуске
Еженедельное демо — самый эффективный инструмент для удержания MVP на курсе. Точный формат, который я использую с каждым клиентом: что показывать, что спрашивать, какие красные флаги отслеживать.
GDPR для небольшого SaaS: 5-часовой сетап, которого достаточно
Не нужен юридический аудит за €10K, чтобы быть GDPR-комплаентным. Минимально жизнеспособный сетап, который я реализую для каждого EU-ориентированного SaaS: что делать, что пропустить, что реально важно.
vercel.json, который молча сломал мой сайтмап на месяц
Одно правило редиректа в vercel.json заставило сайтмап возвращать HTML вместо XML. Google перестал индексировать новые страницы на 4 недели. Как я нашёл и отладил.
Техническое SEO, которое каждый разработчик должен шипить по умолчанию (и которое большинство пропускает)
12-пунктный чеклист технического SEO, который я прогоняю на каждом Next.js-проекте. Большинство разработчиков пропускают минимум 5 из них. Каждый пункт — менее 30 минут на реализацию.
Типизированные переменные окружения в Next.js без t3-env
40-строчный сетап для полностью типизированных, валидируемых переменных окружения в Next.js. Ноль зависимостей, рантайм-валидация при старте и IntelliSense везде.
Почему мой Stripe тест-режим прошёл, а продакшн сломался
Всё работало в Stripe test mode. Потом мы вышли в прод — и платежи молча зависли. Корневая причина: комбинация подписи вебхуков, idempotency keys и поля метаданных, которое тест-режим игнорирует.
Паттерны лендингов, которые реально двигают конверсию для B2B SaaS
Я построил 12+ SaaS-лендингов. Эти 7 паттернов стабильно поднимают конверсию — не потому что хитрые, а потому что убирают трение ровно в тех местах, где посетители колеблются.
Настройка Sentry, которая ловит полезные ошибки (а не шум)
Мой продакшн-конфиг Sentry для Next.js: фильтрация гидрационного спама, группировка по причине и алерты на то, что реально важно. С реальными примерами конфига.
QR check-in на масштабе: 12K+ сканирований без единого сбоя
Как я построил систему QR check-in, которая обслуживает площадки на 3,000 мест с офлайн-поддержкой, JWT-подписью билетов и временем сканирования до 200мс. Архитектура, код и продакшн-числа.
next-intl vs next-i18next: стоимость миграции, которую я реально заплатил
Я мигрировал продакшн Next.js сайт с next-i18next на next-intl. Почему, сколько заняло, что сломалось и стоило ли оно того.
Почему ваш Upwork MVP застрял (и что делать вместо этого)
Модель найма Upwork ломается для MVP. Почему это происходит, паттерн за каждым застрявшим проектом, который я спасал, и альтернатива, которая реально выпускает.
Real-time WebSocket паттерны для тикетинга и чата: продакшн-плейбук
Паттерны из двух продакшн-систем: тикетинг-платформа с 12K одновременных выборов мест и командный чат с индикаторами присутствия. Что работает, что нет, и архитектура за обоими.
Vercel vs Cloudflare vs self-hosted Next.js: таблица стоимости и DX в 2026
Реальные затраты из 3 клиентских деплоев. Где Vercel стоит своих денег, где Cloudflare экономит, и когда self-hosting имеет смысл. Цифры, не мнения.
Что выпускать в MVP, а что урезать — с 5 реальными примерами
Самое сложное в скоупинге MVP — не сборка, а решение, что не собирать. Пять реальных проектов, пять списков урезаний и фреймворк, который я использую для решений.
Баг, который проявился только на iPhone SE
Чекаут, который работал на каждом устройстве, кроме 4-дюймового экрана. Как тач-таргет 44px, фиксированный футер и адресная строка Safari сложились в баг, который никто не мог воспроизвести в офисе.
Supabase vs Railway vs Neon: ценовые пороги и где каждый начинает кусаться
Три варианта хостинга Postgres, на которых я отгружал в продакшн. Где каждый дешевле, где дорожает, и стоимость миграции, о которой никто не говорит.
Нативное приложение или мобильный веб: дерево решений для фаундера
Не технологический спор — бизнес-решение. Когда натив стоит своих денег, когда веб-приложения достаточно, и 5 вопросов, которые делают ответ очевидным.
Красные флаги при найме разработчика для стартапа
Семнадцать тревожных сигналов на созвонах, в портфолио и договорах — те, что основатели обычно замечают задним числом и жалеют, что не разглядели раньше.
Индекс в Postgres, на поиск которого ушло 3 дня
Запрос дашборда, который должен был отрабатывать за 40ms, занимал 6 секунд. Фикс — одна команда CREATE INDEX. Найти, какая именно, заняло три дня.
Offline-first React Native: как мы сохранили выбор мест плавным на поезде с 3G
Архитектура, которая сделала пикер на 12K мест мгновенным при 0 полосках сигнала. Синхронизация состояния, оптимистичные записи, очередь, переживающая kill приложения, и крайние случаи, о которых никто не предупреждает.
Как правильно отгрузить i18n в Next.js: роутинг, SEO и грабли RSC
Ошибки i18n, которые проходят код-ревью и ломаются в продакшне — петли middleware, canonical-теги, ловушки hreflang и крайний случай сериализации RSC, который молча съедает переводы.
Три спасённых проекта в цифрах: во что реально обошёлся «дешёвый разработчик»
Три реальных проекта, которые пришли ко мне сломанными. Что пошло не так, сколько стоило починить, и математика, которая показывает, почему «дешёвый» вариант оказался самым дорогим.
Я удалил rate limiting с контактной формы. Вот почему.
Rate limiting — рефлекс. На реальной портфолио-форме он ничего не решил, добавил зависимость от Redis и сломал легитимные отправки. Честная математика, когда его пропускать.
Stripe vs Lemon Squeezy vs Paddle: реальные трейдофы из отгрузки трёх чекаутов
Различия в налогах, ценах и интеграциях, которые всплывают только после первых 100 платящих клиентов — и режимы отказа, уникальные для каждого.
Что реально покупают €12K: построчная разбивка стоимости реального MVP
Не гипотетика. Реальный проект, реальные статьи расходов, реальные часы. Куда уходят деньги, когда вы нанимаете solo full-stack разработчика для MVP с нуля.
Бриф основателя: что отправить разработчику, чтобы не потерять 8 недель
Шаблон одностраничного брифа, который экономит основателям недели несогласованной работы. Что включить, что оставить за рамками, и три вопроса, важнее любого Figma-файла.
React Native vs Flutter для стартапа из двух основателей: ответ без священной войны
Оба отгружают. Оба нормальные. Реальные факторы решения — это найм, покрытие вебом и текущие навыки команды, а не сравнение фреймворков, которое ты найдёшь на Reddit.
От Figma до 8K установок: как мы отгрузили React Native-приложение E7 Shop
Нативное iOS + Android приложение-компаньон для ивент-тикетинга. 60fps выбор мест, офлайн QR-кошелёк, рейтинг 4.8★. 10 недель, React Native + Expo.
Как описать MVP так, чтобы он реально вышел за 12 недель
Ошибки в описании, которые превращают 12-недельный проект в 6-месячный, и письменные артефакты, которые держат проект на рельсах с первой недели.
Вебхуки Stripe в продакшне: 6 режимов отказа, о которых никто не предупреждает
Паттерны отказов, которые всплывают только после первых 1000 оплаченных событий — баги подписей, штормы ретраев, молчаливые 200-ки, и фикс для каждого.
Архитектура билетной платформы на 12K билетов за событие: внутри E7
Полный стек ивент-тикетинга — интерактивные карты залов, Stripe-чекаут, WebSocket в реальном времени, QR-чекин. 12 недель от нуля до продакшена.
Next.js vs Remix в 2026: сравнение, которое реально имеет значение сейчас
Срач 2023 года закончен. После слияния Remix в React Router 7 и стабилизации Next.js RSC честные различия меньше, чем думает интернет — но они всё равно не те, что нужны большинству основателей.
Как я выбил Lighthouse 98 на трёхъязычном сайте на Next.js
Оптимизации, которые реально подвинули баллы, две, на которые я потратил время зря, и то, о чём большинство Lighthouse-туториалов тихо врут.
Как мы пересобрали Etalon Translation за 6 недель: +34% конверсии и Lighthouse 98
WordPress-сайт агентства → Next.js 15. Три локали, MDX-блог, 0.8s загрузка. Полная история: что вырезали, что удивило, реальные цифры.
Соло full-stack разработчик vs агентство vs фрилансер: честное сравнение
Цена, скорость, риски и подходящий формат для трёх вариантов, между которыми выбирает каждый основатель. Где каждый выигрывает, а где сжигает бюджет.
Фиксированная цена vs почасовая: почему я беру по вехам
В каждом почасовом счёте спрятан второй счёт. Аргументы за фиксированную цену, когда почасовая реально выигрывает, и как продавить разработчика на честную фиксированную цену.
Сколько на самом деле стоит кастомный SaaS MVP в 2026-м
Построчный разбор реального MVP за €15K. Без «зависит от задач», без наценки агентства, без тумана — реальные цифры за 10-недельным проектом.
Четырёхстрочный спам-фильтр, который заменил reCAPTCHA на моей контактной форме
Honeypot + time-floor + лимиты размера. Без стороннего скрипта, без сноски о приватности, без галочки. Два месяца работы и ноль спама в инбоксе.
Server Components: трейдоф, который укусил
Короткая история про границы сериализации, иконки в props и как я дебажил ошибку Next.js без стектрейса.
Hello, world — почему я снова пишу
Зачем этот блог: короткие заметки из реальных проектов, вещи, которые хотелось бы знать раньше, и трейдофы, которые редко попадают в туториалы.