Skip to content
Build in Public· 5 min read

How I turned a spreadsheet into a gamified habit tracker

It started with a Google Sheet. Seventeen tasks, weighted by importance, tracking daily completion percentages. Then I realized: this is a character sheet.

It started with a Google Sheet.

Seventeen rows. Each one a habit I'd decided mattered: checking my blood glucose, doing push-ups, drinking two litres of water, going to bed before 1am. In column B, weights from 1 to 5 based on how important each habit was to me. Every day I'd open the sheet, tick the boxes, and a formula at the bottom would compute a single number: my completion percentage for the day.

I did this for three months before I realized something.

I wasn't just tracking habits. I was running a character sheet.

The spreadsheet moment

The realization came on a Sunday afternoon when I was reviewing the week's data. I had columns for each category — physical health, sleep discipline, nutrition, home order, self-care — and when I looked at the week as a whole, I saw a pattern I'd never articulated before. My Vitality numbers were strong. My Discipline numbers were inconsistent. My Nourish score was genuinely terrible.

These weren't just percentages. They were attributes. The kind you'd see in an RPG character screen.

If I were a character in a game, what level would I be?

That's when I opened a new tab and started building what would become SELV.

Why existing apps didn't work

I'd tried habit trackers before. Habitica made me feel like I was playing a children's game — pixelated monsters, cartoon avatars, a social feed that felt more like pressure than motivation. Streaks-based apps made me anxious; missing a single day felt like losing a three-week investment. Apps that were "too simple" gave me no sense of progress across time.

What I wanted was something that:

  1. 01Showed me honest data, not cheerful encouragement
  2. 02Let me weight tasks by real importance
  3. 03Didn't punish me for missing days
  4. 04Made me feel like I was genuinely building something over time
  5. 05Didn't have any cartoon elements whatsoever

The spreadsheet did all of this. The problem was that a Google Sheet is not a mobile app. It's friction. Real habits require no friction.

The architecture of self-measurement

Once I'd decided to build, the first question was: what does "leveling up" actually mean?

The spreadsheet gave me a percentage score each day. But a percentage resets. What I wanted was something cumulative — a number that could only go up, representing the total work I'd put in over time.

That's XP.

Every task carries a weight from 1 to 5, and the weight sets that task's share of the day rather than its XP. A full day is worth 100 XP whether you track 3 habits or 30, and what you earn is that 100 scaled by the share you actually completed. Finish the weight-5 sleep habit and skip the weight-1 plants, and you keep most of the day.

Normalising to 100 was a deliberate choice. If XP were the raw sum of your weights, adding a habit would inflate your ceiling and quietly shrink every day that came before it — a good Tuesday in January has to stay comparable to a good Tuesday in June.

Levels sit on a banded curve. Levels 1 to 99 group into seven bands, Iron through Obsidian. Inside a band every level costs the same, so progress is steady and predictable; crossing into a new band costs meaningfully more than the last crossing did. The band is the target that stays in mind, because 99 is too far off to mean anything on a given Tuesday.

What honest data looks like

One of my strongest convictions going into this project: no sugarcoating.

If I completed 23% of my tasks today, I want to see 23%. Not a cartoon that says "You tried! Keep going!" I'm an adult. I know when I've had a bad day. What I want is the data, cleanly presented, so I can notice patterns over time.

The SELV character screen shows your completion rate as a giant number. No softening. No "+You've improved 2% since last week!" overlay unless you asked for it. The number is the number.

This sounds harsh. In practice, it's liberating. When the data is honest, you stop fearing it. You start treating it as information rather than judgment.

Building it

The tech stack was relatively straightforward: Next.js for the web app, SwiftUI for iOS, Supabase for the backend. The interesting challenges were the soft ones.

How do you visualize five simultaneous attribute scores without it looking like a spreadsheet? (Answer: radar chart.) How do you show time-series data without it feeling clinical? (Answer: heatmap with the right color palette.) How do you design a level-up moment that feels significant without being cartoonish?

That last one took the longest. I eventually settled on a simple overlay: your new level number, big and centered, fades in and then out. Two seconds. No fanfare. Just the number. It's more satisfying than I expected.

What I learned building in public

Building SELV, I realized that the act of tracking itself changes you. Not because of streaks or rewards, but because making something measurable makes it real. When I couldn't ignore the data anymore — when it was right there in my character sheet every morning — I started making different choices.

Not because an app told me to. Because I wanted my numbers to reflect who I'm trying to become.

That's what SELV is for.