A web app that helps you manage and plan your way through your Steam game backlog. Connects to your Steam account, enriches games with data from IGDB and HowLongToBeat, and lets you schedule gaming sessions with optional Discord notifications and Google Calendar sync.
- Steam Library Sync — Import your full Steam library with playtime, achievements, and last played data
- Game Enrichment — Automatic genre, rating, and description data from IGDB; time-to-beat estimates from HowLongToBeat
- Backlog Management — Categorize games (backlog, playing, completed, abandoned) with drag-and-drop priority sorting
- Session Scheduling — Plan gaming sessions with auto-generation based on your availability and backlog priorities
- Statistics Dashboard — Playtime analytics, completion predictions, genre breakdowns, and weekly activity charts
- Discord Notifications — Webhook-based reminders and session summaries to your Discord channel
- Google Calendar Sync — Push scheduled sessions to Google Calendar with automatic create/update/delete
- Timezone-Aware — All scheduling respects your configured timezone
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) + React 19 |
| Auth | NextAuth v5 (Steam OpenID) |
| Database | Neon (Postgres) via Drizzle ORM |
| Cache | Upstash Redis |
| UI | shadcn/ui + Tailwind CSS v4 |
| State | TanStack Query + Zustand |
| Testing | Vitest + Playwright + PGlite |
- Node.js 20+
- A Neon PostgreSQL database
- An Upstash Redis instance
- A Steam API key
- Clone the repo and install dependencies:
git clone https://github.com/Tien-Lam/steam-backlog-planner.git
cd steam-backlog-planner
npm install- Copy
.env.exampleto.env.localand fill in your credentials:
cp .env.example .env.local- Push the database schema:
npm run db:push- Start the dev server:
npm run devOpen http://localhost:3000 and sign in with Steam.
- IGDB — Add
TWITCH_CLIENT_IDandTWITCH_CLIENT_SECRETfrom Twitch Developer Console for game metadata - Google Calendar — Add
GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET, andGOOGLE_REDIRECT_URIfrom Google Cloud Console for calendar sync - Discord — Configure a webhook URL in the app's Settings page for notifications
npm run dev # Dev server
npm run build # Production build
npm test # Unit tests
npm run test:coverage # Unit tests with coverage report
npm run test:integration # Integration tests (PGlite)
npm run test:e2e # E2E tests (Playwright)
npm run lint # ESLint
npm run db:push # Push schema changes to DB
npm run db:studio # Drizzle Studio (DB browser)src/
app/
(dashboard)/ # Authenticated pages (library, schedule, statistics, settings)
api/ # API routes (steam, games, sessions, hltb, igdb, google, discord, etc.)
components/
games/ # Game cards, backlog prioritizer
schedule/ # Session calendar, session form
statistics/ # Charts, predictions, analytics
settings/ # Discord, Google Calendar, preferences
ui/ # shadcn/ui primitives
lib/
db/ # Drizzle schema and client
hooks/ # TanStack Query hooks
services/ # Steam, HLTB, IGDB, Google Calendar, Discord, Redis cache
tests/
integration/ # PGlite-backed integration tests
e2e/ # Playwright E2E tests
live/ # Live API tests (requires real credentials)
MIT