Category : javascript

javascript
vue-llm: AI SDK для Vue и Nuxt — стриминговый чат, Generative UI и модели прямо в браузере

Если вы делали AI-фичу на Vue, то, скорее всего, сталкивались с одним и тем же: большинство готовых инструментов для LLM-интерфейсов написаны с прицелом на React, а во Vue их приходится адаптировать или писать стриминг, tool calling и состояние чата вручную. Я сделал vue-llm — open-source библиотеку, которая закрывает это для Vue 3, Nuxt и даже Vue 2.7.Сразу ссылки, чтобы можно было пощупать:Песочница без API-ключа (модель скачивается и работает прямо в браузере на WebGPU): https://vue-llm.js.o…

  • пятница, 30 октября 2026 г. в 00:00:10
javascript
Я сделал сайт, где можно самому пролистать Вселенную: от 490-метрового астероида до границы наблюда…

Сайт: legendacr.github.io/size‑of‑spaceКод: github.com/LegendaCR/size‑of‑space (MIT)Помните Size of Life от Нила Агарвала? Листаешь вправо, и рядом с каждым существом появляется следующее, побольше. Мне захотелось такого же, но про космос: начать с крошечного астероида и пролистать всё до самой границы того, что мы вообще можем увидеть.Получилось 79 объектов и 24 порядка величины, от астероида Бенну диаметром 490 метров до наблюдаемой Вселенной в 93 миллиарда световых лет. Всё рисуется в реальн…

  • четверг, 29 октября 2026 г. в 00:00:17
javascript
Ручная инвалидация рендера как осознанный антипаттерн в React

Во время разработки библиотеки morphing-scroll я пришёл к необычному способу организации локальных данных в React-компоненте. Это не было заранее придуманной архитектурой. Я экспериментировал с обновлениями, постепенно убирал лишние состояния и в какой-то момент получил код, который оказался заметно проще прежнего. Для меня это стало настоящим открытием.Позже я вынес найденный механизм в хук useRerender и добавил в свой стейт-менеджер nexus-state. В этой статье я хочу показать не только результ…

  • четверг, 29 октября 2026 г. в 00:00:16
javascript
Калькулятор сметы и фильтр каталога. Что теряется между макетом и кодом

Я проектировал каталог и калькулятор сметы для сайта компании, которая строит загородные дома. Моя часть была в проектировании и дизайне, вёрстку и бэкенд делала другая команда. Сайт запущен и работает. Недавно я снял с него разметку, CSS и клиентский скрипт и положил рядом с макетами, чтобы проверить, как решения дошли до кода.Расскажу, как я раскладывал смету на данные, как она устроена в продакшене, какие граничные случаи я оставил без правила и какую спецификацию я передал бы сейчас. Почти …

  • среда, 28 октября 2026 г. в 00:00:11
javascript
# Capacitor: от веба к мобильным приложениям. Часть 6. Встраиваем Capacitor в native-приложение

Давно не виделись Хабровчане! Сегодняшняя тема для статьи мне показалась достаточно интересной и не такой уж очевидной. Сегодня мы будем пытаться встроить Capacitor-приложение в нативное приложение. Эту идею мне подкинул мой друг @solyonyvlad, за что ему спасибо.Давайте представим такую гипотетическую ситуацию когда у нас есть основное мобильное приложение полностью написанное нативно(iOS,Android) и другая команда у которой есть определенный функционал в веб приложении который срочно нужно доба…

  • среда, 28 октября 2026 г. в 00:00:09
javascript
Смотрю сериалы с английскими субтитрами и не жму паузу: что умеет расширение для Chrome через месяц…

Месяц назад я рассказывал здесь про расширение, которое сделал для себя. С тех пор его поставили около двухсот раз, и мне написали люди, у которых что-то не работало или чего-то не хватало. Пишу вторую часть про сам продукт, без разбора багов: что оно делает сейчас, как с ним начать и что я знаю про него плохо. Сразу главное ограничение, чтобы не тратить ваше время: нужен Google Chrome 138 или новее на компьютере. На телефоне его не будет: там нет встроенных моделей. В Brave встроенные ИИ-функц…

  • среда, 28 октября 2026 г. в 00:00:08
javascript
Выгрузка истории чата через Telegram API в браузере: было 29 минут, стало две с половиной

Я делаю сайт, который считает статистику переписки прямо в браузере. Обычно для этого нужен экспорт чата Telegram из Desktop, а с телефона его не сделать. Поэтому у меня есть второй путь, без компьютера и без файла. Человек входит со своего телефона, а страница сама выкачивает историю выбранного чата через Telegram API, то есть MTProto, как настоящий клиент. Работает это на mtcute поверх WebSocket к серверам веб-клиента Telegram, со своими api_id и api_hash с my.telegram.org.Три недели всё рабо…

  • среда, 28 октября 2026 г. в 00:00:07
javascript
Редактор писал «Сохранено» и ничего не сохранял: TipTap поверх чужого HTML

Я делаю сервис, который пишет статьи и сам публикует их на сайты клиентов. Как устроена публикация в четыре CMS, я уже рассказывал здесь. Сегодня про соседний кусок: редактор в личном кабинете, где человек правит статью перед публикацией.Как минимум два месяца этот редактор показывал «Сохранено» и не сохранял ни символа. Сама ошибка глупая, на неё хватит одного абзаца. Хуже, что очевидное исправление уничтожило бы статьи. По дороге к правильному нашлись ещё три ловушки. Санитайзер nh3 тратит по…

  • среда, 28 октября 2026 г. в 00:00:05
javascript
Правый клик с памятью: почему я храню счётчик в id пункта меню Chrome

Мои хобби-проекты - небольшие расширения для Хрома и сайты-микросервисы. Одно из расширений, PDF to PNG, внезапно забралось на первое место в поиске Chrome Web Store по запросу “pdf to png” (ну, почти всегда), и им пользуются аж под 500 человек - это потрясающе!Раз PDF в картинки получилось, немедленно загорелось сделать и наоборот - картинки -> PDF, только ещё круче: чтоб работало через правый клик по картинке на любой странице, чтоб была лёгкая(!) возможность настроек - и чтоб всё прям лок…

  • среда, 28 октября 2026 г. в 00:00:05