# botWebWars A FastAPI and React-based web arena featuring a real-time **64 × 64 grid** with coordinates ranging from `(0, 0)` to `(64, 64)`. Players register with their name and custom avatar color and are randomly placed onto the grid. --- ## Features - **FastAPI Backend**: - `POST /api/players` (or `/api/register`): Register a player with `name` and `color`. The game places them at a random unoccupied `(x, y)` coordinate between `(0, 0)` and `(64, 64)`. - `GET /api/board`: Returns grid dimensions, player count, and player list. - `GET /api/players`: Lists active players. - `DELETE /api/players/{player_id}`: Remove a player from the arena. - `POST /api/board/reset`: Reset the board and clear all players. - `/ws`: Real-time WebSocket feed pushing live player spawns, departures, and board resets to all connected clients. - Interactive OpenAPI/Swagger documentation at `/docs`. - **React + Vite + Tailwind CSS Frontend**: - High-performance HTML5 Canvas rendering for the 64×64 arena with pan (click & drag), zoom (mouse wheel or zoom buttons), and grid coordinate rulers. - Hover cursor coordinate tracker showing exact `(x, y)` coordinates. - Glowing bot avatars rendered in the player's chosen color with nameplates and pulsing selection rings. - Live registration modal with interactive color picker, cyberpunk color presets, and real-time avatar preview. - Sidebar showing all active bots and coordinates; click any bot to focus the camera on them. - 1-click **Quick Spawn Bot** button for rapid testing. - Real-time synchronization via WebSockets with auto-reconnection. - **Dockerized Single-Container Deployment**: - Multi-stage `Dockerfile` compiles the frontend with Node 22 and packages it into a lightweight Python 3.12 image. - FastAPI serves both the API/WebSocket endpoints and the compiled SPA frontend. --- ## Quick Start with Docker ### Option 1: Docker Compose (Recommended) ```bash docker compose up --build ``` Open [http://localhost:8000](http://localhost:8000) in your browser. ### Option 2: Docker CLI ```bash # Build the Docker image docker build -t botwebwars . # Run the container docker run -d -p 8000:8000 --name botwebwars botwebwars ``` - Webapp & Arena: [http://localhost:8000](http://localhost:8000) - Swagger API Docs: [http://localhost:8000/docs](http://localhost:8000/docs) --- ## API Usage Examples ### Register a Player ```bash curl -X POST http://localhost:8000/api/players \ -H "Content-Type: application/json" \ -d '{"name": "CyberViper", "color": "#38BDF8"}' ``` Response: ```json { "id": "bot_a1b2c3d4", "name": "CyberViper", "color": "#38BDF8", "x": 42, "y": 18, "created_at": "2026-09-05T21:00:00.000000Z" } ``` ### Inspect Board State ```bash curl http://localhost:8000/api/board ``` ### Clear / Reset Board ```bash curl -X POST http://localhost:8000/api/board/reset ``` --- ## Local Development (Without Docker) ### Backend ```bash cd backend python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt uvicorn app.main:app --reload --port 8000 ``` ### Frontend ```bash cd frontend npm install npm run dev ``` The Vite development server runs at [http://localhost:5173](http://localhost:5173) and proxies `/api` and `/ws` to FastAPI on port 8000. ### Running Backend Tests ```bash pytest backend/tests ```