# Geoguessr Self-Hosted Reimplementation ## Build Docker Image Tarball ```bash ./docker/build.sh ``` ## API ``` API Endpoints GET / Returns { "version": string, "status": string } PUT /game Header Authorization: Name string Accepts { "timer": number } Returns { "gameId": string } GET /game/{ID} Returns { "gameId": string, "creator": string, "timer": number, "coords": { "1": { "lat": number, "lng": number, }, ... }, "players": [ { "name": string, "currentRound": string || null, "totalScore": number, "guesses": { "1": { "lat": number, "lng": number, "score": number }, ... } }, ... ] } POST /game/{ID}/join Header Authorization: Name string Returns 201 vs 401 GET /game/{ID}/guesses Header Authorization: Name string Returns { "currentRound": string || null, "guesses": { "1": { "lat": number, "lng": number, "score": number }, ... } } POST /game/{ID}/guesses/{round} Header Authorization: Name string Accepts { "lat": number, "lng": number } OR { "timeout": boolean } Returns 400 vs 201 and { "score": number, "totalScore": number } ``` ## Next Steps - Refactor round tracking in database logic - Reduce complexity of `game_api` in back-end - Reduce complexity of `GamePanel` in front-end - Genericize number of rounds - Genericize round timer in UI - Finalize scoring formula - Button to return the street view pano to the target - Track name via tokens - Error handling in UI - Live update summary page - Navigate directly to summary page - Navigate directly to joining a game - Re-join a game you did not finish - Show current best on round summary - Round summary should use dynamic map - Styling and layout improvements - Optimize docker file or set up compose structure