Frontend-вакансии в 2026-м пугают длиной: React, Vue, три бандлера, GraphQL, анимации, SSR, нативные оболочки, «желательно дизайн». Это вишлист. Нанимают человека, который закрывает экраны продукта: состояние, данные, ошибки, доступность, скорость списка — на конкретном стеке команды.
Ниже — карта junior / middle / senior без культа фреймворка: что реально спрашивают, что можно не учить в первый год, два примера готовности и как не соврать в skills. Резюме роли — в резюме frontend-разработчика. Вход — в как стать frontend-разработчиком.
Коротко:
- Ядро: HTML/CSS как инструмент продукта, JavaScript/TypeScript, один фреймворк, Git, отладка в браузере.
- Junior закрывает форму и список без сюрпризов. Middle — сложное состояние, перф, договорённость с API.
- Senior — границы UI-системы, качество потока, влияние на продукт, не «ещё знал Svelte».
- Не учите пять фреймворков параллельно. Второй — когда есть задача.
- Сверяйте must с вакансиями frontend и формулировки CV — в разборе резюме.
Как отделить must от шума
Соберите пять-десять вакансий одной линии: React-кабинеты, или Vue, или сильная вёрстка. Пересечения — учёба и резюме. Разовые «WebGL / RN / три.js» — не первый год, если вы не в эту нишу.
Next.js в каждом втором объявлении не значит, что без него нет работы. Значит, уметь объяснить клиентский рендеринг vs серверный, когда столкнётесь. Не дописывайте фреймворк, которым не собирали маршруты.
Дизайн «на уровне Figma-эксперта» для разработчика редко must. Читать макет, сетку, отступы, состояния — да. Подмена дизайнера — другая вакансия.
Ещё шум: «опыт с ИИ» без экрана. Встроить чат на готовом API — не frontend-грейд. Имеет смысл, если вы закрыли стриминг ответа, состояния ошибки, отмену запроса и доступность поля ввода. Иначе это строка для генератора CV. Смотрите, есть ли задача в вакансии, а не мода заголовка.
Мобильная оболочка и React Native — отдельная линия вакансий. Не кладите их в план первого года кабинетов. Если целевые роли — админки и кабинеты B2B, глубина форм даст работу быстрее, чем «ещё и мобилка». Когда линия сменится — ядро JS/TS переедет, оболочка учится на задаче.
Ядро интерфейса
Семантика и доступность базово: фокус, клавиатура, альты, не «сайт для зрячих мышью». CSS: поток, флекс/грид, адаптив, что ломается на узком экране. JS: события, асинхронность, замыкания в том объёме, в котором вы дебажите, не билет ЕГЭ.
TypeScript на рынке CIS 2026 часто must даже для junior кабинетов. Не обязательно гений типов: нормальные пропсы, ошибки API, без any везде. Дорожная карта языка — в TypeScript roadmap, фреймворка — в React roadmap.
Сеть: что такое CORS глазами фронта, статусы, отмена запроса, повтор. Состояние загрузки, пусто, ошибка — это продукт, не украшение. Инструменты: DevTools, Git. Сборка — на уровне «понимаю, зачем bundler», не свой webpack с нуля в первый год.
Доступность не «потом, если останется время». На junior достаточно: фокус виден, форма сдаётся с клавиатуры, ошибки связаны с полями, контраст не из макета «серое на сером». Это проверяют чаще, чем знание трёх стейт-менеджеров. Middle добавляет живые регионы, фокус-ловушки в модалках, не ломает зум. Если в вакансиях вашего круга a11y нет словом — всё равно держите базу: тикеты «не нажимается» часто про фокус и перекрытие, не про «мало React».
Junior
Собрать экран по макету, форму с валидацией, список с фильтром. Не ломать состояния. Понять чужой компонент и внести правку. Тесты хотя бы на логику формы — плюс, не всегда must.
Не обязан: писать свою дизайн-систему, настраивать SSR-платформу, оптимизировать LCP как отдельная ставка, знать три стейт-менеджера. Redux «потому что в вакансии» при одном учебном магазине — ловушка на интервью. Вопросы роли — в вопросах на собеседовании frontend.
Практический критерий junior: можете сесть за чужой кабинет и за день закрыть баг «в Safari обрезается кнопка» или «после ошибки форма не сбрасывается», не переписывая приложение. Если на любое отклонение от туториала вы теряетесь — ещё не junior рынка, ещё курс. Это не стыдно, это честный план на две недели одного экрана, а не на новый интенсив.
Доказательство: одно демо со ссылкой и честным README, что не сделано. См. как описывать проекты и резюме без опыта. Мёртвая ссылка хуже отсутствия: её проверяют.
Middle
Сложное состояние: мастер-деталь, черновики, оптимистичный UI без вранья пользователю. Договор с backend: контракт ошибок, пагинация, отмена, идемпотентный сабмит. Перф списка и тяжёлых форм: мемо, виртуализация — когда измерили, не «на всякий случай».
Оптимистичный UI без отката — частая ловушка. Показали успех, сервер ответил 409, пользователь думает, что заявка есть. Middle это ловит. Junior часто оставляет спиннер и надеется. Напишите в CV, если чинили именно такие расхождения — это сильнее «работал с хуками». Замер перфа тоже: «убрали лишние ререндеры после профиля» проверяемо, «оптимизировал производительность» — нет.
Ревью чужого UI: доступность, гонки, утечки подписок. Чужой легаси: не переписать с нуля в первый месяц, а вырезать кусок безопасно. Поставка: CI своего фронта, превью, понимание, кто режет бандл. Превью на каждый PR для удалёнки важнее идеального локального стенда: так обсуждают UI без созвона.
Fullstack-довес: простые эндпоинты, если закрываете вертикаль. Не заменяет ядро UI. См. навыки backend и резюме fullstack.
Senior
Границы: что в дизайн-системе, что в продуктовом коде, как не размножать кнопки. Метрики клиентского опыта, договорённости с продуктом и QA. Менторство, сложные компромиссы (срок / a11y / перф).
Новый фреймворк сам по себе грейд не повышает. Повышает умение остановить вредную моду и провести миграцию без театра. Рост — в чеклисте junior→middle и материале про middle→senior. Миграция «потому что в твиттере» без выигрыша для кабинета — это риск релиза, не рост. Умение сказать «не сейчас» здесь такое же senior, как и умение провести её, когда выигрыш ясен.