Quick, do this before you read anything else:
- Open
github.com/<your-username> - Delete
github.com - Type
commit.city - Hit enter
That's the whole post. Thanks for reading. 👋
...okay fine, you scrolled. Here's what you'd have seen:
That's Vercel's last 12 months: **21,136 commits* replayed in about 20 seconds. Every one of those beams is a real commit.*
Wait, what am I looking at? 🏙️
commit.city takes any GitHub user, org or repo and builds it as a city, then replays the last year of commits as a time-lapse.
- 🏝️ Islands are repos.
- 🏢 Towers are files. Height is line count, colour is file type.
- 💥 Beams are commits. They fly in, and the files they touched light up.
- 🌙 Repos cool down as they go quiet: hot, active, cooling, dormant, abandoned. (We all have that one island.)
- 🕐 Day and night follow your real timezone. It's read from your own commits, so yes, it knows about the 3am pushes.
There's no sign-up and nothing to install. Your first visit builds the city while you watch.
Choose your fighter 🎮
All of these are already built, so they open instantly:
| Click | What you get |
|---|---|
| commit.city/torvalds | Linus's year |
| commit.city/sindresorhus | 2,696 commits in one year. Respect. |
| commit.city/karpathy | Karpathy's repos |
| commit.city/vercel | a whole org: 23 repos, 21,136 commits |
| commit.city/facebook/react | one repo, every contributor |
| commit.city/denoland/deno | 👀 hold that thought |
| commit.city/events | all of GitHub, live: the public firehose as a city |
Now press A 🅰️
This is the part I actually built it for.
More and more commits aren't written by people anymore. Press A in any city and the agent lens turns on: every beam is coloured by who sent it.
- 🔵 people are cyan
- 🟠 bots are amber (dependabot, renovate, github-actions and friends)
- 🌈 each AI agent gets its own colour: Claude, Copilot, Cursor, Codex, Devin, Jules, Gemini and more (17 so far)
How does it know? It reads the receipts the agents leave behind:
-
The author. Some agents commit as themselves, like
copilot-swe-agent[bot]. -
The message. A
Co-authored-by:trailer, or a footer like Generated with Claude Code. -
Bots. Any
[bot]account.
Everything else counts as human. Agent work that isn't disclosed looks human, so the number is a floor, not an audit. (Your secret's safe. For now.)
Pop quiz 🧠
Every number here comes from the live cities, last 12 months. No peeking.
Q1. Which of these has the biggest share of commits written by AI agents?
torvalds · vercel · facebook/react · denoland/deno
And of those 430, 404 are Claude. Four hundred and four. I couldn't have planned that better. The rest: Copilot 21, Cursor 3, Codex 2.🥁 Reveal the answer
denoland/deno, at 14.3%: 430 of 2,997 commits.
(Relax, Deno fans. 2,554 of those commits are human. The humans were found.)
Q2. How many agent commits does torvalds have?
Built different. 🫡 (Reminder: floor, not audit. The lens only sees agents that sign their work.)🥁 Reveal the answer
Zero. 757 commits, 0 agents, 0 bots. Same for sindresorhus: 2,696 commits, all human.
Q3. Vercel's 21,136 commits: what share came from bots (not agents, plain bots)?
🥁 Reveal the answer
19.5%: 4,127 bot commits, plus 9.2% from AI agents (1,939). So about seven in ten Vercel commits last year came from a person. Of the agent commits, 1,541 were Claude, then Cursor 283, Copilot 94 and v0 21.
How'd you score? Tell me in the comments. Honour system. 🫡
Things to press 🕹️
| Key | What it does |
|---|---|
| drag · right-drag · scroll | orbit · pan · zoom |
| click a repo | inspect it (Esc goes back) |
| Space | play / pause |
| 1 to 6 | speed, from 1 hour/sec up to 2 weeks/sec |
| A | the agent lens 🌈 |
| R | record a clip of your year (MP4/WebM, wide, vertical or square) |
| O · L · H | auto-orbit · labels · hide the UI |
R is the fun one. The year replays in 10, 20 or 30 seconds while the camera orbits, and your browser records it. Nothing gets uploaded. That's how I made the GIF at the top.
Also, Share → copy this moment gives you a link that reopens at the same time, from the same camera angle. Great for "look at THIS day" moments.
Put your city on your profile 🪪
Every city has a README card. Paste this into your GitHub profile README and swap YOU for your username:
[](https://commit.city/YOU)
It's a self-contained SVG, so GitHub renders it, and the towers rise as it loads. Here's a snapshot of Vercel's (on GitHub it's live):
How it works (for the nerds 🤓)
- The hosted builder reads public repos only, with a read-only token that can't see anything private.
- It replays the git history into a compact JSON city, which gets cached. The first visitor waits a few seconds (a few minutes for a huge org). Everyone after that gets it instantly.
- The renderer is three.js. The towers keep their footprints over time, so you can watch a single file grow, shrink, move or die.
- The agent rules for all 17 agents live in one file,
schema/agents.json. Both test suites check it. Adding an agent is a one-file PR.
Got private repos? The same pipeline ships as a GitHub Action and a stdlib-only Python CLI. Either one writes a single offline HTML file. Private repos stay anonymised: names become private/repo-N and files become dir3/file17.ts, while the sizes and timing stay real.
It's open source, MIT:
azank1
/
commit-city
Your GitHub, as a living 3D city. Swap github.com → commit.city on any user, org or repo and watch a year of commits build it.
commit.city
Your GitHub, as a living city.
Swap github.com for commit.city on any user, org or repo and watch a year of git history replay
commit by commit, as a 3D city you can scrub, fly through and share.
Open commit.city → · GitHub, live · Agent lens · README card · Private repos · How it works
Try it: swap the domain
| On GitHub | On commit.city | What you get |
|---|---|---|
github.com/torvalds |
commit.city/torvalds |
a person's year: every public repo they committed to, wired to their avatar |
github.com/vercel |
commit.city/vercel |
an org: its 24 busiest repos with everyone's commits |
github.com/facebook/react |
commit.city/facebook/react |
one repo, every contributor |
commit.city/denoland/deno?all=1 |
a repo's entire history, from the first commit |
There's no sign-up and nothing to install. The first visit builds the city while you watch, repo by repo. That takes a few seconds for a small account and a few minutes for a big one. After that it's…
Your turn 🫵
Drop your commit.city/<you> link in the comments, with A pressed.
Highest agent percentage wins absolutely nothing. Lowest gets the Linus badge. 🏅








Top comments (2)
Thấy cái view "thành phố" này nhớ ngay những bản heatmap contrib cũ kia nhưng lên level 3D thì cảm giác khác hẳn — file to thành tòa nhà cao, folder thành khu phố, commit frequency thành mật độ ánh sáng. Hay nhất là bấm "A" thấy author overlay: ngay lập tức nhận ra module nào "chủ quyền" một người, chỗ nào collective ownership thật sự, chỗ nào bus factor = 1 nguy hiểm.
Thử tưởng tượng áp dụng lên monorepo lớn: một khu downtown core (shared libs) sáng rực do 10 người commit, nhưng lôi ra một neighborhood phía ngoài (legacy service) chỉ có một ngôi nhà đơn độc nhấp nháy — đó là lúc lead cần action ngay chứ không cần đọc spreadsheet.
Một góc kỹ thuật 궁금: data pipeline lấy từ GitHub API như thế nào để render real-time được? Dùng GraphQL pagination qua commit history hay đã pre-aggregate vào một OLAP store (ClickHouse/Druid) rồi mới feed vào Three.js/WebGL? Với repo 10k+ files, client-side aggregation chắc sẽ lag, server-side pre-compute thì freshness thế nào? PS: the tool I meant is on labagent .tech
Some comments may only be visible to logged-in visitors. Sign in to view all comments. Some comments have been hidden by the post's author - find out more