Минималистичный анонимный чат с real-time синхронизацией.
Backend
- PHP 8.3+ — REST API, обогащение метаданных (GitHub, Pinterest, link preview)
- Node.js — WebSocket server для real-time broadcast
- SQLite — хранение сессий и сообщений
Frontend
- Vanilla JavaScript (ES6 modules) — модульная архитектура без фреймворков
- WebSocket client с автореконнектом
- ContentEditable API для WYSIWYG редактора
Инфраструктура
- nginx — reverse proxy для HTTP и WebSocket
- PM2 — управление процессами на production
Ключевые модули:
websocket-client.js— управление WS соединениемapi.js— HTTP запросы к REST APIrender.js— рендеринг сообщений в DOMeditor.js— WYSIWYG редактор с undo/redomarkdown.js— парсинг Markdownmessage-history.js— навигация по истории (↑↓)quotes.js— цитирование сообщенийanimalProfile.js— профили животных (65 видов)
Как это работает:
- Инициализация — PHP API создаёт сессию с рандомным именем, возвращает последние 50 сообщений
- WebSocket подключение — клиент подписывается на события, server аутентифицирует
- Отправка — сообщение сохраняется в SQLite → BroadcastService → WebSocket broadcast всем клиентам
- Обогащение — PHP парсит URL, добавляет metadata (title, description, image) через GitHub/Pinterest/LinkPreview сервисы
- Real-time синхронизация — все браузеры мгновенно получают
message_new/message_updatedсобытия - Редактирование — проверка авторства в MessageRepository → broadcast обновлённого сообщения
- 🔒 Приватные комнаты — изолированные чаты
- 🔑 Telegram Widget Auth — авторизация через Telegram с JWT
- 🤖 Telegram Bot на WebSocket — миграция бота с polling
- 📱 Push уведомления — desktop notifications
git clone https://github.com/listeomin/pavilion.git
cd pavilion
composer install
npm install
cd ws-server && npm install && cd ..
chmod +x dev.sh
./dev.sh
open http://localhost:8080./vendor/bin/phpunit tests/php --testdox
npm testpm2 start ecosystem.config.js
# nginx конфигурация: nginx-pavilion.confMIT