Geoguessr Self-Hosted Reimplementation
Back End
API Endpoints
GET /
Returns {
"version": string
}
POST /name
Accepts {
"name": string,
"secret": string
}
Returns 400 vs 204, sets session cookie
PUT /game
Requires session cookie
Accepts {
"timer": number
}
Returns {
"gameId": string
}
GET /game/{ID}
Requires session cookie
Returns {
"timer": number,
"coords": {
"1": {
"lat": number,
"lon": number,
}, ...
}
}
GET /game/{ID}/guesses/{name}
Requires session cookie
Returns {
"currentRound": string || null,
"guesses": {
"1": {
"lat": number,
"lon": number,
"score": number,
}, ...
}
}
POST /game/{ID}/guesses/{name}/{round}
Requires session cookie
Accepts {
"lat": number,
"lon": number,
}
Returns 400 vs 201
Front End
- Render streetview pano
- Render map for guessing
- On click, place and track marker for guess
- Render control pane
- Submit button
- Timer
- Round counter
- Current scores
- Fetch /game/{ID}, extract coords and timer length
- Main Loop
- Fetch /game/{ID}/guesses/{name}, update scores and round
- if round comes back null, redirect to /summary/{ID}
- Extract current coord
- Clear map markers
- Zoom out map
- Change pano to coord
- Reset timer
- On timeout or submit -> POST to /game/{ID}/guesses/{name}/{round}