Inspiration

I wanted an idle game where the numbers mean something. Most space idle games let you pass light speed in the second hour. I set one hard rule instead: 1 light-year = 1 real hour, nothing goes faster than light, and what you see is always old news.

What it does

You start at the singularity and evolve the universe through 12 eras: particles, atoms, first stars, galaxies, life, civilization. There are 12 civilization branches and 16 endings. Each node in the tree lists its real-world basis (year, name, number) and keeps invented parts in a separate "game lore" field. The observer sees the present; your main civilization only sees light that has reached it.

How I built it

Plain JavaScript, no framework and no npm dependencies; a build script concatenates about 40 source files into one HTML file. The site around it (accounts, cloud saves, payments) is a separate Next.js app that embeds the game. Translation into 10 languages happens at build time by replacing whole strings from per-language dictionaries, so the game code has no i18n calls.

Challenges I ran into

Keeping real science and game design apart. Every node needs a checkable source, and anything invented has to be labelled. Pacing was the other one: idle games die in the first hour, so I watch server logs to see where players stop.

Accomplishments that I'm proud of

A single-file game that works in 10 languages, and a rule set (no faster-than-light, observer vs. civilization delay) that actually changes how you play.

What I learned

Whole-string replacement translation is far less overhead than an i18n library for a small game, but it forbids regex literals and template strings that contain source-language text.

What's next

Tuning the early eras based on where players drop off, then more civilization channels.

I used AI coding assistants heavily for the code and in-game text; the design and the real-source rule for each node are mine.

Share this project:

Updates