AI Prototyping · iOS Concept

Hooray: A To-Do App That Judges You

A to-do app that makes fun of you instead of cheering you on. Built for people raised on TikTok, who already deleted every app that kept telling them they’re doing great.

Duration
One week · concept to interactive 10-screen prototype
Role
Solo · product, mascot system, and code direction
Partners
ChatGPT Image 2 (concept & mascot faces) · Claude (design guideline) · Codex (Figma build) · Claude Code (prototype) · Figma Dev Mode MCP (bridge)
Impact
A working, tap-through iOS prototype with a mascot and copy engine that react to your progress. 10 screens, one week.
Open the prototype Try it now

An interactive iOS prototype he built. Tap a task to check it off and the ring, count, and mascot all react together · Best viewed on a phone-width window

Domain
Productivity · Gen-Z Consumer · iOS
Deliverables
Interactive Prototype · 10-Screen iOS Flow · 8-Expression Mascot System · Reactive Copy Engine
Scope
Product Concept · Mascot & Personality Design · State Mechanics · Code Direction · Pixel QA
Timeline
One week · concept to interactive prototype

Why this exists

Cheerful to-do apps stopped working

Most to-do apps try to motivate you. They cheer you on, then go quiet the moment you skip half the list. For people raised on TikTok and instant rewards, that cheering wears off fast. Hooray does the opposite. It’s gloomy, and it makes fun of you, and building something mean on purpose was the most fun I had on a project. The attitude gets people in the door; the real goal underneath is helping them change a habit.

The mascot looks like it’s egging on your worst habits. It’s really pushing you off them. Nobody glued to their phone turns disciplined overnight. The app just has to be funnier than your excuses for not starting.

Three Hooray screens (onboarding, home with progress ring and mascot, and the month calendar) on a soft background
Onboarding, home, and calendar. Home greets a normal Thursday with “Another Busy Act,” the calendar is “The Month, Allegedly,” and clearing everything gets you “All done. Don’t make it weird.”

The character

Eight expressions that match your progress

The mascot has eight faces. You don’t pick which one shows up. Your progress does. Each face was generated with ChatGPT Image 2: same character, different expression, tied to a completion range. The more you finish, the further it moves along: gloom → disdain → mock → stubborn → eyeroll → smirk → forced-smile → cracked. Do nothing and you get gloom. Finish everything and you don’t get a happy grin. You get a face that’s cracked from the effort. Most apps praise you for doing the bare minimum. This one makes you earn the reaction.

One rule kept it working: the mascot is a fixed image. It never gets recolored or restyled. Each screen swaps in a different face. Hand that job to an AI agent and it’ll repaint the character to match the color theme. Keep it as eight fixed images and it stays a character.

The eight Hooray mascot expressions in a grid, ordered low completion to high (gloom, disdain, mock, stubborn, eyeroll, smirk, forced-smile, cracked), one completion arc from 0% to 100%
The eight expressions, low completion to high: gloom, disdain, mock, stubborn, eyeroll, smirk, forced-smile, cracked. 0% lands on gloom, 100% on cracked.

The voice does the work

How the sass actually works

The jokes aren’t random. They’re sorted into groups by how much you’ve finished. Check off a task and the app pulls a fresh line from the group that matches your new progress. “Progress. Technically.” There’s no backend and no AI reading your mood. Just a percentage and a stack of pre-written lines. Cheerful apps say the same thing whether you did one task or ten, so people stop noticing. These jokes change with your progress, so people keep reading.

Hooray's three onboarding screens, each pairing a mascot expression with one dry line introducing the app's judgmental voice
Onboarding is the whole pitch in three lines: “Another to-do app. Thrilling.” → “It tracks. It judges. Lightly.” → “Fine. Let’s get into it.”

The build

Built in a week with four AI tools

Hooray started with a complete app concept and a set of mascot faces from ChatGPT Image 2. From there, Claude wrote the design guideline: colors, typography, components, copy rules, and the mascot-to-progress mapping. That guideline directed Codex to build the full Figma file of 10 screens, components, and variants. Then Claude Code took those Figma frames and built the tap-through prototype, reading every value straight from the file instead of guessing. Four tools, four stages, about a week.

The AI agent kept fixing things that weren’t broken. It flagged the dark tab bar as a bug. It swapped the dark text on the yellow button to white. Both were deliberate design choices. Most of the work was QA: checking what the agent changed and pushing back.

Four built Hooray screens (home, month calendar, day detail, and profile) reproduced from the Figma source
Home, month, day detail, and profile, rebuilt with Claude Code from the Figma frames, each checked against its original until they matched.

What carried over

What came out of it

The AI did the building. Deciding what to build was not its job. What lasted past the prototype was how I worked with the tools.

  • Read values, don’t guess them. Give an AI one source of truth and a rule against guessing, and its front-end work goes from close-enough to matching the file.
  • Once the mascot’s faces and jokes were written down as clear rules, even an AI tool could build the character without breaking it.
  • The design work moved earlier. Less time drawing, more time deciding which of the AI’s “fixes” to reject.

Hooray is still a prototype. It’s not on the App Store yet, but it’s the one I’d most want to take further. The bet is simple. Maybe the same people who ignore motivational apps will actually use one that makes fun of them.

What carried forward

AI tools always offer to improve your design. Often that means rebuilding it as their own. The real skill was knowing which design calls to protect. When the AI changed a number, the fix was simple: read it back from the original file.