Geoguessr Self-Hosted Reimplementation
Build Docker Image Tarball
./docker/build.sh
API
API Endpoints
GET /
Returns {
"version": string,
"status": string
}
GET /googleApiKey
Returns {
"googleApiKey": 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
- Cache API key after first call to back-end
- Styling and layout improvements
- Optimize docker file or set up compose structure