Self-hosted · E2EE · /messenger

OurMessenger

Flutter (Android, Windows, Web) + ASP.NET Core. На сервере только шифротекст. Боевой URL в портфолио не попадает — только изолированная песочница.

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

Демо-учётки в sandbox

Отдельная БД и API. Возьмите свободный аккаунт, откройте приложение, для realtime — второе окно в инкогнито с другим логином.

Логин Имя Статус Пароль Действия
  • Откройте Flutter Web → /messenger/app/
  • Войдите свободным demo_XX (пароль в таблице)
  • Второе окно / инкогнито — другой demo_YY для realtime

Архитектура

Клиент ↔ API ↔ ciphertext

На сервере только шифротекст. SignalR принимает короткий тикет, не долгоживущий Bearer.

  • E2EE: X25519 + ChaCha20-Poly1305 на клиенте
  • SignalR hub: connection ticket, не long-lived Bearer в WSS URL
  • Multi-device: Android / Windows / Web + device-link
  • Encrypted file attachments (chunked upload)
  • Portfolio sandbox: отдельный инстанс, не фильтр prod DB
  • Web caveat: ключи в browser storage слабее OS keychain
Обзор компонентов
OurMessenger architecture overview
SignalR: ticket flow
SignalR connection ticket sequence

Walkthrough

Короткое видео (~2 мин)

Fallback, если sandbox временно недоступен. Файл появится в assets/walkthrough.mp4.

Короткое видео (~2 мин) — скоро