Обновить
128K+

JavaScript *

Прототипно-ориентированный язык программирования

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

Несколько LLM-агентов в одном Chrome: изоляция вкладок без потери логинов

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

Когда у вас один AI-агент в браузере, всё просто. Когда их пять и они параллельно ходят по разным сайтам через Playwright MCP, начинается война за вкладку. Штатный @playwright/mcp работает в общем BrowserContext, и агенты перехватывают страницы друг у друга. Отдельный контекст через newContext() решает изоляцию, но убивает логины.

На основании собственных мучений, в этой статье разбираю, как получить и то, и другое: изолированные окна на каждого агента с общими куками профиля, используя недокументированный contextGetter в createConnection. С кодом, граблями и честными ограничениями.

Читать далее

Я запустил GTA San Andreas на своем движке в браузере, один с Claude, за 3 недели

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

В данной статье Вас ждет подробная история о том, как я создал игровой движок с нуля, совместимым с RenderWare (движком, на котором работает GTA San Andreas), запускающийся в браузере. Один, за три недели, с Claude Code.

Читать далее

Nexus 3 как прокси для npm и PyPI: опыт команды из 16 разработчиков

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

За последние пару лет доступность внешних реестров и CDN для российских команд стала менее предсказуемой. Для пользователя это обычно выглядит как «сайт не открывается», а для разработчиков — как внезапно упавший CI, зависшая сборка или сорванный деплой.

Привет, Хабр! Меня зовут Рахимов Искандер, я фронтенд-разработчик в компании Sofoil.

Для понимания контекста: речь идёт о подразделении Sofoil, которое занимается разработкой интерактивных обучающих систем. В команде работает 16 разработчиков, а основной стек — Angular на фронтенде и Python на бэкенде.

Со временем проблемы с внешними реестрами начали накапливаться: сборки замедлялись, периодически возникали таймауты, а стабильность релизов всё чаще зависела не от нашего кода, а от доступности сторонних сервисов.

В какой-то момент стало понятно, что проблему нужно решать системно. В качестве решения мы выбрали Sonatype Nexus 3. Расскажу, как внедряли его в инфраструктуру, какие задачи он закрыл и с какими нюансами пришлось столкнуться.

Читать далее

Как протестировать более 40 UI-компонентов за минуту: ускоряем скриншот-тесты

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

Привет, Хабр! Меня зовут Антон, я фронтенд‑разработчик в Домклик. Наша команда отвечает за библиотеку «Продуктовых сниппетов» — те самые карточки недвижимости, которые вы видите в нашей поисковой выдаче.

Проблема в том, что этих карточек у нас более 40 видов (сниппеты вторичной, первичной, загородной, краткосрочной недвижимости, каждый тип имеет несколько размеров под разные разрешения), и все они живут в одной монорепозиторной библиотеке на React 19. Любая правка в общих стилях или глобальных дизайн-токенах, или элементарное обновление компонентов дизайн-системы превращалось в игру «Сапёр»: поправил отступ в одном типе сниппета — поехала вёрстка или поплыл паддинг в другом, о чём мы узнавали уже при тестировании релиза или, что хуже, от пользователей после релиза.

Я расскажу, как мы внедрили полноценное визуальное регрессионное тестирование (Visual Regression Testing) на основе Storybook, Playwright и Jest, с какими трудностями столкнулись при стабилизации скриншотов и как заставили тесты работать стабильно.

Читать далее

HTML Sanitizer API: конец эпохи DOMPurify и XSS-страданий

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

Инженеры узнают о межсайтовом скриптинге (Cross-Site Scripting, XSS) тремя способами.

Счастливчики узнают о нем благодаря полезному анализу кода или проактивному правилу проверки кода. Внимательные — во время аудита безопасности, который выявляет уязвимость до того, как она попадет в продакшн.

А есть те, кто узнает о нем через страдания, когда их сайт становится уязвимым. Когда злоумышленник внедряет скрипт, который крадет токены сессий из localStorage, перехватывает файлы cookie или перенаправляет пользователей на фишинговый сайт. Я лично присоединился к клубу «пострадавших» еще в 2005 году, когда встроенная Flash-подпись на форуме, которым я владел, превратилась в кошмар с точки зрения безопасности… но это уже другая история.

В этой статье мы рассмотрим, как браузер, наконец, снимает с нас бремя очистки данных (sanitizing) благодаря новому HTML API Sanitizer.

Читать далее

Релиз Astro 7: переход на Rust, улучшенное кэширование и поддержка AI-разработки

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

Astro — фреймворк для сайтов, который минимизирует поставку JavaScript на клиент, обеспечивая высокую производительность. 22 июня вышла седьмая версия, в которой разработчики серьёзно прокачали скорость. Компилятор .astro переписали на Rust, туда же перенесли обработку Markdown и MDX, а движок рендеринга заменили на систему с очередями. Вкупе с Vite 8 и новым бандлером Rolldown сборки ускорились на 15–61% по внутренним бенчмаркам. А поскольку самая быстрая сборка — та, которую не нужно запускать вовсе, в Astro 7 также стабилизировали кэширование маршрутов и добавили экспериментальных CDN-провайдеров кэша для Netlify, Vercel и Cloudflare.

В Astro 7 добавили продвинутый роутинг: появляется точка входа src/fetch.ts, дающая полный контроль над конвейером обработки запросов в Astro. Для разработки с участием ИИ Astro теперь умеет определять coding agents, запускать dev-сервер в фоне и выводить структурированные JSON-логи, когда агентам нужен машиночитаемый ответ.

Читать далее

Изометрия в 1С: склад стал интереснее, чем ваш сериал

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

Что, если мы создадим такой интерфейс в 1С, чтобы он был удобнее, чем в Excel? Да не просто удобнее — а чтобы сотрудники сказали: «Ого, это же как игра!» С вами снова Ведущий специалист модуля разработки 1С Михеев Антон. Давайте вместе сделаем эту игру идею реальностью

Представьте, что Excel — это склад, вид сверху. Синие ячейки — стеллажи, в них лежат товары. Да, на множестве складов топология нарисована именно в Excel. Сотрудникам так понятнее и удобнее: закрашивать ячейки в таблице куда проще, чем разбираться, как заполнять справочники с кучей непонятных цифр в 1С.

Читать далее

Ограничения Manifest V3 в расширении EasyProxy для управления прокси

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

Как перестать искать подходящее расширение и написать его самому. Отличия API Firefox и Chrome Extensions.

Читать далее

Как я собрал новостной агрегатор HypeNet на Cloudflare Workers + Supabase и что пошло не так

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

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

Хочу поделиться опытом разработки новостного агрегатора HypeNet. Проект работает на связке Cloudflare Workers + Supabase, фронтенд - чистый HTML + Vanilla JS без фреймворков. Сайт хостится на VPS.

Читать далее

Устал загружать конфиденциальные данные в онлайн-сервисы, поэтому сделал PrivacyKit

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

Думаю, многие сталкивались с этим: нужно быстро конвертировать HEIC в JPG, сжать изображение или посмотреть содержимое JWT. Открываешь первый попавшийся сервис, загружаешь файл или вставляешь данные и просто надеешься, что они действительно никуда не сохраняются.

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

Так появилась идея PrivacyKit.

Главный принцип проекта очень простой: если задачу можно выполнить прямо в браузере, то зачем вообще нужен сервер?

Поэтому все инструменты работают локально. Никаких API, регистрации и загрузки данных на бэкенд.

Например, сжатие изображений происходит прямо в браузере:

Читать далее

Я собрал линтер для юридического соответствия сайтов. Сложнее всего было отличить Google Analytics от CSS‑переменной

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

Коротко. Сервис открывает чужой сайт и считает штраф по КоАП. Внутри двухуровневая проверка по 22 правилам: дешёвые эвристики на cheerio там, где хватает регулярок, и Claude через российский прокси там, где нужно понять смысл текста. На выходе балл от 0 до 100, список нарушений со статьями КоАП и вилкой штрафа. Законы в основе: 152-ФЗ о персональных данных, 242-ФЗ о локализации, закон о рекламе, закон о защите прав потребителей. Ниже стек, архитектура и грабли. Самая обидная грабля в том, что \b в JavaScript не образует границу слова перед кириллицей, и детектор молча слепнет на русском тексте.

Зачем я вообще это делал

У меня небольшой сервисный центр по ремонту техники. В какой‑то момент дошли руки до юридической части собственного сайта, я полез читать 152-ФЗ, и довольно быстро стало ясно: требований к обычному сайту с формой заявки куда больше, чем кажется, и разбросаны они по нескольким законам.

В мае 2025 КоАП по части персональных данных переписали: штрафы выросли в разы, появились оборотные за повторные нарушения, отдельная крупная санкция за утечки. При этом требований к сайту наберётся больше двадцати, и они размазаны по нескольким законам и подзаконным актам. Юрист за разовый аудит просит десятки тысяч. Малый бизнес такое не заказывает, пока не прилетит проверка.

Захотелось собрать что‑то на стыке юриста и линтера: автоматический сканер, который читает сайт и говорит «вот тут нарушение, вот статья, вот порядок суммы». Сначала для себя и своего центра, потом понял, что это нужно не только мне.

Читать далее

GenUI: первый взгляд на json-render и MCP Apps

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

Чат как интерфейс упирается в потолок. Текст хорош, когда ответ это объяснение или код. Но на запрос «покажи продажи за квартал и сравни с прошлым годом» модель отвечает стеной чисел, в которой ничего не покрутить. Хочется другого: интерактивный дашборд прямо в чате, который при следующей реплике не пересобирается с нуля, а аккуратно обновляется. Очевидное решение — попросить модель сгенерировать React-компонент — оказывается тупиком. Вывод нестабилен: один и тот же промпт сегодня даёт useState, завтра — Zustand. Сгенерированный JSX это исполняемый код, то есть открытая дверь для инъекций: в мае 2025 Invariant Labs показали на официальной GitHub MCP-интеграции, как вредоносный issue провоцирует агент на утечку данных из приватных репозиториев. И главное, что нет инкрементальности: на запрос «добавь фильтр» модель регенерирует весь компонент, состояние теряется, ввод сбрасывается.

Вывод: код это плохой интерфейс между LLM и приложением. Нужен промежуточный слой. Эта статья про два таких слоя: json-render отвечает за то, что и как рендерить из декларативной спецификации, MCP Apps — за то, где и как доставить этот интерфейс в ассистент. По официальному анонсу MCP Apps поддерживаются в Claude, Goose, VS Code Insiders и ChatGPT; json-render заявляет MCP-интеграцию для Claude, ChatGPT, Cursor и VS Code. Через всю статью я протащу один пример: дашборд продаж, который пользователь докручивает репликами «добавь разбивку по регионам», «сравни с прошлым годом», «убери блок». Сразу обозначу жанр: это мой первый пилотный заход в тему, поэтому текст ближе к обзору с пробами, чем к боевому отчёту из эксплуатации.

Читать далее

Бесплатное lo-fi радио + живые обои на рабочий стол: собрал десктоп-приложение на Tauri 2 (форк lofi-engine)

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

Я хотел одну простую вещь: чтобы на втором мониторе тихо играло lo-fi, а за виджетами крутилась уютная анимированная сцена. Готового решения не нашлось — зато нашёлся чужой MIT-проект, у которого я в итоге выкинул главный модуль и собрал из остатков совсем другой продукт. Это девлог о том, что я удалил, что добавил и на каких граблях потанцевал.

Под задачу подходящих инструментов хватало, но каждый закрывал только часть. Wallpaper Engine — живые обои, но без радио. Lofi.co — музыка в браузере, но не обои рабочего стола. Noisli — эмбиент, но без всего остального. Покупать три подписки ради фона под код было жалко, поэтому я полез на GitHub смотреть, что можно собрать самому.

Нашёл meel-hd/lofi-engine под MIT — аккуратный Tauri-проект со встроенным генеративным движком, который синтезировал lo-fi прямо в браузерном рантайме. Идея красивая, но мне быстро стало понятно, что я хочу совсем другого продукта. Так появился форк, который я в итоге назвал LoFiTyan.

Читать далее

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

Знакомимся с Cruzo. Часть 1. RxBucket – контейнер состояний и конфигураций компонентов на фронте

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

Не так давно, я наконец выложил на github свой фреймворк cruzo – https://github.com/MaratBektemirov/cruzo. Сам фреймворк писался где-то с 2020г, в свободное от работы время. Причем большую часть времени я потратил на шаблонизатор с реактивными значениями.

Я хотел сделать минималистичный, но в то же время мощный инструмент для создания простых и сложных веб-приложений. Попытался взять хорошие идеи от разных фреймворков и собрать их в одном месте. Одна из таких идей - это RxBucket - контейнер состояний

Читать далее

Как отладить подключение бота к бирже за час, а не за трое суток

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

🕹️ Подключение бота к бирже за час, а не неделю

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

Статья содержит руководство, как оптимизировать временные затраты на отладку интеграции в биржу

Читать далее

Представляем MDN MCP-сервер

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

Мы рады объявить о релизе MDN MCP-сервера. MCP (Model Context Protocol) — это открытый стандарт, который позволяет ИИ-инструментам подключаться к внешним источникам данных. MDN MCP-сервер использует этот протокол, чтобы доставлять документацию MDN и данные о совместимости браузеров прямо в твой редактор кода или IDE.

Читать далее

Мессенджер в одном HTML-файле: Git как storage, browser как runtime

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

Что будет, если взять один HTML-файл, браузер, localStorage и git-хостинг с CRUD API? Получится мессенджер. Без backend, базы данных, регистрации, npm и WebSocket. В статье показываю, как устроен Macaroni Messenger: хранение сообщений в .macaroni/, outbox, git-agnostic adapters, storage branch, plugin API и опциональное шифрование.

Погоди...

Как я перешёл с React на Angular и не пожалел

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

Когда я говорю, что перешёл с React на Angular, на меня смотрят примерно так же, как если бы я сказал, что добровольно переехал из Амстердама куда-нибудь в Челябинск. С непониманием и вопросом «а зачем».

Если открыть типичный канал про разработку, там будет React, Next.js, React Native, снова React. Джуны учат его как первый фреймворк, мидлы обычно выносят в резюме жирным шрифтом. Angular воспринимается как что-то невероятно сложное, для мега-приложений масштаба «строим город на Луне» и бэкендеров, которым не повезло. Я тоже так думал. У меня за плечами был React, я понимал компонентный подход, умел работать с хуками, знал экосистему. И тут Angular.

Готовых инструкций, как перейти с React на Angular, в сети практически нет. Зато есть тысячи статей про обратный путь. Пришлось разбираться самому, и вот что из этого вышло.

Читать далее

Clean Architecture и AI: как я перестроил проект на 200К строк, чтобы агенты не ломали код

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

Агент не ломает архитектуру. Он заливается в те щели, которые ты ему оставил. Как я перестроил проект на 200К строк, чтобы границы держал линтер и CI, а не слова в CLAUDE.md. С кодом и цифрами до и после.

Читать далее

Я мог бы сказать, что это убийца notion, obsidian, slack и вашей ide. Но я скажу, что ем собачий корм

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

Экран, в котором я живу 4 месяца. Не открываю IDE — всю god crm пишу внутри god crm.

Всё на скрине — строки одной postgres-таблицы. заметка, тикет, агент — одна сущность. поэтому заменило мне ноушн, обсидиан и мессенджер сразу.

Код открыт, mit: github.com/holetron/godcrm

Прочитать как я ем собачий корм