Обновить
512K+

Веб-разработка *

Делаем веб лучше

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

Рефакторинг выпадающих списков: от enum к конфигу-константе

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

Выпадающий список — это ui-компонент, без которого редко обходится сайт. В этой статье я расскажу про то, как принял решение отказаться от enum для рендеринга выпадающих списков и перешел к конфигу-константе, и почему результат мне понравился.

Читать далее

Новости

Как «спят» вкладки в браузере

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

Привет! Меня зовут Костя, я разработчик интерфейсов в ЮMoney. В этой статье разбираю, почему вкладка после возврата из фона начинает вести себя странно: интерфейс подвисает, таймеры съезжают, события приходят пачкой.

Материал особенно пригодится тем, кто делает сложные SPA с realtime‑обновлениями, WebSocket и насыщенным UI — CRM, дашборды, платёжные сценарии.

В статье разберём:

— как устроены Page Visibility API и Page Lifecycle API,
— зачем браузеры ограничивают фоновые процессы,
— что происходит при заморозке вкладок, системном сне и возврате страницы из BFCache,
— чем отличаются Chrome, Safari и Firefox,
— какие API уже устарели,
— а какие подходы помогают делать интерфейсы стабильнее в реальных пользовательских сценариях.

Читать далее

Что сейчас с Project Loom? Structured Concurrency: preview №7

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

Project Loom меняет привычную модель конкурентности в Java: virtual threads делают потоки дешевле, Scoped Values дают аккуратную передачу контекста, а Structured Concurrency помогает управлять жизненным циклом связанных задач. Разбираем актуальное состояние Loom в JDK 25-27 и что из этого уже можно использовать.

Читать далее

Почему AI-агенты ломаются на длинных задачах — и как обвязка помогает им дописывать приложения

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

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

В статье будем разбираться, как архитектура обвязки помогает удерживать агента в рамках задачи: зачем нужны планировщик, генератор и оценщик, как QA-агент проверяет результат через Playwright MCP и почему по мере развития моделей саму обвязку приходится постоянно пересматривать.

Перейти к разбору

Блок “Процессы” и почему мы называем его нашим мини-n8n

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

Одна из новых возможностей HRM-модуля ZentrySpace — блок «Процессы». На первом этапе он закрывает сценарии отсутствий: отпуска, больничные, командировки, учебные отпуска, отгулы и другие ситуации, когда сотрудник временно выпадает из рабочего графика.

Раньше подобные сценарии мы называли «заявками»: сотрудник создает заявку, руководитель согласовывает, HR-менеджер фиксирует результат. Но по мере развития продукта стало понятно, что слово «заявка» описывает только входную форму, а не всю ценность. На самом деле компания получает управляемый бизнес-процесс: с маршрутом, ролями, действиями, уведомлениями, историей изменений и будущей связкой с КЭДО.

Поэтому блок сменит название на «Процессы», заявка при этом остается способом для запуска процесса со стороны пользователя, но продуктовая сущность шире: это визуальный движок, с помощью которого компания может закрывать типовые и нетиповые внутренние процессы без разработки отдельной логики под каждый сценарий.

Читать далее

Как настроить кастомную авторизацию в FESB и сохранить стандартный заголовок

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

При проектировании REST-интеграций часто возникает конфликт заголовков, когда и целевая система, и шина данных требуют дефолтный Authorization. В этой статье мы пошагово разберем, как перенастроить FESB на анализ кастомного заголовка для отдельной группы методов. Вы узнаете, как отключить стандартную проверку, распарсить Base64 с помощью Groovy и вернуть корректный HTTP-ответ.

Читать далее

Паттерн Backend for Frontend (BFF) в разработке современных приложений

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

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

А если у нас не один, а несколько фронтендов: веб-сайт для клиентов, админка для сотрудников, мобильное приложение... А далее, у каждого свои пользователи, свои сценарии и свои «хотелки». Чтобы угодить всем, бэкенд-разработчикам приходится плодить десятки почти одинаковых методов, которые раздувают кодовую базу и усложняют тестирование.

Рассказываю о том, что делать со всем этим безобразием...

Читать далее

Production начинается там, где заканчивается вайбкодинг

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

Сначала всё выглядело как типичная AI-история успеха.

За пару вечеров LLM помогла превратить Google Sheets для учёта финансов в настоящее приложение. Потом появился backend, sync между устройствами, mobile-first UX, AI-рекомендации, rollback, conflict resolution, миграции, Docker images, golden tests и React-компонент на 10 537 строк.

Оказалось, что AI действительно радикально ускоряет старт разработки. Но production начинается сильно позже демки.

Читать далее

Bitrix и Laravel: веб-хуки, ERP и все-все-все (часть 5)

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

Привет, Хабр! Это снова Алиса из KISLOROD. В прошлых частях мы вынесли из Битрикса каталог, корзину, цены и чекаут. Но в любом ecommerce-проекте есть еще одна зона турбулентности — интеграции.

Платежки, ERP, CRM, доставки, SMS, веб-хуки — все это любит тормозить, дублировать запросы и внезапно падать в самый неподходящий момент. Если держать такие вызовы внутри чекаута или админки, проект быстро начинает жить по SLA внешних сервисов.

В этой части разбираем Integration Hub: очереди, веб-хуки, DLQ, идемпотентность и отдельный контур для интеграций, который не блокирует пользователей и не тянет за собой весь чекаут.

Читать далее

Как я написал плагин для WooCommerce под Yandex YCP или как купить в 1 клик из Алисы

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

В конце мая Яндекс открыл Yandex Commerce Protocol для всех — теперь онлайн-магазины могут подключать продажи через Алису AI, Поиск и Яндекс Ритм. Из коробки готовые решения есть для Яндекс KIT, Яндекс Маркета и 1С-Битрикс. Для WooCommerce — нет. У меня магазин на WP, и я написал плагин сам. Open-source, GPL-2.0, все 10 эндпоинтов протокола закрыты. Разбираю архитектуру: как боролся с письмами “новый заказ на 0 ₽”, зачем идемпотентность по session_id, как сделать совместимость с HPOS-хранилищем заказов, и пара других граблей, в которые наступил.

Читать далее

Билеты, баги и БДСМ: хроники тревел-стартапа

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

Если вы никогда не задумывались, на чём вообще держится индустрия путешествий, присаживайтесь. Рассказ будет недолгим — минут на сорок. Если вы хоть раз покупали авиабилеты онлайн, то наверняка заметили странную особенность даже самых «успешных» сервисов: они умеют ровно две вещи — найти билет и продать билет. Всё. Как только ваши планы внезапно меняются, магия испаряется, и начинается древний ритуал: вы берёте телефон, звоните в поддержку и слушаете саундтрек, который не выбирали. Бездушный автоответчик шепчет, что все операторы заняты, просит остаться на линии, а в трубке тихонько умирает ваше свободное время.

Когда‑то, лет этак шестьдесят назад, авиакомпании внезапно осознали, что продавать билеты через кассу в аэропорту — это, конечно, лампово, но хотелось бы чего‑то более… системного. Так родилась первая GDS — глобальная дистрибутивная система. По сути, это вселенский пылесос, который засасывает данные из PSS авиакомпаний: расписания, тарифы, доступность мест, правила, статусы бронирований. Всё то, что покоится в глубинах корпоративных недр. GDS собирает это добро, перемалывает и раздаёт турагентствам, сайтам и прочим желающим продавать билеты, не вступая в прямой контакт с динозаврами.

А PSS — Passenger Service Systems — это как раз те самые динозавры. Древние, массивные, неприкасаемые. В них живут бронирования, билеты, тарифные правила и вся логика, объясняющая, почему перелёт с пересадкой в Чикаго стоит как подержанная «Тесла». PSS — это священные реликвии, написанные в эпоху телетайпов и перфолент, и с тех пор тронутые примерно столько же раз, сколько египетские пирамиды. Работает? Работает. Значит, не трогаем. Любая попытка модернизации выглядит как попытка провести МРТ на мамонте: интересно, но зачем?

Читать далее

Один за всех: как я в одиночку тащу фуллстек‑проект, который незаметно разросся до соцсети

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

Начиналось как «сделаю себе сайтик про кино на пару выходных». Закончилось каталогом на десятки тысяч карточек, лентой, профилями, рейтингами, совместным просмотром и кучей фоновых задач. И всё это тащит один человек — я сам себе фронт, бэк, девопс, дизайнер и поддержка. Делюсь сжато: стек и грабли, без воды.

Стек выбирал не по хайпу, а по принципу «доеду и не утону в обслуживании»: FastAPI (быстро, асинхронно, автодоки), Next.js на React (SSR из коробки — критично для SEO), PostgreSQL (SQLite кончился на первых же конкурентных записях), Redis для кэша и рейт‑лимитов. Nginx + systemd на обычном VPS. Никакого Kubernetes — для одного это способ обслуживать инфраструктуру вместо разработки.

Читать далее

llms.txt в 2026: что это, как написать, и почему вашему сайту это нужно

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

llms.txt - это файл в корне сайта, который говорит языковым моделям, что у вас за сайт, какие источники канонические и что цитировать. ChatGPT, Perplexity и Claude уже его читают. Большинство сайтов в Рунете его не имеют, поэтому AI-краулеры цитируют их или плохо, или никак. Файл пишется за 30 минут, эффект на цитируемость в AI-выдаче появляется в течение 1–4 недель.

В статье разбираю: что такое llms.txt, чем отличается от robots.txt, какие 5 блоков должны быть внутри, как написать свой за час, и показываю живой пример с production-сайта.

Читать далее

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

12 паттернов, которые приведут твой код в порядок

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

ES6 ввел синтаксис деструктурирующего присваивания — лаконичный способ распаковки значений из массивов и объектов в отдельные переменные. Это одна из тех фич, начав использовать которые, ты удивишься, как раньше без нее жил.

Читать далее

Властелин корзин: две вкладки и один Redis (часть 4)

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

Привет, Хабр! Это снова Алиса из сериала про Laravel рядом с Битриксом.  В первой части мы аккуратно подселили Laravel к Битриксу. Во второй — растащили события, авторизацию и тяжелую логику по нормальным сервисам, а в третьей — перестали мучить каталог SQL-запросами и отдали поиск OpenSearch.

Теперь добрались до места, где любой e-commerce начинает показывать характер: корзина и расчет заказа. Это каталог может тормозить незаметно. А вот если корзина начинает чудить — это уже чувствует бюджет.

Читать далее

Как я собрал кубик Рубика в браузере на чистом Canvas

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

Недавно я увидел видео, где маленький мальчик собирает кубик Рубика за 2,76 секунды (вот оно), и мне тоже захотелось научиться его собирать. Конечно, не за такое время, но главное — суметь сложить хотя бы за 10 минут. Главная проблема в том, что кубика у меня нет; можно купить, но это как-то скучно, на троечку. Поэтому я подумал: а почему бы не написать за выходные простой код, чтобы побыстрее посмотреть и покрутить кубик, а потом уже можно и купить. Заодно и разберусь, где что находится у кубика.

Читать далее

Разработчик из Батуми в одиночку по понедельникам выпускает убийство. Сколько заработал?

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

Если сейчас слышишь «проект на нейросетях», чаще всего это очередной чат-бот или AI-ассистент. Денис в феврале 2025 года искал что-то другое — задачу, где нейросети дадут результат, который без них не получить. В какой-то момент он увидел в ленте рекламу детективной настольной игры и понял, что вот этот продукт можно построить на нейросетях так, как раньше никто не делал.

Денис автор проекта True Crime Games, детективной игры в Telegram, где подозреваемые отвечают в реальном времени и не отличаются от обычных аккаунтов в чате. В команде он сам, жена и сестра. К маю 2026-го, через восемь месяцев после запуска, было продано более 800 копий игры по $40, выручка ~$30000. 

Читать далее

Navigation API теперь доступен в Baseline

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

Navigation API предоставляет возможность инициировать (программно запускать), перехватывать и управлять навигацией в браузере. Он также позволяет исследовать (traverse) сущности истории (history entries) приложения. Это улучшенный вариант предыдущих возможностей веб-платформы, связанных с навигацией, таких как History API и window.location, который решает их проблемы и специально предназначен для одностраничных приложений (single-page applications, SPA).

Читать далее

5 распространенных ошибок новичка в E2E-тестах

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

Начинаете писать E2E-тесты? Думаете, нужно просто открыть страницу, нажать кнопку и написать expect?

Разберем на примере Playwright, почему отчёт может быть зелёным, но бесполезным.

Разобрать ошибки

Авторизация в Go без боли: как Casbin заменяет километры if-проверок

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

Пока в приложении две роли и три проверки, авторизация умещается в if user.Role == "admin". Но стоит добавить пару ресурсов, ролей и исключений — и условные проверки начинают расползаться по хендлерам, дублироваться и жить своей жизнью.

В этой статье разберём, как навести порядок с помощью Casbin: вынесем правила доступа из кода в конфиг, пройдём путь от простого ACL до RBAC с иерархией ролей, соберём HTTP-сервер на Go с авторизационной middleware и обсудим грабли, на которые легко наступить по дороге.

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