An open brief: “design a concept for HAPPYHOUR.” Diners want to spend less for good dining experiences, while restaurants need to sell empty tables during their slow hours. I scoped it, designed both sides of the app, and made the core calls that help a two-sided product actually hold together.
Starting with an open brief, the first challenge wasn’t UI design — it was scoping the product. Most two-sided marketplaces build everything into the consumer experience, leaving the business with a basic, afterthought admin panel.
But if restaurant operators can’t easily read the data, list and manage empty tables, the diner app has nothing to show. I chose to design both sides with equal weight, building them under a single system.
A dashboard should drive decisions, not just report numbers. Instead of simply telling a manager that table traffic is slow, the app gives them an immediate tool to fix it. The diner taps Grab It, the operator taps Push — this shared focus on quick, direct action is what unifies two completely different interfaces.
Diners open the app with a clear goal: find a quality restaurant deal during off-peak hours, or discover a local event. The UI cuts out the noise and focuses entirely on answering that immediate need.
A completed visit prompts a quick review, which instantly updates the discovery feed for the next user.
The four-step checkout uses inline pickers instead of full-screen overlays, keeping previous choices visible so users never lose context.
Instead of designing for an ideal scenario, I built the flow around real-world friction. I analysed actual diner complaints about existing platforms, mapped out how to handle empty off-peak venues gracefully, and simplified checkout down to a single QR pass at the door. An app’s real usability is decided by how it solves these friction points.
Diners want deals, but restaurants need to fill empty tables during slow periods to protect their margins. This side of the product is tougher because managers face operational pressures diners never see. I iterated through three versions to get the dashboard right.
The first version mirrored the diner app layout with a generic greeting and a hot-deals feed. It looked clean but was completely useless. A manager logging in at 9:00 AM needs an immediate answer to one question: are we on track today? That data was entirely buried.
I studied tools like OpenTable and SevenRooms, which triage tasks by occupancy, pending requests, and active promotions. I rebuilt the screen around this hierarchy using colour-coded states. It was a step up, but the interface only reported problems without offering solutions. Telling a manager “6 of 20 slots sold” identifies an issue but doesn’t help them resolve it.
The breakthrough was moving from passive reporting to active prescribing. If a deal underperforms, the card expands to show the revenue at risk and offers two immediate solutions: Push to Followers or Boost Deal. Stable deals stay collapsed, letting the dashboard automatically reorganise around the urgent decisions a manager needs to make that morning.
The action card, rebuilt here as a live element — the same object the whole product is built around.
Push sends a quick notification to regular followers, capped at once every four hours to prevent spam. Boost is deliberately slower, letting managers tweak the discount or time slot while displaying the projected impact on their margins.
When a deal is nearly sold out, the action buttons disappear and the status turns green. Pushing a deal that is already performing well is counterproductive — it just crowds out full-paying walk-ins who would have come anyway.
Because the analytics charts track cumulative seat sales, the lines only climb or plateau. The touch targets are explicitly oversized for fast, reliable use on a busy kitchen line.
Revenue at risk, a clock, and two routes out: Push or Boost.
Green status, no buttons, no manufactured urgency.
The operator’s management card and the diner’s checkout card use the exact same structural footprint: identical widths, the same data hierarchy, and a shared saffron highlight for high-priority items. Because both users are making quick decisions under time pressure, the shared design language helps them process information instantly. The card is the smallest expression of the whole concept.
The system connects a consumer looking for value with a manager looking for efficiency. Every operational input from the restaurant instantly converts into a marketplace signal for the diner.
The concept is built end to end, but three things would need to happen before it could ship — and they’re worth stating plainly.
The dashboard hierarchy is based on competitive research and logic. Spending a few shifts with working Prague restaurant managers would validate whether the information priority matches their actual workday.
The personalised card recommendations require a behavioural backend that isn’t built yet. Until then, these sections use static, tier-based defaults.
A final audit revealed minor text and spacing inconsistencies across screens. I’m currently mapping these into a unified set of master components tied to a single data source, to eliminate formatting errors.