Приватный чат по ссылке для двух пользователей без хранения сообщений.
- Пользователь создает комнату и делится ссылкой.
- Второй пользователь подключается по ссылке в ту же комнату.
- В комнате максимум 2 участника.
- Сообщения не сохраняются в БД и файлах.
- Состояние комнаты удаляется, когда пользователи выходят.
FRONTEND_SPEC.md— стек и требования фронтендаBACKEND_SPEC.md— стек и требования бэкендаIMPLEMENTATION_PLAN.md— этапы реализацииdocs/WS_PROTOCOL.md— контракт событий WebSocketdocs/TEST_STRATEGY.md— стратегия тестированияdocs/PRELAUNCH_CHECKLIST.md— pre-flight перед разработкойdocs/STAGING_SMOKE_CHECKLIST.md— smoke-проверка перед релизомdocs/adr/0001-core-architecture.md— зафиксированные архитектурные решения
cd client && npm ci
cd ../server && npm cicd server
npm run devСерверный runtime находится в server/src. Legacy-файлы в корне server не используются текущими скриптами.
- Сгенерировать dev-сертификат (только для localhost):
cd server
npm run certs:dev
npm run dev:secure- В
client/.envуказать:
VITE_WS_URL=wss://localhost:5001/ws
VITE_HEALTH_URL=https://localhost:5001/health- Один раз открыть
https://localhost:5001/healthв браузере и принять self-signed сертификат.
В продакшене обычно TLS терминирует reverse proxy (Nginx/Caddy). Альтернатива — задать TLS_CERT_PATH и TLS_KEY_PATH в server/.env, тогда Node поднимает https/wss напрямую.
cd client
npm run devserver/.env.example— пример переменных сервераclient/.env.example— пример переменных клиента
Скопируйте примеры в .env файлы и заполните значения.
cd client
npm run lint
npm run typecheck
npm run test
npm run buildcd server
npm run lint
npm run typecheck
npm run test
npm run buildЕдиный форматтер проекта: Prettier (.prettierrc.json в корне).
В проекте предусмотрен production-контур:
server/Dockerfile— сборка и запуск WS-бэкенда;client/Dockerfile— сборка SPA и запуск через Nginx;client/docker/nginx/default.conf— reverse proxy с WS upgrade (/ws);docker-compose.yml— связка frontend + backend с healthchecks.
Запуск:
docker compose up --buildПосле старта:
- приложение: http://localhost:8080
- liveness: http://localhost:8080/health
- readiness: http://localhost:8080/ready
- Сервер пишет структурированные JSON-логи (
LOG_LEVEL). - Поддерживаются probes
/healthи/ready(для readiness учитывается состояние дренирования). - В production обязателен
CORS_ORIGIN, wildcard не используется. - Входной payload ограничивается
MAX_MESSAGE_BYTES. - Для входящих WS-событий действует rate limit:
RATE_LIMIT_WINDOW_MSRATE_LIMIT_EVENTS_PER_WINDOW