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.
Log in or sign up for Devpost to join the conversation.