/ Главная / Кейсы / Relic Chat

Relic Chat.
Мессенджер в реальном времени.

Полнофункциональный мессенджер уровня Telegram, доведённый до боевого продакшна на домене relic-chat.ru. Личные и групповые чаты в реальном времени, файлы и голосовые, аудио- и видеозвонки на WebRTC с демонстрацией экрана. Два клиента поверх единого backend: устанавливаемое веб-приложение (PWA) и нативное приложение для iOS и Android.

3/ клиента: веб · iOS · Android WebRTC/ звонки P2P + TURN 2026/ в продакшне
Десктопный интерфейс мессенджера Relic Chat — список чатов, активный диалог и медиа в переписке
real-timeчаты · звонки · файлы
/ О ПРОЕКТЕ

Мессенджер уровня
Telegram — в проде.

Relic Chat закрывает полный сценарий современного общения: личные и групповые чаты в реальном времени, обмен файлами и фотографиями, голосовые сообщения, аудио- и видеозвонки на WebRTC с демонстрацией экрана, установку как приложения (PWA) с push-уведомлениями. Проект развёрнут на собственной инфраструктуре и работает с реальными пользователями.

Это не макет и не прототип: продукт доведён от идеи до боевого продакшна в роли full-stack-разработчика — от модели данных и WebSocket-шлюза до WebRTC-звонков, нативного приложения и деплоя. Отдельно выполнен перенос всей исторической переписки со старой платформы без потери данных.

/ ЦИФРЫ

Что за этим стоит.

3
Клиента: веб-PWA, iOS, Android
14+
Моделей данных в PostgreSQL
2141
Сообщение перенесено из legacy без потерь
190
Пользователей мигрировано с прежней платформы
/ ВОЗМОЖНОСТИ

Полный сценарий
общения.

Сообщения и чаты

  • Личные и групповые чаты в реальном времени через WebSocket
  • Статусы доставки: часы → галочка → две зелёные (прочитано) → ошибка с повтором
  • Ответы, редактирование, удаление, пересылка, закрепление, копирование
  • Индикаторы «печатает…», онлайн-статусы и «был(а) в сети»
  • Поиск по переписке с подсветкой и навигацией по совпадениям

Медиа и вложения

  • Загрузка фото и файлов с выбором «сжать или оригинал», предпросмотр в ленте
  • Голосовые с записью и визуализацией звуковой волны
  • Галерея чата: вкладки «Медиа / Файлы / Ссылки / Голос» в профиле

Звонки (WebRTC)

  • Peer-to-peer аудио и видео со своим окном (picture-in-picture)
  • Демонстрация экрана без переустановки соединения (replaceTrack)
  • Собственный TURN-сервер (coturn), буферизация ICE, авто-перезапуск при обрыве
  • Дозвон до оффлайн-собеседника через push и буферизацию вызова

Группы и профили

  • Роли участников: участник / администратор / создатель
  • Инвайт-ссылки для вступления в группу
  • Профили пользователя и группы, переключатель уведомлений на каждый чат

Платформа и UX

  • PWA: установка как приложение, офлайн-режим, Service Worker с авто-обновлением
  • Web push (VAPID), native push (Expo) и email-уведомления
  • Светлая и тёмная темы, адаптив от телефона до десктопа, safe-area на iOS
/ ИНЖЕНЕРНЫЕ ЗАДАЧИ

Где было по-настоящему сложно.

1. Надёжные WebRTC-звонки в реальных сетях

Буферизация ICE-кандидатов, приходящих до установки удалённого описания (иначе они терялись во время запроса доступа к камере), автоматический перезапуск ICE при обрыве с «тихой» пересборкой соединения, демонстрация экрана через замену видеодорожки без новой сигнализации и собственный TURN-сервер для обхода сложных NAT. Дозвон до оффлайн-собеседника: вызов буферизуется в Redis и доставляется push-уведомлением.

2. Доставка сообщений с подтверждением и фолбэком

Каждое исходящее сообщение уходит оптимистично со статусом «отправляется», подтверждается ack-колбэком сокета, а при недоступности сокета — через REST-фолбэк. При полном сбое сообщение помечается «не доставлено» с повтором по тапу. Дедупликация защищает от дублей при гонке сокета и REST.

3. PWA с бесшовным авто-обновлением

Service Worker обновляет приложение без ручной перезагрузки: новая версия активируется через skipWaiting + clients.claim, клиент перезагружается один раз по смене контроллера. Офлайн-режим, корректная iOS-клавиатура через visualViewport и безопасные зоны для установленного приложения.

4. Миграция данных без потерь

Вся историческая переписка перенесена со старой PHP/MySQL-платформы на PostgreSQL: 190 пользователей, 649 чатов, 1433 участника, 2141 сообщение, 187 вложений и закреплённые сообщения. Идентификаторы сохранены, последовательности сброшены, ссылки на файлы и аватары — корректны.

/ СТЕК И АРХИТЕКТУРА

Единый backend
на два клиента.

Backend на Fastify и Socket.io обслуживает оба клиента поверх общего HTTP-сервера: REST отвечает за данные (чаты, сообщения, профили, файлы), Socket.io — за реальное время (доставку, статусы прочтения, набор текста, присутствие и сигналинг звонков). Всё развёрнуто в Docker Compose за Nginx с SSL.

Backend и данные

  • Node.js 22 · Fastify 5 · Socket.io 4.8 (общий HTTP-сервер)
  • PostgreSQL 16 · Prisma 6 — 14+ моделей, мягкое удаление сообщений
  • Redis 7 (ioredis): присутствие, rate-limit, буфер звонков
  • JWT + refresh-токены, SSO-мост на HMAC-SHA256

Реалтайм, звонки, клиенты

  • Socket.io с тикет-авторизацией: сообщения, набор, присутствие
  • WebRTC (P2P) · coturn TURN-сервер · ICE restart · screen sharing
  • Web Push (VAPID) · Expo Push · SMTP (nodemailer)
  • Веб: SPA + PWA + Service Worker; мобайл: Expo 54 · React Native 0.81 · TypeScript · Zustand · SQLite
  • Docker Compose · Nginx · Let's Encrypt (SSL)
/ КАК ЭТО ВЫГЛЯДИТ

Экраны проекта.

Десктопная раскладка Relic Chat: список чатов, активный диалог и медиа в переписке
Десктоп: список чатов, активный диалог и медиа в переписке
Лента сообщений Relic Chat — бабблы, статусы доставки и прочтения
Лента сообщений: бабблы, статусы доставки и прочтения
Обмен фотографиями и медиа в групповом чате Relic Chat
Обмен фото и медиа прямо в групповом чате
Контекстное меню сообщения в Relic Chat — ответить, редактировать, переслать, закрепить, удалить
Контекстное меню: ответить, редактировать, переслать, закрепить, удалить
Поиск по переписке в Relic Chat с подсветкой совпадений
Поиск по переписке с подсветкой совпадений
Профиль контакта в Relic Chat — данные, уведомления и вкладки медиа
Профиль контакта: данные, уведомления, вкладки «Медиа / Файлы / Ссылки / Голос»
Видеозвонок на WebRTC в Relic Chat с окном своей камеры (picture-in-picture)
Видеозвонок WebRTC с окном своей камеры (picture-in-picture)
Экран аудиозвонка в Relic Chat — микрофон, динамик и завершение вызова
Аудиозвонок: микрофон, динамик и завершение вызова
Запись голосового сообщения в Relic Chat — таймер и отмена сдвигом
Запись голосового сообщения: таймер и отмена сдвигом
Мобильное приложение Relic Chat — список чатов
Мобайл: список чатов
Мобильное приложение Relic Chat — диалог
Мобайл: диалог
Мобильное приложение Relic Chat — профиль контакта и вкладки медиа
Мобайл: профиль контакта и вкладки медиа
Экран входа в Relic Chat
Вход в Relic Chat
Экран регистрации в Relic Chat
Регистрация
/ РОЛЬ

Full-stack:
от идеи до прода.

Relic Chat сделан в одиночку в роли full-stack-разработчика — от модели данных до деплоя и миграции legacy-платформы. Зоны ответственности:

  • Backend — REST API и WebSocket-шлюз на Fastify/Socket.io, модель данных на Prisma/PostgreSQL, Redis
  • Frontend — веб-SPA и PWA, нативное приложение на React Native/Expo
  • WebRTC — сигналинг, P2P-соединение, TURN-сервер, перезапуск ICE, дозвон оффлайн
  • Инфраструктура — Docker, Nginx, SSL, развёртывание, миграция данных с legacy
  • Уведомления — web push, native push, email
  • Продакшн — живой трафик, переписка и звонки на собственной инфраструктуре

Нужен сложный
продукт под ключ?

Реалтайм, звонки, мобильное приложение, интеграции — берём проекты, где много инженерии. Разберём задачу и оценим за 30 минут.