Привет, Хабр!
Меня, честно говоря, просто утомили современные интерфейсы общения и навигации. Куда ни посмотри — в Telegram, Slack, WhatsApp, на почте — нас везде встречает один и тот же шаблон: бесконечный, давящий вертикальный список чатов. Это превращает общение в какую-то рутину, конвейер, где новые сообщения постоянно вытесняют старые, заставляя нас бесконечно скроллить экран вверх и вниз.
Мне захотелось создать нечто принципиально иное. Что-то более близкое к естественным природным взаимосвязям. При разработке интерфейса я во многом ориентировался на биомиметику и структуру нейронных связей в упрощенном виде. Ведь в живой природе не существует листов, таблиц и списков — она оперирует узлами, ветвями и сетями. Мне хотелось создать среду для общения и структурирования мыслей, которая ощущалась бы интуитивно и естественно.
Так родился проект ПОРЯДОК или ORDO. Идея навигации в нем реализована фрактально-пространственным способом — в виде гексагональных сот (ячеек).
ОРДО — это полностью некоммерческий, бесплатный концепт приватного мессенджера со сквозным шифрованием (E2EE), написанный в одиночку. Я хочу поделиться с вами историей его разработки, показать устройство под капотом и, конечно, получить вашу конструктивную критику.
? Как это выглядит визуально?
Интерфейс приложения построен на концепции трех главных направлений фрактала, в которые можно погружаться бесконечно в глубину:
⬢ Я (1.1) … (в процессе): Пространство для формирования личных мыслей (заметки, календарь, сейф и избранное, связанное умным структурированием).
⬢ Мы (1.2): Пространство для осознанных личных диалогов и мостов связи. Это самый завершенный блок на данный момент.
⬢ Мир / Сообщества (1.3) … (в процессе): Пространство для групп и каналов вещания.
Вы нажимаете центральную соту пальцем и можете плавно скроллить и перемещаться по ветвям фрактала. Каждая сота — это узел связи, внутри которого могут находиться новые узлы или зашифрованные чаты.
Я записал короткие демонстрации работы интерфейса, так как словами это передать сложно:
Демонстрация навигации по сотам (YouTube)
Процесс сопряжения устройств (YouTube)
Как устроены диалоги внутри ОРДО (YouTube)
? Что под капотом у клиента (Android)?
Проект написан полностью на Kotlin с использованием Jetpack Compose для прорисовки интерфейса.
При разработке я придерживался принципа «минимального цифрового следа». Вот как это реализовано технически:
1. Личность без регистрации и паролей
В приложении нет серверов регистрации, логинов, паролей или привязки к номерам телефонов. При первом запуске устройство генерирует пару криптографических ключей Ed25519. Ваш публичный ключ — это ваш единственный паспорт. На его основе генерируется удобный текстовый шорт‑код («ДНК» профиля, например, Gold013189). Вы можете экспортировать свои ключи в виде зашифрованной строки для бэкапа и восстановить свой профиль на любом другом устройстве.
2. Зашифрованная база данных на диске
Вся история сообщений и метаданные хранятся только локально на вашем телефоне. База данных SQLite зашифрована на физическом диске с помощью библиотеки SQLCipher (используется 128-битный ключ). Пароль для расшифровки БД генерируется на основе приватного ключа пользователя, который безопасно хранится в Android Keystore через EncryptedSharedPreferences. Если злоумышленник физически завладеет телефоном, он не сможет прочитать базу без взлома Keystore.
3. Сквозное шифрование (End‑to‑End)
Все сообщения шифруются на устройствах по алгоритму AES-256-GCM. Функция передачи медиафайлов сейчас находится в процессе шлифования и в данный релиз не вошла, но сообщения шифруются полноценно. Ключи шифрования для каждого чата генерируются непосредственно во время сопряжения устройств. Сервер‑ретранслятор никогда не видит ваши сообщения в открытом виде — для него это просто транзит случайного набора байт.
4. Почему WebSocket в Foreground Service вместо Google FCM?
Привычные пуш‑уведомления от Google (FCM) — это удобный инструмент, но он полностью контролируется корпорацией. Google видит, кто, кому и в какое время отправляет сигналы, формируя ваш социальный граф на своих серверах.
Чтобы уйти от этого, я реализовал независимый фоновый сервис (Foreground Service). Он удерживает тонкое, энергоэффективное WebSocket‑соединение с сервером. При отправке «пинга» (вызова к диалогу) сервер находит ваше соединение в оперативной памяти по публичному ключу и мгновенно пересылает пустой зашифрованный пакет размером в несколько байт. Телефон принимает этот «стук в дверь», сопоставляет хэш канала локально и показывает уведомление. Наша фоновая служба спроектирована так, что практически не расходует заряд батареи во сне.
Важный нюанс: Чтобы агрессивные механизмы энергосбережения современных версий Android (начиная с 13–14 версий) принудительно не глушили службу спустя 15 минут после блокировки экрана или при закрытии приложения, пользователю необходимо вручную выдать приложению разрешение на неограниченную работу в фоновом режиме (Unrestricted background execution).
? Что под капотом у сервера (Go Relay)?
Серверная часть написана на Go и работает как «слепой» маршрутизатор исключительно в оперативной памяти (RAM).
На сервере нет базы данных сообщений. Пакеты пересылаются транзитом напрямую получателю, если он в сети.
Если получатель офлайн, пинг временно сохраняется в почтовом ящике в оперативной памяти (
sync.Map) и удаляется сразу же после доставки или по истечении 24 часов.Я оптимизировал сервер так, чтобы исключить тяжелые дисковые операции записи на каждый чих. База данных SQLite на сервере используется только один раз — в момент регистрации структуры нового канала при сопряжении.
? Ритуал сопряжения: Роль Секретного Слова
В ОРДО невозможно получить спам от незнакомцев на аппаратном уровне. Чтобы начать общение, нужно пройти «рукопожатие».
Ключевым криптографическим элементом здесь является Секретное Слово. Оно вводится в обоих сценариях сопряжения и выполняет важнейшую роль: на его основе устройства генерируют уникальный идентификатор канала связи ChannelId и растягивают симметричный ключ шифрования AES-256-GCM по алгоритму PBKDF2 (100 000 итераций). Секретное слово никогда не передается на сервер в открытом виде. Без знания этого слова даже владелец сервера не сможет узнать, кто общается на релеях, и тем более не сможет расшифровать трафик.
Локальный ритуал (QR)
При личной встрече вы сканируете одноразовый QR‑код друг друга. Этот код автоматически передает вашему устройству публичный ключ партнера и адрес его ретранслятора, исключая опечатки при вводе. После этого вы оба вводите одинаковое Секретное Слово, чтобы надежно запечатать и зашифровать ваш канал.
Удаленный ритуал (Blind Match по ID)
Если вы далеко друг от друга, вы вручную вводите ID друг друга или отправляете QR‑код, и далее одинаковое Секретное Слово. Телефоны отправляют на сервер не само слово, а его односторонний криптографический хэш (SHA-256). Сервер выступает в роли «слепого коммутатора»: видя два одинаковых хэша в памяти, он на долю секунды соединяет ваши устройства во временный тоннель, где телефоны обмениваются публичными ключами шифрования, генерируют mutual‑соль сессии и прописывают канал связи. Сервер закрывает тоннель и уходит в сторону.
⚠️ Текущий статус проекта и дисклеймер
Проект ОРДО на данном этапе является активным рабочим прототипом. Я делюсь им с сообществом абсолютно бесплатно и без рекламы.
Поскольку кодовая база и структура данных на диске сейчас активно развиваются, обратная совместимость локальных баз данных не гарантируется. Обновление приложения может приводить к полному сбросу локальной истории чатов на вашем устройстве. Пожалуйста, не используйте его для хранения критически важной информации на данном этапе!
Также обратите внимание на безопасность: адрес сервера скрыт в исходном коде и обфусцирован с помощью R8/ProGuard в релизной сборке. Для защиты сервера мы используем проверку подписей Ed25519 на каждый пакет и ограничение частоты запросов. В будущем я опубликую исходный код сервера Go Relay, чтобы каждый мог запустить свой собственный ретранслятор.
Буду рад вашим отзывам, критике архитектуры, предложениям по улучшению интерфейса сот и поиску багов!
Комментарии (5)

jetnet
08.06.2026 14:28Пока не буду устанавливать, подожду форк:
Novus ordo

img 
Synthesis0100 Автор
08.06.2026 14:28Спасибо за такой глубокие и интересные вопросы! Вы абсолютно правы: ОРДО, а по-русски ПОРЯДОК — это в первую очередь рабочий концепт, манифест альтернативного взгляда на интерфейсы и приватность, и мне очень ценно обсудить его ограничения.
Постараюсь ответить на ваши тезисы, объединив техническую часть и философию проекта.
Про навигацию, мышечную память и «анти-поиск» (Тезисы 1 и 2)
Идея навигации в ОРДО построена на двух принципах: она должна быть очевидной, а спустя короткое время — становиться буквально рефлекторной (на уровне мышечной памяти). Рефлекторный свайп: Например, чтобы спуститься на 5-й уровень глубины фрактала, пользователю нужно сделать всего 6 коротких свайпов пальцем в угле не более 90 градусов. Пальцы сами запоминают этот «рисунок» движения. Маячки вместо слепого блуждания: Навигация не будет слепой. Логика «маячков» реализуется через пульсацию «хлебных крошек». Если глубоко в ветви дерева есть непрочитанный чат или входящий пинг, то все родительские узлы по пути к этой ветви будут мягко пульсировать. Пользователь видит этот светящийся след и точно знает, куда ведет дорожка.
Отсутствие строки поиска — это фича, а не баг:) Я намеренно не планировал делать строку поиска, так как она идет вразрез с философией приложения. ПОРЯДОК создавался как место общения «для своих», для тех, с кем действительно есть о чем поговорить. Это пространство не для сиюминутных диалогов в стиле «открыл / закрыл / ответил раз в 10 минут». Существуют прекрасные и привычные нам всем мессенджеры, где можно быстро скинуть список покупок или узнать дежурное «как дела». ПОРЯДОК — это другая история, это пространство для глубоких, осознанных диалогов, которые имеют смысл, так это было задумано изначально.
Про адаптивное перестроение дерева (Тезис 3)
Идея автоматического смещения ячеек на основе их «веса» (частоты общения) заманчива, но она полностью разрушает пространственную память. Если соты будут постоянно менять свои места на основе алгоритмов, рефлекторная навигация станет невозможной. Это как если бы в вашей квартире дверь в кухню постоянно менялась местами с дверью в спальню просто потому, что сегодня вы чаще ходили в спальню. Статичность сетки позволяет выработать автоматический жест. Перестроение сетки должно быть исключительно ручным, под личным контролем пользователя.
Главная фича: Бесшовный суверенный мультисервер
Эта история началась, когда пошла вся эта возня с блокировками, цензурой, замедлениями и навязыванием конкретных платформ для общения. Мне захотелось создать систему, в которой люди смогут общаться при любом раскладе. В ПОРЯДКЕ любой пользователь может поднять свой собственный сервер Go Relay и пригласить туда друзей. При этом в одном приложении у вас на экране могут одновременно находиться соты-чаты, физически расположенные на десятке разных серверов (включая ваш личный). Но самое главное — при переходе между диалогами, завязанными на разные серверы, вы как пользователь этого даже не замечаете. Приложение бесшовно переподключает сокеты под капотом, сохраняя единую картину вашего персонального пространства. Эта механика уже на финишной прямой.
Требования к экрану и кнопочные устройства (Тезис 4)
Да, этот концепт изначально проектировался исключительно под современные смартфоны с сенсорными экранами. Пытаться адаптировать гексагональную сотовую навигацию под кнопочные телефоны (типа KaiOS) или джойстики — нерационально. Для кнопочных и несенсорных устройств классический текстовый список или CLI-интерфейс (командная строка) всегда были и будут на порядок эффективнее и экономичнее. ПОРЯДОК — это Touch-First концепт.
Работа WebSocket в условиях плохой связи (Тезис 5)
Это самый сложный вопрос для любого TCP-подключения в условиях застройки, хендоверов и потерь пакетов. Как это компенсируется сейчас: 1. Пакеты пингов и сообщений у нас весят всего по несколько байт (сырой зашифрованный массив). 2. На клиенте реализован быстрый цикл переподключения, а на сервере — временный почтовый ящик в оперативной памяти (
pingMailbox). Если связь пропала во время перехода между вышками, сервер сохраняет пинг у себя (до 24 часов). Как только клиент восстанавливает WebSocket-сессию, он мгновенно забирает пропущенные пинги. Вектор развития: Использовать TCP на плохой связи — компромисс. В идеале транспортный уровень нужно переводить на QUIC / UDP (по аналогии с HTTP/3), чтобы избежать блокировок очереди при потере отдельных пакетов и сделать соединение устойчивым при частых сменах IP.Работа поверх альтернативных сетей связи (Тезис 6)
Сейчас приложение жестко привязано к IP-сетям (интернет / LAN). Однако, благодаря тому, что все данные шифруются сквозным шифрованием (E2EE) на устройствах и превращаются в сырой массив байт, теоретически нет никаких препятствий для передачи этих пакетов через альтернативные виды связи (например, через радиомодемы LoRa, сеть Meshtastic или любительские радиостанции). Как только я опубликую открытый код Go-сервера, сообщество сможет написать транспортные адаптеры для пересылки байтовых пакетов ПОРЯДКА вообще без использования традиционного интернета.

cmyser
08.06.2026 14:28Да у вас прям очень похоже получилось на https://habr.com/ru/articles/956154/
Только crdt нет, может скооперируемся ? Сделаем веб клиент

Synthesis0100 Автор
08.06.2026 14:28Привет!
Интересное предложение, но буду честен, сейчас у меня недостаточно времени даже для своего проекта, так что данный момент не готов отвлекаться. Но в перспективе можно конечно)
zgwerby
Концепт интересный, но не более чем. Тезисно:
- Агрегация большого количества нод и сама фрактальная структура: есть возможность плоского агрегированного отображения, допустим 15 непрочитанных веток или нужно постоянно бегать по веткам вглубь? Есть возможность агрегации с ранжированием по чатам?
- Возможность обзора всего дерева чатов на одном экране или бегай по интерфейсу, пока не найдёшь нужный или задействуй неестественную строку поиска? Возможность автоматического ранжирования чатов, ранжированного просмотра на одном экране и прыжки с опусканием неважных промежуточных нод?
- Будет ли возможность адаптивного перестроения дерева нод в зависимости от набора параметров? Хотя бы минимальная самоорганизующаяся система на основе "весов" и "расстояний" для чатов, чтобы важное выносить в первую очередь?
- Т.е. теперь приложение изначально требует от устройства быстрый большой сенсорный экран, время отклика на котором мгновенно? Что делать с устройствами, где основное управление идет кнопками/джойстиком/внешними несенсорными устройчствами? Что делать с устройствами, с небольшими несенсорными экранами, где рисовать гексы нерационально с точки зрения затрат энергии и места?
- Остальное стандартно, Е2Е/без пушей. Насколько оно сможет жить не на "толстой" сети, а в условиях изначально "плохой" пакетной радиосвязи при постоянном хендовере? Или при работе сети "на излёте"? Вопрос про БС я намеренно выношу за скобки. Вебсокет вообще как живет в условиях городской сети с резкими перепадами подключения мобильной сети и очень негарантированной доставкой, особенно в зонах с большими переотражениями? Как-то скомпенсировать будут попытки или на откуп системному радиомодему?
- Работает только поверх интернета/лан или есть возможность задействовать другие виды пакетной радиосвязи (при условии что у неё есть выход в инет/нет выхода в инет)?