Backend: - Complete FastAPI backend with 42+ REST endpoints (auth, servers, config, players, bans, missions, mods, games, system) - Game adapter architecture with Arma 3 as first-class adapter - WebSocket real-time events for status, metrics, logs, players - Background thread system (process monitor, metrics, log tail, RCon poller) - Fernet encryption for sensitive config fields at rest - JWT auth with admin/viewer roles, bcrypt password hashing - SQLite with WAL mode, parameterized queries, migration system - APScheduler cleanup jobs for logs, metrics, events Frontend: - Server Detail page with 7 tabs (overview, config, players, bans, missions, mods, logs) - Settings page with password change and admin user management - Create Server wizard (4-step; known bug: silent validation failure) - New hooks: useServerDetail, useAuth, useGames - New components: ServerHeader, ConfigEditor, PlayerTable, BanTable, MissionList, ModList, LogViewer, PasswordChange, UserManager - WebSocket onEvent callback for real-time log accumulation - 120 unit tests passing (Vitest + React Testing Library) Docs: - Added .gitignore, CLAUDE.md, README.md - Updated FRONTEND.md, ARCHITECTURE.md with current implementation state - Added .env.example for backend configuration Known issues: - Create Server form: "Next" buttons don't validate before advancing, causing silent submit failure when fields are invalid - Config sub-tabs need UX redesign for non-technical users
3.0 KiB
3.0 KiB
Languard Server Manager
Quick Start
# Backend (from backend/)
python -m uvicorn main:app --host 0.0.0.0 --port 8000 --reload
# Frontend (from frontend/)
npx vite --host
- Backend API: http://localhost:8000 (docs: http://localhost:8000/docs)
- Frontend: http://localhost:5173
- Default admin:
admin/ (random, printed at first startup; reset viapython -c "from core.auth.utils import hash_password; print(hash_password('admin123'))"then update SQLite)
Architecture
FastAPI + SQLite backend, React 19 + TypeScript + Vite frontend. See ARCHITECTURE.md for full details.
Key Rules
- Frontend types must match API response shapes, NOT database schema columns
- There is no REST endpoint for logs — logs are only pushed via WebSocket events
- WebSocket
onEventcallback is the mechanism for receiving real-time log entries - Config updates use optimistic locking (config_version) — 409 on conflict
- Sensitive config fields are encrypted at rest with Fernet
Current Implementation Status
Backend: Fully implemented (42+ endpoints)
All routers, services, repositories, game adapter system, WebSocket, background threads, and scheduled cleanup are complete.
Frontend: Mostly implemented
| Route | Status | Notes |
|---|---|---|
/login |
Complete | Zod + react-hook-form validation |
/ |
Complete | Dashboard with server grid |
/servers/:id |
Complete | 7-tab detail page (overview, config, players, bans, missions, mods, logs) |
/servers/new |
Partial | 4-step wizard; known bug: form validation issues cause silent failure on submit |
/settings |
Complete | Password change + admin user management |
Known Bugs (as of 2026-04-17)
- Create Server silent failure: The 4-step wizard's "Next" buttons don't validate before advancing steps, so users can reach step 3 with invalid data.
handleSubmitthen silently fails because validation errors preventonSubmitfrom firing. Fix: validate on each "Next" click usingtrigger()from react-hook-form.
Frontend Type Mapping (API → Frontend)
| API Resource | Frontend Type | Key Fields |
|---|---|---|
| Server (enriched) | Server in useServers.ts |
game_port, current_players, max_players, cpu_percent, ram_mb |
| Mission | Mission in useServerDetail.ts |
name, filename, size_bytes |
| Mod | Mod in useServerDetail.ts |
name, path, size_bytes, enabled |
| Ban | Ban in useServerDetail.ts |
id, server_id, guid, name, reason, banned_by, banned_at, expires_at, is_active, game_data |
| Player | Player in useServerDetail.ts |
id, slot_id, name, guid, ip, ping |
Test Commands
# Frontend unit tests
cd frontend && npx vitest run
# Frontend type check
cd frontend && npx tsc --noEmit
# Backend (no test suite yet)
Future Enhancements (user requested)
- Config sub-tab redesign for user-friendliness (non-technical users)
- "Choose mission" button that auto-selects mission for server config
- Mission rotation management