Личный опыт с вайбкодингом пет-проектов
Я 30 лет проработал в ИТ. Но практически никогда не писал пет-проектов, потому что знал: брошу их раньше, чем допишу до логического конца. Зная себя, я понимал, что мотивации активно писать что-то не ради денег мне бы хватило максимум на месяц-два. А за это время в одиночку сложно написать что-то действительно хорошее.
Но! Тут случился ИИ. И всё закрутилось :)
Я решил, что это отличная возможность — и написать что-то полезное для себя, и потренироваться в использовании ИИ, и попробовать фреймворки и технологии, с которыми не работал в продакшене.
Стоит отметить, что последние чуть более 10 лет я работал фронтендером, писал в основном на Angular в больших корпорациях. Это предполагает, что ты часть большой команды и самостоятельно мало что можешь поменять в уже существующей системе. Максимум — можешь навести порядки в своём подразделе, да и то с оглядкой на коллег. Обычно за общую архитектуру отвечает архитектор, причём даже не из твоей команды, а товарищи, стоящие на несколько уровней выше в иерархии.
Но эти времена, насколько я понимаю современные тренды, стремительно уходят в прошлое. ИИ убивает узкую специализацию. Уже сейчас спрос на просто фронтендеров, пишущих на чём-то одном (React/Vue/Angular) и больше ни на чём, стремительно исчезает. Джунов почти не нанимают, мидлы и сеньоры тоже в большой опасности. Фуллстэки снова популярны, хотя ранее они почти исчезли. Но сейчас один разработчик с ИИ-агентом способен заменить команду разноплановых спецов. Код для этого писать самому уже не надо, но желательно уметь читать то, что написал ИИ. Без инженерного понимания системы «навайбкодить» некий прототип, даже как-то работающий, наверное, можно. Но вот нечто поддерживаемое — уже нет. ИИ без присмотра пишет чересчур сложно, и совсем не факт, что его случайно получившаяся архитектура подойдёт для дальнейшего развития.
Первый проект
Итак, первая попытка у меня была такая: я решил написать себе аналог платного сервиса Snowball Income для анализа инвестиционного портфеля. Надо сказать, что последние несколько лет у меня есть ИИС в Тинькове, хоть денег там и не слишком много, но что-то да есть. Snowball Income очень хорош для этих целей, но у него есть большой недостаток — за него надо около 3 тысяч в год платить.
Примерно за месяц с помощью сначала Qwen Code (тогда он был бесплатным, но халява кончилась), а потом Open Code (подписка стоит $5 в первый месяц, $10 — в последующие, позволяет сжечь токенов на $60 за этот месяц) я сделал работающий MVP. На всякий случай я оставил там задел, чтобы можно было развернуть это на сервере и пускать туда других людей за подписку, но до такого состояния проект я всё же не довёл. Зато для личного использования всё уже работает: данные стягиваются с Тинькова по их API, кладутся в PostgreSQL, анализируются и показываются на фронте, который я для тренировки сделал на VueJs, а не на привычном мне Angular. Считаются общие и среднегодовые доходности по каждому инструменту с учётом купонов/дивидендов, общие доли акций/облигаций/фондов, можно смотреть списки всех операций по конкретному инструменту и т.д.
Проект оказался очень полезным — и с точки зрения функционала, и с точки зрения изучения технологий. В нём я потрогал PostgreSQL (с Prisma ORM), Node/Express, VueJs, а также Docker, Vite (до этого в продакшене работал в основном с Webpack), Vitest для юнит-тестов и посмотрел на работу с gRPC (до этого использовал в основном REST API). Вручную, чтобы связать это всё вместе, у меня ушло бы не меньше полугода, если ничего больше не делать, а скорее всего я бы всё равно не довёл это до ума. Поскольку это всё же имеет хоть и крошечный, но всё-таки потенциал для коммерческого использования (я очень низкого мнения о своих маркетинговых и бизнес-скиллах), проект я оставил в приватном репозитории.
Второй проект
Следующая идея пришла мне в голову по мотивам ещё одного хобби — нумизматики. Я занимаюсь ей уже больше 15 лет, но больше из интереса, а не с инвестиционными целями. Никаких супердорогих монет у меня нет, но есть, например, почти полная погодовка английских шиллингов XIX–XX веков. Чтобы не забыть, за какой год у меня есть монета, а за какой нет, где и за сколько я её приобрёл, я вёл табличку в Google Sheets. Это было с одной стороны удобно — есть доступ и с компа, и с телефона, но всё же не очень функционально. Изображения монет туда можно вставить прямо в ячейку, но разрешение будет низкое. Можно хранить изображения отдельно в облаке, а в табличку вставлять ссылки — но это тоже кривое решение. Готовые менеджеры коллекций монет хоть и существуют, но это в основном самоделки, которые каждый пишет под своё видение.
В итоге я решил написать свой менеджер коллекций, с тем самым преферансом и поэтессами, которые нужны именно мне. Опять же, без ИИ писать это мне бы и в голову не пришло.
На этот раз я не хотел делать онлайн-проект — не вижу коммерческих перспектив, слишком нишевая штука. Поэтому я решил сделать десктопное приложение на Electron (поскольку я всё же фронтендер, UI мне проще писать на JS/TypeScript) и сразу выложить его в публичный репозиторий на GitHub. За счёт того, что Electron кроссплатформенный, без лишних усилий получилось сделать приложение сразу для Mac и Windows. PostgreSQL для такого не нужен, поэтому я обошёлся SQLite для базы данных. Снова для UI взял не Angular, а React/Tailwind CSS/Zustand — просто чтобы потренироваться с тем, что не использовал в продакшене.
Кроме самого менеджера коллекций я добавил возможность экспорта в Excel/его аналоги, создание PDF с данными и изображениями монет, а также экспорт всех данных для бекапа или импорта на другом компе. А потом решил прикрутить туда ИИ для поиска информации о монетах и текущих ценах на аукционах.
Сначала сделал механизм для ручного экспорта/импорта JSON с данными для использования в бесплатных ChatGPT/DeepSeek/Qwen. Это работает довольно хорошо, но требует не автоматического, а ручного взаимодействия с ИИ-чатиком. Потом решил поэкспериментировать с автоматическими запросами к ИИ через API. Выяснил, что локальные, да и онлайн-модели мало что знают о нумизматике и много галлюцинируют. Для онлайн-моделей я использовал OpenRouter, в котором можно выбрать почти любую LLM. Выводы: без веб-поиска запросы о нумизматике не работают (видимо, нумизматические каталоги не попали в обучение), поэтому я добавил веб-поиск. Но с ним запросы выходят довольно дорогими. Даже дешёвая DeepSeek V4 Flash с веб-поиском тратит на один запрос больше цента. Если запросов очень много, деньги будут улетать. Хотя теоретически можно потратить несколько долларов на сбор информации о монетах. Но чтобы это заработало, нужно иметь API-ключ от LLM-модели — это хоть и не бином Ньютона, но не уверен, что все нумизматы с этим легко справятся.
Разрабатывал я всё на Mac, но ради проверки развернул себе виртуалку с Windows — инсталлятор сработал, всё установилось и там. Правда, так как у меня нет Apple Developer ID, после установки из .dmg/.exe операционки ругаются, что приложение создано неизвестным разработчиком, но это легко обходится.
Ссылка на этот проект - https://github.com/Sindicollo/coins-collection
Опыта я из этого процесса вынес довольно много, на проде невозможно попробовать столько технологий. По книжкам их тоже учить не реально, без реального проекта все моментально вылетит из головы. А с вайбкодингом - отличный вариант.