Inspiration

As CS students, our to-do lists never really end: classes, internship applications, LeetCode, side projects, and the occasional reminder that touching grass is a thing. Schoolwork always gets done because it comes with deadlines and grades, but the stuff that matters most for our careers and health has nobody holding us to it, so it quietly slides to “next week” or "after my homework" forever. We realized the only thing our friend group never forgets to check is our fantasy football league, where the trash talk and the threat of finishing last keep everyone locked in. So we wondered what would happen if we brought that same energy to our habits, with friends keeping score and a little friendly shame for whoever falls behind.

What it does

Locked In turns habit building into a fantasy league with your friends. You start a private league of up to 15 people around one shared goal, like four LeetCode problems or three gym sessions a week, and everyone earns points for logging progress, hitting the weekly goal, and keeping streaks alive. A live leaderboard tracks the daily race and the monthly standings, and when the league is created, the group sets a reward for first place and a punishment for last. At the end of each month, a dramatic season-finale reveal crowns the MVP and, after a fake-out or two, the Chud of the Month. A home dashboard keeps all your leagues in one place, so you can compete in studying, working out, and reading at the same time.

How we built it

We started in Figma, mapping out every screen, including the dashboard, league creation, leaderboard, and monthly awards, with an engaging look built on dark blue, butter yellow accents, and clean fonts. From there, we built the frontend with React, TypeScript, and Vite, giving each page its own scoped CSS so teammates could build in parallel without their styles colliding. The end-of-month reveal runs entirely on React state and CSS animations, from the count-up stats to podium placement, with no animation libraries. Each page was first built against typed mock data, so the frontend could move quickly while the backend came together. The backend is written in Java and stores users, leagues, and progress in a PostgreSQL database. We deployed the backend on Render and the frontend on Vercel. To keep the team in sync, each feature lived on its own Git branch and merged into main through pull requests.

Challenges we ran into

Getting started was the hardest part, since none of us had ever built a full-stack app from scratch. Just deciding on a stack, setting up the repo, and getting a blank page to load took longer than we expected. Splitting up the work was tricky too: the frontend, the Java backend, and the PostgreSQL database all depended on each other, so we had to agree early on what data each page needed and build against mock data while the backend caught up. Another big challenge came at the end, when we had to combine everything. Merging everyone’s branches meant untangling Git conflicts, especially in shared files like App.tsx, and connecting the frontend to the real backend surfaced mismatches we hadn’t caught when each piece was running on its own. Getting everything deployed and talking to each other across Vercel and Render took a lot of debugging, but seeing the full app finally work end to end made it worth it.

Accomplishments that we're proud of

We came to this hackathon without an idea and we're proud of what we ended up building from scratch. The idea for our product came from something we've all experienced personally as college students and we're proud of building something that we'd actually use. We started with a ton of ideas for features when we first started brainstorming and one of our biggest wins was learning to cut and prioritize, and consolidate everything into a product that's engaging and useful. While building, we learned from each other, supported each other, and kept each other accountable.

What we learned

We learned how to ship a full-stack product fast while keeping a product mindset front and center. Beyond the technical thinking, we constantly asked ourselves what makes the UI intuitive, which metrics actually help users take action, and how to keep Locked In competitive enough to motivate people without losing the supportive, community feel. Balancing rivalry and camaraderie became our core product lesson — and the reason the app feels like a league with friends, not just another habit tracker.

Built With

Share this project:

Updates

Submission history