srpen 2026
Games DB
Osobní katalog PC her, který si celý obchod Steamu zaindexuje do Postgresu, takže procházení, filtrování ani vyhledávání rate-limitované API Steamu vůbec nepotřebují.

- Role
- Sólo projekt — frontend, backend, infrastruktura
- Stack
- Next.js, TypeScript, Tailwind, Postgres, Drizzle, Auth.js, Vercel, Docker
Co to přináší
- Vlastní index katalogu Steamu — 245 025 appidů, 14 621 z nich načtených do plného detailu — protože Steam žádný endpoint /discover ani /trending k procházení nemá.
- Vyhledávání běží nad trigramovým indexem v Postgresu (pg_trgm), ne nad Steamem.
- Jedna plánovaná úloha — měsíční cron v GitHub Actions obnovuje ceny — a k tomu tři CLI úlohy (synchronizace katalogu, synchronizace seznamů, načtení detailů) spouštěné ručně. Načtení detailů, obnova cen i synchronizace seznamů si berou advisory lock v Postgresu, aby neběžely dvě kopie naráz; synchronizace katalogu ho nepotřebuje.
- Přihlášení přes GitHub OAuth kvůli osobní knihovně; procházení a vyhledávání funguje komukoli, přihlášenému i nepřihlášenému.
Technický návrh
HTTPS, rate limited
Klient
Next.js 16 App Router
React Server Components
Server
server/ modules
Katalog, procházení, detail, knihovna, účet.
Auth.js
server/steam
Vlastní rate limiter a TTL cache.
Data
Postgres (Neon)
Drizzle ORM
Čtyři zaverzované migrace.
pg_trgm GIN index
Nad game.name.
Externí služby
Steam Web API
Server Components
Drizzle
- Vyhledávání běží na Postgresu, ne na vyhledávací službě. Jeden GIN index pg_trgm nad game.name pokrývá 245 025 řádků. Není co synchronizovat a není třeba platit druhé úložiště.
- Migrace se generují a verzují. V db/migrations leží všechny čtyři SQL soubory a rozšíření pg_trgm zakládá migrace 0003 — ne ruční krok, který si někdo musí u nové databáze pamatovat.
- Klient Steamu si nese vlastní rate limiter a cache. Vykreslení stránky se nemůže rozpadnout do neomezeného počtu volání na Steam Web API, ať si stránka řekne o cokoli.