Projects

( project )

Soon on the App Store

Decidr

App Store
Soon

Problem

Groups stall on where to eat. Someone names a 4.8 with three reviews. Someone else names a 4.5 with thousands. Nobody wants to pick wrong, so nobody picks.

Decidr is meant to end that loop. Open the app, get one nearby restaurant, reroll if it is wrong.

What I built

I built Decidr with ACM Hack Project Team 3: Khang Nguyen, Tom Situ, Sarthak Kapoor, Christine Le, Hoang Lam, and Katelyn Li.

The client is React Native and Expo in TypeScript. The server is Express talking to MongoDB, the Yelp Fusion API, and Google Maps for driving time. Users can filter by distance, cuisine, and price, then walk a ranked list instead of arguing over a map.

It is headed to the App Store and Google Play.

How it works

The server pulls up to 50 nearby Yelp businesses, then sorts them with a review-count weighted rating. Each place is pulled toward the local average until it has enough reviews (we used 100 as the trust threshold), so a thin 4.8 does not beat a well-reviewed 4.5.

Reroll is an index into that ranked list, wrapping around the bounds, so the next tap is the next strong option rather than a new random draw from the whole city.

When we have the user's coordinates, we attach driving time from Google Maps so the pick is not only high-rated, it is actually reachable.

Challenges

Raw Yelp stars are a bad ranking. The hard part was encoding credibility without hiding new places forever. Shrinking toward the local mean was the compromise we could explain and ship.

Location is messy on a phone. The API has to accept a named location or a lat/lng pair, convert miles to a Yelp radius cap, and still fail clearly when neither is present.

Always returning the top row makes reroll feel broken. Ranking first, then stepping through the list, kept quality without repeating the same restaurant.

Impact

Decidr turns a group deadlock into one recommendation with an obvious next action. Filters for cuisine, price, and distance keep the pick inside constraints people actually have.

The next step is the store listing. The GitHub repo is the current source of truth until that ships.

What I learned

A recommender for friends is a ranking problem, not a search UI. If the first result is statistically noisy, the whole app feels like a coin flip.

Variety has to be designed. Random from the full set throws away the ranking. Indexing a sorted list keeps both.

Client and server stay honest when the product is location plus a third-party API. The phone collects context. The server owns scoring, secrets, and driving time.

React Native · Expo · TypeScript · Express · MongoDB · Yelp API · Google Maps