The radar
Each point is where @AIMLPM ranks among them over the same days: the edge means no one is above. The right half is Volume, the left half is Consistency; tap either to jump to its chapter.
Tap any axis for the count behind it.
Your graph on your GitHub profile, and your own page at velocity.id8.one, in about a minute.
Type it here: every button on this page fills in from it.
<div align="center">
<a href="https://velocity.id8.one/stats/octocat">
<img alt="octocat's Velocity Graph" src="https://velocity.id8.one/stats/octocat/graph-arcade-light.png" width="720" />
</a>
</div>
<div align="center">
<a href="https://velocity.id8.one/stats/octocat">
<img alt="octocat's Velocity Graph" src="https://velocity.id8.one/stats/octocat/graph-arcade-dark.png" width="720" />
</a>
</div>
<div align="center">
<a href="https://velocity.id8.one/stats/octocat">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://velocity.id8.one/stats/octocat/graph-dark.png" />
<img alt="octocat's Velocity Graph" src="https://velocity.id8.one/stats/octocat/graph-light.png" width="720" />
</picture>
</a>
</div>
velocity.id8.one/stats/<you>. A username is
checked at most every ten minutes.
Open your Velocity Radar page
Waiting for your GitHub username: type it at the top of the directions.
The graph on their GitHub profile, and the radar at the top of their page: where they rank among the 529 builders Velocity Radar follows, on six figures from GitHub's own calendar. Every figure here is live.
Each point is where @AIMLPM ranks among them over the same days: the edge means no one is above. The right half is Volume, the left half is Consistency; tap either to jump to its chapter.
Tap any axis for the count behind it.
Run the count in your own GitHub account and press Check my run: your page's Stamina chapter lights up with your real figures, private repositories included, their names never.
Contents: Read-only · Metadata: Read-only · 7-day expiry
Open GitHub's token form
VELOCITY_RADAR_TOKEN
Settings → Secrets and variables → Actions → New repository secret, in your repository. Nowhere else.
Open the new-secret page
.github/workflows/velocity-radar-count.yml
It pins the published count to count.yml@33e9936, release v7.
Create it on GitHub, filled in
.github/dependabot.yml
GitHub's Dependabot then tells you about each new release of the count with a pull request.
If GitHub says the file already exists, you use Dependabot already: add the
github-actions entry to your file instead (how).
Create it on GitHub, filled in
When the run shows Success, press Check my run. Velocity Radar reads that run back from GitHub, checks it is the published count and nothing else, and gives you a receipt.
Type your GitHub username at the top of the directions, and this page watches GitHub for your run.
Pressing it sends your GitHub username and the repository to Velocity Radar, which reads your run's public record and its log on GitHub: the totals, and nothing else. Your token never leaves GitHub.
Press Check my run before you delete the run: once it is deleted, there is nothing left to read.
Press Open GitHub's token form. GitHub opens New fine-grained personal access
token with the name velocity-radar-count, a description and an expiry 7 days away
already filled in. Check that Resource owner is your own account.
GitHub shows the token once, starting with github_pat_. Press the copy button beside it and
keep this tab open until the next step is done.
The token never reaches Velocity Radar. It stays in your GitHub account, and the code uses it on GitHub's machines inside that account.
Press Open the new-secret page: it opens Settings → Secrets and variables →
Actions → New repository secret in your repository. Type
VELOCITY_RADAR_TOKEN as the name, paste the token as the secret, and press Add
secret. VELOCITY_RADAR_TOKEN then appears under Repository
secrets.
Do not add it under Agents, Codespaces or Dependabot, as a variable, or in any file. Only Actions → Repository secrets.
The token can read the code in every repository you ticked, private ones included. Anywhere else it is exposed or useless:
The right page's address ends in /settings/secrets/actions/new; one ending in
/agents, /codespaces or /dependabot is the wrong page. If the
token ever lands in the wrong place, delete it at
github.com/settings/personal-access-tokens and make a new one.
VELOCITY_RADAR_TOKEN listed under Repository secrets.A public repository uses no private-repository Actions minutes.
The caller file does one thing: it runs our counting code, count.yml, fixed at commit
33e9936, in your account. You can read that code before you commit anything.
Its first 27 lines say in plain words what it asks GitHub for and what leaves your account: nothing.
Most of the rest is our formulas file and its test cases, copied in full.
Press Create the file on GitHub, filled in. GitHub opens its editor with the name
.github/workflows/velocity-radar-count.yml and the text below already in it.
Before you commit, check two lines. Line 8 ends
count.yml@33e993618d8583e7aa329422aac458e85be8d73b # v7, and line 12 reads
VELOCITY_RADAR_TOKEN: ${{ secrets.VELOCITY_RADAR_TOKEN }}. If either differs, your browser
showed an older copy of this page: reload it and press the button again.
Then commit. Press Commit changes… at the top right, leave
Commit directly to the default branch selected in the box that opens, and
press Commit changes. The file then appears in the repository under
.github/workflows.
.github/workflows.If the editor opens empty, copy this text into it:
name: Velocity Radar count
on: workflow_dispatch
permissions:
contents: read
id-token: write
jobs:
count:
uses: AIMLPM/velocity-radar-count/.github/workflows/count.yml@33e993618d8583e7aa329422aac458e85be8d73b # v7
with:
timezone: America/Los_Angeles
secrets:
VELOCITY_RADAR_TOKEN: ${{ secrets.VELOCITY_RADAR_TOKEN }}
In the last line, the left side is the name the counting code reads and the right side is the secret you
created; both are VELOCITY_RADAR_TOKEN.
The uses: line pins the counting code to its full commit id; the
# v7 after it names that release, so Dependabot can offer the next one
(the next step). The two timezone
lines are optional. GitHub reports commit times in UTC, so the day, evening and overnight split needs
your clock; put your own zone there. Use a region name such as
Europe/Berlin, not an offset such as UTC+2, because offsets do not follow clock changes.
Delete both lines and the other results remain.
Your caller file is pinned to one release of the count, so a new release never reaches your account by itself. This second file asks GitHub's Dependabot to tell you about each new release with a pull request in your repository; nothing changes until you merge it. Press Create it on GitHub, filled in, then Commit changes… and Commit changes, the same way as the caller file.
Create it on GitHub, filled in Waiting for your GitHub username: type it at the top of the directions.
dependabot.yml listed under .github.If the editor opens empty, copy this text into it:
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
Dependabot then looks once a week. It looks at every workflow in the repository, so it also offers updates for any other actions you use there.
If GitHub says a file with the same name already exists, you use Dependabot already.
Open your .github/dependabot.yml instead, and if it has no github-actions entry,
add these four lines at the end of its updates: list, lined up with the entries already
there:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
Press Open the workflow page. Press Run workflow, then the green Run workflow in the menu that opens. A new run appears at the top of the list within a few seconds. It runs only when you press that button.
Open the workflow page Waiting for your GitHub username: type it at the top of the directions.
Open the run after a few minutes. Its summary shows 30, 90, 180 and 365-day totals for commits,
substantive, merges, automated, micro, and median lines per substantive commit. It also shows longest
runs, the day, evening and overnight split, commit size across all selected repositories against public
ones, job_workflow_sha, and runner_environment. The figures appear in the run summary. The run sends nothing, so nothing leaves your account; press Check my run below and Velocity Radar reads them from the run, gives you a receipt, and your velocity.id8.one/stats page shows them while your snippet is on your profile.
The two notices at the bottom, about ubuntu-latest moving to Ubuntu 26, are GitHub's own and
can be ignored.
Anyone can open this run, because the repository is public. Besides those tables, the summary shows how many repositories were read, how many of them are private and how many could not be read. The second job's log holds the same totals in packed form, including your totals for each day of the last two years. No repository names, commit ids, message text, files or code appear anywhere in the run. To take the run down once you have read it, choose then delete the run under Choose where to run it.
Anyone can open this run until you delete it in the next step, because the repository is public. Besides those tables, the summary shows how many repositories were read, how many of them are private and how many could not be read. The second job's log holds the same totals in packed form, including your totals for each day of the last two years. No repository names, commit ids, message text, files or code appear anywhere in the run.
Open the run, press … at the top right, beside Re-run all jobs, choose Delete workflow run, and confirm. The run, its summary and its logs are gone; the list of runs no longer shows it. Deleting cannot take back what someone saw before, and each rerun needs deleting again.
Open the list of runs Waiting for your GitHub username: type it at the top of the directions.Delete it now rather than wait for it to expire, and make a new 7-day token for a later count. The caller file can stay: without a valid token it can do nothing, and it never runs by itself.
Open your tokensapi.github.com), with your
token, to read your own commits; and GitHub's signing service, from the second job, which never sees your
token, for a note signed by GitHub about the run. The note is addressed to velocity.id8.one, but today it is
only shown on the run page. The run contacts nothing else: not velocity.id8.one, not your computer.
permissions: {}). The counting code is pinned to one full commit id, so it cannot
change under you.
actor), in which repository (repository), the exact
published counting code (job_workflow_ref and job_workflow_sha), and that it ran
on GitHub's own machine (runner_environment: github-hosted). That signature is how Velocity
Radar will be able to trust your totals without seeing your account.
| Difference | Snippet only | Full telemetry (snippet + count) |
|---|---|---|
| What you do | Paste the snippet into your profile README. | Also add a workflow file, store a read-only token as a GitHub secret, and start the workflow yourself. |
| What is read | Your public profile and GitHub contribution record: daily totals, public and opted-in private totals, and contribution types. No commits are opened for a new, unscreened profile. | Commits you authored on the default branches of the repositories you select: id, date, first message line, additions, deletions, and parent count. Every one is sorted; selected private repositories are included. |
| What leaves your GitHub account | GitHub returns the profile and contribution fields used to draw the public page. You give Velocity Radar no access token. | Nothing, from the run itself. When you press Check my run, Velocity Radar reads the figures from the run's public log on GitHub; your token and commit records stay in your GitHub account. |
| 30, 90 and 180-day figures | Not shown: GitHub's contribution record has daily totals, not commits. | The run summary counts each range separately, plus 365 days. |
| Private work | GitHub supplies one opted-in private contribution count, without a private commit breakdown; public commit figures remain public-only floors. | Commits in the selected private repositories are counted directly. |
| Commit size | Not available: no commits are read. | Median lines changed for substantive commits, for 30, 90, 180 and 365 days. |
| Hours and longest run | Not available: the contribution record has daily totals, not commit times. | The run summary shows the longest runs, hours of the day, and day, evening and overnight bands when a time zone is supplied. |
| Momentum strips | The public page shows contribution momentum. It has no real-data substantive or commit-size strip. | Your public page adds a counted strip: substantive commits per active day, in the same stretches of 30 active days, worked out in your run. |
| How figures are marked | Every chart from GitHub's record carries a GitHub record badge. | Counted parts carry the iD8 counted badge and the date the count reached. |
| Run it again | Fully automatic after you add the snippet: the graph and the page update by themselves. | Make a new token, replace the secret, and manually start the workflow again. |
| Remove it | Remove the snippet. A later profile check takes the public page down. | Delete the token or let it expire. The workflow never starts by itself. |
The counting code is one public caller file. Read it before you add the caller to your account. The only place it talks to GitHub is in that pinned file. The commit id is:
33e993618d8583e7aa329422aac458e85be8d73b
A full commit id names fixed code. The same id appears in your caller file and in GitHub's account of the run.
Leave the caller file in place. Make a new 7-day token, replace the VELOCITY_RADAR_TOKEN secret, and press
Run workflow again. From a terminal:
gh secret set VELOCITY_RADAR_TOKEN --repo octocat/octocat
gh workflow run "Velocity Radar count" --repo octocat/octocat
Delete the snippet from your profile README. Velocity Radar checks confirmed profiles again; after a later check, the page and graph are no longer public.
The count gets a new release when its method changes. If you added the Dependabot file (step 4 of the setup), this is what happens then.
Dependabot waits until a release is 3 days old, then proposes it at its next weekly look, so the pull request arrives 3 to 10 days after the release. It opens in your repository and changes one line of your caller file: line 8, to the new release's commit id and name. Its Files changed tab shows exactly that. Merge it to take the new release, or close it to stay on yours. If it changes anything else, close it.
Open your pull requests Waiting for your GitHub username: type it at the top of the directions.
The new release counts only once it runs. Make a new 7-day token and save it as the secret VELOCITY_RADAR_TOKEN, as in the steps above, run
the workflow, then press Check my run for a new receipt.
Read from GitHub, not typed in · from iD8.one · velocity.id8.one