Spatial Narrative Systems / Front-End Prototyping

Into the Poppyverse

A map of a fictional multiverse: 230 stories, 20 universes, and the lines that tie them together. Fly through it instead of reading it in order.

Project
3D Map 2.0
Role
Design + front-end build (solo)
Stack
Notion → Python → static HTML/CSS/JS, GitHub Pages
Year
2024 – present

Start here

What is the Poppyverse?

A long-running fictional multiverse, written one story at a time.

It's a collection of stories set across a quantum multiverse: workplace comedies about pilots and their mechanized partners, quiet grief, crossovers with other fictional worlds, and the occasional branch that notices it's fictional. The project describes itself as "a quantum story archive for narrative inconsistency, emotional damage, and suspiciously well-organized chaos."

Every story belongs to a universe, a branch of the multiverse with its own tone and its own corner of the lore. Some stories also reach across, with characters, timelines, or alternate versions of the same people colliding with another universe.

That's the trouble. After a while the archive was too big to hold in a list, and too tangled to hold in a wiki.

By the numbers

A lot of words, in a lot of places.

230Stories

Every one is a single point on the map.

20Universes

Branches of the multiverse, each with its own colour on the map.

1,304Text files

The sub-parts (parts, chapters, and versions) that make up the stories.

1.35MWords

Roughly eighteen novels' worth.

83Relations

Lines where one story or universe touches another.

89Published

Stories you can read right now, hosted on Notion.

Counted from the original story archive (about 8.5 MB of plain text), skipping personal and holiday folders. A story can be made of many text files, which is why 1,304 files make 230 stories.

The challenge

How do you enter a huge fictional world without reading a manual first?

The problem

Too interconnected for a table of contents. Too sprawling for a map of dots.

Readers don't ask "what's story number 117?" They ask "which universe is this?" and "what else does it touch?" A flat list answers neither, and a wiki buries both in clicks. A universe isn't just a label on a story. It's a place of its own, and places can relate to each other too.

The brief

Make the whole archive explorable at a glance.

Universes you can see, count, and enter. Stories you can open and read. And the ways they touch drawn as real, visible lines. Atmospheric enough to feel like a cosmos, structured enough to still be a tool.

The idea

Two kinds of thing, and lines between any of them.

The map has two kinds of thing: universes and stories. A relation can connect any two of them.

In the data a universe is a cluster and a story is a node. On screen, a universe is a ring and a story is a sphere inside its ring. Both are first-class: you can click either one, and either one can be on the end of a line.

story ↔ story universe ↔ story universe ↔ universe
Story ↔ story

Two stories whose characters or timelines collide.

5 on the map today
Universe ↔ story

A story that touches a whole universe, not one story in it. The line lands on the ring's nearest edge.

78 on the map today
Universe ↔ universe

Whole universes leaning on each other's fourth wall.

Supported · none authored yet

Every relation is written by hand in Notion, from either end, and drawn on the map as a single line.

Where it started

It all started as a little sketch.

No wireframes. No mockups. Just this, scribbled in a few minutes.

Three wobbly rings, a handful of scribbled points inside them, and some white lines that don't much care what they join. Everything else on this page is that sketch, taken seriously.

How to read the map

A ring is a universe. A sphere is a story. Size is how much there is to read.

1×4×9×

Ring size

radius ∝ √ text

A universe's ring grows with the total text inside it, so the big branches look big at a glance. Each ring is tilted at its own angle, so they never stack into a wall.

1×8×64×

Story size

radius ∝ ∛ text

A story's radius follows the cube root of its length, so the volume of each sphere is proportional to how much there is to read. It's clamped, so one monster manuscript can't swallow its whole ring.

Position

seeded, not measured

Which ring a story is in is information. Where it sits inside is decoration. A fixed seed gives the same universe every build; a new seed rearranges it on purpose. Trailers float free of every ring, like comets.

Rings off. Just colored clouds of stories.

Rings on, with inter-universal relations. Every universe has an edge.

Fun fact

The rings aren't actually rings.

They're inspired by stellar superbubbles: enormous cavities carved through space by the combined winds and supernovae of massive stars. Their surrounding gas shells look brightest around the edges, an effect called limb brightening, so a three-dimensional bubble appears to us as a glowing hoop.

Basically: the universe also uses circles to organize its explosions.

A story, opened

Click anything and the card slides in.

Stories and universes open the same card, with different contents.

  • A story card shows its description, size and status, and its characters. Open takes you to the story itself, hosted on Notion.
  • A universe card swaps in its own stats: how many stories, how much text, how many relations.
  • Relations are chips. Click one and the card jumps to the thing on the other end, whether that's a story or a whole ring.

"The Iridescent Line" opened from the map: description, details, characters, connections.

Shape glossary

Colour sorts the universe. Shape tells you what kind of thing it is.

Ring

A universe.

Sphere

A story, hosted on Notion.

Cube

An e-book.

Pyramid

An intro to a universe.

Comet

A trailer, floating free of any ring.

Universe glossary

The 20 universes.

Biggest first. A ring's size follows how much text it holds, and its dots are its stories, just like on the map.

welcome to the poppyverse

30 stories

The Poppyverse's front door: workplace comedy, growing pains, and everyday life for pilots and their mechanized partners, before things get complicated.

by the bayverse

27 stories

Life in the Bay Area is surprisingly peaceful. Any explosions are probably from a previous life.

area fifty-done

17 stories

A top secret research base where the hallways forget basic geography, the elevator remembers people, and the incident log gave up trying to make sense of any of it.

cherry blossomverse

17 stories

A sightseeing tour of Washington DC where the monuments answer back, the National Mall glows colored light, and the strangest variable is a woman named Iris with a working phone number.

43

16 stories

A half-assed, failed fusion attempt with the 86 (Eighty-Six) universe — we tried to reach 86 but only made it halfway through the fourth wall before getting stuck. 86 divided by 2 is 43. Yay math. Welcome to the 43.

fireweedverse

16 stories

A universe branch grown in the burn scar of Fire Force: spontaneous human combustion, Infernals, Company 8, and the terrible things that grow from bodies the fire did not finish.

marbleverse

15 stories

The largest branch of the multiverse. Nobody knows where all the marbles went.

lilyverse

13 stories

A decorated commander, a questionable past, and a ghost made of light.

houston houston

12 stories

The Johnson Space Center Visitor Center has some unfiled anomalies.

anomalies in pink

11 stories

Everything looks prettier in pink. That doesn't mean it's harmless.

deeper into the poppyverse

11 stories

Same multiverse branch, deeper layers, fewer safety rails.

pelagoverse

8 stories

A whole new world beneath the waves, where the strangest things aren't always the ones with fins.

spider lilyverse

8 stories

A reflective branch strung together with spider lilies, gold repair, and the things PILOT and DONOR keep trying to protect for each other.

beyond the poppyverse

7 stories

Where the metaphors go cosmic -- souls, stars, and the site's own thesis statements about what any of this actually means.

desert roseverse

7 stories

A sun-bleached branch where the desert mirages aren’t the weirdest thing around.

toulouverse

3 stories

Bonjour from Toulouse! A French aerospace branch where the callsigns are prettier and the radio still crackles with the same old numbers station.

sheep milk latte

2 stories

Retired PILOT and DONOR run a sheep ranch, vend baked goods at farmers markets, and raise kids on bedtime stories that may violate a federal NDA.

shibuyaverse

2 stories

A writer publicly interrogates her own relationship to character arcs, identity, and spectacle, live, in manga panel form.

to be hero y

2 stories

A hero economy runs on belief instead of money, and the newest icon used to be a firefighter with an ordinary apartment and a coffee habit.

ultravioletverse

2 stories

Live in the shadows, work in the shadows.

Design iterations

The universe went through some phases first.

Before landing on the final design, the same stories were laid out on a plane, wrapped onto a sphere, boxed into a cube, and stretched along a cylinder. The current design is what's left once the question changed from "which axes?" to "which container?"

How it's built

Not just a viewer. The whole pipeline.

The stories and the map's data all live in Notion. A build script turns them into a static site, so the interface can't drift from the data and there's no server to keep running.

01 · SOURCE

Notion

Full CatalogueCluster Catalogue

Every story and every universe is a row; the stories themselves are Notion pages. Edit a row, rebuild the site.

02 · BUILD

One build script

build_all.pyone read-only fetchlayout + lines computed

One Python pass hands the same rows to every page's generator.

03 · GENERATE

Static pages

home · about2D map · 3D map

Plain HTML, CSS and JS with the data embedded. Nothing touched by hand.

04 · SHIP

GitHub Pages

static hostingno server, no database

A universe that deploys as flat files.

The art gallery

The multiverse, rendered as sky.

The map is a tool: axes, scores, a structure you can actually navigate. But a multiverse should also feel like one. So I fed the archive back into Midjourney and let it render the Poppyverse as pure cosmos, every branch a coloured galaxy, every story a mote of light, no legend required.

Go wander.

3D space is a suggestion. Canon is unstable.

Pick a glowing ring, fly over, and land wherever you're curious. The lines will do the rest.