142 lines
5.8 KiB
Markdown
142 lines
5.8 KiB
Markdown
# 🕊️ Мессенджер «Ласточка»
|
||
|
||
Защищённый мессенджер с открытым исходным кодом, построенный на базе **Tinode** (Go-сервер) с кастомным фронтендом.
|
||
|
||
## Возможности
|
||
|
||
- **Чаты и группы** — личная переписка, групповые чаты, каналы
|
||
- **Медиа** — отправка изображений и голосовых сообщений
|
||
- **Поиск пользователей** — по логину, email, телефону
|
||
- **Тёмная тема** — автоматическое переключение
|
||
- **Офлайн-индикатор** — мониторинг подключения с автопереподключением
|
||
- **Reply, edit, delete, forward** — полноценное управление сообщениями
|
||
- **Typing indicators** — индикаторы набора в реальном времени
|
||
- **Модерация** — бан, мут, пин, управление участниками групп
|
||
|
||
## Платформы
|
||
|
||
| Платформа | Путь | Статус |
|
||
|-----------|------|--------|
|
||
| **Web** | `lastochka-ui/` | ✅ Работает |
|
||
| **Android** | `lastochka-android-compose/` | ✅ Работает |
|
||
| **iOS** | `lastochka-ios/` | ⏳ В разработке |
|
||
| **Сервер** | `lastochka-server/` | ✅ Работает |
|
||
|
||
## Структура репозитория
|
||
|
||
```
|
||
dev/
|
||
├── lastochka-ui/ # Web-клиент (React 18 + TypeScript + Tailwind + Zustand)
|
||
├── lastochka-android-compose/ # Android-клиент (Kotlin + Jetpack Compose + Hilt + Room)
|
||
├── lastochka-ios/ # iOS-клиент (Swift, форк Tinode)
|
||
├── lastochka-server/ # Tinode-сервер (Go, форк)
|
||
└── README.md # Этот файл
|
||
```
|
||
|
||
## Быстрый старт
|
||
|
||
### Web-клиент
|
||
|
||
```bash
|
||
cd lastochka-ui
|
||
npm install
|
||
cp .env.example .env.local # при необходимости
|
||
npm run dev # http://localhost:5173
|
||
npm run build # production-сборка
|
||
```
|
||
|
||
### Android-клиент
|
||
|
||
```bash
|
||
cd lastochka-android-compose
|
||
./gradlew assembleDebug # сборка APK
|
||
./gradlew test # запуск тестов
|
||
```
|
||
|
||
### Сервер
|
||
|
||
```bash
|
||
cd lastochka-server
|
||
go build -o tinode .
|
||
./tinode -config tinode.yml
|
||
```
|
||
|
||
### Docker (полный стек)
|
||
|
||
Полная инструкция по развёртыванию — в [PROJECT_CONTEXT.md](../PROJECT_CONTEXT.md) и [instructions/deploy.md](../instructions/deploy.md).
|
||
|
||
## Стек технологий
|
||
|
||
### Web
|
||
|
||
| Технология | Назначение |
|
||
|------------|------------|
|
||
| React 18 + TypeScript | UI + типизация |
|
||
| Zustand | State management |
|
||
| Tailwind CSS | Стилизация |
|
||
| Vite | Сборщик |
|
||
| tinode-sdk | WebSocket-клиент Tinode |
|
||
| lucide-react | Иконки |
|
||
|
||
### Android
|
||
|
||
| Технология | Назначение |
|
||
|------------|------------|
|
||
| Kotlin + Jetpack Compose | UI |
|
||
| Hilt | Dependency injection |
|
||
| Room | Локальная БД |
|
||
| OkHttp | WebSocket + HTTP |
|
||
| Coroutines + Flow | Асинхронность |
|
||
|
||
### Сервер
|
||
|
||
| Технология | Назначение |
|
||
|------------|------------|
|
||
| Go 1.21+ | Язык сервера |
|
||
| PostgreSQL 16 | Основная БД |
|
||
| Redis 7 | Кэш и pub/sub |
|
||
| MinIO | S3-совместимое хранилище |
|
||
|
||
## Архитектура
|
||
|
||
```
|
||
┌─────────────────┐ ┌──────────────────┐
|
||
│ Web (React) │ │ Android (Kotlin)│
|
||
└────────┬────────┘ └────────┬─────────┘
|
||
│ WebSocket (wss://) │
|
||
▼ ▼
|
||
┌────────────────────────────────────────┐
|
||
│ Tinode Server (Go, порт 6060) │
|
||
│ • Auth • Messaging • Push • Media │
|
||
└────────────┬───────────────────────────┘
|
||
│
|
||
┌────────┼────────┐
|
||
▼ ▼ ▼
|
||
PostgreSQL Redis MinIO (S3)
|
||
```
|
||
|
||
Пользователь подключается через WebSocket → Tinode обрабатывает аутентификацию, сообщения, присутствие → медиа хранятся в MinIO → данные пользователей и сообщения в PostgreSQL → кэш в Redis.
|
||
|
||
## Лицензия
|
||
|
||
Серверная часть (форк Tinode) распространяется под **GPL v3**. Клиентские компоненты — см. лицензию в каждом подпроекте.
|
||
|
||
Подробности — файл [LICENSE](./LICENSE) в корне этого репозитория.
|
||
|
||
## Участие
|
||
|
||
Мы приветствуем контрибьюторов! Смотрите [CONTRIBUTING.md](../CONTRIBUTING.md) в корневой директории проекта.
|
||
|
||
### С чего начать
|
||
|
||
1. Прочитайте этот README и [CONTRIBUTING.md](../CONTRIBUTING.md)
|
||
2. Посмотрите открытые **Issues** — выберите задачу по силам
|
||
3. Напишите в комментарии к задаче: «Беру в работу»
|
||
4. Создайте ветку от `develop`, работайте, отправляйте MR
|
||
|
||
## Связь
|
||
|
||
- **Issues** — баг-репорты, фич-реквесты
|
||
- **Discussions** — идеи, обсуждения архитектуры
|
||
- **Email** — вопросы к мейнтейнерам
|