Skip to content

IgorShkarin/min

Repository files navigation

Миг — Мессенджер

Быстрый, простой, российский мессенджер.

О проекте

Миг — мессенджер, построенный на базе протокола 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 шифрование

Быстрый старт

Что нужно

  • Docker + Docker Compose
  • Node.js 18+ (для веб-клиента)

1. Клонируй репозиторий

git clone git@gitlab.com:igorshkarin/min.git
cd min

2. Сгенерируй ключ Matrix-сервера

./scripts/generate-keys.sh

3. Запусти сервер

cd server
docker compose up -d

Подожди 10-15 секунд, пока сервер стартует. Проверь:

curl http://localhost:8008/_matrix/client/versions

4. Создай пользователей

docker exec min-dendrite /usr/bin/create-account \
  -config /etc/dendrite/dendrite.yaml \
  -username igor -password mypassword

5. Запусти веб-клиент

cd 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors