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 - the run hub: one person's stats over the events of their first season
One life on one screen - the person, their stats, and the season happening under them.
Role
Founder & solo developer - Sunlit Game Studio
Shipped
App Store, Google Play & the browser
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 SVG icons - biomes, animals, tools, faces, totems - held to 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 art-directed the icon set myself - a style spec strict enough that every generated icon had to meet it, and a rejection loop for the ones that didn't, until the whole set read as one hand.

Ice Age Life - the season board, the band assigned against the season's threats and bounties
The season board - the whole band, set against what the year brought.
Ice Age Life - the local map, nearly every tile carrying an icon of its own
The local map. Nearly every tile is its own icon - the set runs past 1,100.
Ice Age Life - the band screen, thirty-four people sorted into the day's parties
Your band - the people you survive with.

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 and solo - and held together well enough to ship.

58screens
150+reusable components
1,100+art-directed SVG icons
2,700+narrative events
347player actions
25+simulation systems

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.