Skip to content

Navigation Menu

Sign in
Sign up
@gregoirembv
gregoirembv
Follow

Gregoire Marty gregoirembv

I build data systems and AI products that run in production. Pipelines, (sports) stats engines, LLM integration, MCP servers. End-to-end. No fluff.

Block or report gregoirembv

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
gregoirembv /README.md

Gregoire Marty

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.

The constraints they were built under

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.

What came out of it

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.

Elsewhere

Open to work — data engineering and sports analytics.

Popular repositories Loading

  1. staleguard staleguard Public

    Make a derived artifact refuse to pretend it is fresh.

    Python

  2. bytecap bytecap Public

    A cache bounded by measured bytes, that refuses what it cannot afford.

    Python

  3. twinrun twinrun Public

    Prove that a refactor moved no value, and name the one that did.

    Python

  4. hardwood hardwood Public

    Normalise basketball shot coordinates across providers and leagues.

    Python

  5. gregoirembv gregoirembv Public

    Tools extracted from a solo-built basketball analytics product.

  6. hoops-brain hoops-brain Public

    A licence-audited cross-lingual retrieval corpus of basketball science — and the five conclusions I retracted while measuring it.

    Python

AltStyle によって変換されたページ (->オリジナル) /