Side-on view of the codecity skyline — a floating island of colorful buildings along dark streets, under a forest of commit trees

NOTE

This post and codecity were created collaboratively with Claude. Thalida designed the vision, the world, and the rules that turn a repo into a city; Claude helped with implementation, architecture, and writing this post.

What It Is

codecity turns any git repo into a 3D city. It walks the file tree and the git history and builds a world out of them:

In the repoIn the city
A directoryA street, widened by what it holds
A fileA building, floors stacked by line count
A file’s typeThe facade — CSS, TS, an image, a waveform
A file’s ageHow faded and weathered the building looks
A commitA tree
An authorA firefly, orbiting their commit tree

Open any public repo at codecity.io, or see the local dev setup to run it against your own private and local repos.

The Timeline

I came up with this idea many many years ago, and finally, via the power of AI, was able to properly bring it to reality.

NOTE

Every milestone below links to that exact commit rendered in codecity.

Act One: The Early Years

The early versions live in codecity-legacy.

WhenMilestone
Nov 2021It’s a real city
Eight days from a commit called “well fuck it works?” to a rendered city with a first-person camera, skybox and fog. A Python API read the repo with gitpython; the browser drew what came back.
See this commit as a city →

Hand-drawn sketch of an isometric city on an island with buildings, trees, streets, and a thalida.com sign, with handwritten notes about street placement rules
Jun 2022Rewritten in A-Frame
Rendering moves to A-Frame, the build to Vite, and the roads get a new layout algorithm. Four commits, then two years of silence.
See this commit as a city →
Jan 2024Streaming, and a framework carousel
FastAPI and pydantic, streaming responses over websockets and workers. The frontend went Remix, then React out, then Svelte — in three days. Tile-based rendering, real revision stats. Then it stopped.
See this commit as a city →
Jan 2026“re-re-start”
A reset, a Django rewrite, a devcontainer, RabbitMQ and an architecture doc. Abandoned two days later.
See this commit as a city →

Act Two: The Rebuild

A fresh repo, thalida/codecity, started 18 April 2026.

WhenMilestone
18 Apr 2026The first city
A filesystem scanner, an isometric renderer and a street-tier layout — all on day one.
See this commit as a city →

Flat isometric city of five pastel buildings on dark diamond plots, labelled tests, sample-repo, docs and src
19 Apr 2026One file, one skyscraper
The renderer moves to Three.js and buildings become stacks of fixed-size floor units — so a single long file towers over the whole city. The scanner is rewritten in Python the same day: 82s → 6s.
See this commit as a city →

3D city where one pale tower is many times taller than every other building, dwarfing the street below
12 May 2026Three packers before one worked
Streets collided and subtrees overlapped each other. A v3 mirror-variant packer, then a V4 global-occupancy packer with bounded phantom spacing.
See this commit as a city →

City layout collapsed into a flat tangle of thin overlapping lines instead of separated streets
14 May 2026Buildings that say what they are
A procedural facade shader writes each file’s type onto its face, one mesh per directory. Then the lighting lands: directional sun, HDR bloom, age-driven decay, ground haze.
See this commit as a city →

Close-up of a small blue building with a neon rim light and the letters CSS printed on its roof
19 May 2026Built for Linux-scale
Blobless clones, an NDJSON streaming manifest and cell-based rendering — so a 90,000-file repo draws instead of dying.
See this commit as a city →

Loading panel over a dark city reading torvalds/linux, Scanning files, with resolving source and cloning already ticked
23 May 2026The city gets an island
A floating island world plane, with sky, ground and foliage. And commit-driven trees: every commit in the history plants one.
See this commit as a city →

Colorful city districts sitting on a dark green floating island with a rocky underside, against a black sky
28 May 2026Every author becomes a firefly
One orb per author on each commit, co-authors included, orbiting their commit tree. Hover a tree to read the commit that grew it.
See this commit as a city →

Top-down view of a dense multicolored city with labelled streets, surrounded by a forest of low-poly trees
19 Jun 2026Rebuilt underneath
Preact and signals on the front, FastAPI on the back, and a layout worker about ten times faster. A month of work with nothing to show for it.
See this commit as a city →
24 Jul 2026Scrub the history, watch it grow
Drag through the commit log and the city rebuilds at each commit — each commit’s own content, with deleted files marked by a cross on the roof.
See this commit as a city →

codecity showing a floating island city with a timeline scrubber along the bottom, resting on a commit from March 2024
8 Aug 2026codecity.io
Shipped from a tagged release. Cold load cut from about three minutes to twenty-five seconds, with a Discover list and a live city rendering behind the landing page.
See this commit as a city →

Animated demo of codecity orbiting its own repository, streets of buildings under a forest of commit trees

Design

Inspiration

Code City by Thalida Noel

Paper Sketches

The rules I drew in 2021 are, more or less, the rules that shipped: streets are folders, street width follows what’s nested inside, and a building ages with the file it stands for.

------
Sketch of an isometric city on an island with buildings, trees, and handwritten notes about street edge gaps, alternating sides, and fit-to-grid rulesSketch exploring building types and people figures for the city, with notes about 3D buildings representing file types and people representing viewers
Sketch of a directory-as-grid layout with nested rectangles representing folders, blue squares as files, and notes about directory thickness mapping to road width

How It’s Made

Frameworks, Tools, and Services

  • Rendering: Three.js with a procedural facade shader
  • Frontend: Preact + signals, TypeScript, Vite
  • Backend: Python, FastAPI, pydantic, SSE
  • Packaging: A single Docker image on GHCR — docker run ghcr.io/thalida/codecity
  • Hosting: codecity.io

AI Collaborators

Every commit was written in collaboration with Claude.

ModelCommitsSpan
Claude Opus 4.6 (1M context)1218 Apr 2026
Claude Sonnet 4.631Apr – Jun 2026
Claude Opus 4.7 (1M context)126Apr – Jun 2026
Claude Opus 4.8 (1M context)52Jun – Jul 2026
Claude Fable 510Jun – Aug 2026
Claude Sonnet 5 (1M context)120 Jul 2026
Claude Opus 5 (1M context)39Jul – Aug 2026

The one AI-assisted commit in the legacy repo — January 2026, right before the rebuild — was co-authored with Claude Opus 4.5.