Skip to content
← Back to work

Case study

Live

Ice Age Life

A narrative life-sim set in the last Ice Age — designed, built, and shipped solo to the App Store.

Ice Age Life — a narrative event resolving into stat outcomes
An event resolves — a choice, an outcome, and the stats that shift beneath it.
Role
Founder & solo developer — Sunlit Game Studio
Timeline
~3 months, solo, end-to-end
Platforms
iOS, Android & web — one codebase
Stack
React Native · Expo · Node/Express · TypeScript

01

The pitch

Ice Age Life is a text-first life simulator set somewhere in the long arc from the late Ice Age to the dawn of farming. You live one whole human life — birth, childhood, a band to survive with, seasonal hunts, love, children, politics, and death — one decision at a time.

When you die, the run ends. But the life you lived feeds a permanent soul that carries forward: your lifetime becomes Soul Points, your soul levels up, and the next life starts a little stronger. Death isn't a punishment — it's the mechanic. Every life adds to something larger.

Live → Die → Grow → Live again.

02

Designing it

I wanted it to feel grounded and hand-made, not like a spreadsheet with a fantasy skin. The whole visual language is built from over 1,100 hand-drawn SVG icons — biomes, animals, tools, faces, totems — in one consistent, symbolic style, so a screen reads at a glance instead of drowning you in text.

It's a life sim, so it has to feel alive. Seasons turn, events animate in, stats shift where you can see them, and the interface stays calm enough that the story stays center-stage. I designed every screen, wrote the copy, and drew every icon myself.

Ice Age Life — the seasonal hunt board
The seasonal hunt board.
Ice Age Life — the band status screen
Your band — the people you survive with.
Ice Age Life — the seasonal actions menu
Seasonal actions — how you spend a life.

03

Building it

Under the hood it's more simulation than script. 25+ systems run the world — ecology, encounters, disasters, relationships, language, lineage — and they feed each other, so the stories that come out weren't written by me. On top of them sit 2,700+ hand-written events and 347 player actions, all as data rather than hard-coded screens.

It's a React Native app that runs on iOS, Android, and web from a single codebase, with a Node/Express backend and a shared-types monorepo so the client and server never drift. I owned all of it — architecture, systems, content, and UI.

  • Ecology & seasonsHerds, forage, and scarcity that shift with the season.
  • EncountersWho — and what — you meet out on the land.
  • DisastersCold snaps, floods, and the years that test a band.
  • RelationshipsBonds, mates, rivalries, and the politics of a band.
  • LineagePregnancy, children, and the family line across a life.
  • Language & cultureWords, lore, and meaning that accrete over time.

04

Shipping & scale

Built end-to-end in about three months, solo — and held together well enough to ship.

58screens
150+reusable components
1,100+hand-drawn SVG icons
2,700+narrative events
10,000+automated tests
627test files

05

What I learned

The biggest lesson was that systems beat scripts. Every time I tried to author a story by hand, it aged badly; every time I let systems collide, players found narratives I never planned. Leaning into that — and building the test coverage to trust it — is what let one person ship something this size.

It also proved to me that I can own the whole thing: the game design, the visual language, the frontend, and the backend. Next I'd love to bring that end-to-end range to a team — and push the craft further with people to build alongside.