Build in PublicMarch 1, 2026

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 stats 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.

Each task completion earns XP equal to its weight. A weight-5 habit (like maintaining a consistent sleep schedule) earns 5 XP. A weight-1 habit (watering the plants) earns 1 XP. The max possible daily XP is the sum of all your task weights — your "perfect day."

Levels follow a progressive threshold system. Level 1 starts at 0 XP. Level 2 requires 50 XP. Each subsequent level requires more than the last — the gap between levels grows by about 35% each time. This means early levels come quickly (giving you momentum), while later levels require consistent effort over months.

After level 99, you enter band ranks: Iron through Obsidian. Seven tiers. Each representing roughly two weeks of sustained, high-completion performance per level to reach.

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.