baqer.build
← Projects

Case study

Jahan

A beautiful, keyboard-navigable web app for exploring the entire Tree of Life — every branch of living things on Earth, from “Life” all the way down to a single species.

Year
2026 — live & iterating
Role
Solo — design, data, build
Type
Side project · free & open
Visit jahan.life ↗

Overview

Jahan — Persian for “world” — is a way to wander the tree of life instead of studying a chart of it. You begin at the root, “Life”, and move down through kingdoms, phyla, classes, orders, families and genera until you reach a single species. Every node is a card: a photo, a common name, a scientific name.

The whole thing is navigable from the keyboard, works in dozens of languages, and is completely free. It's live at jahan.life.

The ideas it's built on

Navigation, not a maze

Existing tools (OneZoom, Lifemap) lean on zoom-and-pan, which gets disorienting fast. Jahan takes the opposite bet, inspired by neal.fun's “Size of Life”: linear, predictable movement. Up goes to the parent, down into the children, left and right between siblings — the whole tree navigable from the keyboard.

“You are here” in the tree of life

The phylogeny view frames a species by its relatives — ancestors, siblings, and notable cousins. Tiger and lion are siblings; tiger and cheetah are cousins. It reads as a family tree rather than an abstract diagram.

Interestingness as a ranking

A clade can have hundreds of thousands of children. Rather than dump them all, Jahan scores each by iNaturalist observations, whether it has an image and a common name, and species rank — so the branches you see first are the ones worth seeing.

The orphaned-taxa problem

Real-world taxonomy is messy: hundreds of thousands of species hang directly off high-level ranks where they don't belong. The API filters and sorts by rank priority to keep the descent through the tree coherent.

Where the data comes from

There's no single database of all life, so Jahan builds one — merging several open sources into one clean, deeply-linked tree of roughly 4.5 million nodes and 47 languages.

Wikidata dumps
The primary taxonomy backbone — scientific names, ranks, parent hierarchy, images, Wikipedia links, and cross-reference IDs (iNaturalist, GBIF, NCBI). Parsed from compressed JSON dumps with Node worker threads.
NCBI Taxonomy
The reference taxonomic hierarchy, merged in to give the tree a clean, authoritative spine.
Wikipedia extracts
Longer per-species synopses across many languages, parsed straight from Wikipedia dumps.
iNaturalist
Photos and — crucially — observation counts, which become a popularity signal for deciding which organisms are interesting enough to surface.
Wikimedia Commons
Imagery, resolved at build time from Commons file names to direct URLs at multiple sizes for fast, responsive loading.

How it's built

A two-tier data pipeline

The heavy, multi-source merge and enrichment runs offline in PostgreSQL. The result is flattened into a query-optimised SQLite table and shipped to Cloudflare D1 at the edge — so serving a node is a single fast query, not a pile of joins.

Blue-green data releases

New data is imported into a standby D1 database and then swapped live, giving zero-downtime releases of a dataset that spans millions of nodes.

3D on the edge

The navigator is a WebGL canvas (Three.js via Threlte) with a tweened camera panning between levels and custom raycasting for interaction — served from Cloudflare with Smart Placement so the Worker sits next to its database.

Pronunciation & languages

Scientific names are hard to say, so Jahan speaks them via Cloudflare Workers AI and Deepgram's Aura-2 voices, with common names and descriptions in dozens of languages and full RTL support.

Stack

SvelteKit 2Svelte 5TypeScriptThree.js / ThrelteTailwind CSSCloudflare PagesCloudflare D1 (SQLite)Workers AI · Deepgram TTSPostgreSQL (staging)Drizzle ORM

Take a walk through the tree of life.