
very avg comp science student… also likes grapes. Ex-ASE @accenture
Joined May 2026
- Tweets53
- Following18
- Followers1
- Likes23
We checked if DCR was simply capturing straight-line speed.
Correlation with traditional metrics:
40-yard dash: rho = +0.06
10-yard split: rho = -0.05
Vertical jump: rho = -0.11
When we mapped pre-draft Combine movement to rookie NFL separation, the signal was unmistakable: Spearman = -0.645 (p = 0.0002, N=28 WRs) Receivers with high DCR (jagged directional shifts) struggled to separate as rookies. Fluid movers consistently won on routes.
In a penalized Ridge regression model predicting rookie separation:
Traditional Combine metrics: R^2 = 0.064
Tracking metric (DCR): R^2 = 0.173 (2.7× more explanatory power)
Combined: R^2 = 0.242
Tracking data meaningfully expands what scouts can explain before draft day.
Stopwatches compress movement; 10 Hz tracking captures 40+ spatial snapshots per drill.
engineered a kinematic metric: direction_change_rate (DCR)
To study this, we built an end-to-end tracking pipeline across 510 Combine prospects and 463,000+ tracking frames:
Input: 10 Hz Combine Short Shuttle tracking (predraft) Target: Rookie NFL regular-season separation at forward pass (mean_separation)
NFL front offices are in love with 4.3 40-yard dash times.
“fast” receivers fail to create separation
For the @NFL Big Data Bowl, analyzed 10 Hz tracking data to measure what the stopwatch leaves out: Route Ready Movement Quality.
Serverless Postgres I scrapped the flatfile JSON architecture and migrated the entire backend (both REST and Socket.IO events) to a Serverless PostgreSQL DB on @neondatabase.
The Ephemeral Disk I deployed to Render, but records still disappeared after a few hours. Turns out, Render's Free Tier spins down after 15 mins of inactivity. When a free web service sleeps, it completely wipes its ephemeral disk.JSON database was nuked by the cloud provider.
Bug 2: The Stale React State To stop players from overriding each other based on display names
I built a secure UUID deviceId system using Zustand + LocalStorage. But the API kept throwing 400 Bad Requests
Bug 1: The Git Reset I originally built the DB as a flat leaderboard.json file.
The problem? The file was tracked by Git. Every time the server synced or restarted, Git violently overwrote production data with the old 5 records from my repo history.
The Global Leaderboard in KLUSTOR is now permanent
huge update that securely tracks your unique device ID and persists your fastest laps to a live cloud database. No more lost runs. If you set a world record, it stays there forever.
Try it here: klustor.vercel.app
I reworked thread navigation around three separate layers of state:
Repository state
→ Thread state
→ Message state
Messages are cached by thread ID.
So switching:
→ Thread B
→ Thread A
doesn't require rebuilding everything from scratch.
The biggest issue was asynchronous requests racing each other.
Click Thread A
→ request A starts
Click Thread B
→ request B starts
Request B finishes
→ UI shows B
Request A finishes later
→ UI overwrites the state
Once persistent threads were implemented, the UI started exposing a bunch of race conditions.
Switching:
Thread A → Thread B
could briefly show Thread A's messages inside Thread B before correcting itself.
Sometimes the wrong thread remained selected.
