Как я сделал свой сервис видеозвонков за выходные

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

Как я сделал свой сервис видеозвонков за выходные

Для тех кому лень читать сразу спойлер

– получилось. Вот ссылка:

Всем привет! Меня зовут Витя, я продакт-менеджер в СДЭК и всю жизнь увлекаюсь IT. Еще в 2018 году рассказывал про потенциал ИИ (да, до того как это стало мейнстримом).

Вот мой рассказ о том, как не программист на вайбкодил сервис.

Хронология событий

9 сентября

Вижу пост моего знакомого о том, что он за выходные навайбкодил сервис видео звонков (Арсений, привет!). Затестил. Работает.

Пятница, 12 сентября, утро.

Один из коллег спросил в общем чате: «Как вы созваниваетесь по видео с родными?», отвечаю ему кидая список сервисов, которыми пользуюсь и ссылку на тот сервис, что знакомый навайбкодил.

Пятница, 12 сентября, вечер.

Сижу и думаю: «А у него-то звонилка только на двоих, а мне нужно подключить и маму и сестру. Да и вообще, все эти истории про "навайбкодил" обычно пишут программисты, а тут автор не только программист, так еще и опыт в WebRTC имеет. А что если я попробую сделать то же самое, но без бэкграунда разработчика и знаний WebRTC?».

Пятница, 12 сентября, вечер-ночь.

Понимаю, что не хочу делать это в Cursor, так как не знаю как потом выкладывать разработку, если получится, ищу сервисы, которые умеют размещать проекты у себя. Выбор пал на Lovable.

Регистрируюсь в Lovable, трачу 5 кредитов на запрос:

«Создай простой сервис видеозвонков. Пользователь создает ссылку, отправляет её друзьям, и они могут общаться без регистрации».

Получаю базовую структуру – но ничего не работает.

Кусок моей переписки с Lovable в начале разработки
Кусок моей переписки с Lovable в начале разработки

Суббота, 13 сентября, утро.

Жду бесплатные кредиты (они обновляются каждый день), приглашаю «друзей» (два моих же Gmail-аккаунта) и получаю еще 20 кредитов (по 10 за аккаунт). Жгу их, получаю версию, где я вижу себя и вижу, что кто-то подключается, но видео и звук не передаются.

Воскресенье, 14 сентября.

Еще одна попытка. Гость и автор не видят и не слышат друг друга. К тому же вместо надписи «Free credits reset 15 Sep» (завтра) появляется «Free credits reset 01 Oct». То есть 5 бесплатных кредитов теперь будут только через две недели, а не на следующий день.

Понимаю, что если не придумаю способ продолжить разработку, то заброшу. Вариант 1 – регать еще gmail аккаунты и "приглашать" их. Вариант 2 – придумать что-то еще.

Выбираю вариант 2.

Читаю, что Lovable умеет выгружать код в GitHub и обратно подтягивать его. Вот и выход: я могу дорабатывать проект в другом месте и потом запускать его снова в Lovable без серверов, БД и прочих заморочек.

Выгружаю код, открываю в Cursor, прошу его сделать правки и вижу, что в интерфейсе Lovable появилась кнопка Update по клику проект обновляется из моего github. Круто! По прежнему звонилка не работает, но можно продолжать разработку не дожидаясь кредитов от Lovable.

Воскресенье, весь день.

Параллельно с домашними делами, прогулкой, игрой с детьми и едой пишу запросы в Cursor. В основном это было:

«Ничего не работает, добавь логи, чтобы ты сам мог понять, в чем проблема».

Запускаю звонок на двух ноутбуках, скидываю Cursor логи гостя и автора, повторяю так весь день. Результат: гость видит и слышит автора, автор – нет.

Понедельник, 15 сентября, вечер.

Ставлю себе дедлайн: максимум два часа и бросаю. Делаю последнюю сборку, открываю на двух устройствах – ноут и смартфон, опять вижу, что юзер подключился, но ни видео, ни звука ни у одного из юзеров. Не получилось. Решаю прекратить работу над проектом, переключаюсь на другую вкладку в ноуте, откладываю телефон в сторону. Через какое-то время беру телефон в руки и вижу, что он показывает мне картинку с камеры ноута! Открываю вкладку где была открыта звонилка и вижу видео с камеры смартфона. Включаю звук, он тоже есть! АФИГЕТЬ! Значит все получилось, просто коннект как-то долго делается. Кидаю логи в Cursor, рассказываю ему этот кейс, еще пару итераций и... ПОЛУЧИЛОСЬ!

И автор, и гости стали видеть и слышать друг друга.

Кидаю ссылку в семейный чат. Созвон с мамой, тёщей и сестрой! Всё работает!

Скриншот сделала моя теща с планшета и она отказалась включать камеру по собственному желанию, а не потому что звонилка не работает. На скрине видно, что есть еще отладочные всякие штуки :)
Скриншот сделала моя теща с планшета и она отказалась включать камеру по собственному желанию, а не потому что звонилка не работает. На скрине видно, что есть еще отладочные всякие штуки :)

Первые пользователи сразу нашли пару багов:

– с VPN звонок не запускался, там какие-то особенности, когда трафик идет через VPN. Сказал об этом Cursor’у – исправил с одного промпта.

– видео не зеркалилось. Пользователи привыкли, что видят себя «как в зеркале». Тоже фикс за один промпт.

– отладочные элементы занимают слишком много пространства и пугают пользователей, фикс за один промпт.

Вторник, 16 сентября, вечер.

Пишу эту статью, добавляю страницу для донатов, правлю озвученные баги и те, которые сам словил.

Что теперь

Сравнивать мой сервис с Google Meet или Zoom, конечно, смешно – тут всё намного проще. Но сам факт, что оно работает, – это пушка-бомба и очень заряжает меня!

Если хотите потестить или просто позвонить родным – велком simple-call-link.lovable.app/ . А если понравится, можете задонатить – это еще сильнее замотивирует развивать проект дальше.

Предложения и идеи можно кидать в комменты или на почту: v.d.chernogorov@gmail.com

Инсайты, комментарии и советы

– Lovable – круто, чтобы начать и если не хочется заморачиваться с выкладыванием проекта.

– Код Lovable можно дорабатывать вне платформы.

– Даже на бесплатном тарифе в Lovable можно скрыть плашку "Сделано в lovable" – для этого мне потребовался всего один запрос в Cursor и он написал JS код, который скрыл плашку :).

– Просите нейронку добавлять логи, так вам не придется подбирать слова, чтобы объяснить ситуацию, просто скопируйте логи и отправьте их. Мы с Cursor прошли 100500 итераций: я скидывал логи, он смотрел и говорил, что не понимает, почему не работает, но есть предположение. Чтобы проверить, добавлял еще логов, а мне надо было протестировать и прислать новые.

– Не забудьте удалять лишние логи, иначе будете скидывать нейронке простыню текста, а она будет дольше думать и больше тратить кредитов.

– Меняйте чаты в Cursor. Один чат – одна задача (ну если это мелкие правки текста, можно закинуть разом). Чем больше загружен контекст, тем хуже она работает. По моим наблюдениям, если контекст загружен на 80% и выше – можно не надеяться, что задача будет выполнена.

– В Cursor есть кнопка recent changes и возможность ссылаться на прошлые чаты, но лучше всё равно кратко объяснять контекст при переходе в новый чат, если хотите продолжить задачу.

– Разберитесь с гитом! Раньше я всё делал локально. Сейчас использовал гит: Cursor сохранял изменения в нем и оставлял описания изменений. Это помогало ему же ориентироваться в том, что уже сделано и какие подходы пробовали. До этого иногда мы с Cursor ходили по кругу.

– В Cursor не всегда нужен «самый дорогой» режим (gpt5, claude4). Этот проект я сделал в режиме Auto – и по ощущениям он лучше анализирует прошлые изменения.

– Из опыта: Claude хорош в креативе (UI/UX, дизайн), GPT-5 – в логике и больших кусках кода. Но как и написал выше – можно довериться режиму Auto.

Может, что-то еще из инсайтов вспомню, но с ходу всё. Если есть вопросы – пишите, постараюсь ответить.

18
3
1
10 комментариев