Calab, мессенджер, который за одни сутки написали нейросети
Calab, мессенджер, который за одни сутки написали нейросети

Пятница, 25 сентября, 22:35. Я отправляю первый промпт: стену текста без единой запятой. В ней вперемешку всё сразу: хочу рабочий продукт вроде Discord. Чаты там сделаны так, что меня бесит, поэтому чат будет как в Telegram. Звук и стабильность как в Zoom, с передовыми кодеками. Ещё голос, роли и права, стрим экрана, PostgreSQL и отдельной строкой «эхо не должно быть совершенно».

Вечером следующего дня версия 0.3.1 уже стояла в проде: подписанные сборки под macOS, Windows и Linux, веб‑версия, лендинг.

Я отправил 90 сообщений, 29 из них были скриншотами с подписью «сделай как тут». Строчки кода я не написал. Ни одного теста не запустил. Всё остальное сделали модели.

Продукт назвали Calab, код лежит на GitHub. Дальше будут цифры, стоимость в долларах и список мест, где нейросети ошибались. (Без него история выглядит слишком хорошо, я бы и сам ей не поверил.)

Что вылезло из этого промпта

Главный экран из релизной сборки: голосовая комната слева, канал команды с вложениями справа
Главный экран из релизной сборки: голосовая комната слева, канал команды с вложениями справа

Calab — self‑hosted мессенджер для команды. Если вы уже подумали «ну, формочки да списки», вот что внутри:

  • Голосовые комнаты. Зашёл и слышишь коллег. Кодек Opus с DTX: в тишине пакеты не отправляются вообще, трафик 0,1 кбит/с, на речи 30–45 кбит/с. Шумоподавление RNNoise (нейросетевое, работает на устройстве) и эхоподавление AEC3 из стека WebRTC.

  • Стрим экрана в AV1 с simulcast. Отправитель кодирует картинку в нескольких качествах, зритель получает тот слой, который реально видит. Слой, на который никто не смотрит, не кодируется. Текст остаётся резким, код или документ едут на 20–300 кбит/с. До трёх стримов на комнату.

  • SFU на LiveKit. Представьте вокзального диспетчера: он не смешивает потоки в кашу, а раздаёт каждому нужные.

  • Работа за файрволом. Если UDP режут, соединение падает на TCP, потом на TURN/TLS на порту 443, и снаружи это выглядит как обычный HTTPS. Один публичный IP, проверено из‑за VPN.

  • Чат. Пузыри как в Telegram, реакции, закрепы, упоминания, превью ссылок, поиск с морфологией. Гости заходят по ссылке без регистрации.

Сервер на Go, клиенты на Electron, плюс веб и мобильный веб, четыре языка. Образ сервера весит около 20 МБ и в простое занимает около 40 МБ оперативки.

Развёрнутый стрим экрана, справа список зрителей
Развёрнутый стрим экрана, справа список зрителей

Что

Сколько

Строк исходников

92 972 (Go 28 471, TypeScript 60 871, остальное proto, SQL, CSS)

Коммитов в main

282, из них 31 мержи веток агентов

Релизов

7, от v0.1.0 до v0.3.2

Тесты

60 Go‑файлов против настоящих Postgres, Valkey и LiveKit, 92 unit‑теста клиента на 750+ кейсов, 13 e2e‑спеков, визуальные эталоны

Документация

37 документов, 22 ADR, TESTING.md с ~150 ручными сценариями

Локализация

1 186 ключей на четыре языка

ADR (architecture decision record) — короткая запись «что решили и почему». Их пригодится держать в репозитории, я вернусь к этому ниже.

Ночь, когда я ушёл в «отпуск»

Первый час лид, то есть Fable 5.1, читал про кодеки, TURN и эхо и выдал 11 документов по архитектуре и первые ADR. Я вмешался дважды.

  • Первый раз: «меня смущает такой высокий битрейт». В расчётах стояли 435 Мбит/с как худший случай для SFU, их переписали в потолки против типичного трафика.

  • Второй раз: «бэк на Go, максимально лёгкий сервер».

Около полуночи, через полтора часа после промпта, случился MVP. Скелетом это не назвать: два клиента созванивались через SFU на стенде и показывали друг другу экран. Мы с Fable‑лидом проверили вдвоём, звонок работал. Оставшиеся сутки ушли уже не на «чтобы работало», а на «чтобы был продукт».

Перед сном я написал модели: «Не торопись, у тебя есть целый год, чтобы сделать приложение. Ах да, забыл сказать: я ухожу в отпуск, поэтому вопросов не задавай, сам решай, что куда». И лёг.

Год модели не понадобился. Пока я спал, параллельно писались сервер, клиент и инфраструктура, прошли четыре круга ревью и независимое UX‑ревью по скриншотам. Никто не спросил, какой домен, где хранить бэкапы и как подписывать сборки. Решили сами.

Проснуться после «отпуска» длиной в одну ночь и увидеть инфраструктуру, которую ты не поднимал, и продукт, которого ты не видел, — самая жуткая часть истории. Стенд жил с Valkey, бэкапами, харднингом контейнеров и TURN на 443. Домены заведены, macOS‑сборка подписывалась и нотаризовалась в GitHub Actions, фид обновлений лежал в S3.

В 10:00 я открыл ноутбук и увидел, что Опусы гоняют визуальные тесты по 300 с лишним экранам подряд…

Первое сообщение дня было не про продукт: «Ты чего творишь, твои агенты там бесполезные тесты гоняют, а ну‑ка оптимизируй процессы, всё должно работать максимально продуктивно и не жрать токены как самолёт». За ночь подписка за $200 потеряла 30% недельного лимита. (Это, кстати, хорошая цена: за те 30% появились сервер, клиент, стенд и подписанные сборки.)

Второе открытие утра мне понравилось больше. Я открыл прод проверить чат, а там переписка, и не моя. Агенты завели себе аккаунты в мессенджере, который сами написали, и общались между собой: кидали друг другу скриншоты экранов, ставили реакции, договаривались «глянешь чек‑лист релиза? через пять минут собираемся в Переговорке» и решали, кто сегодня дежурит по стенду. Это прямо восстание машин, только они пока просто работают.

Утренний Calab в светлой теме, до редизайна: агенты обсуждают чек-лист релиза, никого из людей в канале нет
Утренний Calab в светлой теме, до редизайна: агенты обсуждают чек‑лист релиза, никого из людей в канале нет

Fable‑лид разобрал причины (долгоживущие агенты с огромным контекстом, общее рабочее дерево, ревью, порождающие ревью, полные прогоны тестов) и переписал правила. Дальше всё шло свежими агентами.

Суббота по часам

Время

Что происходило

Релизы

10:00–13:00

Скриншоты Discord, “изучи дизайн, у нас всё устарело”: островок голоса внизу, карточка комнаты, пузыри. Выбрали лицензию

v0.1.0, v0.1.1

13:00–16:00

Веб‑камера. Я принёс шесть багов: Caps Lock не назначается, голос не подключается, приложения нет в списке «Запись экрана», нет личных сообщений, скачивание через белый экран, нужна мобильная версия

v0.2.0, v0.2.1

16:00–18:00

ЛС, мобильный веб, локализация, эхо на колонках, индикация речи

–

Вечер

Тест с iPhone и открытым Discord под рукой

v0.3.0, v0.3.1

После полуночи

12 замечаний по интерфейсу, ревизия тестов с 346 снимков до 33 ключевых экранов

v0.3.2

Про хотфикс v0.1.1 отдельно: метод перемещения участников между комнатами есть у LiveKit только в облачной версии. Агенты написали свой и оформили это как ADR-0019.

Заметная часть субботы прошла вообще не за ноутбуком. Я гулял с женой и сидел в парке, а с лидом переписывался с телефона через Orca (в ней видны все агенты и их панели). Скриншоты багов улетали оттуда же. К шести вечера, примерно через 12 часов чистой работы бота, всё из первого промпта уже работало в проде. Дальше шла полировка: разница между «работает» и «не стыдно показать».

Личные сообщения: в моём списке багов их не было, а к вечеру уже были
Личные сообщения: в моём списке багов их не было, а к вечеру уже были

Отдел разработки, в котором нет ни одного сотрудника

Никакого «одного чата с ChatGPT». В Claude Code работала иерархия:

Роль

Модель

Что делала

Лид

Claude Fable 5.1

Архитектура, ADR, постановки, приёмка по скриншотам, мержи, разговоры со мной

Кодеры

Claude Opus 5.5

233 запуска свежих агентов и 13 долгоживущих панелей: стенд, ревью, лендинг, разбор PR

Механика

Sonnet 5

Changelog, переводы, перезапись эталонов, статистика

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

В пике параллельно работало около 12 агентов. Один мучил кодеки, другой разбирался с TURN, третий писал лендинг, четвёртый подтягивал UX по скриншотам Discord. Со стороны это выглядело как отдел разработки, у которого нет ни одного сотрудника.

Orca в полдень 26 сентября: десять агентов проекта, панели стенда и ревью живут по 14 часов, в статусной строке 39% недельного лимита
Orca в полдень 26 сентября: десять агентов проекта, панели стенда и ревью живут по 14 часов, в статусной строке 39% недельного лимита

Я в этой схеме заказчик, мой типичный вклад — скриншот Discord с подписью «хочу такой же UI». Лид превращает это в постановку, агент делает, лид смотрит скриншот результата и принимает или возвращает.

Двенадцать агентов в одном репозитории и без человека — звучит как рецепт хаоса. Хаос был, пока не появились правила. Теперь они записаны в CLAUDE.md, и каждое выучено на ошибке:

  1. Свежий агент на задачу, потом он завершается. Агент с контекстом в сотни тысяч токенов перечитывает его каждым ходом. Это как перед каждой репликой в разговоре заново читать всю переписку за день.

  2. Изоляция. Каждый кодер сидит в своём git worktree (отдельная рабочая копия), со своими портами и тестовыми базами. Пока этого не было, агенты стирали друг другу тестовые данные и откатывали чужие правки.

  3. Агент коммитит сам, лид только мержит и тегирует. Пока лид был единственным коммитером, каждая правка делала лишний круг.

  4. Одно ревью на изменение. Фиксим только блокеры, остальное в бэклог. Иначе ревью порождают ревью.

  5. Тесты только по затронутому. Полный визуальный прогон на машине владельца запрещён: локально 33 ключевых экрана, полная матрица ночью в CI.

  6. Отчёт агента до 15 строк: что сделано, файлы, проверки с цифрами, риски.

И самое скучное, что оказалось важнее всего: документация раньше кода. Архитектура, медиаправила, модель данных, протокол, дизайн‑система, 22 ADR — агенты читают всё это вместо моих объяснений. Спорное решение они оформляют новым ADR, а не правят молча. Если бы я объяснял в чате, у двенадцати агентов было бы двенадцать версий реальности.

Issue вместо письма в поддержку

Самая недооценённая часть истории — это даже не «за сутки». Тот же конвейер продолжает работать после релиза, на задачах от пользователей:

  1. Вы создаёте issue на GitHub обычным текстом, без форм и тикет‑систем.

  2. Нейросеть читает архитектуру и ADR проекта, находит причину, пишет план и оценку риска прямо в issue.

  3. Мейнтейнер смотрит план и нажимает единственную ручную кнопку.

  4. Агент в изолированной ветке гоняет линтеры и тесты и открывает пулл‑реквест с чек‑листом. После мержа выходят тег, запись в ченджлог и сборки под macOS, Windows и Linux.

Зачем нужна ручная кнопка? Issue — это текст от другого человека, и он попадает в контекст агента. Между чужим текстом и кодом должен стоять тот, кто прочитал план глазами. Иначе вопрос «что будет, если в issue написать что‑нибудь коварное» останется без ответа.

Сравните с привычным путём в закрытом облачном мессенджере: письмо в поддержку, квартал в бэклоге вендора, «если совпало с их планами», релиз для всех, может быть, через год. У нас заявлено: план за минуты, PR и релиз за дни.

Счёт: $12400 и куда они ушли

Сводка usage-stats за 22,5 часа: 19 324 ответа моделей, 16 млн токенов вывода, 6,3 млрд токенов чтения кэша
Сводка usage‑stats за 22,5 часа: 19 324 ответа моделей, 16 млн токенов вывода, 6,3 млрд токенов чтения кэша

Итоговые цифры чуть больше, потому что включают ночной v0.3.2. Считаю по прайс‑листу API: Opus и Fable по тарифу Opus‑класса, $15 за миллион входа, $75 за миллион выхода, чтение кэша $1,5. Sonnet — $3, $15 и $0,3.

Модель

Вывод, млн токенов

Чтение кэша, млн

Всего

Opus 5.5, код

14,58

5 741

$10 769

Fable 5.1, лид

2,00

810

$1 499

Sonnet 5, механика

0,33

217

$91

Итого

16,9

6 768

≈ $12 400

По курсу ЦБ на 30 сентября это порядка 1,05 млн рублей.

Теперь посмотрите, куда утекли деньги: 80% ушло на чтение кэша, то есть на повторное чтение контекста агентами, и только около 10% на само написание кода. Кэш дешёв за токен, но токенов там миллиарды, а плата за них растёт с каждым шагом агента. Вайбкодинг, как выясняется, на 80% состоит из перечитывания.

Половина суммы сгорела за первые 15 часов, пока агенты жили по 14 часов и получали задачи «допиши ещё вот это». После перехода на свежих изолированных агентов задача вроде «исправить гонку в reconcile с интеграционным тестом» стала занимать две минуты и около 60 тысяч токенов. Фича с сервером, клиентом и тестами укладывается в 15–25 минут и 150–350 тысяч. По подписке Claude Code выходит на порядок дешевле, но прайс‑лист честнее показывает, что такое «продукт за вечер» в токенах.

Где нейросети ошибались

Ни одна из этих ошибок не прожила в проде дольше одного релиза, и каждая превратилась в правило или тест. Каждая стоила часов и денег.

Голос не подключался при зелёных тестах. Политика безопасности приложения (CSP, набор доменов, к которым странице разрешено ходить) пропускала только *.app.calab.ru, а сервер голоса живёт на соседнем rtc.calab.ru. Домены менялись по ходу, а тесты ходили на localhost и ничего не заметили. Пользователь видел вечное «Переподключение…». Тесты ходят на localhost, а localhost, как известно, всегда прав. Теперь e2e на реальном стенде стоит в релизном скрипте до тега.

Caps Lock, три гипотезы. Я попросил кнопку «говорить по нажатию» на Caps Lock, как в Discord. Гипотеза первая: macOS не отдаёт эту клавишу, нужен патч libuiohook. После «в релизе не работает» появилась гипотеза вторая: патч не попал в бинарь. Но он попал… Настоящая причина в том, что у меня две раскладки и macOS переключает их по Caps Lock, поэтому событие до приложения не доходит. Ремап через hidutil не помог. Третья, рабочая правка: читать физическую клавишу через IOHIDManager, как делает Discord. Модель прошла ровно тот путь, который прошёл бы живой инженер, и ошибалась в тех же местах.

Онбординг: выбор между активацией голосом и push-to-talk. Вокруг этого экрана и разворачивалась история с Caps Lock
Онбординг: выбор между активацией голосом и push‑to‑talk. Вокруг этого экрана и разворачивалась история с Caps Lock

«В эмуляции всё хорошо». Мобильную версию агент проверял в Chromium с эмуляцией iPhone. В настоящем Safari кнопки наезжали друг на друга, внизу оставалась пустая полоса, а автофокус улетал. Тесты переделали под WebKit, но и он не воспроизводит клавиатуру и тулбары Safari, так что последние два бага подтвердились только на телефоне в моих руках.

Остальное — быстрым списком:

  • Ревью порождали ревью: бюджет публикаций потянул второе ревью, оно потянуло уборку гостей, та — флейк тестов. Релиз ждал час. Если ваши ревью порождают ревью, поздравляю, вы изобрели бюрократию, только для агентов.

  • Ветка веб‑камеры трижды переписала больше 300 визуальных эталонов, потому что глобальные правки интерфейса шли по одной.

  • Локальный тест Caddy с боевым доменом дёрнул Let’s Encrypt и выжег лимит сертификатов.

  • Линтер без корневого конфига показал ложный «0 issues», а CI покраснел.

  • Агент предложил звук уведомления из ICQ. Чужие права, так что заменили сначала на свой синтез, потом на мой файл.

Что делал человек

Из 90 сообщений примерно 60 были правками продукта, и почти все они про вкус, а не про технику:

  • А откуда у тебя там 400+ мегабит?

  • Кнопки round, так круче.

  • Скрины в 2x, а то мыло.

  • Слишком большая задержка при отпускании push‑to‑talk, в Discord 20 миллисекунд и ползунок.

  • Гигантский аватар, обводка выезжает, шрифты меньше.

Такие замечания модель не сгенерировала бы сама. Не потому что не может, а потому что ей не видно, как продукт ощущается в руках. Человек здесь вне цикла разработки, но в цикле качества, и это, пожалуй, главный вывод про роли.

Так умирает ли SaaS

Аккуратный ответ: умирает SaaS как «набор фич за подписку». Если ценность продукта — экраны, формы, роли, уведомления и интеграции, один человек с Fable повторит это за выходные, причём с автотестами, документацией и CI, которых у половины стартапов нет. Мы проверили это на продукте, где есть WebRTC, SFU, кодеки и нативные хуки, то есть на «сложной части».

Что за вечер не повторяется и остаётся бизнесом:

  • Дистрибуция и доверие. У нас есть продукт, у Discord есть сотни миллионов людей.

  • Эксплуатация. Стенд, бэкапы, сертификаты, инциденты, апдейты LiveKit. Сутки дали версию 0.3, а не «готово навсегда».

  • Реальные железо и сети. Эхо на колонках, VPN на Windows в корпоративной сети, iPhone в руках: модель тестирует только то, что умеет эмулировать.

  • Вкус. Все «как в Discord, только у нас некрасиво» пришли от меня.

  • Право и данные. Лицензии зависимостей, чужие звуки, персональные данные: модель напомнит, решает человек.

Честная формулировка такая: инженерная себестоимость продукта упала в 20–50 раз, а всё остальное нет. Ров вокруг SaaS теперь не в коде.

И чтобы никто не подумал, что я объявил Discord покойником: Calab рассчитан на 20–30 человек одновременно в голосе и до трёх стримов в комнате. Сквозного шифрования пока нет, медиа идёт через ваш медиасервер. Убийцей Discord это не назвать. Скорее это ответ на вопрос «а во что мне обойдётся свой мессенджер, если не платить за место каждый месяц».

Как повторить

Скачать готовый установщик актуальной версии для нужной операционной системы (Win, Mac, Linux) можно в разделе Releases:

Если же хотите собрать проект из исходников, читайте далее.

Начну с простого: развернуть Calab у себя можно тремя командами. Нужен Linux‑хост с публичным IP, Docker с Compose и домен с A‑записями app, rtc и turn.

git clone https://github.com/itrcz/calab.git && cd calab
cp infra/docker/.env.example infra/docker/.env   # DOMAIN и секреты, см. комментарии
infra/docker/deploy.sh                           # Caddy, LiveKit, API, Postgres, Valkey

Порты: 80 и 443 по TCP, 443 по UDP, 7881 по TCP, 7882 по UDP. Сертификаты Let’s Encrypt выпустятся сами. Первый зарегистрированный пользователь становится владельцем сервера, остальные приходят по инвайтам. Полная инструкция лежит в docs/06-deployment.md.

Если хочется повторить сам подход, вот сжатая инструкция:

  • Пишите документацию раньше кода. Агенты читают её вместо ваших объяснений.

  • Вводите правила с первого дня, а не когда кэш разрастётся.

  • Отдайте стенд и релизы одному агенту со скриптом, который делает префлайт, деплой, проверку, тег, фид и останавливается на первом FAIL.

  • Считайте токены и смотрите на чтение кэша, а не на вывод.

  • Держите человека в цикле качества: скриншоты «как здесь», короткие «не так», проверка на реальном устройстве.

С тех пор проект подрос. В readme сейчас, кроме описанного выше, есть календарь с CalDAV, доски задач в духе Linear, заметки, записи встреч с расшифровкой и боты. Бот — это участник с токеном, вот его минимальный вид:

import { Bot } from '@calaba/bot-sdk';

const bot = new Bot(process.env.BOT_TOKEN, { server: 'https://app.calab.ru' });
bot.on('message', (m) => bot.reply(m, m.content));
await bot.start();
Доска задач в Calab, канбан-режим
Доска задач в Calab, канбан‑режим

Кому написать

А вот как можно обратиться с чем‑то насчёт Calab:

  • Баг или идея — issue на GitHub. Конвейер из статьи ответит планом.

  • Коммерческая лицензия, установка в ваш контур, SSO/OIDC, боты и вебхуки, интеграции с CRM и трекерами, брендинг, сопровождение с договором и закрывающими документами — оставьте заявку (ответим в течение рабочего дня) или напишите на it@gptunnel.ai. Там же можно узнать про облачные тарифы Team и Enterprise.

  • Такой же конвейер под ваш продукт — напишите нам.


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

Мне любопытно, как это выглядит у вас. Какие правила вы уже записали в CLAUDE.md или аналоге после очередного факапа? Где у вас проходит граница между «пусть решает модель» и «это я проверю руками»? Возможно, главный вопрос этой истории даже не «умер ли SaaS», а «что останется нам, когда код перестанет быть узким местом», и мне очень хочется услышать на него ответ.

Илья Трикоз

разработчик и сооснователь GPTunneL

Комментарии (13)


  1. svl87
    30.09.2026 18:20

    Блог компании GPTunneL

    я за сутки навайбкодил сервис GPTunnel...


    1. foldr
      30.09.2026 18:20

      Пришлось создать компанию, чтобы отбить $12400 :)


  1. johnnyBoy1984
    30.09.2026 18:20

    хорошая статья, спасибо что поделились опытом.


  1. born_to_surf
    30.09.2026 18:20

    Впечатляет. 30% недельного лимита за 2 дня работы агентов как буд-то даже мало...

    Использовались ли какие-то внешние скиллы?

    Fable самостоятельно догадался брэйнштром провести перед разработкой и 20 файлов доков создать?


    1. Master_AI Автор
      30.09.2026 18:20

      30% ушло именно за ночь, а к полудню было уже 39%

      Внешние скиллы не были прописаны

      Ну Claude всегда проводит брейншторм для сложных задач. Да, 22 ADR-записи он догадался создать сам (не было указано в моем промпте), видимо это стандартное его поведение для крупных проектов.


  1. Dhwtj
    30.09.2026 18:20

    А 3400 issues потом закрыть сможете?

    https://github.com/discord/discord-api-docs/issues

    Вы не сможете собрать миллионы бета тестеров. Потому, ищите чужие issues, собирайте свою базу тестов, делайте продукт зрелым.

    Из проектов вайбкодеров уважаю только один

    https://github.com/MrWaip/svelte-rs

    И ценность там вовсе не в коде, а в огромном наборе тестов, которые автор так монетизирует.


  1. Kot_na_klaviature
    30.09.2026 18:20

    SaaS умер?..

    Конечно умер. Яндекс, Гугл, Майкрософт, Адоб итд все позакрывались. И Хабр тоже закрылся. Не выдержали конкуренцию от вайбкодеров.


  1. gudron
    30.09.2026 18:20

    Какие же высокие у вас цены, я думал аналогичные российские сервисы оборзели, но нет.

    Если кратко - калькулятор токенов у них вводит в заблужение, цена там раз в 10 меньше чем будет в реальности.

    Закинул чутка, погонял на qwen3.8-flash хватило на 2 промта изменить структуру одного markdown файла. закидывал 390 р.


    1. Master_AI Автор
      30.09.2026 18:20

      Можно подробнее и со скриншотами?
      1) Что с чем не совпало в калькуляторе токенов (который заранее показывает стоимость сообщения в рублях);
      2) Как выглядел Markdown-файл?

      Я только что обменялся парой крупных сообщений с qwen3.8-flash – вышло 0,26 р.


  1. fedorro
    30.09.2026 18:20

    SaaS умрет если в этот навайбкоженый сервис придет столько-же пользователей, как в Discord, и он не умрет)


  1. GTbrainONE
    30.09.2026 18:20

    Мне кажется, такие кейсы скорее показывают не смерть SaaS, а резкое удешевление разработки MVP. Сам код всё меньше становится барьером, зато сильнее начинают решать дистрибуция, поддержка, удержание и способность понять, что людям реально нужно. Сделать аналог Discord за сутки - одно, а довести его до продукта, которым стабильно пользуются месяцы, уже совсем другая задача.


    1. Master_AI Автор
      30.09.2026 18:20

      Еще предстоит проверить устойчивость при долгом использовании. Проект уже расширяется, обращения пользователей обрабатываем через конвейер issue -> план -> PR


  1. antirek
    30.09.2026 18:20

    круто получилось!