- TypeScript 71.6%
- CSS 25.1%
- JavaScript 1.7%
- HTML 1.3%
- PowerShell 0.2%
| .forgejo/workflows | ||
| k8s | ||
| public | ||
| scripts | ||
| server | ||
| src | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| Dockerfile | ||
| ENTERPRISE_ARCHITECTURE.md | ||
| GAME_ROADMAP.md | ||
| ideas.md | ||
| index.html | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| tsconfig.json | ||
| tsconfig.server.json | ||
| vite.config.ts | ||
SERJIK.ARCADE
Домашняя онлайн-аркада с 11 играми: Тетрис, Змейка, Сапёр, Pong, Четыре в ряд, Морской бой, 2048 Duel, Bomber Arena, Neon Trails, Танчики и Asteroids. Есть аккаунты, рекорды, комнаты по коду, co-op и versus-сессии через WebSocket.
Игровые поля Tetris и Snake отрисовываются на Canvas через requestAnimationFrame: React отвечает только за меню и статистику. Tetris поддерживает ghost-piece, next, hold и hard drop; в Snake еда никогда не появляется внутри змейки; Minesweeper гарантирует безопасный первый ход и три сложности.
Локальный запуск
pnpm install
pnpm dev
Клиент откроется на http://localhost:5173, API — на http://localhost:3000.
Продакшен
docker build -t harbor.serjiksgr.ru/arcade/serjik-arcade:TAG .
docker push harbor.serjiksgr.ru/arcade/serjik-arcade:TAG
.\scripts\deploy.ps1 -Tag TAG
Приложение публикуется по адресу https://games.serjiklife.com. SQLite хранится в PVC arcade-data; deployment намеренно имеет одну реплику, потому что realtime-комнаты живут в памяти процесса.
План расширения каталога находится в GAME_ROADMAP.md.
Целевая архитектура для глобального масштабирования, security baseline и этапы перехода с SQLite на PostgreSQL/Redis описаны в ENTERPRISE_ARCHITECTURE.md.
Выдача ролей
Роль хранится только в базе данных. После сборки оператор сервера может назначить администратора без констант в коде:
pnpm admin:set-role -- --username serjik --role admin
В Kubernetes та же команда запускается внутри приложения с доступом к его persistent volume:
kubectl exec -n arcade deploy/serjik-arcade -- node dist-server/admin-cli.js set-role --username serjik --role admin
Допустимые роли: user, moderator, admin. Изменения записываются в operator_audit; снять роль у последнего администратора нельзя.