A maze playground with a Next.js frontend and Rust (Axum) API.
Generate mazes, run solvers, stream solve progress, and view replays/leaderboards.
- Backend: Rust, Axum, SQLx, SQLite
- Frontend: Next.js, React, TypeScript
- Testing: Rust tests + Playwright E2E
- Rust (stable) + Cargo
- Node.js + npm
-
Copy
.env.exampleto.env(repo root). -
Start backend:
cargo run
-
Start frontend:
cd web npm install npm run dev
Backend default: http://localhost:8080
Frontend default: http://localhost:3000
src/main.rs- API server entrypointsrc/api/- HTTP + WebSocket handlerssrc/maze/- maze generation/modelsrc/solve/- solver implementationssrc/store/- SQLite persistencemigrations/- database migrationsweb/- Next.js app
- Web auth: GitHub OAuth via NextAuth
- API auth: short-lived Bearer JWT from
/api/token AUTH_MODEoptions:anonymous(default)optional_jwtjwt(required onPOST /api/solveandPOST /api/leaderboard)
- Quick rollback: set
AUTH_MODE=anonymous
docs/API.mddocs/deployment-runbook.mddocs/e2e-runbook.mddocs/observability-runbook.mddocs/ALGORITHMS.md