<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Эрлан Капаров</title>
  <link>https://erlan.me/</link>
  <description>Head of Frontend @ Crypton Studio. Frontend-разработчик, подкастер, блогер.</description>
  <language>ru</language>
  <atom:link href="https://erlan.me/rss.xml" rel="self" type="application/rss+xml" />
  <item>
    <title>Из разработчика в лида: что меняется на самом деле</title>
    <link>https://erlan.me/blog/from-developer-to-lead/</link>
    <guid isPermaLink="true">https://erlan.me/blog/from-developer-to-lead/</guid>
    <description>Выглядит как повышение, а по факту это смена профессии. Про исчезнувшую обратную связь, невидимую работу и ошибки, которые я успел совершить.</description>
    <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
    <category>команда</category>
    <category>мысли</category>
    <category>процессы</category>
  </item>
  <item>
    <title>RAG на пальцах: бот, который отвечает по нашим документам</title>
    <link>https://erlan.me/blog/rag-chatbot-simply/</link>
    <guid isPermaLink="true">https://erlan.me/blog/rag-chatbot-simply/</guid>
    <description>Как устроен чат-бот поверх внутренних регламентов: эмбеддинги, векторная база, разбиение на куски. И где эта конструкция ломается.</description>
    <pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate>
    <category>ai</category>
    <category>архитектура</category>
    <category>гайд</category>
  </item>
  <item>
    <title>ИИ в разработке: где реально ускоряет, а где только кажется</title>
    <link>https://erlan.me/blog/ai-in-development-reality/</link>
    <guid isPermaLink="true">https://erlan.me/blog/ai-in-development-reality/</guid>
    <description>Внедрял ИИ-инструменты и как CTO, и как разработчик. Без восторгов и без отрицания - что показали исследования и какие правила пришлось ввести.</description>
    <pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate>
    <category>ai</category>
    <category>процессы</category>
    <category>команда</category>
    <category>мысли</category>
  </item>
  <item>
    <title>Infrastructure as Code глазами фронтендера</title>
    <link>https://erlan.me/blog/iac-for-frontend-lead/</link>
    <guid isPermaLink="true">https://erlan.me/blog/iac-for-frontend-lead/</guid>
    <description>«Давайте поднимем такое же окружение для нового клиента» — фраза, после которой выяснилось, что повторить его никто не может. Как мы переезжали на Terraform.</description>
    <pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate>
    <category>devops</category>
    <category>процессы</category>
    <category>мысли</category>
    <category>гайд</category>
  </item>
  <item>
    <title>CI/CD для фронтенда: конфиг, который можно забрать себе</title>
    <link>https://erlan.me/blog/frontend-ci-cd/</link>
    <guid isPermaLink="true">https://erlan.me/blog/frontend-ci-cd/</guid>
    <description>Порядок шагов, кэш зависимостей, multi-stage Docker и превью-стенд на каждый PR. Плюс грабли с переменными окружения, на которых обжигаются все.</description>
    <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
    <category>devops</category>
    <category>frontend</category>
    <category>процессы</category>
    <category>гайд</category>
  </item>
  <item>
    <title>Как измерять разработку и не скатиться в подсчёт строк кода</title>
    <link>https://erlan.me/blog/dora-metrics-in-practice/</link>
    <guid isPermaLink="true">https://erlan.me/blog/dora-metrics-in-practice/</guid>
    <description>Четыре метрики DORA, как я их собирал без дорогих платформ и почему их нельзя вешать на конкретного человека.</description>
    <pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate>
    <category>команда</category>
    <category>процессы</category>
    <category>devops</category>
    <category>мысли</category>
  </item>
  <item>
    <title>Code review, который не бесит</title>
    <link>https://erlan.me/blog/code-review-that-works/</link>
    <guid isPermaLink="true">https://erlan.me/blog/code-review-that-works/</guid>
    <description>Правила ревью, до которых я дошёл, пока курировал шесть десятков разработчиков. Про размер PR, скорость ответа и формулировки, от которых не хочется драться.</description>
    <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    <category>команда</category>
    <category>процессы</category>
    <category>мысли</category>
  </item>
  <item>
    <title>Что тестировать на фронте, а что не стоит</title>
    <link>https://erlan.me/blog/what-to-test-frontend/</link>
    <guid isPermaLink="true">https://erlan.me/blog/what-to-test-frontend/</guid>
    <description>Самый бесполезный тест, который я видел на ревью, был зелёным всегда. Разбираю, чем полезный тест отличается от теста ради процента покрытия.</description>
    <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
    <category>frontend</category>
    <category>тесты</category>
    <category>vue</category>
    <category>гайд</category>
  </item>
  <item>
    <title>Почему этот блог отдаёт почти ноль JavaScript</title>
    <link>https://erlan.me/blog/astro-islands/</link>
    <guid isPermaLink="true">https://erlan.me/blog/astro-islands/</guid>
    <description>Сайт, который ты сейчас читаешь, собран на Astro. Рассказываю про архитектуру островов и где я беру Astro, а где всё-таки Nuxt.</description>
    <pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate>
    <category>frontend</category>
    <category>архитектура</category>
    <category>производительность</category>
    <category>блог</category>
  </item>
  <item>
    <title>«Нам SSR или SPA?» - неправильный вопрос</title>
    <link>https://erlan.me/blog/nuxt-rendering-modes/</link>
    <guid isPermaLink="true">https://erlan.me/blog/nuxt-rendering-modes/</guid>
    <description>Режим рендеринга выбирается не на проект, а на маршрут. Как это делается в Nuxt и что обычно ломается при переезде со SPA.</description>
    <pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate>
    <category>frontend</category>
    <category>vue</category>
    <category>архитектура</category>
    <category>гайд</category>
  </item>
  <item>
    <title>Core Web Vitals: перевожу «сайт тормозит» на язык цифр</title>
    <link>https://erlan.me/blog/core-web-vitals-practice/</link>
    <guid isPermaLink="true">https://erlan.me/blog/core-web-vitals-practice/</guid>
    <description>LCP, INP и CLS простыми словами — что означают, какие пороги и чем я их реально чинил. Плюс про то, как INP заменил FID и почему это важно.</description>
    <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
    <category>frontend</category>
    <category>производительность</category>
    <category>гайд</category>
  </item>
  <item>
    <title>Почему Vite быстрый — и что делать, если он всё равно тормозит</title>
    <link>https://erlan.me/blog/why-vite-is-fast/</link>
    <guid isPermaLink="true">https://erlan.me/blog/why-vite-is-fast/</guid>
    <description>Как устроен dev-сервер на нативных модулях, зачем там esbuild и Rollup, и пять реальных причин, по которым Vite на проекте может еле шевелиться.</description>
    <pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate>
    <category>frontend</category>
    <category>инструменты</category>
    <category>производительность</category>
    <category>гайд</category>
  </item>
  <item>
    <title>WebSocket в проде: всё, что приходится дописать вокруг одной строчки</title>
    <link>https://erlan.me/blog/websockets-reconnect/</link>
    <guid isPermaLink="true">https://erlan.me/blog/websockets-reconnect/</guid>
    <description>new WebSocket(url) отлично работает на демо. Что к нему добавляется, когда чат должен пережить метро, лифт и сон ноутбука.</description>
    <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
    <category>frontend</category>
    <category>typescript</category>
    <category>архитектура</category>
    <category>гайд</category>
  </item>
  <item>
    <title>Автокомплит адресов: маленький компонент, огромные грабли</title>
    <link>https://erlan.me/blog/autocomplete-race-conditions/</link>
    <guid isPermaLink="true">https://erlan.me/blog/autocomplete-race-conditions/</guid>
    <description>«Иногда подсказки не совпадают с тем, что я ввёл» - баг, который невозможно воспроизвести по описанию. Разбираю его и ещё три из нашего сервиса адресов.</description>
    <pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate>
    <category>frontend</category>
    <category>typescript</category>
    <category>производительность</category>
    <category>гайд</category>
  </item>
  <item>
    <title>Формы на сорок полей: как не сойти с ума</title>
    <link>https://erlan.me/blog/complex-forms-validation/</link>
    <guid isPermaLink="true">https://erlan.me/blog/complex-forms-validation/</guid>
    <description>Схема вместо ручных if-ов, ошибки бэка в поля формы, зависимые блоки и черновики. Всё, до чего я дошёл на корпоративных заявках в четыре экрана.</description>
    <pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate>
    <category>frontend</category>
    <category>vue</category>
    <category>typescript</category>
    <category>гайд</category>
  </item>
  <item>
    <title>Таблица на 50 000 строк, которая не вешает браузер</title>
    <link>https://erlan.me/blog/big-tables-frontend/</link>
    <guid isPermaLink="true">https://erlan.me/blog/big-tables-frontend/</guid>
    <description>«Хочу листать, как в Excel» - реальное требование заказчика на биллинге. Что пришлось сделать, чтобы вкладка не отъедала гигабайт.</description>
    <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
    <category>frontend</category>
    <category>производительность</category>
    <category>vue</category>
    <category>гайд</category>
  </item>
  <item>
    <title>Слой API: как перестать писать try/catch в каждом компоненте</title>
    <link>https://erlan.me/blog/api-layer-frontend/</link>
    <guid isPermaLink="true">https://erlan.me/blog/api-layer-frontend/</guid>
    <description>В любом проекте старше года живёт три способа сходить на бэк. Показываю, как я это привожу к одному виду и что складываю на каждый уровень.</description>
    <pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate>
    <category>typescript</category>
    <category>frontend</category>
    <category>архитектура</category>
    <category>гайд</category>
  </item>
  <item>
    <title>Три приёма, после которых any почти перестал появляться в коде</title>
    <link>https://erlan.me/blog/typescript-without-any/</link>
    <guid isPermaLink="true">https://erlan.me/blog/typescript-without-any/</guid>
    <description>as const, satisfies и размеченные объединения. Без теории типов, на примерах статусов, конфигов и состояний загрузки.</description>
    <pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate>
    <category>typescript</category>
    <category>frontend</category>
    <category>гайд</category>
  </item>
  <item>
    <title>Pinia: когда стор нужен, а когда он лишний</title>
    <link>https://erlan.me/blog/pinia-stores-that-do-not-hurt/</link>
    <guid isPermaLink="true">https://erlan.me/blog/pinia-stores-that-do-not-hurt/</guid>
    <description>Два комментария, которые я пишу на ревью чаще всего: «зачем здесь стор?» и «почему это не в сторе?». Разбираю границу и три классические грабли.</description>
    <pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate>
    <category>vue</category>
    <category>frontend</category>
    <category>архитектура</category>
    <category>гайд</category>
  </item>
  <item>
    <title>Composables вместо миксинов: как я раскладываю логику по фичам</title>
    <link>https://erlan.me/blog/composables-instead-of-mixins/</link>
    <guid isPermaLink="true">https://erlan.me/blog/composables-instead-of-mixins/</guid>
    <description>Миксины нормально жили ровно до третьего миксина на компонент. Потом начинались вопросы, откуда взялся loading и почему mounted вызывается четыре раза.</description>
    <pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate>
    <category>vue</category>
    <category>frontend</category>
    <category>архитектура</category>
    <category>гайд</category>
  </item>
  <item>
    <title>Несколько Git-профилей на одной машине</title>
    <link>https://erlan.me/blog/multi-git-profiles/</link>
    <guid isPermaLink="true">https://erlan.me/blog/multi-git-profiles/</guid>
    <description>Если у тебя рабочий GitLab и личный GitHub (или наоборот), рано или поздно коммиты начнут улетать не с той почтой. Вот как это решить раз и навсегда.</description>
    <pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate>
    <category>гайд</category>
    <category>блог</category>
  </item>
  <item>
    <title>Настройка удобных алиасов в PowerShell для разработчика</title>
    <link>https://erlan.me/blog/ps-aliases/</link>
    <guid isPermaLink="true">https://erlan.me/blog/ps-aliases/</guid>
    <description>Гайд по настройке PowerShell-профиля: алиасы для пакетных менеджеров, быстрая навигация по проектам, шорткаты для Git и утилиты на каждый день.</description>
    <pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate>
    <category>гайд</category>
    <category>блог</category>
  </item>
  <item>
    <title>Привет, мир! Почему я наконец завёл блог</title>
    <link>https://erlan.me/blog/privet-mir/</link>
    <guid isPermaLink="true">https://erlan.me/blog/privet-mir/</guid>
    <description>Размышления о том, зачем frontend-разработчику вести публичные заметки и делиться опытом</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <category>мысли</category>
    <category>блог</category>
    <category>frontend</category>
  </item>
</channel>
</rss>