Vit Busek
← Work

August 2026

Games DB

A personal PC games catalogue that indexes Steam's entire storefront into Postgres, so browsing, filtering, and search never touch Steam's own rate-limited API.

Games DB's home page: a featured game banner above a Top Sellers grid of game cover art, prices, and discount badges.
Role
Solo build — frontend, backend, infrastructure
Stack
Next.js, TypeScript, Tailwind, Postgres, Drizzle, Auth.js, Vercel, Docker

What it brings

Technical design

HTTPS, rate limited

Client

  • Next.js 16 App Router

  • React Server Components

Server

  • server/ modules

    Catalogue, browse, detail, library, account.

  • Auth.js

  • server/steam

    Its own rate limiter and TTL cache.

Data

  • Postgres (Neon)

  • Drizzle ORM

    Four checked-in migrations.

  • pg_trgm GIN index

    On game.name.

External

  • Steam Web API

Server Components

Drizzle

  1. Search is Postgres, not a search service. One pg_trgm GIN index on game.name covers 245,025 rows. Nothing to keep in sync, and no second datastore to pay for.
  2. Migrations are generated and checked in. db/migrations holds all four SQL files, and the pg_trgm extension is created by migration 0003 — not by a manual step someone has to remember against a new database.
  3. The Steam client owns its own rate limiter and cache. A page render cannot fan out into an unbounded number of upstream calls, whatever the page asks for.