All posts
April 4, 2026·6 min read

I built an app that forces you to actually live your life

How I turned the “I should go out more” guilt into a gamified IRL quest system with XP, streaks, and a social leaderboard — in one night.

#webdev#javascript#typescript#productivity

I've been thinking about the Pokémon GO problem for a while.

Not the game itself — the mechanic. The thing that made millions of people physically walk outsidein 2016 wasn't willpower or a New Year's resolution. It was XP. It was a Pidgey behind the coffee shop. It was the fact that your friend already caught 12 of them and you had 4.

The question I kept asking: why don't we apply that to real life?

“Talk to a stranger” is terrifying on its own. Add 150 XP, a difficulty rating, and a leaderboard where your friend Sofia is beating you? Suddenly it's a quest.

That's the core insight behind QuestIQ.

The gap isn't motivation. It's structure, accountability, and competition.

The Problem

Most productivity apps shame you. They show you your unfinished to-do list, your missed workouts, your unfilled habits tracker. The feedback loop is guilt → avoidance → more guilt.

The social skills problem is worse. Nobody has a “talk to people IRL” app because it sounds absurd. But it's real — people, especially post-COVID, are genuinely less practiced at casual social interaction, exploration, trying uncomfortable things.

The Core Mechanic

QuestIQ works like this:

  • You get 3 new quests every day across 4 categories: Social, Fitness, Exploration, Creativity
  • Each quest has XP (50–250), difficulty (⚡ Easy to ⚡⚡⚡ Hard), and a timer (24h)
  • Complete it, claim your XP. Miss it, your streak breaks.
  • Your total XP goes on a leaderboard — global and friends-only

The quests are designed to be just uncomfortable enough to matter:

  • “Eat at a restaurant alone, no phone, 30 minutes”
  • “Start a real conversation with a stranger”
  • “Attend a local event you know nothing about”
  • “Run a route you've never taken”

The Technical Decisions

I built this with Next.js 15, Tailwind v4, shadcn/ui, and TypeScript. The stack I reach for when I need to ship fast without compromising quality.

The interesting part wasn't the stack — it was the quest engine. I wanted quests that felt hand-crafted, not algorithmic. The solution: a curated bank of 40 quests organized by category and difficulty, rotated daily using a deterministic seed so everyone gets the same 3 quests on the same day (community moment) but the rotation feels fresh.

function getDailyQuests(date: string): Quest[] {
  const seed = parseInt(date.replace(/-/g, ''), 10);
  const shuffled = seededShuffle(QUEST_BANK, seed);
  return [
    shuffled.find(q => q.category === 'Social')!,
    shuffled.find(q => q.category === 'Fitness')!,
    shuffled.filter(q => 
      q.category === 'Exploration' || 
      q.category === 'Creativity'
    )[0]!,
  ];
}

The leaderboard was the other fun piece. For the demo, it's seeded with 5 realistic fake profiles to show what competition looks like at scale. The real version would use a backend — for now, it's client-side with localStorage for personal XP tracking.

What Surprised Me

Two things.

First: the empty state problem. Most apps show a blank screen when there's no data. That's a conversion killer. I spent more time on the empty state than the happy path — pre-seeded demo completions, shimmer cards, copy that invites you in rather than apologizing for being empty.

Second: dark mode makes gamified apps feel serious. The first version I built in light mode looked like a kids' app. Switch to near-black with violet and emerald accents? It looks like something adults want to compete in.

What's Next

The product is a static demo right now — no auth, no real persistence, no real user-to-user leaderboard. The real version needs:

  1. Auth + profiles — sign in, set username, track real XP over time
  2. Social graph — add friends, see their completions in real-time
  3. Push notifications — daily quest drop reminder (the Duolingo owl, but cooler)
  4. Verification options — GPS check-in for location quests, photo upload for visual ones

But the core loop? It's right. The question is: will people actually do it?

I built it in one night to find out.

Try QuestIQ yourself

Today's quests are live. They rotate every 24 hours.