Update CLAUDE.md for KITVM3 migration and Docker game strategy

Reflects completed migration from DigitalOcean to local Hyper-V server.
Adds game deployment strategy (engine-first, Docker for complex games)
and server connection info.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-30 21:31:40 +00:00
parent 7090e6f01d
commit 35c6f16b4e
+20 -1
View File
@@ -21,7 +21,7 @@ sudo -u postgres psql -d game_arcade
| AI (generation) | Claude Sonnet (`claude-sonnet-4-20250514`) — streaming |
| AI (lightweight) | Claude Haiku (`claude-haiku-4-5-20251001`) — tweaks, refinement, summaries |
| Push | Web Push (VAPID) via `web-push` |
| Infra | DigitalOcean, Nginx, PM2, Cloudflare |
| Infra | KITVM3 (local Hyper-V), Nginx, PM2, Cloudflare Tunnel, Docker |
## Project Structure
@@ -180,6 +180,25 @@ GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO gamearc;
| Push not delivered | Check VAPID keys, subscriptions pruned on 410 |
| Mobile keyboard hiding | Use `font-size: 16px` on inputs |
## Game Deployment Strategy
New games should be built using the GamerComp engine (AI-generated HTML5 canvas games via the Create Wizard) whenever possible. For complex games that exceed what the engine can produce (e.g. Allegiance, MorseQuest), deploy them as Docker containers on the same KITVM3 server and proxy them through Nginx.
```bash
# Docker game deployment pattern
docker build -t gamename ./games/gamename/
docker run -d --name gamename -p 300X:80 --restart unless-stopped gamename
# Then add nginx location block to proxy /games/gamename/ to localhost:300X
```
## Server Info
- **Host**: KITVM3 Hyper-V VM on R810 (16 CPUs, 8GB RAM)
- **SSH**: `ssh -i ~/.ssh/claude_gamercomp -p 2135 ubuntu@keylinkit.vpnplus.to`
- **App dir**: `/home/ubuntu/game-arcade/`
- **Routing**: Cloudflare Tunnel (gamercomp-local) → Nginx → PM2/Docker
- **DO server is decommissioned** — all traffic routes through the tunnel
## Architecture Notes
**Iframe Communication**: Games export `pauseGame()`, `resumeGame()`, `pauseMusic()`, `resumeMusic()`, `gameScore`, `setMusicEnabled()`, `setSfxEnabled()` on window.