- TypeScript 68.1%
- CSS 30.3%
- Dockerfile 0.9%
- HTML 0.7%
| infra | ||
| server | ||
| src | ||
| .dockerignore | ||
| .gitignore | ||
| Dockerfile | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.app.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
Sudoku Club
Полноценная браузерная игра в судоку с тремя режимами:
- Соло — локальная партия с заметками, таймером и проверкой ошибок.
- Вместе — общая доска, которая синхронизируется между участниками через WebSocket.
- Дуэль — одинаковая головоломка и отдельная доска для каждого игрока, живой прогресс и рейтинг по времени.
Сетевая игра начинается с лобби на 2–6 мест. Хост запускает партию только после подключения и подтверждения готовности всех приглашённых игроков. Комната открывается по короткому коду или ссылке. При кратковременном обрыве клиент автоматически переподключается с нарастающей задержкой, а серверный heartbeat удаляет зависшие соединения. Повторный вход восстанавливает игрока по локальному токену.
Доступно семь уровней: от «Новичка» до «Экстрима». Первые уровни генерируются с контролем единственности решения; продвинутые используют сложный банк с безопасными структурными преобразованиями. «Эксперт», «Мастер» и «Экстрим» оцениваются по глубине и объёму поискового дерева, а не только по количеству открытых клеток. Сервер является источником истины: решение головоломки не отправляется участникам сетевой партии.
Локальный запуск
npm install
npm run dev
Frontend откроется на http://localhost:5173, API и WebSocket — на http://localhost:3000.
Проверка
npm run check
npm test
npm run build
Production
Приложение собирается многоэтапным Dockerfile и запускается непривилегированным пользователем. Kubernetes‑ресурсы находятся в infra/: один экземпляр приложения намеренно обслуживает все WebSocket‑комнаты в памяти. Это обеспечивает согласованность комнат без внешнего Redis; при переходе к нескольким репликам потребуется общий realtime/state слой.
Публичный адрес: https://sudoku.serjiklife.com.