Дисклеймер: Это статья-проверка на прочность. Проект работает на 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». Просто как результат нескольких месяцев работы одного разработчика, который очень хочет понять, что получилось хорошо, а что пора менять уже сейчас.
Если найдете ошибку, баг, неудачное решение или просто поделитесь своим мнением — буду действительно благодарен.
Спасибо, что дочитали.
Комментарии (17)

Lord_of_Rings
04.08.2026 17:00Если хотите получить максимум фидбека и советов, лучше в опенсорс выкладывать

Zhabrozavr
04.08.2026 17:00Мне, как мракобесу, интересно - почему такая иконка? Без смс и номеров - это хорошо.

nehrung
04.08.2026 17:00Conlink Messenger. Его главная фича — полный отказ от привязки к номеру телефона: только email, пароль и никакого сбора персональных данных.
Бинго!!! Я давно искал нечто подобное после ухода Скайпа, который в начале своего существования тоже не требовал номера мобилы (нашёл только Токс, но он вроде бы помер), потом долго ждал, и наконец, похоже, дождался!
Конечно, номер телефона решает множество задач
Но приносит одну проблему, наглухо перечеркивающую те, решённые - он бесповоротно деанонимизирует. Конечно, все эти Telegramы, WhatsAppы, Signalы, Discordы умоляют пользователя: не бойся, мы тебя не выдадим - но как мы можем это проверить? К сожалению, только по факту пользования. А хотелось бы знать точно и заранее.
...полностью готова веб‑версия. Сейчас уже можно:
А видеосвязь планируется? Или только текст и голос? Кстати, в вашем списке голос впрямую тоже не упоминается, так что можно быть твёрдо уверенным только в текстовых сообщениях. Как только видеосвязь там появится, с этого момента я - ваш клиент (не зря же я упомянул про Токс). А если этот ваш Conlink научится ещё и импортировать список контактов хотя бы из вышеперечисленных - ну тогда ваааще место ему будет в красном углу рядом с иконами и мы будем на него молиться.

pushd0w
04.08.2026 17:00152ФЗ наглухо не соблюден, непонятно кому я предоставляю свой имейл и кто будет читать мою переписку. Я так понимаю зарегистрированы ли вы в ркн как оператор персональных данных можно не спрашивать.
Также нарушен 149 ФЗ, который прямо требует идентификацию по номеру телефона для сервисов обмена сообщениями, у вас этого нет. Или вы думаете вы один такой умный и решили оторвать кусок пирога рынка мессенджеров, а остальные так почему-то до сих пор не сделали?
Также не очень то верится, что вайбкодер на пхп реализовал e2ee, но реалтайм обмен клиент-сервер делает на поллингах.
Не могу представить себе отморозка кто будет на серьезных намерениях пользоваться этой очередной поделкой с заявленным e2ee (что вряд ли правда) и вести там реальную переписку.
Мой вам совет, поскорее закрывайте свои дыры в соблюдении закона, если не хотите чтобы пришло письмо счастья от соответствующих органов. Недоброжелатели уже не раз травили органы на бизнесы куда более безобидные, например на шаурмячную, за фразу "лучшая шаурма" на вывеске.

dos
04.08.2026 17:00А что если человек вне юрисдикции РФ?

pushd0w
04.08.2026 17:00Какой человек?
Если вы имеете в виду предпринимателя, который не имеет представительства на территории России, то до него дотянуться у органов разумеется не получится, а сервис рано или поздно будет заблокирован.
А если пользователь, то ответственности за это никакой нет. Хотя как я уже написал выше, не представляю себе разумного человека, кто готов вести частную переписку в сервисе, созданном не пойми где не пойми кем.

mirwide
04.08.2026 17:00Тогда домен не был бы зарегистрирован в reg.ru и не хостился в reg.ru.
Стресс тест на шаренном хостинге с шаренным инстансом БД... ФСБ может спать спокойно.
pushd0w
04.08.2026 17:00Поддерживаю замечание про домен.
Дополнительно упомяну, что с 1 сентября все владельцы доменов в ру зоне обязаны будут проходить идентификацию через ЕСИА (Госуслуги то бишь), а там либо блокировка домена, либо станет однозначно известно, кто владеет сервисом.

vzakladkenet
04.08.2026 17:00Не имею юридического образования, но подозреваю что его песочница никаким органам даром не нужна и даже багхантерам его игрушка не интересна, т.к. смысла нет тратить ресурсы (нет исходного кода и нет коммерческой составляющей, международный домен, нет массовой посещаемости)

pushd0w
04.08.2026 17:00Вы будете удивлены, когда узнаете, что РКН и ФАС практически не занимаются мониторингом сервисов в сети, а работают по заявкам от граждан - тут пруфов не будет, сам услышал на стороне, но информацию можно считать достоверной так как получена она была как раз от того, на кого поступила информация о несоблюдении одного из вышеперечисленных законов. Не потому что органы ленивые, а потому что граждане сами отлично справляются с тем, чтобы проявлять, так сказать, активную гражданскую позицию.
А чтобы прочитать фз не нужно иметь юридического образования, достаточно столкнуться с ситуацией, когда это знание необходимо, например если хотите легально и без последствий делать честный и прозрачный бизнес.

peacemakerv
04.08.2026 17:00C SSE есть моё open-source поделие https://github.com/peacemakerv2/msgql, успешно эксплуатируемое малым коллективом на shared-хостинге.
RunForest
Пока не попробовал весь функционал, но по интерфейсу есть моменты с мобильной версткой, где то кнопки больше панели.