Open your GitHub profile and look at it the way a recruiter would. There's a grid of green squares, a few pinned repositories and a language bar. You can read that page because you know what a contribution is. Someone who hires developers but doesn't write code can tell you were busy, and not much else.
gitreplay.club is meant for that moment. It turns your GitHub activity into a vertical, 20-second video you can send before an interview: commits, pull requests, top languages, your longest streak and a heatmap of the year. It's the same idea as the "GitHub Wrapped" recaps that go around every December, and you can make one any time of year, for any year back to 2008 or for a single month.
Rendering the video was the easy part. It's a Remotion composition rendered on AWS Lambda, and it takes about a minute and a half. Getting the numbers right was harder.
The obvious source for a commit count is contributionsCollection.totalCommitContributions in GitHub's GraphQL API. For a lot of developers that number is too low. It counts commits in public repositories. Commits in private repositories are pooled into restrictedContributionsCount, a single number that also includes other kinds of contributions and never says which repository they came from. If most of your year happened in private repos, as it does for many people who code for a living, the obvious number leaves most of your year out.
So gitreplay.club asks each repository instead. For every repo the token can read, it requests the default branch's history, filtered by author and date range:
defaultBranchRef {
target {
... on Commit {
history(author: { id: $authorId }, since: $since, until: $until) {
totalCount
}
}
}
}
The commit total is the sum of those counts, merge commits included, with GitHub's own figure kept as a floor. Some repositories stay unreadable even with your token, such as organization repos behind SAML single sign-on or OAuth app restrictions. Their commits come from GitHub's per-repository contribution data instead. Those repos don't trigger the video's partial-data warning, which only appears when a public repository has disappeared.
Languages took three tries. The first version added up the language bytes of every repository you own, the same data that draws the language bar on a repo page. That describes the history of your account rather than your year: a repository you last touched in 2019 counted as much as the one you worked in every day.
The second version tried to be exact. It walked every commit you authored in the period and ran the changed files through linguist-js, a port of GitHub's Linguist, to classify them. It was accurate, and it couldn't finish for prolific accounts. With one API request per commit, the cost grew with how much you wrote, and heavy users ran past the collection time budget and GitHub's secondary limit of 900 points per minute. It failed for exactly the people with the busiest years.
The version running now takes each repository's language mix and weights it by the commits you made there in the period. If a repo is 80% TypeScript and you made 200 commits there, that adds 160 commits' worth of TypeScript. It costs one GraphQL request per 25 repositories, however many commits you made. It doesn't measure which lines you personally wrote, and I'd rather say so here than let the chart imply it.
Then there's work GitHub can't see at all, like code on GitLab or in a company repo you lost access to when you changed jobs. Premium users can correct their numbers on a review screen before the video renders. Before a correction saves, you confirm the numbers are yours to report, and anyone watching the video or opening the share page sees a "Self-reported stats" label. A recap you could edit freely would be a résumé with animations, and a recruiter would be right to ignore it. One that can't be corrected is wrong for anyone whose work lives outside GitHub. The label is the compromise.
You can try it without signing in. Put any GitHub username after gitreplay.club/ and you get that account's public year, drawn as a terminal screen with the avatar in ASCII art, a bit like neofetch. Mine is gitreplay.club/fernandohre. That page only uses public data.
Signing in with GitHub adds your private work to the totals and lets you make the video. You review the numbers, pick a year or a month and a style, and the MP4 is ready in about a minute and a half. You can download it or share a link, and the share page can hide your repository names if your repos are client work. The video is free in the GitHub Dark style, with a watermark. Premium is a one-time US$15 that adds four more styles, removes the watermark and turns on the self-reported corrections.
If a number in your recap looks wrong, tell me which one in the comments and what you expected it to be.
Top comments (0)