Standard GitHub profiles only count green squares. Velocity Radar measures true momentum across public and private repos without exposing private code. Features: • Pace: Compares your last 30 active days to your historical baseline. • Breakdown: Sorts commits into substantive, automated, and merges. • Stamina: Tracks unbroken runs and multi-day solid streaks. Built for high-output developers and AI agent commanders. Add a dynamic radar to your profile.
Which Vercel product: Vercel Functions behind Vercel's CDN, with routing rules in vercel.json, serving velocity.id8.one.
The new capability: Velocity Radar's product is an image URL. A developer pastes one line into their GitHub README, and every profile visit fetches velocity.id8.one/stats//graph-dark.png. That only works if thousands of profiles can load a personalised image fast, from anywhere, at almost no cost, without me running servers. On Vercel, a Function draws each person's graph from their counted data as an SVG and turns it into a PNG. Routing rules give every user clean image addresses for graphs, badges and a 1200×630 share card. The CDN caches each image for a day and serves the old copy while a new one renders, so a README never shows a slow or broken image while the nightly count refreshes.
How it shaped the product: because a graph is just a cached image URL, Velocity Radar needs no sign-up, no install and no app. That frictionless start is the growth.
Hey Product Hunt! 👋
I'm Paul, and I'm excited to share Velocity Radar.
While building out the iD8 ecosystem and orchestrating multi-agent workflows, I realized standard GitHub profiles don't tell the whole story. Most of our best work happens in private repositories, and as we integrate more AI into our dev loops, raw commit counts get heavily skewed by automated agent actions.
I built Velocity Radar to measure true developer momentum. It doesn't just count green squares; it analyzes your pace by comparing your newest stretch of 30 active days to your earlier baseline.
It also runs directly in your GitHub account to categorize commits into substantive, automated, and merges, keeping your private repository names completely secure.
Whether you are a solo open-source builder or commanding an AI agent fleet, I'd love for you to generate your radar, drop it on your profile, and see your stats.What is your longest unbroken run of substantive commits? Let me know in the comments, and I'm here to answer any questions!
Report
💡 Bright idea
Image endpoint needs explicit Cache-Control headers with max-age=0 and no-cache. GitHub routes all profile README images through Camo proxy (camo.githubusercontent.com). If server does not tell Camo not to cache, GitHub keeps graph-arcade-light.png on edge for days. Ten-minute refresh schedule breaks silently for anyone using snippet)
The image endpoint was setting s-maxage for our edge cache but nothing for downstream, so Camo picked its own freshness. Fixed today: graphs now send max-age=3600, so a README shows the nightly's figures within an hour. (The "ten minutes" in the guide is how often we check a username after you paste the snippet; the graph itself refreshes nightly.)
max-age=0, no-cache would also have worked, but it'd make Camo re-fetch on every README view for data that changes once a day, so I went with the hour setting.
If you encounter any anything else, good or bad, I'd love to hear it!
Report
@paulwsave I misread the ten-minute note in the guide as graph render cadence. Since the stats only update nightly, a one-hour max-age is a better fit against Camo traffic.
GitHub statistics · Velocity Radar
GitHub statistics · Velocity Radar
Image endpoint needs explicit Cache-Control headers with max-age=0 and no-cache. GitHub routes all profile README images through Camo proxy (camo.githubusercontent.com). If server does not tell Camo not to cache, GitHub keeps graph-arcade-light.png on edge for days. Ten-minute refresh schedule breaks silently for anyone using snippet)
GitHub statistics · Velocity Radar
@konstantin_tikhaev Good catch, thank you!
The image endpoint was setting s-maxage for our edge cache but nothing for downstream, so Camo picked its own freshness. Fixed today: graphs now send max-age=3600, so a README shows the nightly's figures within an hour. (The "ten minutes" in the guide is how often we check a username after you paste the snippet; the graph itself refreshes nightly.)
max-age=0, no-cache would also have worked, but it'd make Camo re-fetch on every README view for data that changes once a day, so I went with the hour setting.
If you encounter any anything else, good or bad, I'd love to hear it!
@paulwsave I misread the ten-minute note in the guide as graph render cadence. Since the stats only update nightly, a one-hour max-age is a better fit against Camo traffic.