I build hey-metrics.com — advanced basketball statistics across four leagues — alone, on one server. The repositories below came out of it, extracted and published because each one answers a problem I had to solve properly rather than work around.
One machine, with a ceiling. Everything runs on a single VPS. There is no horizontal escape hatch: when a data structure is too big, the answer has to be a better structure, not another node. The columnar migration this pushed me into took the service from 5-6 GB resident to about 0.25 GB, and cut the stored data by a factor of fifty.
Thirty seconds from push to production, and no staging. That is a deliberate trade — the feedback loop is worth it — but it means correctness cannot rely on someone catching it in review. It has to be mechanical, asserted by something that runs whether I am paying attention or not.
No second pair of eyes. Solo means the tooling is the reviewer. Every one of these libraries exists because the alternative was hoping I would remember.
Four leagues that do not share a court. The NBA arc is not the WNBA arc, the college lane is not the professional lane. Nothing about the domain can be hard-coded, which turns out to be a design discipline rather than a chore.
twinrun — Run two implementations over a grid of inputs and prove that not a single value moved. Written to replace a storage layer under hundreds of computed figures without changing any of them. It caught a tie-break that silently permuted a ranked list, and a date that changed type underneath a comparison. Final run: 174 identical out of 174, and 109 out of 109.
bytecap — A cache bounded by measured bytes, which refuses a load it cannot afford instead of evicting everything and dying anyway. Written after an unbounded module-level dictionary killed seventy-one workers in a loop. The number that changed how I size things: a parsed object cost 3.54 MB of real memory and 302 KB when pickled — the serialised size understates by a factor of twelve.
staleguard — Makes a derived artifact refuse to pretend it is fresh. Written after a refactor moved the consumer of a dataset without moving the producer, and the site served month-old numbers for four weeks with no errors in any log. The lesson it encodes: a green test suite says nothing about the freshness of its inputs.
hardwood — Turns shot coordinates from any provider, in any frame of reference, into one canonical half-court, and knows which league's rules apply. Coordinate conventions fail quietly — a sign error produces a plausible-looking shot chart with wrong numbers underneath.
pandrift — Measures how badly a homography calibrated on one frame lies, in metres, once the camera pans — and hands back the matrices to undo it. Written after a single broadcast clip credited players with up to 30% more distance than they actually ran: 1.97 m of median error, three steps, and nothing in the output looked wrong. It needs no ground truth. Reproject a point you know is fixed in the world, and whatever movement you measure is your own error.
hoops-brain — Not a library: a cross-lingual retrieval pipeline over the basketball research literature, its benchmark, and the log of five conclusions I published and then retracted. Every one of the five was a fault in the measurement rather than in the system. The way a question set is built moved the verdict further than the systems being compared did — from inconclusive to a +0.280 recall gap that did not exist, manufactured by questions a small model had invented rather than extracted. The corpus is published separately: 374 documents, 8,970 passages, licence-audited.
- gregoiremarty.com — portfolio.
- hey-metrics.com — the product these were extracted from.
- basketball-science-oa — the corpus behind
hoops-brain, on Hugging Face.
Open to work — data engineering and sports analytics.