Firebase · Google Places · Group Dining

MunchMatch

Stop arguing about where to eat. Swipe on restaurants as a group, and only reveal your shared matches, so everyone wins.

Live on FirebaseSolo Developer2025
Try the swipe ↓
drag the card or use the buttons
Project Details

Picking a restaurant as a group is surprisingly painful. Everyone has different preferences, dietary needs, and price ranges, and the back-and-forth usually ends with someone just picking something. MunchMatch structures the whole thing: one person creates a group with location and filters, shares a link, and everyone swipes. Shared matches are revealed only when the group finishes.

GRP
Group creation: location, mealtime, distance, price, cuisine, dietary filters
TAP
Swipe interface: each person votes independently on their own device
SYN
Real-time sync: Firebase keeps all group members in sync as they swipe
WIN
Match reveal: results only shown when everyone finishes, no anchoring bias
1
Host creates group with location and filters
2
Google Places API fetches matching restaurants
3
Group members join via shared link or code
4
Each person swipes independently (yes or no)
5
Firebase Realtime DB syncs votes across all members
6
Mutual matches revealed when everyone finishes
Firebase over a custom backend: The MVP needed real-time group state across multiple devices without managing a server. Firebase Realtime DB let me focus on the swipe flow and match reveal logic before adding heavier features like authentication.
Google Places over Yelp: Google Places has better built-in support for dietary and cuisine filters, and the free tier is more generous for an MVP. Yelp's pricing made it harder to test at scale.
No authentication in the MVP: The core question was whether the group-swiping flow was actually useful. Skipping auth let me ship the mechanic first and validate it before adding account management complexity.
Hidden match reveal: Showing matches only after everyone finishes prevents anchoring: if someone sees a result early, they stop swiping honestly. The reveal timing is a deliberate UX decision.

Getting the swipe mechanics to feel smooth and native took the most iteration: swipe thresholds, animation timing, and card stacking depth all contributed to whether the interaction felt fluid or mechanical.

Bridging user-facing filters (vegan, dietary, price range) to the Places API's actual category system required careful mapping, since user intent doesn't always translate cleanly into API parameters.

  • Improved mobile swiping UX with native touch gesture support
  • Expanded dietary and preference filters
  • Persistent group history so users can revisit past matches