Inspiration

Our society is driven by consumerism, where we constantly buy things we don't truly need. As a result, we find ourselves trapped in a vicious cycle of impulsive spending and unnecessary consumption, often prioritizing fleeting desires over genuine needs. We built this application with the goal of encouraging users to resist their materialistic desires, rethink their purchasing habits, and make more conscious, financially responsible, and sustainable choices.

What it does

“Don’t Buy It!” lets you catalog items you’re thinking about buying and defend them to Sprout, a dramatic talking plant determined to stop your impulse purchases. Sprout challenges your excuses and only concedes when you make a genuinely convincing argument, in which Sprout will then suggests cheaper, lower-waste alternatives. Genuine needs get instant approval, and the final decision is always yours.

How we built it

We built the mobile app with React Native, Expo, Expo Router, and JavaScript. Firebase Authentication lets users begin anonymously, while Cloud Firestore stores their settings, catalog, and debate history. A Node.js backend integrates Google’s Gemini API through the Google Gen AI SDK. Gemini analyzes item photos, generates Sprout’s responses, and identifies evidence in the user’s arguments. The backend validates its structured JSON responses, while application code handles calculations and decides when Sprout concedes. We created Sprout using react-native-svg, with five growth stages and seven expressive moods. React Native Animated powers its reactions, leaf celebrations, and money animations.

Challenges we ran into

One challenge was making Sprout relentless and funny while keeping the experience supportive. Its objections needed to target the purchase, respect genuine needs, and leave users in control. Another was defining what makes an argument convincing. We developed a specific rubric and required supporting quotes from the user’s messages, rather than allowing the model to decide freely. We also had to handle camera permissions, slow or unavailable APIs, malformed responses, and database connectivity. Clear shared interfaces helped our teammates build different parts of the app without breaking each other’s work.

Accomplishments that we're proud of

We gave Sprout a recognizable personality through expressive artwork, escalating dialogue, and small animated reactions. We connected the Add flow to live Firebase, verified that saved items could be retrieved from the server, and checked that users’ data stayed within their permitted paths. We also built manual fallbacks so an unavailable AI service doesn’t prevent users from entering an item. Most of all, we’re proud of connecting a practical financial habit—pausing before discretionary spending—with a character people can care about.

What we learned

We learned that personality can make a useful habit much more engaging. Sprout gives people a reason to reconsider a purchase and return to the app. We also learned how important it is to give generative AI clear boundaries. Structured responses, validation, and predictable application logic made the system easier to understand and debug. Working in parallel reinforced the value of small components, agreed interfaces, and testing a complete flow early.

What's next for Don't Buy It!

We want to test Sprout with real users and learn which conversations help people reconsider purchases without feeling judged. Next, we’d improve recognition of context-dependent essentials, refine accessibility and mobile reliability, and make sustainable alternatives more useful through better local repair, borrowing, and secondhand discovery. We also want to evaluate changes in users’ spending habits before making claims about measurable financial or environmental impact.

Built With

Share this project:

Updates

Submission history