Wordfleet is a real-time, server-authoritative multiplayer word game. Beta uses a Java Spring Boot control plane, Java session servers on Agones, Redis state/leaderboards, and a React web client.
- Turn-order elimination gameplay with 2-12 players per room.
- WebSocket real-time game sessions.
- Guest auth for local development. Email magic-link scaffolding exists in the codebase but is not required for local run.
- Redis-backed room state with TTL and global leaderboards.
- Agones Fleet/FleetAutoscaler deployment manifests for GKE.
services/control-planeREST APIs for auth, rooms, leaderboards, and match ingestion.services/session-serverauthoritative game loop and WebSocket protocol.libs/protocolshared join-token and envelope models.apps/webbrowser client.infra/k8sandinfra/agonesdeployment assets.infra/scriptsGKE/bootstrap/build/deploy scripts.tests/loadk6 scenarios.docsAPI/protocol/deploy/runbooks/account setup log.
These are the full local run steps that match the current repo and the manual startup flow used during development.
- Java 21
- Maven
- Node.js 20+
- npm
- Redis
Docker is optional for local run. If Redis is already installed locally, you do not need Docker.
- Control plane:
http://localhost:8080 - Session server:
http://localhost:8090 - Web app:
http://localhost:5173 - Redis:
localhost:6379
Option A: local Redis service
sudo service redis-server startOption B: Docker Compose
cd ~/Wordfleet
docker compose up -d redisRun these once before starting the Java services:
cd ~/Wordfleet
mvn -N install
mvn -pl libs/protocol install -DskipTestsWhy this is needed:
services/control-planeandservices/session-serverdepend on the locallibs/protocolmodule- the root parent POM also needs to be installed in your local Maven cache
Open a new terminal:
cd ~/Wordfleet/services/control-plane
mvn spring-boot:runOpen another terminal:
cd ~/Wordfleet/services/session-server
mvn spring-boot:runOpen a third terminal:
cd ~/Wordfleet/apps/web
npm install
npm run devOpen:
http://localhost:5173
- Use guest login only
- Do not use the email magic-link flow for local run
- A room stays in
WAITINGuntil at least 2 players join - To test multiplayer locally, open the app in two browser windows or one normal window plus one incognito window
The local setup already has fallback defaults in the service configs:
- control plane talks to Redis at
localhost:6379 - session server talks to Redis at
localhost:6379 - control plane falls back to session websocket URL
ws://localhost:8090/ws/room - local secrets default to development values, so no extra env vars are required for a basic local run
Relevant config files:
services/control-plane/src/main/resources/application.ymlservices/session-server/src/main/resources/application.yml
Once both Java services are up, you can verify them with:
curl http://localhost:8080/health
curl http://localhost:8090/healthIf Maven cannot resolve local artifacts:
cd ~/Wordfleet
mvn -N install
mvn -pl libs/protocol install -DskipTestsIf you see:
No plugin found for prefix 'spring-boot'
start the service from its own module directory instead of from the repo root:
cd ~/Wordfleet/services/control-plane
mvn spring-boot:runcd ~/Wordfleet/services/session-server
mvn spring-boot:runIf the frontend does not pick up a recent UI change, restart Vite:
cd ~/Wordfleet/apps/web
npm run devIf gameplay/backend changes were made, restart the session server:
cd ~/Wordfleet/services/session-server
mvn spring-boot:runUse docs/DEPLOY_GKE.md and scripts in infra/scripts.
Never commit credential files. Metadata-only account logs are kept in docs/account-setup-log.md.