Inspiration
Our friend group loves to eat out, and some of us even consider ourselves competitive munchers. But we can never decide on where to eat together. One person doesn't like burritos, the next person doesn't want to travel very far to eat, another person can't afford to spend big, and once we've all finally agreed on a spot to eat, we realize we forgot one of our friend's is vegetarian and the restaurant does not have any vegetarian options. This makes for very stressful planning and often ends up in us cancelling. We wanted to create a tool that will consider all these preferences and restrictions, and give us the best restaurants that will maximize the group's overall satisfaction and happiness.
What it does
Munchscene helps groups decide where to eat without the usual chaos. A host creates a room, shares a code, and everyone joins and enters their preferences like cuisine, vibe, budget, maximum distance, and dietary restrictions. Once everyone is in, Munchscene finds restaurant options nearby, removes the ones that clearly do not work for the group, and ranks the best remaining choices using a fairness-based system. Instead of just picking whatever the majority wants, it tries to find options that keep the whole group satisfied. It also gives short explanations for why the top picks were recommended.
How we built it
We built Munchscene as a full-stack TypeScript app. The frontend was built with React and Vite, where users can create rooms, join live lobbies, and update their preferences in real time. We used Firebase Authentication and Firebase Realtime Database to handle login and live multiplayer syncing. On the backend, we built an Express server that fetches restaurant data from the Google Places API, filters and scores each restaurant based on the group’s preferences, and returns a ranked list of results. We also used OpenRouter with Gemini to generate short explanations for the top restaurant picks.
Challenges we ran into
One of the biggest challenges was figuring out how to make the recommendations feel fair. We did not want this to just be a majority vote app where one or two people always get stuck with a choice they hate. We had to think carefully about how to weigh things like cuisine, vibe, budget, and distance while still making sure nobody got completely left behind. Another challenge was dealing with real-time syncing across multiple users and making sure the restaurant data we got back was clean, useful, and easy to explain to the user.
Accomplishments that we're proud of
We are proud that Munchscene feels like a real solution to a real problem we actually run into. We built a live group experience where multiple people can join the same room and update their preferences together, and we created a recommendation system that goes beyond simple voting. We're also proud of the fairness focused ranking, the elimination report that shows why certain restaurants did not make the cut, and the AI-generated explanations that make the final results easier to understand.
What we learned
We learned that building for groups is a lot harder than building for individuals. It is one thing to recommend a restaurant to one person, but it is much more complicated when everyone has different needs and someone can easily get left out. We also learned a lot about real-time app development, backend API integration, and how to design a scoring system that balances technical logic with human expectations of fairness.
What's next for Munchscene
We want to keep improving Munchscene so it becomes even more useful for real groups making real plans. Next, we want to improve the recommendation engine, make dietary matching smarter, add more restaurant details like photos and opening hours, and support more personalized group features like saved friend groups and recommendation history. We also want to keep refining the fairness model so the app gets even better at helping groups make decisions quickly and confidently. We are also considering including a map that shows the restaurant locations. We also want to add a feature where users specify at which times they are available, and our engine can plan the actual munch scene time, and cross reference it with the restaurant's hours so that you actually get a restaurant that's open during the time.
Built With
- express.js
- firebase-authentication
- firebase-realtime-database
- gemini
- google-places
- node.js
- openrouter
- react
- typescript
- vite
- zod
Log in or sign up for Devpost to join the conversation.