Open source · Discord-first

Make game night happen.

No Friday-night chat spiral. GamePlan turns “what should we play?” into a Game Night everyone can actually join—even when plans change.

View GamePlan on GitHub

Self-hosted · Docker Compose · MIT licensed

Friendly GamePlan robot holding a controller and game-night flag, surrounded by connected players and planning icons

Plan where your group already talks

From a shared Steam library to a plan in Discord.

GamePlan handles the awkward coordination work without pulling the group into another place.

01

Discord-first planning

Start with /gameplan start. Choose a game directly, open a Game Vote, or build from a voice channel already in progress.

02

Steam compatibility

Players link a public Steam library through a private, one-time browser link. GamePlan finds games the group can play together—no Steam password involved.

03

One useful Session Feed

Confirmed Game Nights land in a dedicated Session Feed. Each plan gets its own thread for RSVPs, changes, and the conversation that belongs with it.

# session-feedGame Nights, without the scrollback
GP
GamePlanBOTToday at 18:04
GAME NIGHT CONFIRMED
Friday co-op
DRGDeep Rock GalacticChosen from the group’s compatible games
STARTS20:00 FridayPLAYERS4 ready · 1 later
Friday co-op discussion8 messages

Built for real life

The plan can bend without breaking.

Game night is rarely a clean two-hour block with everyone arriving together. GamePlan keeps the shared plan useful as the evening moves.

01

Regular Game Nights

Set up a repeating rhythm for the group, then let each actual Game Night become its own concrete plan.

02

Late joiners. Early drops.

Capture when people can arrive and when they need to leave, so the roster reflects the night you really have.

03

More than one game

Plan multiple games in one session instead of pretending the group will want the same thing all evening.

04

Games Tonight stays current

When the live roster or game choice changes, opted-in players get a useful notification—never an @everyone blast.

GAMES TONIGHTLIVE · FRI 20:24
Friday co-opIn progress
20:0021:0022:00
MMikeall night
AAlexjoins 21:00
RRileyleaves 22:00
Plan updatedSecond game moved to 21:15 for the live roster.

How it works

Your server. Your bot. Your Game Night.

  1. 01

    Self-host GamePlan

    Run the Docker Compose stack on an always-on machine behind public HTTPS.

  2. 02

    Install the Discord bot

    Create your Discord application, grant only the permissions it needs, and choose the Session Feed with /gameplan server.

  3. 03

    Plan a Game Night

    Run /gameplan start, compare compatible games or open a Game Vote, then publish the plan.

Self-hosting

Small stack.
Clear responsibilities.

GamePlan is built for operators who want control without building a platform around it. A modest always-on machine is enough for an initial community.

Use a home server with a reliable public route, a managed container platform, or an inexpensive VPS—Hetzner is one example. GamePlan depends on none of them.

01
PUBLIC EDGEDNS + HTTPS

Caddy, Nginx, Traefik, or equivalent

valid TLS
02
ALWAYS-ON MACHINEDocker Compose

App · notification worker · migrations

private network
03
PERSISTENT STATEPostgreSQL

Back up the volume; never expose port 5432

Public HTTPS

Discord must reach the interactions endpoint and players must open one-time browser links.

Health and updates

Monitor /healthz, container restarts, disk space, and backup failures.

Backups that restore

Keep encrypted PostgreSQL backups away from the host and rehearse recovery.

Discord permissions & privacy

Enough access to coordinate. No more.

The bot needs to see and post in selected channels, create and use public threads, embed links, and read message history. It needs Server Members Intent to keep membership current.

No Administrator permission. No Message Content or Presence Intent.

View Channelsrequired
Send Messages + Threadsrequired
Embed Linksrequired
Create Public Threadsrequired
Read Message Historyrequired
Administratornot needed
Private by design

GamePlan stores Discord IDs, optional display names, Steam IDs, ownership snapshots, and planning data in your PostgreSQL database. It never receives Steam passwords or launcher credentials. One-time browser links expire after ten minutes and can be used once.

Documentation

Start with the path you need.

FAQ

Good questions, straight answers.

Does GamePlan host anything for me?

No. GamePlan is a self-hosted open-source project. You choose the machine, domain, HTTPS setup, and backup approach.

Does it need my Steam password?

No. Steam OpenID proves the player’s Steam ID, and the Steam Web API reads a public library. GamePlan never asks for a Steam password, session cookie, or launcher credential.

Why does my Steam library need to be public?

Steam must be allowed to report ownership for GamePlan to compare compatible games. Profile and game details need to be public for that comparison to work.

What happens when plans change mid-session?

The host can update the live roster or replan for it. GamePlan records the change in the discussion and can notify opted-in players through their selected notification route.

Will it ping the whole server?

No. Games Tonight updates never use @everyone or @here. Players choose whether notifications are off, sent by DM, posted to the thread, or both.

Can I modify it?

Yes. GamePlan and its repository artwork are available under the MIT License.

Friday is closer than it looks

Give game night
a fighting chance.

Run GamePlan on infrastructure you control and keep the plan where the group already is.

Explore GamePlan on GitHub