Keefer Sery

Product engineer. I take vague problems to shipped things — the analysis, the interface, and the deploy.

I'm a software engineer with a design background, currently leading projects end to end at my day job. The part I'm good at is the whole arc: figuring out what's actually being asked, deciding what it should do, building it, and putting it in front of people. Fewer handoffs, less spec translation.

The projects below are mine, built in the open. Both are live, both are running against real data, and both started from the same kind of question:the obvious number is misleading — what's the right one? The code, the commits, and the reasoning are all public, so you can check.

Projects

by most recent work

Slow Your Roll

25 commitslast push today

Expected-value tracker for World of Warcraft bonus rolls.

Ranks every boss you can spend a token on by the expected value of one roll. The subtlety is the denominator: a roll draws from the boss's entire loot table, not just the items your sim report bothered to score, so unscored items have to be filled in at zero value — they dilute the odds without adding upside, exactly as they do in game. That makes loot spec a lever rather than a filter, since switching specs can remove items you never wanted and improve the odds on every remaining one.

  • Vanilla JS
  • TypeScript (checkJs)
  • Zero-build static
  • Node test runner

Vibelock

92 commitslast push 2d ago

Data-driven item builds for the game Deadlock, generated from live match data.

Most build sites rank items by win rate, but an item's win rate mostly measures when it gets bought — expensive items are bought by players already winning, so they look good regardless of what they do. On live data that raw win rate correlates at r ≈ 0.91 with the win probability that already held at the moment of purchase. Vibelock scores against a net-worth-standardized win rate instead, and fills each phase against a real soul budget rather than ranking items independently, because a build is a correlated set under a constraint — the top-N items scored separately don't compose into one.

  • React 19
  • TypeScript
  • TanStack Query
  • Vite
  • Valibot

Activity

117 commits · updated Jul 27