Быстрый, простой, российский мессенджер.
Миг — мессенджер, построенный на базе протокола Matrix с использованием Dendrite (сервер) и Matrix JS SDK (веб-клиент).
Веб: getmig.online | Лендинг: getmig.ru
- Бэкенд: Dendrite + PostgreSQL + Coturn (docker-compose)
- Деплой на Yandex Cloud + HTTPS (Let's Encrypt)
- Веб-клиент: логин, регистрация, чаты, сообщения
- Авторизация через Telegram (бот @MinMessengerAuthBot)
- Android-клиент (Kotlin, Jetpack Compose, Material 3)
- iOS/macOS-клиент (Swift 5.9, SwiftUI, iOS 17+)
- Онлайн/офлайн статус + индикатор "печатает..."
- Отправка фото, видео, аудио, файлов
- Ответ, пересылка, редактирование, удаление сообщений
- Emoji-реакции
- Поиск по сообщениям (Ctrl+F)
- Отложенная отправка (web + iOS + Android) + тихое сообщение
- Умные уведомления (cooldown per sender)
- Групповые чаты
- Галочки доставки (отправлено / доставлено / прочитано) — iOS: реальный m.receipt парсинг
- Security: CSP, rate limiting, X-Frame-Options, nginx hardening
- Настройки: профиль, уведомления, безопасность
- Автотесты: 76 unit-тестов (Vitest) + 21 E2E flows (Maestro) + 24 XCUITest (iOS) + VoIP тесты (3 уровня) + 20 test suites (300+ checks) в pre-deploy gate
- Аналитика: свой Express-микросервис + Grafana + PostgreSQL
- Обои чата (doodle-паттерн), светлая/тёмная тема
- Health-check мониторинг (systemd timer + Telegram-алерты)
- i18n: 6 языков (ru, en, uz, tg, ky, hy) — веб + iOS + Android
- Push-уведомления: Matrix Push Gateway (Web Push VAPID + APNs + FCM)
- Crash reporting: Sentry (web + iOS + Android)
- Политика конфиденциальности + Условия использования
- Лендинг getmig.ru + App Links + redirect-страница для Telegram
- Аудио/видеозвонки: P2P WebRTC + Matrix VoIP (web + iOS + Android)
- Фоновые звонки: foreground service (Android), background task (iOS), push gateway call detection
- iOS CallKit + PushKit: нативный UI звонков на lock screen, VoIP push для входящих
- ICE restart: автоматическое восстановление звонка при смене WiFi↔cellular (iOS + Android)
- WebRTC кроссплатформа: Android M125+ ↔ iOS M128 SDP-совместимость
- Рингтон + вибрация при входящем звонке (Android)
- Дизайн-система: единые токены (tokens.json → CSS/Swift/Kotlin)
- Синхронизация клиентов: файлы, группы, reply/edit/delete, настройки
- In-app язык: переключение без перезапуска (web + iOS + Android)
- Аватар профиля: загрузка из галереи + Matrix upload (web + iOS + Android)
- Разделители дат в чатах: «Сегодня», «Вчера», полная дата (web + iOS + Android)
- Управление чатами: закрепить, без звука, непрочитанное, удалить (web + iOS + Android)
- Профиль собеседника: аватар, имя, username, кнопки звонка (web + iOS + Android)
- Общие медиа в профиле: сетка фото/видео/файлов в профиле собеседника (web + iOS + Android)
- Блокировка контакта: блок/разблок пользователей с фильтрацией сообщений (web + iOS + Android)
- Общие группы в профиле: список групп, общих с собеседником (web + iOS + Android)
- О приложении: версия, протокол, сервер, сайты (getmig.online + getmig.ru) в настройках (web + iOS + Android)
- Поиск сверху чатов (как ТГ/WhatsApp): поиск по чатам + user directory, кнопка «Добавить контакт» (web + iOS + Android)
- User Directory Search: lobby room + auto_join для поиска пользователей по имени
- Единая UI: иконка отправки (↑ в кружке) + иконка вложений (скрепка) на всех платформах
- Контекстное меню сообщений: Telegram-стиль (Android overlay + анимации + iOS contextMenu + быстрые реакции)
- Haptic feedback: все ключевые взаимодействия (лонг-пресс, отправка, звонки) на iOS + Android
- App Store: TestFlight build 11 — camera toggle fix, audio session videoChat mode, search UX (keyboard dismiss + cancel), find existing DM (no duplicate rooms), upload progress indicator, TURN TTL refresh (Element pattern), reaction sort by popularity
- Google Play: v0.9.0 (versionCode 18) в internal testing — ICE restart, LazyColumn stability, 20 test suites green
- iOS: входящий звонок на заблокированном экране (CallKit/PushKit) — фикс: APNs production, sync handler, cold-start (build 16), deferred answer pattern (build 21+)
- iOS: история звонков в табе Звонки + тема (system/light/dark)
- Аватары в чат-листе (iOS + Android) — фото из Matrix профиля
- Maestro E2E тесты: 19 flows (hardened — optional:true убран с критических ассертов) + pre-deploy gate
- Server Health Analysis: анализ накопленных логов мониторинга перед деплоем
- VoIP тест-автоматизация: UI (Maestro) + сигнализация (Matrix API) + телеметрия (analytics DB)
- Десктоп: macOS (App Store + DMG) + Windows
- GitLab CI pipeline (lint + tests on push)
- E2E тесты: Maestro 2.2.0 (Android emulator, 6 flows)
- E2E шифрование
git clone git@gitlab.com:igorshkarin/min.git
cd min./scripts/generate-keys.shcd server
docker compose up -dПодожди 10-15 секунд, пока сервер стартует. Проверь:
curl http://localhost:8008/_matrix/client/versionsdocker exec min-dendrite /usr/bin/create-account \
-config /etc/dendrite/dendrite.yaml \
-username igor -password mypasswordcd web
npm install
npm run devОткрой http://localhost:3000 в браузере.
min/
├── server/
│ ├── docker-compose.yml # Dendrite + PostgreSQL + Coturn
│ ├── dendrite.yaml # Конфигурация Matrix-сервера
│ ├── tg-auth/ # Telegram-авторизация (Express, порт 3100)
│ ├── scheduler/ # Отложенные сообщения (Express+SQLite, порт 3101)
│ ├── analytics/ # Аналитика (Express, порт 3102)
│ ├── push-gateway/ # Push Gateway (Express, порт 3103)
│ └── healthcheck/ # Мониторинг (bash + systemd timer)
├── web/
│ ├── src/
│ │ ├── components/ # React-компоненты UI
│ │ ├── store/ # Zustand state management
│ │ ├── styles/ # CSS
│ │ ├── i18n/ # Локализация (6 языков)
│ │ └── utils/ # Matrix client, push, sentry, analytics
│ └── public/ # sw-push.js, privacy.html, terms.html
├── android/ # Kotlin + Jetpack Compose + Material 3
├── ios/ # Swift 5.9 + SwiftUI + L10n
├── design-system/ # Единые дизайн-токены
│ ├── tokens.json # Единый источник правды (v2.0.0)
│ ├── generate.js # Генератор → .css + .swift + .kt
│ ├── tokens.css # CSS custom properties
│ ├── DesignTokens.swift # Swift constants
│ └── DesignTokens.kt # Kotlin Compose constants
├── landing/ # Лендинг getmig.ru + privacy + terms
├── scripts/ # Утилиты (generate-keys, create-user, etc.)
├── docs/ # Дизайн-ассеты, Grafana-дашборды, ROADMAP
└── README.md
- Сервер: Dendrite (Go) + PostgreSQL 16 + Coturn + Nginx
- Веб-клиент: React 18 + Vite 5 + TypeScript 5 + Matrix JS SDK 34 + Zustand 4
- Android: Kotlin 2.1, Jetpack Compose, Material 3, Retrofit, OkHttp
- iOS: Swift 5.9, SwiftUI, iOS 17+
- Авторизация: Telegram Bot API
- Push: Matrix Push Gateway (VAPID Web Push, APNs, FCM)
- Аналитика: Express + Grafana + PostgreSQL + Telegram-алерты
- Crash reporting: Sentry
- Локализация: 6 языков (русский, английский, узбекский, таджикский, кыргызский, армянский)
- Тесты: Vitest (76 unit), Maestro (21 E2E), XCUITest (24 iOS), VoIP (3 уровня), Pre-deploy gate (20 suites, 300+ checks)
- Домены: getmig.ru (лендинг) + getmig.online (веб-клиент)
- Хостинг: Yandex Cloud
- Тема: тёмная + светлая (переключение)
Игорь Шкарин — getmig.ru