Я сам рисую интерфейсы и сам их верстаю. У меня есть библиотека стилей pbstyles: цвета, размеры и шрифты в ней описаны дизайн‑токенами. Тему для Tailwind я хотел собирать из этих токенов, а не переписывать руками после каждой правки в Figma. Так появился пакет tailwind‑dictionary.Он берёт токены в JSON и собирает из них тему Tailwind CSS. Светлая и тёмная тема собираются из тех же файлов.Пакет пригодится, если у вас уже есть токены, но переходить на Tailwind не хочется из‑за того, что тему прид…
Короче, мне всегда хотелось как в «Железном человеке»: протянуть руку, взять деталь прямо из воздуха и вытащить её из двигателя. Шлема у меня нет, перчаток с датчиками тоже. Есть ноутбук, встроенная камера и браузер.В итоге из этого получилась маленькая лаборатория. Двигатель разбирается на детали, из человека можно достать сердце и покрутить его, молекулу глюкозы собираешь из атомов пальцами. Видео с камеры никуда не уходит, всё считается в браузере на твоём же компьютере.Кода в статье не буде…
Если вы делали AI-фичу на Vue, то, скорее всего, сталкивались с одним и тем же: большинство готовых инструментов для LLM-интерфейсов написаны с прицелом на React, а во Vue их приходится адаптировать или писать стриминг, tool calling и состояние чата вручную. Я сделал vue-llm — open-source библиотеку, которая закрывает это для Vue 3, Nuxt и даже Vue 2.7.Сразу ссылки, чтобы можно было пощупать:Песочница без API-ключа (модель скачивается и работает прямо в браузере на WebGPU): https://vue-llm.js.o…
Сайт: legendacr.github.io/size‑of‑spaceКод: github.com/LegendaCR/size‑of‑space (MIT)Помните Size of Life от Нила Агарвала? Листаешь вправо, и рядом с каждым существом появляется следующее, побольше. Мне захотелось такого же, но про космос: начать с крошечного астероида и пролистать всё до самой границы того, что мы вообще можем увидеть.Получилось 79 объектов и 24 порядка величины, от астероида Бенну диаметром 490 метров до наблюдаемой Вселенной в 93 миллиарда световых лет. Всё рисуется в реальн…
Во время разработки библиотеки morphing-scroll я пришёл к необычному способу организации локальных данных в React-компоненте. Это не было заранее придуманной архитектурой. Я экспериментировал с обновлениями, постепенно убирал лишние состояния и в какой-то момент получил код, который оказался заметно проще прежнего. Для меня это стало настоящим открытием.Позже я вынес найденный механизм в хук useRerender и добавил в свой стейт-менеджер nexus-state. В этой статье я хочу показать не только результ…
Я проектировал каталог и калькулятор сметы для сайта компании, которая строит загородные дома. Моя часть была в проектировании и дизайне, вёрстку и бэкенд делала другая команда. Сайт запущен и работает. Недавно я снял с него разметку, CSS и клиентский скрипт и положил рядом с макетами, чтобы проверить, как решения дошли до кода.Расскажу, как я раскладывал смету на данные, как она устроена в продакшене, какие граничные случаи я оставил без правила и какую спецификацию я передал бы сейчас. Почти …
Давно не виделись Хабровчане! Сегодняшняя тема для статьи мне показалась достаточно интересной и не такой уж очевидной. Сегодня мы будем пытаться встроить Capacitor-приложение в нативное приложение. Эту идею мне подкинул мой друг @solyonyvlad, за что ему спасибо.Давайте представим такую гипотетическую ситуацию когда у нас есть основное мобильное приложение полностью написанное нативно(iOS,Android) и другая команда у которой есть определенный функционал в веб приложении который срочно нужно доба…
Месяц назад я рассказывал здесь про расширение, которое сделал для себя. С тех пор его поставили около двухсот раз, и мне написали люди, у которых что-то не работало или чего-то не хватало. Пишу вторую часть про сам продукт, без разбора багов: что оно делает сейчас, как с ним начать и что я знаю про него плохо. Сразу главное ограничение, чтобы не тратить ваше время: нужен Google Chrome 138 или новее на компьютере. На телефоне его не будет: там нет встроенных моделей. В Brave встроенные ИИ-функц…
Я делаю сайт, который считает статистику переписки прямо в браузере. Обычно для этого нужен экспорт чата Telegram из Desktop, а с телефона его не сделать. Поэтому у меня есть второй путь, без компьютера и без файла. Человек входит со своего телефона, а страница сама выкачивает историю выбранного чата через Telegram API, то есть MTProto, как настоящий клиент. Работает это на mtcute поверх WebSocket к серверам веб-клиента Telegram, со своими api_id и api_hash с my.telegram.org.Три недели всё рабо…