Дисклеймер: Это статья-проверка на прочность. Проект работает на PHP + MySQL + Polling каждые 3 секунды. Если вы кликнули по ссылке, а сервер отдаёт 502 или упорно молчит — значит, поллинг взял своё под нагрузкой Хабра, а я прямо сейчас судорожно оптимизирую запросы и чиню базу!
Привет, Хабр.
Эту статью я собирался опубликовать уже несколько месяцев, но каждый раз находилась новая причина этого не делать. То хотелось закончить еще одну функцию, то исправить очередной баг, то немного привести в порядок интерфейс. Каждый раз казалось, что проекту нужно совсем немного времени, и тогда его уже можно будет спокойно показать людям.
Но недавно я понял одну простую вещь. Если постоянно ждать идеального момента, он, скорее всего, никогда не наступит. Проект всегда можно сделать немного лучше. Всегда найдется функция, которую хочется добавить, кусок кода, который хочется переписать, или экран, который, как кажется, можно сделать красивее.
Поэтому сегодня я решил остановиться и показать проект таким, какой он есть сейчас. Не идеальным, не законченным, зато настоящим. И если после этой статьи окажется, что половину backend’а стоит переписать — значит, публиковал я ее не зря.
С чего все началось
Наверное, делать собственный мессенджер в 2026 году — не самая очевидная идея. Сегодня есть Telegram, WhatsApp, Signal, Discord и еще множество отличных сервисов. На первый взгляд кажется, что эта ниша давно занята и придумать здесь уже нечего.
Но меня долго не отпускала одна, казалось бы, совершенно обычная мысль. Почему практически любой современный мессенджер начинается с просьбы ввести номер телефона? Для большинства людей это давно стало нормой. Меня же всегда немного смущало, что обычное общение обязательно привязывается к SIM‑карте.
Хотелось максимально простого сценария: почта, пароль, подтверждение письма — и можно пользоваться. Без SMS, без номера телефона, без необходимости оставлять еще один персональный идентификатор.
Конечно, номер телефона решает множество задач. Он помогает бороться со спамом, искать знакомых и восстанавливать доступ к аккаунту. Но мне стало интересно, можно ли построить сервис, который сможет нормально существовать и без этого. Так постепенно и появился Conlink.
Один разработчик против целого проекта
Все это время над проектом работал только я. Без команды, без инвестиций, без архитектора, который мог бы вовремя сказать: «Не делай так, потом сам же будешь переписывать». Практически каждое решение приходилось принимать самостоятельно. Иногда удачное, иногда — не очень.
Если честно, в начале разработки я вообще редко думал о красивой архитектуре. Главная цель была намного проще: сделать так, чтобы проект вообще начал работать. И уже потом постепенно улучшать все остальное. Именно поэтому некоторые решения внутри сейчас выглядят далеко не идеально. Но благодаря этому проект вообще появился.
Что уже работает
На сегодняшний день полностью готова веб‑версия. Сейчас уже можно:
-
зарегистрироваться по электронной почте;
-
создавать личные чаты;
-
создавать групповые чаты;
-
приглашать пользователей по ссылке;
-
обмениваться сообщениями;
-
пользоваться проектом без привязки к номеру телефона.
Мобильные приложения пока находятся в разработке. Сейчас основная работа идет над звонками, push‑уведомлениями и адаптацией интерфейса под Android и iOS.
Почему Polling, а не WebSocket?
Наверное, именно этот вопрос появится в комментариях одним из первых. И это абсолютно нормально. Да, современные мессенджеры чаще всего используют WebSocket. Да, я понимаю его преимущества. Но когда ты один делаешь первый MVP, постоянно приходится выбирать между двумя вариантами: первый — сделать максимально правильно, второй — сделать так, чтобы проект вообще появился. Я выбрал второй.
Поэтому сейчас клиент просто обращается к серверу раз в несколько секунд и спрашивает: «Есть новые сообщения?» Если есть — получает их. Если нет — получает пустой ответ.
Backend написан на PHP, база данных — MySQL. Никаких Redis, никаких очередей, никаких WebSocket. Все максимально просто. Можно ли сделать лучше? Безусловно. Но именно такая архитектура позволила мне за относительно короткое время получить полностью рабочий продукт, а не бесконечно строить инфраструктуру.
Самое честное признание
А теперь о том, что меня действительно беспокоит. Чем дольше я работаю над проектом, тем сильнее понимаю, что постепенно перестал замечать собственные ошибки. Когда несколько месяцев подряд смотришь на один и тот же интерфейс, он начинает казаться абсолютно логичным. Когда каждый день работаешь с одним и тем же кодом, многие спорные решения перестают бросаться в глаза. Именно поэтому мне сейчас особенно не хватает взгляда со стороны.
Backend пока далек от идеала. Практически каждый запрос поллинга приводит к обращению в MySQL. Многие SQL‑запросы можно сделать эффективнее. Некоторым таблицам явно не хватает оптимизации. Где‑то стоит добавить кэширование, где‑то полностью пересмотреть подход. И это нормально. Я прекрасно понимаю, что проект еще находится на стадии, когда многие решения неизбежно придется менять. Именно сейчас сделать это проще всего.
Сегодня Conlink выглядит так. Это еще не финальная версия, но уже полноценный рабочий продукт, который можно попробовать и помочь улучшить обратной связью.
Именно поэтому я пишу эту статью
Нет, я не жду комментариев в духе «классный проект». Такие слова, конечно, приятно читать, но пользы от них немного. Гораздо интереснее услышать совсем другое: где вы нашли баг, какая функция показалась неудобной, какое место вызывает вопросы, где, по вашему мнению, можно улучшить производительность, какие архитектурные решения выглядят спорно, есть ли потенциальные проблемы с безопасностью.
И, конечно, очень интересно услышать мнение об интерфейсе. Потому что если разработчик долго смотрит на собственный продукт, он почти неизбежно перестает замечать вещи, которые новый пользователь видит буквально за несколько минут.
Если захотите посмотреть проект
Если после статьи вам стало интересно, как все это выглядит сейчас, посмотреть веб‑версию можно здесь. Буду благодарен любой обратной связи. Особенно если она окажется критической. Иногда один подробный комментарий с разбором ошибок помогает проекту гораздо больше, чем несколько недель самостоятельной разработки.
Вместо заключения
Я прекрасно понимаю, что этот проект пока далек от идеала. Наверняка в нем есть архитектурные ошибки, найдутся проблемы с производительностью, многие вещи можно было реализовать намного лучше. Но если бы я продолжал ждать момента, когда все станет идеально, эта статья так и осталась бы в черновиках.
Поэтому сегодня я просто решил показать проект сообществу. Без громких обещаний, без заявлений о том, что я сделал «новый Telegram». Просто как результат нескольких месяцев работы одного разработчика, который очень хочет понять, что получилось хорошо, а что пора менять уже сейчас.
Если найдете ошибку, баг, неудачное решение или просто поделитесь своим мнением — буду действительно благодарен.
Спасибо, что дочитали.
ссылка на оригинал статьи https://habr.com/ru/articles/1066668/