Designing a brand new dine-in product — from MVP launch through a continuous stream of post-rollout improvements across discovery, payment, and engagement.
DineOut lets restaurant guests discover nearby venues, browse dine-in offers and menus, then pay their bill through the app — earning discounts and cashback in the process. A distinct vertical from food delivery: no ordering, no couriers, just the restaurant experience made smarter.
This case study follows the full arc: MVP launch, UX refinement, geofencing notifications, cross-channel conversion from delivery users, map-based discovery, and trust bootstrapping.
The insight that motivated DineOut was hiding in delivery data: a meaningful share of users who ordered delivery from a restaurant also dined there in person. The app was useful before and after the meal, but completely absent during it.
The challenge wasn't technical. It was behavioural: how do you get someone to open a food delivery app while they're already sitting in a restaurant?
The MVP was scoped around one complete loop: user discovers a DineOut restaurant → views the offer → goes to the venue → pays the bill in-app → discount applied. Every other feature was deferred or built to come online after the release cut.
Browsable list of DineOut-participating restaurants with offer type, cuisine, distance, and price range. Filter and sort within the dedicated DineOut tab.
Full profile: menu, photos, opening hours, and a dedicated "DineOut offers" section showing discounts and cashback rates by day and time slot.
Users enter their bill amount and pay through the app. Discount applied automatically at payment, with a clear savings confirmation. Critical path for launch.
When a dine-in payment is initiated, the venue's waiter app receives a push notification — closing the loop between guest and restaurant operations.
Staged: project team first on test venues, then employees for internal validation, then public. This caught critical end-to-end issues — especially in the waiter notification handoff — before real users hit them.
Post-launch feedback surfaced a consistent friction point: users understood the app offered discounts, but the moment of initiating payment was confusing. "Pay bill" appeared before they'd signalled presence at the venue, and the offer details weren't surfaced until after they'd already tapped.
The core discovery problem with DineOut was that users only thought about it when already planning a meal. The geofencing feature inverted this: when a user enters a restaurant-dense neighbourhood — like Telliskivi in Tallinn — the app sends a local push notification, even when running in the background.
Uses native circular geofencing rather than continuous GPS tracking — the OS handles the trigger at the system level, keeping battery impact minimal even on aggressive Android OEMs.
One notification per city per 30-day window, managed locally on the device. Works offline, requires no server call at the moment of trigger.
A custom screen explains exactly why "Always Allow" location access is needed before the native OS dialog appears — the highest-risk UX moment for opt-in rate.
The list-based discovery view didn't reflect how people think about where to eat. The map view loaded all DineOut providers for the current city at once — no per-drag loading states, instant marker rendering, a single clean initial load.
Scrollable provider directory, collapsed to peek height. Always visible as the fallback when nothing is selected on the map.
Tapping a pin shows a focused merchant card — name, rating, price range, distance. One more tap to the full profile. Dismissed by tapping the map.
When multiple restaurants share coordinates (food courts, busy corners), a horizontal carousel opens for disambiguation without map clustering.
DineOut launched with very few ratings — most cards showed no star score, which hurts click-through. The fix: many DineOut restaurants already had ratings on the delivery side of the platform. A fallback system now shows delivery ratings when DineOut ratings are absent or below threshold (default: 100 reviews). The source is never shown to users — they see one consistent number.
The threshold is configurable per market, and the initial goal was a measurable lift in home screen → merchant conversion with no visible UX change beyond restaurants now having a star rating.