Writers Globe
An interactive globe mapping writers to the places they came from, so literary history can be read geographically.
Overview
The idea behind the globe is that a writer is as much a product of geography as they are of their history. Where someone was born shapes the language they wrote in, the traditions available to them, and the things they had reason to write about, and yet literary reference works are almost always organised by period or by movement rather than by place.
There was no repository that let you look at literature this way, so I thought it would be a nice idea to make one. The result is a globe of writers arranged by birthplace and filterable by era, occupation, country, and renown, so you can watch where literary activity clusters and how it moves over the centuries.

Globe
The Data
A single script builds the dataset from Wikidata, querying its public endpoint in eighteen small passes rather than one large one, splitting any pass that times out. For each person it collects the name, birth and death dates, birthplace coordinates, gender, country, continent, and Wikipedia article.
Three follow-up passes clean the result. The first audits anyone tagged only as a generic writer and drops those whose profile is really dominated by another career, which is what keeps software engineers who happen to have written a book out of a literary map. The other two attach up to three notable works and any major literary awards. The most widely covered writers, measured by how many Wikipedia languages carry an article on them, are written to a static file the app loads instantly, so nobody visiting the site ever waits on Wikidata.

Writer
The Scene
The globe is rendered with Three.js and its texture is painted at runtime rather than loaded as an image, drawing the sea, then land polygons from Natural Earth data, then mottling and grain so the sphere reads as an old map. Borders are drawn once as a single batched line object and country names float on the surface as small canvas-drawn labels that fade in with zoom and hide on the far side.
Because plotting every writer as its own point would be unreadable, cities are bucketed into a grid whose cell size depends on how close the camera is, and any two clusters that would overlap are merged. Zoomed out you see a few large numbered tokens, and as you move in they disperse into individual cities. Every dot is a sprite drawn on a canvas and cached, which is what makes switching the colour palette cheap. All of the coordinate work, turning latitude and longitude into positions on the sphere, comes down to one function that has its own tests.

Filters
Interface
All of the state lives in one component as plain React state, and on every render the visible set is derived by filtering the writers down through the timeline range, then the filters, then grouping what remains by city. There is no state library because recomputing the whole thing each render is fast enough.
The timeline is built by hand as a histogram of births drawn in a single SVG path with two draggable handles, and its scale is deliberately nonlinear so that recent centuries take most of the width, which is where most of the data sits. It also drives a guided tour that advances the year and flies the camera to each era in turn. Search, the dice, and cluster clicks all use the same camera flight that eases toward a target a fraction each frame.

Focus
Suggestions
Visitors can suggest a writer who is missing. The suggestion goes to a serverless function that rate limits by address and passes it to Gemini with a strict fact-checking prompt, which returns structured data including coordinates, and the verdict is stored in Supabase for approval. Signing in through Clerk lets someone collect writers as they explore, joined on the globe by ink trails into something closer to a constellation. Every secret stays on the server and the front end degrades when none are configured.
Next
The idea I want to build next is importing a reader's own Goodreads history and matching it against this dataset, so instead of a map of literature in general you get a map of the writers you have actually read. Seeing your own reading laid out geographically would say something about the range of it, and probably reveal how narrow that range tends to be.
Built with
- TypeScript
- React
- Three.js
- Vite
- Supabase
- Clerk
- Vercel
More projects