Inspiration

We all know the cycle: January 1st, you’re going to run a marathon and learn Mandarin. February 1st, you’re on the couch eating chips. We realized that willpower isn't enough.

What actually motivates people? Competition and the fear of judgment.

We wanted to build an app that takes the toxic concept of "Peer Pressure" and flips it into a tool for good. We wanted to gamify life so that skipping the gym doesn't just make you feel lazy—it makes you lose your rank on the Global Leaderboard.

What it does

PeerPressure is a full-stack web application that gamifies habit tracking.

  • AI Goal Setting: Users don't have to manually input data. You just type a sentence like "I want to get ripped for summer," and our AI agent analyzes the intent and generates specific, trackable daily tasks (e.g., "Do 50 pushups") with assigned point values.
  • The Grind: Users check off tasks to earn tokens (XP).
  • The Glory: A live Global Leaderboard ranks every user on the platform. You can see exactly how much better (or worse) you are doing compared to the community.
  • Daily Resets: The system handles recurring daily tasks and one-time goals differently, ensuring your dashboard resets every morning for a fresh grind.

How we built it

We built a modern Full-Stack architecture deployed to the cloud:

  • Frontend: Built with React (Vite) and Tailwind CSS for a snappy, dark-mode aesthetic. Hosted on Vercel.
  • Backend: A robust FastAPI (Python) server that handles business logic and points calculation. Hosted on Render.
  • Database: MongoDB Atlas stores user profiles, tasks, and persistent scores.
  • AI: We integrated the OpenRouter API to power the "Task Agent." We used prompt engineering to force the LLM to return strict JSON data that our database could digest immediately.
  • Auth: Secure authentication using JWT (JSON Web Tokens) and Bcrypt password hashing.

Challenges we ran into

  • CORS & Deployment Hell: Getting the Vercel frontend to talk to the Render backend was the biggest hurdle. We dealt with mixed-content errors, proxy issues, and CORS policies blocking our API requests until we properly configured our environment variables for production.
  • The "Daily Reset" Logic: Figuring out how to handle "Daily" tasks versus "One-time" tasks in the database without running a complex cron job was tricky. We implemented a timestamp comparison system that checks if a task was done today whenever the user loads the page.
  • AI JSON Formatting: Getting the AI to stop chatting and just give us clean code. We had to fine-tune the system prompts to ensure the API returned parsable JSON every single time.

Accomplishments that we're proud of

  • It's actually live: We didn't just build a mockup; we have a fully deployed, working full-stack application with a real database and live authentication.
  • The AI Integration: Seeing the AI take a vague complaint like "I'm tired all the time" and turn it into a concrete task like "Sleep 8 hours (20pts)" felt like magic.

What we learned

  • State Management is key: Syncing the local UI state (green buttons) with the server database (permanent storage) requires careful planning.
  • Production != Localhost: Things that work perfectly on localhost:3000 break immediately in the cloud if you aren't careful with your API routes and environment keys.
  • Gamification works: Even while testing, we found ourselves clicking "Complete" just to see the number go up.

What's next for PeerPressure

  • Friend Leagues: Currently, the leaderboard is global. We want to let users create private groups to specifically compete against their friends.
  • Streaks & Badges: Visual rewards for hitting 7, 30, or 100 days in a row.
  • Public Shaming: (Joking... mostly). An optional feature where if you miss a task, the app tweets about it automatically.

Built With

Share this project:

Updates