Проекты

Личные и опенсорсные проекты — все живые, все можно открыть и покрутить прямо сейчас. Заказная разработка под NDA, поэтому здесь её не упоминаю.

РРРабота!

РРРабота!

Массовый найм упирается в простую вещь: соискатель ищет «курьер в Твери», а не «вакансии в ритейле». Проект закрывает эти запросы автоматически — из справочника с зарплатами, гео и координатами Nuxt пре-генерирует около 230 отдельных лендингов под каждую связку «вакансия × город», подставляя в каждый актуальную зарплату. Соискатель находит страницу своего города, видит цифру и подаёт заявку через форму, которая уходит напрямую в CRM работодателя. Сделано для СберМаркета, Самоката и Магнита — курьеры, сборщики, водители.

  • Ловит низкочастотные запросы вида «курьер в Твери»: около 230 страниц по маршрутам /[вакансия]/[город], у каждой свои мета-теги и заголовки, просклонённые по падежам (useSeoMeta, lvovich)
  • Зарплаты на страницах всегда актуальные: собственный ETL на Node.js забирает данные из CSV и JSON, матчит их со справочником 1102 городов России (падежи, координаты, население) и пересчитывает суммы по формулам
  • Соискатель находит свой город на карте: OpenLayers с кастомными SVG-маркерами активных городов, подсказками и переходом на страницу города по клику
  • Заявки не теряются: валидация кириллических имён и нормализация телефонов (VeeValidate + Yup), отправка напрямую в CRM работодателя и трекинг конверсий в Яндекс.Метрике
  • Три бренда на одной кодовой базе: общие UI-компоненты плюс изолированные наборы под СберМаркет, Самокат и Магнит; статика выкатывается атомарно через scp/ssh
  • Схема работает: за два года через эти страницы прошло 986 тысяч посетителей, а работодатели приняли 32 848 заявок
Nuxt 3SSGNode.jsOpenLayersVeeValidateTailwind CSSlvovich
Brickick

Brickick

Брикик собирает модель из деталей LDraw прямо в браузере: её можно крутить, приближать, перекрашивать любые части и менять колёса — с живым 3D-превью каждого варианта. Проигрывает пошаговую анимацию сборки и открывает подвижные части: двери, капот, борт. Вся графика считается на GPU через Three.js, с процедурным металлическим окружением для отражений и без единого сервера: тяжёлый разбор деталей вынесен в офлайн-предзапекание.

  • Тяжёлая модель открывается за доли секунды: предзапекание в gzip-GLB ужимает сборку с 16.5 МБ до 2 МБ и грузит её примерно за 0.3 секунды
  • Не греет ноутбук и телефон: сцена перерисовывается только при изменениях (рендер on-demand), а merge геометрии сводит тысячи вызовов отрисовки к десяткам даже на моделях в ~1500 деталей — в покое нагрузка на GPU близка к нулю
  • Перекраска и замена деталей в реальном времени: две зоны кузова и подмена колёс, причём 3D-превью каждого варианта генерируется автоматически
  • Пошаговая сборка как в бумажной инструкции: слайдер и плеер с автопрогоном; 354 шага реализованы через setDrawRange, поэтому переключение шага ничего не пересобирает
  • Открывающиеся двери, капот и борт — декларативно, вращением вокруг петли через pivot-обёртки и плавный tween на rAF; интерфейс подстраивается под десктоп и мобильные
Vue 3TresJSThree.jsPiniaVite
DXF-kit

DXF-kit

dxf-kit открывает чертежи AutoCAD DXF прямо в браузере: инженеру не нужно ставить тяжёлую CAD-программу, а файл никуда не уходит — он остаётся на его компьютере. В основе — фреймворк-независимый движок рендеринга с готовыми обёртками под Vue 3, React и Web Components, так что встроить просмотрщик можно в любой стек.

  • Открывает реальные чертежи, а не только идеальные примеры: 22 типа DXF-сущностей, 29 штриховых паттернов AutoCAD и типы линий с поддержкой LTSCALE. Парсер написан с нуля, без внешних зависимостей
  • Текст остаётся чётким при любом увеличении — он векторный, а не растровый
  • Чертёж можно не только смотреть, но и мерить: расстояние, площадь, угол. Плюс панель слоёв, тёмная тема и доступность (ARIA)
  • Встраивается в любой стек: пять npm-пакетов — ядро движка и готовые обёртки под Vue 3, React и Web Components
  • Библиотекой пользуются: около 8000 загрузок с npm за последний год (на июль 2026). Движок покрыт 1504 автотестами — это 36% кодовой базы
TypeScriptThree.jsWebGL 2Vue 3ReactWeb ComponentsVite
Crux

Crux

Crux превращает болдеринговую доску в конструктор трасс: скалолаз «раскрашивает» зацепы, назначая роли — старт, руки, ноги, топ, — задаёт сложность и делится готовой трассой обычной ссылкой. Сервера у проекта нет вовсе: трасса целиком кодируется в саму ссылку, а сохранённые трассы лежат в браузере. Поэтому оно работает и онлайн, и офлайн, ставится как обычное приложение и собирается под Android в apk.

  • Трасса рисуется пальцем прямо в зале: тап и свайп раскрашивают зацепы на SVG-сетке доски, назначая роли — старт, рука, нога, топ
  • Поделиться трассой можно с кем угодно и без регистрации: она целиком кодируется в ссылку (?r=…), на сервер ничего не загружается
  • Свои трассы всегда под рукой, даже когда в зале нет интернета — они хранятся прямо в браузере (IndexedDB)
  • Понимает привычную скалолазу шкалу: Font, V-scale, French и цветовые метки
  • Ставится как приложение и работает без сети (PWA на Workbox), при необходимости собирается под Android через Capacitor; интерфейс на русском и английском
Vue 3QuasarTypeScriptPiniaIndexedDBWorkboxCapacitor
Алеф

Алеф

Алеф сводит списки лучших книг от экспертов со всего мира в единую карту канона: видно, что признаёт весь мир, а что — только один список. Не «топ книг», а зеркало того, как разные эпохи и страны спорят о главном. Сейчас в базе 662 книги и 541 автор из семи списков-источников.

  • Карта канона, по которой можно возить и зумить: раскладку считает D3 (scale, force, beeswarm), рисует Vue, а pan/zoom написан вручную на PointerEvent
  • Открывается мгновенно: каждая книга, автор и список — отдельная предсгенерированная страница (SSG на Astro 5), а интерактив вынесен в острова Vue 3
  • Прозрачная методология: данные лежат плоскими JSON прямо в git — «файл на книгу» плюс предподсчитанные индексы. Ни базы, ни запросов в рантайме, любую цифру можно проверить по истории коммитов
  • Данные собирает ETL на Python: четыре идемпотентные стадии (MediaWiki, Wikidata → обложки → индексы) с кэшем запросов — пересбор не ломает уже собранное
  • UI на Open Props и scoped CSS, headless-компоненты Reka UI по надобности; статика раздаётся с GitHub Pages
Astro 5Vue 3D3Reka UIOpen PropsPython
Time Spent · Trello Power-Up

Time Spent · Trello Power-Up

Time Spent встраивается в карточки Trello и превращает доску в трекер времени: часы пишутся прямо в карточке, а дашборд собирает недельную статистику, отчёты и выгрузки. Команде не нужен отдельный трекер и ещё один аккаунт — всё живёт внутри самого Trello, без внешних серверов и трекинга.

  • Время пишется там же, где задача: форма прямо в карточке, редактирование по месту и бейдж с общей суммой на обложке
  • Видно, куда ушла неделя: дашборд с графиком по дням (Chart.js) и таблицей задач с группировкой по спискам
  • Работает в команде: записи привязаны к автору, есть разделение «моё / общее» время и фильтр «только моё»
  • Время вводится как удобно: десятичное (1.5), часы:минуты (2:15) или текстом (2h15m / 2ч15)
  • Отчёты за период выгружаются в HTML и Excel (XLSX). Privacy-first: данные хранятся внутри Trello и не уходят на сторонние серверы
  • Опубликован в маркетплейсе Trello: 500 установок за полгода (на июль 2026)
JavaScriptTrello Power-Up SDKChart.jsSheetJSVitestNetlify
commit-date-changer

commit-date-changer

Интерактивная CLI-утилита для безопасного изменения дат git-коммитов. Работает в двух режимах — интерактивном с пошаговыми подсказками и командном для автоматизации. По умолчанию правит только неотправленные коммиты, оберегая историю репозитория.

  • Не даст испортить историю: по умолчанию меняет только неотправленные (unpushed) коммиты, для отправленных — предупреждения и защита
  • Два режима: интерактивный с пошаговыми подсказками и цветным выводом — и командный (CLI), для скриптов
  • Проверяет хронологию дат сама и умеет обрабатывать несколько коммитов пакетом
  • Даты в формате ISO 8601 и вывод в JSON — удобно вызывать из автоматизации
  • Опубликована в npm: около 500 загрузок за последний год (на июль 2026). Интерфейс на русском и английском (i18next)
TypeScriptNode.jsCommanderInquireri18next
arbaev.com

arbaev.com

Личный сайт-портфолио, который вы сейчас читаете: веб-проекты, городская фотография и заметки о книгах под одной крышей. Собран на Nuxt 4 со статической генерацией — на хостинг уезжает готовая статика, без сервера и базы данных. Проект сам служит кейсом для портфолио: светлая типографика, тёмная тема и две языковые версии.

Метрики Lighthouse

  • 100
    Скорость
  • 100
    Доступность
  • 100
    Практики
  • 100
    SEO

Lighthouse 13.4.1 · Десктоп · замер 27.07.2026

  • Грузится мгновенно и живёт на обычном шаред-хостинге: nuxi generate собирает весь сайт в статику — без бэкенда, базы данных и ежемесячной платы за сервер
  • Контент правится как обычный текст: записи блога, фотосерии и книги лежат Markdown-файлами прямо в репозитории, а zod-схемы не дают опубликовать запись со сломанными полями (@nuxt/content)
  • Две локали через @nuxtjs/i18n: русская версия на /, английская на /en/ — с переключателем языка и корректными SEO-мета для каждой
  • Одинаково читается на телефоне и на мониторе, в светлой и тёмной теме — адаптив и тёмная тема на Nuxt UI v4
  • Больше 1300 фотографий перенесены из старого WordPress с сохранением прежних адресов — картинки раздаются через @nuxt/image в avif/webp
  • Аналитика без единой куки и баннера согласия: счётчик весит 9 КБ вместо 107 КБ у прежней Яндекс.Метрики и не собирает персональные данные
  • Доступность проверена, а не заявлена: контраст текста добит до нормы WCAG AA, ссылки в тексте различимы не только цветом
Nuxt 4Vue 3Nuxt UI v4Tailwind CSS v4@nuxt/content@nuxt/imagei18nTresJSSSG