Ziggurat
A habit tracker where every check-in lays a stone. A week of habits becomes a course, courses raise a ziggurat, and everything you finish takes a plot in a city that never resets.

Problem
Most habit apps run on checklists and streaks. Progress is easy to miss on a list, a single bad day drops a streak to zero, and one reward on its own wears thin, so people quietly drift away.
Approach
- 01
Make progress physical. Each habit is a stone whose material follows its kind: sandstone for body, slate for mind, limestone for life. Every check-in lays one, a week fills a course, and courses raise the build: a seven-day cairn first, then a stair, a ziggurat and a great ziggurat.
- 02
Make a miss a gap, never a reset. Hitting a smaller rough-day target lays a half stone, yesterday can still be logged today, and a missed day leaves a visible gap in one course while everything already laid stays standing.
- 03
Tie every habit to a cue. Setup turns each one into a sentence (After I pour my coffee, I'll meditate for 10 minutes) with After, Before, When or While, and the cue comes back at check-in and in reminders.
- 04
Make checking in feel like work done. Spin a carved stone dial to the amount, then pull a leather-gripped lever down to lay the stone, with a ratchet click, a thud and a haptic pulse. Habits to break fire bricks instead, and a slip leaves a cracked one.
- 05
Layer the reasons to come back. Clay earned from every stone buys commissions for the city; twelve small builds, a well, a kiln or a gate, set one-to-four-week goals on the same check-ins; and a city view keeps everything you finish, framing itself to show it all.
- 06
Teach it in the app. A 20-page guide opens with why a building works better than a streak, then walks every screen with real screenshots and the buttons to tap ringed and numbered; first-visit tips point at each screen's key control.
Architecture
One Expo / React Native codebase for phones and the web, with every habit, log and build saved on the device and no account. The game rules are plain functions over the log. All art is rendered from Blender scripts: stones, buildings and props as cropped layers, and a city composed from a sand plate plus one layer per thing built, all shot from one camera. The guide's annotated screenshots are captured from the web build automatically.
Built with
- Expo
- React Native
- TypeScript
- Zustand
- Blender (Python)
- Cycles
- Playwright
- Vercel
Outcome
A working preview at ziggurat.atomfade.com that runs in a phone browser: setup, daily check-ins, four builds from Cairn to Great Ziggurat, twelve small builds, clay and commissions, the city, and the guide. Next: Android and iPhone test builds and first tester feedback.
Decisions
Gaps that stay visible over streak counters
because one bad day should cost a little, never everything you've built.
Art rendered from scripts over hand-drawn assets
because every stone, building and the whole city can be re-rendered when the style changes.
Everything on the phone over accounts and sync
because a habit app has to open and work in seconds, with nothing to sign up for.
Joy Teriyaki
Five wordmarks and ten building directions for a Korean teriyaki drive-thru, delivered as an interactive review tool so the client could choose brand and architecture independently.