All projects

Hoard

Never overpay for a game again.

Self-hosted web app that tracks game deals across 30+ stores, manages your Steam library and backlog, and helps you decide what to play next with value scoring and mood-based recommendations.

Demo credentials

Email: demo@example.com Password: demo1234!

Read-only mode — data resets weekly. Access restricted to US/Canada.

Tech Stack

Next.js 16 TypeScript SQLite Drizzle ORM Tailwind CSS shadcn/ui Better Auth IsThereAnyDeal API HowLongToBeat Discord Webhooks

Why I Built This

I have a massive Steam backlog and kept missing deals on wishlisted games. Existing tools like IsThereAnyDeal are great for price alerts but don't help you decide what to actually play. Hoard combines deal tracking with backlog management in one place.

Features

  • Steam library and wishlist sync with automatic metadata enrichment
  • Price tracking across 30+ stores with historical low comparison
  • Configurable value scoring engine (price, reviews, $/hour, personal interest)
  • Backlog recommender with mood picker, duration filters, and co-op presets
  • Discord price alerts with configurable thresholds
  • Installable PWA with mobile-optimized responsive design

Architecture

All external API data syncs through a cache layer into SQLite. The UI reads exclusively from the database, never making live API calls. This keeps the UI snappy and resilient to API outages. Cron jobs handle periodic syncs for prices, library data, and enrichment.

Key Decisions

SQLite over PostgreSQL

Single-file database, no container needed, perfect for a NAS deployment. Drizzle ORM makes it easy to swap later if needed.

Cache-first architecture

External APIs are unreliable and slow. By syncing everything to a local DB first, the UI never blocks on network calls.

In-process cron over separate worker

node-cron runs inside the Next.js process. Simpler deployment for a single-user app that doesn't need horizontal scaling.