What inspired us
Quitting smoking or drinking is one of the hardest behavioural changes a person can make — not because people don't want to quit, but because willpower alone rarely works. We kept seeing the same pattern: someone commits, lasts a few days, slips up, and starts over with less confidence than before. There's no social cost to quitting quietly, and no one holding you to it.
We were also thinking about what SDG 3 actually means in practice. Targets 3.4 and 3.5 ask us to reduce premature mortality from non-communicable diseases and address substance abuse — but most digital tools in this space are either clinical and cold, or gamified in a way that feels hollow. We wanted something that used real behavioural science to create genuine stakes.
The inspiration came from loss aversion — the well-documented psychological principle that losing something hurts roughly twice as much as gaining the same thing feels good ($\text{loss aversion ratio} \approx 2:1$, Kahneman & Tversky, 1979). If we could make quitting feel like something worth protecting, not just pursuing, we thought we'd have something real.
What we learned
We learned that the mechanics of accountability matter more than the interface. Early on we spent too long on UI and not enough time on the coin redistribution logic — the thing that actually makes the app psychologically compelling. Getting that right, and making sure users understood it immediately, turned out to be the most important design decision we made.
We also learned that positive feedback has to be concrete to work. Vague encouragement does nothing. But telling someone "your lungs have recovered approximately 10% of their function" or "you've saved ¥420 — enough for a new pair of shoes" creates a moment of real feeling. Specificity is the difference between a notification people ignore and one they screenshot.
On the technical side, managing real-time group state — tracking who's still in, redistributing coins when someone drops out, keeping everything anonymous — was more complex than we expected. We kept the database simple (SQLite for the hackathon build) but designed the schema to scale to PostgreSQL without major changes.
How we built it
QuitQuest is a full-stack web app built with React on the frontend and Node.js with Express on the backend. We structured the codebase with clear separation between components, pages, utils, and routes from the start — partly for maintainability, partly because we knew the repo would be evaluated.
The core loop is straightforward: user signs up and receives 500 virtual coins, joins a challenge by staking coins, gets placed into an anonymous group, and checks in daily. Miss a day and you're removed from the group — your staked coins are split among remaining members who complete the challenge.
We built the positive feedback system in four layers: a body recovery timeline that unlocks real medical milestones day by day, a live savings counter personalised to the user's actual daily spend, anonymous group encouragement stickers, and a growing tree visual that reflects streak length — seedling to full tree over 30 days.
User profiles display total days clean, cumulative money saved, badges earned, and current streak. The leaderboard ranks by coins and longest streak, with permanent honour titles for users who complete multiple challenges.
Challenges we faced
The biggest challenge was scope. In under 24 hours, we had to make real decisions about what to cut. We prioritised the coin system, daily check-in, and the body recovery timeline over features like photo verification and advanced analytics — those are on the roadmap, but they weren't going to make or break the core experience.
The second challenge was trust. A system where users lose virtual coins to strangers only works if they believe the rules are real and consistently enforced. We spent significant time on the UX copy — making sure users understood the mechanic before they committed, not after. Transparency at the point of entry turned out to be as important as the logic itself.
Finally, keeping everything anonymous while still making the group feel human was a genuine design tension. Too anonymous and it's cold. Too personal and it defeats the purpose. Anonymous reaction stickers — no text, just a tap — turned out to be the right middle ground.
Log in or sign up for Devpost to join the conversation.