I explored a redesign of the My Bookings experience for a sports booking platform: one booking model, one card grammar, one attention layer, shared across web and mobile.
Web and mobile used different mental models for the same booking data. Same domain, two information architectures.
This exploration was completed without access to production analytics or user research. The recommendations below are hypotheses to validate, not measured outcomes.
The starting point is the current product. One screen, two surfaces, captured as they ship today.
Web. Reservations, programs and clinics are separated into tabs. You navigate the system by category, then scan for a date.
Mobile. The same booking types are mixed into one chronological list. You navigate by date, then work out the type.
Neither pattern is wrong on its own. The problem is that the two surfaces teach different mental models for the same underlying object: a booking. Everything that follows works from that single observation.
Reading the screenshots closely, three levels of certainty. What can be seen. What the redesign assumes. What would need the product and engineering team to confirm.
Reservations, programs and clinics live in separate tabs. You pick a category, then scan for a date. Cancel and Reschedule sit inline on every card.
Every type is mixed into one list, grouped by day. You scan the date, then work out the type. Cancel and Details only; no Reschedule, no prioritization.
Mixed language in a single view. On web, a Japanese type chip sits next to an English one, and a "Manage" link switches script mid-sentence. The interface does not commit to one locale.
Empty fields still render. A "Teacher:" label appears with nothing after it. Internal test names ("Paloma Test - Multi-Session Pricing - Adult") reach the member-facing card.
The action set changes with the surface. Web cards expose Cancel and Reschedule directly; mobile cards expose Cancel and Details. The same booking offers different capabilities depending on where you open it.
No prioritization on either surface. A payment that will auto-cancel and a session a month out carry the same visual weight. Nothing pulls the time-sensitive item forward.
A single card grammar plus a small attention layer would cut the cost of moving between web and mobile and surface the few actions that are actually time-bound. To be tested, not assumed.
The two surfaces may read booking data through different models or endpoints today. The proposed system would benefit from a normalized booking view model that both consume. Feasibility and cost are unknown without the engineering team.
Completed in an express 3-hour working session, combining product judgment, domain familiarity with racket-sport booking, and AI-assisted rapid prototyping to move from diagnosis to a testable system. AI accelerated exploration, synthesis and iteration. It did not make the prioritization, interaction or trade-off calls.
Explored. Around fifty improvements from four angles: the player, the club, the coach, and cross-cutting platform concerns. Most were real but local. Rename a button, fix a margin, add a tooltip, adjust a tab.
Kept the five that change the system rather than a screen:
Cut or deferred. The local fixes, plus larger items held out on purpose: brand unification, the full payment flow, a notification system. Listed in Scope.
Why. Under three hours, the leverage is in decisions that transfer across every booking type, not in polishing individual cards. Five decisions that hold everywhere beat fifty that each fix one screen.
My Bookings is one subsystem inside a larger sports ecosystem: club discovery, wallet and credits, players and social, venue management. The booking model here is built to sit inside that whole. It shares the global navigation, the design tokens, and the same payment and credit state the wallet owns. Aligning it is not a screen redesign, it is aligning one object across the platform.
Type chip, relative time, overflow. Title, metadata. One payment indicator. Then a fixed action grammar: one primary in solid, one secondary in outline, and the overflow for everything destructive or rare. Empty fields are stated, never left hanging.
The payment breakdown does not expand the card. Deposit, balance, cancellation policy, and each player's share open in a bottom sheet on mobile and a popover on web, so the list keeps its scroll rhythm. Tap "View breakdown".
Neutral chip. Type never changes the layout or the actions.
Relative first ("tomorrow"), the exact date in the metadata.
One indicator, with the amount or the credits used. Glyph plus text, never colour alone.
One primary in solid (Pay, Confirm, Check in) and one visible secondary in outline (Reschedule or View breakdown).
The "···" is only for the destructive or infrequent: cancel, release the slot, invite, share, view policies.
Only what is genuinely time critical stays visible: payments that auto cancel inside 24 hours and requests that expire today. Everything slower, unscheduled credit, expiring balance, drops to a secondary line you can open, snooze, or dismiss. The urgent zone never becomes a list to scan.
Attention zone, then Today, then Upcoming. The right rail carries the usual time slot, the release option, and the wallet. Scroll sideways to see the full width.
You played this slot 7 of the last 8 weeks. Aug 25 is still open.
Waitlisted members get priority. If someone takes it, you get the full credit back.
4 expire Sep 30
Cancel loses the court for the club and the credit for the member. Release offers the paid slot to the waitlist first. Three taps inside the same overflow menu.
Your $24.00 comes back as full credit as soon as someone takes it. If no one does before 08:00, the booking stays yours.
The card does not change shape between platforms. Touch targets go to 44 pixels. Same two urgent items, same secondary alerts. The payment breakdown that was a popover on web is a bottom sheet here. Tap "View breakdown" on the Today card.
But you have paid sessions waiting to be scheduled.
Find a court3 courts open tomorrow, 10:00.
Unscheduled sessions get one card that moves from pending to resolved. Same card, same slots, the progress bar and the primary action carry the state.
If there is paid credit waiting for a date, the empty state shows it and offers the action. The rail keeps working too.
But you have paid sessions waiting to be scheduled. Once you book a court or join a program, it shows up here grouped by day.
You played this slot 7 of the last 8 weeks. Aug 25 is still open.
Not part of the core system. Each one reuses a state the card already has, which is the point: once the grammar is fixed, these cost almost nothing to add later.
Who paid, who owes, each share. It opens from "View breakdown", so the list row stays one line. The primary action becomes "remind the ones who owe".
The member sees the refund rule at the moment it matters, not buried in terms of service, and without the card growing.
If you play Tuesday at 10 most weeks, the rail offers to book it. Skip is not a dead end: it proposes another time or the waitlist.
You played this slot 7 of the last 8 weeks. Aug 25 is still open.
Hick, Miller, Fitts, progressive disclosure. Not as decoration. Each one is tied to a specific choice on the card.
Pay, Confirm or Check in in solid; Reschedule or View breakdown in outline. Cancel, release the slot, invite and share live in the "···". Two decisions in view, not six.
Only payments due within 24 hours and requests that expire today. The rest drops to "secondary alerts", which can be opened, snoozed or dismissed. The urgent zone never becomes a list.
Date · time · place · players. A fifth item drops to a second line. In the attention zone the headline carries the urgency ("Expires today 18:00") and the second line carries the context.
Deposit, balance, cancellation policy and per-player balance live in a bottom sheet (mobile) or a popover (web). The summary card keeps a single figure and the list keeps its scroll rhythm.
"No coach assigned", never a "Coach:" label with no value. The exact same text on web and mobile. If the data does not feed a decision, the row is not rendered.
Pay, Check in, Confirm, Reschedule and View breakdown get a full touch target; the "···" overflow keeps 44×44 even though the glyph is small.
Amber exists only in the attention zone and the pending-payment indicator. Today and Upcoming read in a neutral register.
Same slots and same actions on both platforms: what you learn on one transfers to the other with no recalibration.
"Skip" proposes another slot or the waitlist; cancel proposes releasing the slot to the club; the empty state shows the paid credit still to be scheduled.
One object shared across two surfaces is a platform commitment, not only a UI change. Kept deliberately short: enough to show feasibility thinking, not an engineering specification.
Design hypothesis. One card grammar and one attention layer reduce the cost of moving between web and mobile, and cut the steps to the most common actions. This is the bet the whole system rests on.
Technical assumption. The two surfaces likely differ below the UI. Booking data may be modelled or served differently per platform. A normalized booking view model would be needed; its scope and cost are unknown without the engineering team.
Technical proposal. Introduce a normalized booking view model so both surfaces consume the same taxonomy without a full rewrite.
No production analytics were available for this exploration, so these are proposed success metrics, not measured outcomes.
Nothing here was shipped or tested with users. The proposed design is a starting point for validation, not a result.
The following were intentionally not redesigned. Each is real; none of them is a My Bookings decision.
Six moves. One object aligned across two surfaces. The rest is validation I did not have the data to run.