Обновить

Фронтенд

Сначала показывать
Порог рейтинга
Уровень сложности

Чёрт, опять этот CSS. Коллекция кейсов, когда CSS бесит

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.7K

Привет, Хабр!

CSS часто преподносит сюрпризы, способные запутать даже опытных разработчиков. Я понимаю их раздражение. Тут всё закономерно.

Как человек, хорошо знающий CSS, могу сказать, что он умеет удивлять. Причём так, что в замешательстве оказываются даже опытные разработчики. Поэтому я понимаю разные мемчики по поводу CSS. Они возникли не на пустом месте.

И всё же, несмотря на все потраченные нервы, CSS мне нравится. Поэтому хочется, чтобы разработчики реже тратили время на борьбу с его особенностями. Изменить стандарты языка не в моих силах, но я смог собрать несколько неочевидных моментов, которые в своё время поставили в тупик меня и моих коллег.

Пришёл поделиться с вами. Давайте посмотрим, что я подготовил.

Читать далее

Новости

Испытываем подход от CEO Y Combinator — запускаем ИИ фабрику работяг на базе Claude Code

Уровень сложностиПростой
Время на прочтение17 мин
Охват и читатели5K

Неделю назад по сети пронеслась новость о том, что генеральный директор Y Combinator Гарри Тан с помощью ИИ Claude пишет десятки тысяч строк кода ежедневно и имеет виртуальную команду из 10+ ролей. Я решил проверить насколько это решение действительно рабочее и не является ли оно очередным хайпом. В этой статье мы разберемся, что за инструмент использует CEO Y Combinator и в чем его особенности. А также попрактикуемся в его использовании.

Читать далее

37 советов и приемов по написанию качественных тестов для фронтенда

Уровень сложностиПростой
Время на прочтение30 мин
Охват и читатели4.5K

Мне нравится писать тесты. Написание теста и последующее обновление кода для его прохождения — всегда увлекательный процесс.

Но нет ничего хуже, чем выяснение того, что проверяют существующие тесты (раньше я сам часто был автором таких тестов).

Представляю вашему вниманию мои советы по написанию высококачественных тестов для фронтенда.

Читать далее

Долг понимания — скрытая цена кода, сгенерированного искусственным интеллектом

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели8.4K

“Долг понимания” (comprehension debt) — это скрытая цена, которую человеческий интеллект и память платят в результате чрезмерной зависимости от ИИ и автоматизации. Для инженеров это особенно актуально в сфере разработки агентных систем.

Когда команды активно используют инструменты для генерации кода с помощью ИИ, возникают определенные издержки, которые не отражаются в показателях производительности. Особенно это касается случаев, когда проверка всего кода, генерируемого ИИ, становится утомительной. Эти издержки накапливаются постепенно, и в конечном итоге их приходится оплачивать — с процентами. Это называется “долг понимания” или “когнитивный долг”.

Читать далее

Node.js → Rust: 5-10x ускорение без знания Rust

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели11K

На своём MacBook M4 я не замечал проблем. Два скрипта на Node.js 18 собирали информацию по проекту, обходили файлы, считали строки, агрегировали данные и отрабатывали за пару секунд. Жить можно.

А потом на созвоне коллега расшарил экран. У него удалённый рабочий стол, Intel Core i5-1035G1, 8 ГБ RAM. Он запустил тот же скрипт, и мы оба смотрели на терминал восемь секунд. В тишине.

Читать далее

Операционная система Анна версия 0.0.60

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели9.3K

Решил написать продолжение к предыдущей моей статье Операционная система Анна. Назвал "операционной системой" скорее как отсылку к фильму "Она" (Her) - понимаю, что это, конечно, не ОС в классическом смысле, так что прошу воспринимать это как художественное название, а не технический термин. Ну и вот недавно моя жена затеяла вести расходы в Google Sheets. Увидел её мучения о том, как создать формулы, листы и т. д. В итоге ей посоветовал поставить Анну на её домашний компьютер. При установке она настроила интеграцию с Google Sheets. Потом я ей посоветовал попросить Анну сделать следующее:

Читать далее

Как я написал Telegram-бота для поиска UPC-кодов релизов: 10 платформ, один парсер и много боли

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели6.4K

У каждой музыкальной платформы свой API, свои баги и свой способ спрятать UPC-код релиза. Я написал Telegram-бота, который находит UPC и ISRC по ссылке с любой из десяти платформ — от Spotify до Яндекс Музыки. Рассказываю про архитектуру, парсинг десяти форматов ссылок, нестабильный Spotify API и боль работы с недокументированными эндпоинтами.

Подробнее

Как React обновляет UI: trigger → render → commit

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели6.2K

Когда говорят «React перерендерился» — обычно имеют в виду что-то расплывчатое. Новичкам это слово объясняет всё и ничего одновременно. В официальной документации процесс описан точнее: trigger → render → commit. Давайте разберём, что происходит на каждом этапе — без магии, зато с Fiber, флагами и браузерным пайплайном.

Читать далее

URL как источник правды в Next.js App Router

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели5.9K

Когда разработчик приходит в Next.js из обычного React SPA, он часто тащит с собой старую схему мышления. Есть поле ввода, значит будет useState. Есть поиск, значит будет useEffect. Есть список данных, значит будем следить за изменением состояния и вручную запускать новый запрос.

На маленьком экране это вроде работает. Но очень быстро выясняется, что в приложении уже не одно состояние, а три. Есть значение в поле, значение в URL, данные, загруженные по одному из этих значений. Потом появляется четвёртая проблема. Кнопки Back и Forward начинают вести себя странно. Ссылкой на результат поиска неудобно делиться. А отладка превращается в угадайку, потому что не до конца понятно, что именно сейчас считается главным источником правды.

В App Router это решается проще. Если фильтр является частью состояния страницы, его логично держать в URL. Тогда схема становится прямой: URL изменился -> сервер прочитал searchParams -> выполнил fetch -> отрендерил новый список. В этот момент Next.js начинает восприниматься как понятный инженерный инструмент.

Читать далее

Проектирование бесплатного API с пользовательскими данными: почему я отказался от jsonplaceholder

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели5.9K

Я периодически провожу технические интервью и смотрю pet-проекты кандидатов.

И почти всегда вижу одну и ту же картину:

Используется localStorage или заглушки вроде jsonplaceholder.

Я прекрасно понимаю, почему так происходит:

Читать далее

Разработка мигратора кода с использованием ИИ на примере миграции с Linaria на CSS Modules

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.2K

Всем привет!

Меня зовут Михаил Витик, я работаю в Лемана Тех техлидом в сервисной команде, которая поддерживает команды разработки сайта Лемана ПРО.

Однажды у нас возникла задача — массово переписать стили во множестве проектов. При более близком рассмотрении эта рутинная задача оказалась типичным инженерным болотом: много однотипной работы, высокая цена ошибок. А главное, огромные временные затраты.

Эта задача и привела меня к идеям автоматической миграции, codemod‑трансформеров и использованию ИИ. В этой статье подробно расскажу о практическом опыте разработки автоматического мигратора кода на примере миграции с Linaria — CSS‑in‑JS решения — на CSS Modules.

Читать далее

Higher-Kinded Types в TypeScript

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели4.5K

TypeScript прочно закрепился в роли основного языка для типизированной разработки на JavaScript. Его система типов предоставляет множество мощных инструментов: дженерики, условные типы, продвинутый вывод типов – всё это позволяет строить надёжные и масштабируемые приложения. Однако даже в таком гибком языке есть ограничения. Одно из них – отсутствие нативной поддержки типов высшего рода (Higher-Kinded Types, HKT). Эта концепция, хорошо знакомая разработчикам на Haskell или Scala, позволяет абстрагироваться не только от конкретного типа (например, string или number), но и от типа-конструктора (например, Array, Promise, Set). Несмотря на то, что запрос на добавление HKT в TypeScript остаётся открытым уже много лет (issue #1213), сообщество научилось эмулировать эту возможность с помощью существующих средств. В этой статье мы разберём, что такое HKT, зачем они нужны в реальных проектах, и как их можно реализовать в TypeScript уже сегодня.

Читать далее

should render — и что? Как мы перестали тестировать разметку и начали тестировать поведение

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели3.2K

Пришёл в команду, открыл тесты — should render, снэпшоты, CSS-классы в ассертах. CI зелёный, покрытие растёт. Всё хорошо? Нет. Тесты падали при любом рефакторинге, но пропускали реальные баги в логике. Ложная уверенность, которая хуже отсутствия тестов. И проблема была не в отдельных файлах — а в самом инструменте, который провоцировал так писать.

Что не так с инструментом?

Ближайшие события

Headless CMS на Go — самая минималистичная система управления сайтом

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7.3K

Когда очередной лендинг требует «просто принимать заявки и показывать новости», разработчик оказывается перед выбором: поднять Laravel/Django с кучей зависимостей, купить SaaS-подписку, или написать что-то своё. Я выбрал третий путь — и это оказалось интереснее, чем я ожидал.

В этой статье разбираю архитектурные решения, которые принял при написании LightHeadless — минималистичного headless CMS на Go.

Читать далее

Frontend Status: свежий дайджест фронтенда и AI — 27.03.2026

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели4.3K

Привет!

Это юбилейный десятый выпуск Frontend Status — дайджеста по фронтенд-разработке и AI.

В этом выпуске:

📺 TanStack AI генерирует картинки, а не только чат-ботов.

🤖 Почему ИИ выдаёт глупый код — и трёхуровневая архитектура, которая это исправляет.

🎨 Математическая модель masonry-раскладки на Flexbox — с алгеброй, а не «работающим примером».

⚡ TypeScript 6.0, обновления безопасности Node.js, петиция против AI-кода в ядре Node.js и Kafka из Node.js по-взрослому.

⚛️ TanStack улучшил пропускную способность SSR в 5 раз, а Strawberry Browser переписал 130 000 строк с React на Svelte за две недели.

🅰️ Angular выпустила официальные скиллы для AI-агентов.

💚 Компоненты визуализации звука для Vue.js на Web Audio API.

…и многое другое.

Читать

Вайбкодинг за выходные: как ручной QA-инженер собрал свой «Тиндер для кино» с помощью ИИ

Время на прочтение4 мин
Охват и читатели7K

Сразу сделаю чистосердечное признание: я ручной тестировщик. Я не умею писать код с закрытыми глазами, и да — эту статью мне тоже помог структурировать ИИ по моим промптам. Зато я умею декомпозировать задачи, выстраивать логику продукта и ломать то, что уже написано.

Меня бесила ситуация, когда я не могу подобрать себе фильм для просмотра. Обычно, у фильмов только скудное описание и рейтинг. Чтобы посмотреть трейлер нужно умудриться его найти. Да, можно прочитать отзывы, но там в основном рецензии на пару минут чтения

Я решил, что мне нужен инструмент, который превратит выбор фильма из рутины в развлечение. Бюджет — 0 рублей. Команда — я и нейросеть (Gemini 3.1 Pro).

В IT сейчас активно спорят про «вайбкодинг». Кто-то считает это абсолютным злом и костылестроением, кто-то — неизбежным будущим. Я решил проверить этот подход на практике и за выходные собрал MVP своего сервиса.

Читать далее

Рендеринг — это не про сервер

Время на прочтение9 мин
Охват и читатели7.4K

Когда меня просят подсказать, как структурировать веб-сервис, я всегда начинаю с одного и того же: напишите сервер, который в ответ на HTTP-запросы выдаёт текст в формате HTML.

Это наиболее долговечный, финансово оправданный и понятный пользователю способ написать веб-сервис. Большинство веб-сервисов следует выстраивать именно так, если только у вас нет очень веской причины действовать иначе.

Выслушав меня, веб-разработчики часто отвечают: «о, так вам нравится рендеринг на стороне сервера», на что я обычно, поморщившись, парирую — «да, в какой-то мере». Не распыляйтесь по пустякам, если собеседника отделяет от вас десятилетие невежества. Хотя бы они понимают, о чём я. 

Но «рендеринг на стороне сервера» — ужасный термин. Он подразумевает, что сервер не просто больше работает, но и выполняет сложную работу — такую, которую лучше оставить экспертам. Ни то, ни другое не соответствует истине. На самом деле, «рендеринг» на стороне сервера можно организовать почти без труда, какой бы язык программирования вы ни предпочитали.

Стоит вам это понять — и Веб откроется вам таким, каким его вижу я: как самый простой, лёгкий и наиболее мощный интерфейс для вычислений, какой только есть на свете.

Читать далее

Как AI-копилоты изменили мой рабочий процесс во фронтенде — и где с треском провалились

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели5.9K

AI-копилот за 40 секунд сгенерировал мне форму на 180 строк с валидацией через zod и сэкономил полчаса. А потом потратил два моих часа на отладку хука с race condition, который я бы написал сам за 40 минут. После месяца плотной работы с Cursor, Copilot и ChatGPT на продакшн-проекте React/Next.js я вывел для себя систему: какие задачи отдавать AI, а к каким его подпускать нельзя.

Читать далее

Я устала писать одно и то же для форм в Next.js. Поэтому написала typed-form-actions

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели4.1K

Мне нравится направление, в котором движутся React и Next.js: нативные формы, Server Actions, меньше клиентского JavaScript, больше progressive enhancement.

На уровне идеи это очень красиво.

Но как только форма становится сложнее, чем одно поле email, выясняется, что вокруг нее снова появляется много однотипного glue code.

Читать далее

Vue.js Amsterdam 2026: будущее экосистемы Vite

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели6.6K

Недавно в Амстердаме прошла конференция Vue.js Amsterdam 2026 — ежегодное мероприятие, посвящённое экосистеме Vite и современным инструментам фронтенд-разработки.

В этом году программа оказалась особенно насыщенной. Команда экосистемы показала сразу несколько направлений развития: обновления ключевых инструментов, новые эксперименты в архитектуре фронтенд-фреймворков и попытку собрать полноценную платформу разработки вокруг Vite.

В этой статье разберём основные анонсы конференции: Vite 8, Vite+, Void Cloud, а также обновления Vue и Nuxt.

Читать далее
1
23 ...