Gaming.WithAPlan

Game backlog clearing planner. Also my backend-comparison testbed.

Overview

I have a lot of games, purchased either through Steam Sales or Humble Bundles. I haven't played half of them half as much as I should like; and I have played less than half of them half as much as they deserve. I needed some help getting started.

I decided to write a tool to help organize my backlog. Originally, I was going to sort by Nearness to Completion, but that ended up not being possible, at least with the Steam API. Instead, I sort by peer pressure - it calculates which games you are missing achievements from, prioritizing ones a lot of people have first.

The backend experiment

More recently the interesting part has been the backend. It now runs two implementations side by side — one Python (Flask), one Go — both held to a single OpenAPI spec. CloudFront routes api/python/* and api/go/* to a Lambda Function URL for each, so I can compare the two against the exact same contract: ergonomics, cold starts, how painful the spec is to satisfy in each language.

Current Status

Prototype usable, more work to do. Gaming.WithAPlan

Core Problems

  • Too Many Games!!!
  • I wanted a real project to run a Python vs Go backend bake-off on
  • I wanted an OpenAPI spec to be the source of truth, not an afterthought
  • I wanted to experiment with the Steam API (and eventually other game library APIs)

Lessons Learned

  • The Steam API is surprisingly limited, especially for statistical data. I actually talked to some of their API developers about it — it's because people use it to "derive Valve's internals" and invest accordingly. I had to do all the statistical analysis on my side.
  • An OpenAPI spec that two backends must satisfy stays honest. When only one implementation exists, the spec quietly drifts to match the code.
  • Flask is fine once it's running; the Go service was quicker to get cold starts under control on Lambda.
  • Using a Lambda to build a reverse proxy in CloudFront was the first time I felt like an AWS developer.

Current Objectives

  • Bring the Go backend to full parity with the Python one.
  • Add persistence so you don't have to recalculate your peer-pressure scores every time.
  • Once persistence is there, build the "Find my soulmate" feature — it finds someone with a similar library so you can play together.

Tools

  • React / Vite
  • Python (Flask)
  • Go
  • OpenAPI
  • AWS Lambda (Function URLs)
  • AWS S3, Route 53, CloudFront
  • Terraform
  • GitHub