Geobingo is an open-source game where you and your friends are assigned prompts to find and photograph objects in the real world.
Tip
This project is not related to GeoBingo.io, but check them out on Github. It is very similar to this repo, but in Google Street View, if going outside is not your thing.
This will be using Docker via docker-compose.
First you might want to edit the docker-compose.yml. In there you can configure the enviorment variabels, to define on which Ports the Server and Websocket run on.
After that it's as easy as running
docker-compose up --build
Download the Repo and open in up in your favorite IDE. Then install all the required packages.
npm i
After that make sure you edit the .env file. There is a .env.template. In this file you can configure on which ports the Server and Websocket run on.
Like this its configured to run on your localhost. The client derives the WebSocket host from the current page and scopes each connection to the game id in the URL. After that just run the project using
npm start
or use nodemon, to automatically restart the server once you saved a file. (Often not recommended, because all the game data is stored in the runtime. Meaning restarting the server resets the game)
npm run dev
In GeoBingo you can set default words, which will be randomly choosen if you dont fill out all the words. You can find those in /src/utility/wordsList.mjs. In there just put the Words you want to use.
- 🤝 Teams are supported. Play with multiple people together
- 📝 Voting. Give extra points to the best photos.
- 🔎 As Admin remove pictures that do not follow the prompt.
- 🎮 Multiple gamemodes (individual, shared_locked, bounty_hunt).
- 🔗 Compression Build in. Save Data when on the run
- 💻 Good looking UI
When creating or updating a game (POST /game or POST /word/:gameId/set), you can pass gameMode:
individual(default): each player gets their own random prompt set.shared_locked: all players get the same prompts, and once any player completes a prompt, nobody can upload that prompt again. Completed prompts also cannot be replaced/reuploaded.bounty_hunt: only one active prompt is live at a time. First valid upload claims it for +1 point and triggers a 3-choice race to pick the next prompt (10s timeout with random fallback). Voting is disabled in this mode.
bounty_hunt optional setting:
allowSkip(boolean): allows a player to skip the active bounty by paying 1 point. In team games, this uses a shared team score pool.
Frontend behavior:
- On the create page, gamemode is selected via tabs. In
shared_locked(VS mode), prompt count is shown as Total Prompts and defaults to 12. - In
bounty_hunt, voting setup is hidden and an optional skip toggle is shown. - On the camera page, progress is shown as Words left for classic modes, while bounty mode shows active bounty state, next-prompt selection, and skip controls.
Opening / lets the game creator set prompts and create a new game. After creation the app redirects to /g/<game-id>. Share that URL or the QR code on the lobby screen with other players.
Contributions are always welcome!
There are still a lot of issues in terms of security, since the was programmed in about two Weeks and is only meant for Friends.
If you have any ideas for improvements, just create a Pull Request :)
