No description
Find a file
jedarden 930f0263c2 Restore hybrid architecture: Cloudflare Pages + R2 for web, K8s for compute
Corrected the full-K8s migration — the static site belongs on Cloudflare
Pages, not Nginx in K8s. The architecture is now:

- Cloudflare Pages: SPA + pre-computed JSON indexes (deployed by K8s
  index builder via wrangler every ~90 min)
- Cloudflare R2: replays, per-match metadata, evolution live.json,
  thumbnails, bot cards (uploaded by K8s workers via S3 API)
- apexalgo-iad K8s: Go API (Traefik ingress), PostgreSQL (CNPG),
  Valkey (job queue), match workers, strategy bots, evolver,
  index builder

Browser loads SPA from Pages, replays from R2, calls Go API on K8s.
No Nginx pod, no PersistentVolume for web data. R2 is the data bus
between K8s agents and the Cloudflare-served website.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 23:24:22 -04:00
.github/workflows Add GitHub Actions CI workflow for automated testing and builds 2026-03-24 10:54:43 -04:00
bots Complete Phase 2: HTTP protocol and 6 strategy bots 2026-03-24 07:00:38 -04:00
cmd Add .gitignore and package-lock.json files 2026-03-24 10:30:03 -04:00
docs Restore hybrid architecture: Cloudflare Pages + R2 for web, K8s for compute 2026-03-24 23:24:22 -04:00
engine Complete Phase 2: HTTP protocol and 6 strategy bots 2026-03-24 07:00:38 -04:00
web Complete Phase 5: Add Cloudflare Pages deployment configuration 2026-03-24 09:31:35 -04:00
worker-api Add .gitignore and package-lock.json files 2026-03-24 10:30:03 -04:00
.env.example Start Phase 6: Add deployment configuration and containers 2026-03-24 09:41:14 -04:00
.gitignore Add .gitignore and package-lock.json files 2026-03-24 10:30:03 -04:00
DEPLOYMENT.md Add health monitoring endpoints for Phase 6 2026-03-24 10:08:11 -04:00
docker-compose.bots.yml Start Phase 6: Add deployment configuration and containers 2026-03-24 09:41:14 -04:00
docker-compose.workers.yml Start Phase 6: Add deployment configuration and containers 2026-03-24 09:41:14 -04:00
go.mod Implement match worker container (cmd/acb-worker/) 2026-03-24 08:06:15 -04:00
go.sum Implement match worker container (cmd/acb-worker/) 2026-03-24 08:06:15 -04:00
PROGRESS.md Add GitHub Actions CI workflow for automated testing and builds 2026-03-24 10:54:43 -04:00
README.md Add README.md with project overview and quick start guide 2026-03-24 10:39:32 -04:00

AI Code Battle

A competitive bot programming platform where participants write HTTP servers that control units on a grid world.

Overview

AI Code Battle is a game simulation platform where:

  • Participants write bots in any language that expose HTTP endpoints
  • Bots compete on a toroidal (wrapping) grid world
  • Matches are executed offline and presented as completed replays
  • A web platform shows leaderboards, match history, and replay viewers

Quick Start

Prerequisites

  • Go 1.21+ (for game engine and CLI tools)
  • Node.js 18+ (for web and worker components)
  • Docker (for containerized deployment)

Running Locally

# Build CLI tools
go build ./cmd/acb-local
go build ./cmd/acb-mapgen

# Run a match between built-in bots
./acb-local -seed 42 -max-turns 100 -output replay.json -verbose

# Start web development server
cd web && npm install && npm run dev
# Open http://localhost:3000/app.html

Viewing Replays

  1. Open the web app at http://localhost:3000/app.html
  2. Navigate to "Replay Viewer" in the menu
  3. Load a replay JSON file or enter a URL

Project Structure

ai-code-battle/
├── engine/              # Go game simulation library
│   ├── types.go         # Core data types
│   ├── grid.go          # Toroidal grid implementation
│   ├── game.go          # Game state management
│   ├── turn.go          # Turn execution phases
│   ├── replay.go        # Replay recording
│   └── *_test.go        # Test files
├── cmd/
│   ├── acb-local/       # CLI match runner
│   ├── acb-mapgen/      # Map generator
│   ├── acb-worker/      # Match execution worker
│   └── acb-indexer/     # Index builder for static files
├── web/                 # Cloudflare Pages SPA
│   ├── src/
│   │   ├── pages/       # Page components
│   │   ├── replay-viewer.ts  # Canvas replay renderer
│   │   └── app.ts       # SPA entry point
│   └── public/          # Static assets
├── worker-api/          # Cloudflare Worker API
│   └── src/
│       ├── index.ts     # Router + cron dispatcher
│       ├── jobs.ts      # Job coordination
│       ├── bots.ts      # Bot management
│       └── glicko2.ts   # Rating system
├── bots/                # Strategy bot implementations
│   ├── random/          # Python - RandomBot
│   ├── gatherer/        # Go - GathererBot
│   ├── rusher/          # Rust - RusherBot
│   ├── guardian/        # PHP - GuardianBot
│   ├── swarm/           # TypeScript - SwarmBot
│   └── hunter/          # Java - HunterBot
└── docs/plan/           # Implementation plan

Strategy Bots

Bot Language Strategy
RandomBot Python Random valid moves (baseline)
GathererBot Go Energy collection, avoid combat
RusherBot Rust Rush enemy cores aggressively
GuardianBot PHP Defend cores, cautious expansion
SwarmBot TypeScript Formation cohesion, group advance
HunterBot Java Target isolated enemies

Deployment

See DEPLOYMENT.md for detailed deployment instructions.

Quick Deploy

# Start all strategy bots
docker-compose -f docker-compose.bots.yml up -d

# Start match workers
docker-compose -f docker-compose.workers.yml up -d

Testing

# Go engine tests
go test ./engine/... -v

# Worker API tests
cd worker-api && npm test

# Index builder tests
cd cmd/acb-indexer && npm test

Architecture

The platform uses a split architecture:

  • Cloudflare (free tier): Static site, API endpoints, D1 database, R2 storage
  • Rackspace Spot: Match workers, bot containers, index builder

See docs/plan/plan.md for the full implementation plan.

License

MIT