Inspiration

Each of us in the group are avid music enjoyers - over 100,000 minutes each on our yearly Spotify Wrappeds and dozens of concerts attended. So we feel that being able to experience the vibrations of the stereo and the harmonics of both old or newly discovered artists coursing through your body at a venue is a sensation that everyone should get a taste of in their lifetimes. Unfortunately, finding concerts that match our interests, schedules, and budgets can be a hassle, and any potential plans between us always ends up falling through. We created Certifi to make to concert-going process easy, collaborative, and fun. Instead of searching for events individually and coordinating flimsy plans afterward, we wanted to help friends discover concerts together and identify options that fit the group.

What it does

Certifi is a social concert discovery platform that helps users find live music they and their friends may enjoy. Users can create a music profile by connecting Spotify or entering artists they like. The platform uses those preferences to surface concert recommendations. Users can create groups, invite friends, and request recommendations based on a shared musical interest or event preferences. Group members can vote on suggested concerts, and a unanimous choice becomes a plan with event details and calendar links. Certifi aims to make it easier to move from discussing a concert to choosing one and coordinating attendance.

How we built it

We developed the web application with Next.js, React, and TypeScript. The Next.js App Router serves the website and its API routes. Neon Postgres stores application data, including user profiles, groups, and concert plans, while Neon Managed Auth supports account creation, session management, and Google and GitHub sign-in. A Python FastAPI service handles music analysis and recommendation tasks. It uses Sentence Transformers to generate embeddings, Last.fm to enrich artist information, Gemini to create artist descriptions and interpret group requests, and Ticketmaster to retrieve concert listings. The Next.js API communicates with FastAPI, allowing browser requests to remain on the same origin while connecting the interface to the recommendation service.

Challenges we ran into

Integrating authentication across the application required careful debugging. Email sign-in worked before social sign-in reliably appeared in the user session, so we investigated how OAuth callbacks, cookies, and local app origins interacted. We also learned that editing a schema file in the repository does not update the live Neon database; new profile-photo fields required a database migration before the API could use them. We also encountered issues at the boundaries between services and the browser. Failed API responses sometimes caused JSON parsing errors in the profile page, which led us to improve its error handling. These experiences reinforced the importance of examining logs and tracing errors frequently during the development process.

Accomplishments that we're proud of

We are proud to have built a functional experience that brings music discovery and group coordination together. Users can create a music profile, receive recommendations, form groups, invite friends, and vote on concerts. The app can also turn a group decision into a plan with event details and calendar links. We are especially proud that Certifi addresses a problem our team has experienced firsthand. Concert discovery is shaped by individual taste, but attending a show is usually a group activity. We designed the project to support both, and believe it could help other people make plans around the music they enjoy.

What we learned

Developing Certifi gave us practical experience with Neon Postgres and Neon Managed Auth, including how authentication sessions connect to application data and how database schema changes must be applied to a live environment. We also learned how to connect a Next.js application to a separate FastAPI service while keeping the browser-facing API in one place. We learned that effective prompting needs more than a few sentences at a time; an application needs to also handle ambiguous requests and flawed results. Throughout the project, we saw how essential error handling and debugging are to software development. Tracing issues across the browser, API routes, authentication, database, and Python service helped us understand how the system works as a whole.

What’s next for Certifi

We plan to improve concert recommendations by adding more precise date, price, and travel constraints. These options would help groups find events that fit their schedules and budgets, while giving Certifi more information to consider when ranking shows for multiple people. We are also interested in adding a map view so users can explore recommended concerts by location, improving event and venue details, and supporting trip planning around shows. Our lonr-term goal is to make Certifi a useful place for friends to discover concerts in any area they're in, make decisions together, and coordinate the plans that follow in a simple and highly effective manner.

Built With

Share this project:

Updates

Submission history