Your GitHub profile as a 3D pixel art building in an interactive city.

Git City transforms every GitHub profile into a unique pixel art building. The more you contribute, the taller your building grows. Explore an interactive 3D city, fly between buildings, and discover developers from around the world.
| Metric | Affects | Example |
|---|---|---|
| Contributions | Building height | 1,000 commits → taller building |
| Public repos | Building width | More repos → wider base |
| Stars | Window brightness | More stars → more lit windows |
| Activity | Window pattern | Recent activity → distinct glow pattern |
Buildings are rendered with instanced meshes and a LOD (Level of Detail) system for performance. Close buildings show full detail with animated windows; distant buildings use simplified geometry.
# Clone the repo
git clone https://github.com/srizzon/git-city.git
cd git-city
# Install dependencies
npm install
# Set up environment variables
# Linux / macOS
cp .env.example .env.local
# Windows (Command Prompt)
copy .env.example .env.local
# Windows (PowerShell)
Copy-Item .env.example .env.local
# Fill in your environment variables
# Run the dev server
npm run dev
Open http://localhost:3001 to see the city.
You can run the whole backend locally — no Supabase account, no GitHub OAuth app.
Prerequisites: a container runtime and the Supabase CLI.
# macOS (Colima is a lightweight, free Docker alternative)
brew install colima docker supabase/tap/supabase
colima start
# ...or use Docker Desktop instead of Colima, then just:
# brew install supabase/tap/supabase
Start the stack (spins up Postgres/Auth/Storage/Studio and applies every migration from scratch):
supabase start # first run pulls images; prints your local URL + keys
supabase status # re-print the URL and keys at any time
Point .env.local at the printed local values:
NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321
NEXT_PUBLIC_SUPABASE_ANON_KEY=<Publishable key from `supabase status`>
SUPABASE_SERVICE_ROLE_KEY=<Secret key from `supabase status`>
Then npm run dev. The city renders straight from your local database — no
snapshot step needed in local dev.
Logging in (zero config): the GitHub OAuth provider isn't configured for a local stack (it needs a client secret that can't ship in the repo). Instead, clicking Sign in with GitHub locally takes you to a built-in dev login — type any GitHub username and you're in, with a building created from that account. You can also go straight to http://localhost:3001/api/dev/login. This route is automatically disabled in production.
Useful commands:
supabase db reset # re-apply all migrations on a clean database
supabase stop # shut the stack down (data is preserved)
Studio (DB browser) runs at http://127.0.0.1:54323.
After copying .env.example to .env.local, fill in these values:
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEYGITHUB_TOKENADMIN_GITHUB_LOGINS if you want access to /admin/adsOpen your Supabase project dashboard, then go to Project Settings -> API.
NEXT_PUBLIC_SUPABASE_URL: your project URLNEXT_PUBLIC_SUPABASE_ANON_KEY: the public anon keySUPABASE_SERVICE_ROLE_KEY: the service role key for server-side admin accessFor local GitHub login to work, you also need to configure the GitHub OAuth provider in Supabase and add your local callback URL if required by your setup.
Open GitHub and go to Settings -> Developer settings -> Personal access tokens.
Create a token, copy it once, and place it in GITHUB_TOKEN inside .env.local.
AGPL-3.0 — You can use and modify Git City, but any public deployment must share the source code.
Built by @samuelrizzondev
$ claude mcp add git-city \
-- python -m otcore.mcp_server <graph>