An events app that gets out of your way at the door.
How a ticket management brief became a full native mobile app for discovering and attending live events across East Africa, from passwordless sign-up to QR venue entry.
RoleProduct Designer
CompanyHustleSasa
PlatformiOS · Android
My Role
Sole designer. End to end.
I was the only designer on this product. That meant owning everything from initial research through to the final component spec that engineers built from. Specifically:
Product strategy: Identified the scope expansion from ticket management to full attendee experience. Wrote the product brief and defined the feature set.
UX research: Competitive analysis, user interviews, and support-ticket review to understand what attendees actually needed.
Interaction design: All flows, wireframes, and high-fidelity prototypes. Every screen and every state.
Visual design: Color system, typography, component library, and the brand-energy strategy that resolved nightlife personality with checkout calm.
Design system: Built and maintained the component library that engineers referenced directly.
Developer handoff: Annotated specs, edge-case documentation, and state matrices for every flow.
The PM defined priorities and managed stakeholder alignment. The three mobile engineers (iOS, Android, backend) built from my specs. I worked directly with them on implementation questions, particularly around state management and animation timing.
The Problem
It started with ticket management. The opportunity turned out to be bigger.
The original ask was straightforward: build a mobile app where attendees could manage their tickets. Store them, scan QR at the venue, share them with friends. We already had a web marketplace, but no native attendee app at all.
When I looked at that brief, I saw the gap: building an entire app just for ticket management felt incomplete. We had no buyer-side mobile experience. Meanwhile, if you're someone who just arrived somewhere new and you're trying to figure out what's happening this weekend, there's no single place to go. Plenty of platforms manage ticketing, but very few handle event discovery well.
So I expanded the scope: not just ticket management, but a full attendee experience. Discovery, purchase, and ticket lifecycle, all in one native app. The merchant tools (event creation, dashboard) already existed as separate products. This app would be where those events meet the people who attend them.
I presented the expanded scope to the PM and engineering lead with a competitive analysis and rough wireframes. After reviewing the opportunity, the team aligned on pursuing the full attendee app rather than the narrower ticket-only version.
Discovery
What research told me before I designed anything.
Before opening Figma, I spent time understanding how people actually find, buy, and attend events in East Africa. Three inputs shaped the product:
Competitive analysisI looked at Eventbrite, Dice, Ticketmaster, and regional players like mTicket. The pattern was clear: most apps are transaction tools, not discovery tools. They assume you already know what you want. None solved the "what's happening this weekend?" question well, especially for a mobile-first African audience.
User interviewsI spoke to 8 regular event-goers. What came through consistently: people discover events through Instagram Stories and WhatsApp group chats, not search. They buy tickets on their phones, usually within 48 hours of the event. And they almost always buy for more than one person.
Support ticket reviewI reviewed three months of support requests from the existing web marketplace. The top issues: "where is my ticket?", "how do I send my ticket to my friend?", and "the event page doesn't load on my phone." These weren't feature requests. They were signals about what the product was missing entirely.
"The key finding wasn't about features. It was about timing."
Most purchases happen within 48 hours of the event. That meant the app couldn't just list events chronologically; it needed to surface what's happening now and next. That insight directly shaped the date-grouped home screen and the "Today / Tomorrow / This Weekend" filter pattern.
Target Users
Urban, mobile-first, plans socially.
The Spontaneous Planner"What's on tonight?" Date-grouped lists (Today / Tomorrow / This weekend) and quick date filters support the user who decides in the moment.
The Repeat BuyerFirst-time users enter their details once. Returning users get everything pre-filled. That small difference has outsized impact on the people most likely to come back.
The Social AttendeeBuys for the group, shares tickets to friends by name, email, and phone. The product is built around groups, not just solo buyers.
Design Principles
Six principles shaped every screen.
Discovery should be effortlessBrowse by category, location, and date instead of needing to know exactly what you want.
Remove sign-up frictionPasswordless, multi-option auth so the barrier to a first purchase is as low as possible.
Build confidence before purchaseRich detail pages (poster, mapped venue, organizer, clear ticket tiers) before asking for payment.
Fit local behaviorWhatsApp verification codes and mobile-money payments alongside cards.
Own the whole lifecycleNot just the sale, but the ticket: QR entry, a clear used state, and the ability to share tickets with friends.
Feel trustworthyBiometric quick-access, polished brand moments, and careful handling of states and destructive actions.
Exploration
The paths I considered and the ones I rejected.
Before settling on the current product shape, I explored several approaches. Some were dead ends. Others clarified what mattered.
❌ Map-first discoveryI wireframed a version where the home screen was a map showing events near you. It looked compelling but failed for two reasons: most users don't think about events spatially (they think about what kind and when), and map rendering on lower-end Android devices was slow enough to feel broken.
❌ Social feed modelI explored a feed-based discovery (friends are attending, you might like) similar to Dice. But we didn't have the social graph data to power it, and building that would have delayed the product by months. I chose category-and-time browsing because it works without a network effect.
✓ Single-page checkout vs. multi-stepI prototyped both. The single-page version looked cleaner but felt overwhelming on mobile, especially with ticket tiers, contact details, and payment methods visible at once. The three-step approach with a progress indicator reduced cognitive load at the highest-anxiety moment: handing over money.
✓ Bottom tab bar vs. hamburger menuNot a close call: Explore, Tickets, and Account needed to be one tap away at all times. A hamburger would have hidden the core product behind a drawer. Bottom tabs also gave me a place to surface "My Tickets" as a persistent badge count.
Key Flows
Six journeys, one product.
The app spans the full lifecycle of attending an event. Each flow was designed as a complete journey, not isolated pages.
{{ f.caption }}{{ f.counter }}
{{ f.eyebrow }}
{{ f.title }}
{{ a.label }}{{ a.sign }}
{{ a.body }}
Design Decisions
The UX decisions that shaped the product.
Passwordless, multi-option authEmail, phone, Apple, and Google sign-up, verified through a WhatsApp code or email magic link. No passwords. Passwords are a known drop-off point, and in these markets WhatsApp is a near-universal, trusted channel.
Discovery built around category, place, and timeThe Explore home leads with a location selector and category browser, then curated rails. Event-going is inherently about when and where, so the IA is built around those axes rather than a single search box.
A purchase flow that adapts to who you areReturning users see their contact details pre-filled. First-time users fill them in once. This removes repeated data entry for the people most likely to buy again, while keeping the first purchase straightforward.
The ticket is part of the product, not the end of itAfter purchase, My Tickets handles real-world use: a QR code to scan at the venue, the ability to hide/show that code, a clear "this ticket has been used" state, and a flow to share a ticket to a friend's details. Designing the post-purchase life of a ticket is what makes the app feel complete.
Recovery designed into dead endsAn empty search doesn't strand the user: it offers popular-category suggestions and surfaces recent searches, always giving a next step.
Payment integration shaped the checkoutI worked with the backend engineer to understand M-Pesa's confirmation flow and designed the checkout to handle the asynchronous nature of mobile money (where the user confirms on a separate device). That back-and-forth influenced the "waiting for payment" state and the retry pattern.
Visual System
Nightlife energy, checkout calm.
The brand wants to feel like nightlife; checkout needs to feel calm and safe. I resolved this by concentrating brand energy in moments (splash, confirmation, the ticket motif) while keeping transactional screens quiet and legible.
ColorTeal/green for primary actions, lime/chartreuse for brand moments, black for high-commitment buttons. Amber for step indicators. Red reserved for semantic states (Sold out, Close account).
TypographyBold geometric sans for display, clean sans for body, letter-spaced uppercase micro-labels for section headers. A clear three-level hierarchy.
Signature motifA hand-drawn teal ticket illustration recurs at emotional peaks (order confirmation, successful ticket share), giving those moments a consistent, branded payoff.
Core components
Event card + date-grouped list: the workhorse of discovery, reused across every collection and the ticket list.
Category taxonomy: 16 consistent categories from Nightlife to Education to Charity.
Ticket tier cards: Regular, VIP, and Group tiers with quantity steppers, strikethrough pricing, and sold-out states.
Search + filters: location switcher, recent searches, and a filter toggle for refining by category and date.
Full screens
Search resultsBrowse by categoryBuy ticketsSearch
Challenges
The tradeoffs behind the decisions.
One task, two starting pointsBuilding the purchase flow for both first-time and returning users meant deciding what to ask, when, and what to remember. I chose to front-load data collection only for new users and pre-fill everything for returning ones, accepting the extra design surface in exchange for a faster repeat purchase.
Verification friction vs. trustWhatsApp codes and magic links add a step and a dependency on an external channel. I treated that step as worth it: it removes passwords entirely and uses a channel this audience already lives in.
Breadth of states and marketsSupporting multiple countries, currencies, ticket states (available, sold out, used), and payment methods multiplies the number of screens to maintain. The component system and reused list/card patterns were the tradeoff that kept that breadth sustainable.
Working across time zonesThe engineering team and I weren't always online at the same time. I compensated by over-documenting every design decision: annotated specs with edge-case notes, state matrices for every component, and written rationale for each interaction choice. When an engineer had a question at 2am my time, the answer was already on the canvas.
Impact
What the design work produced.
The app is live, with 6,000+ downloads. Alongside the launch, here's what the design work produced:
Scope shaped the roadmapThe expansion from ticket management to full attendee experience was adopted as the product direction. What started as my design recommendation became the company's roadmap for the mobile product.
Complete design spec delivered60+ screens across 6 flows, covering every state (empty, loading, error, success, edge case). Engineers built directly from these specs with minimal back-and-forth.
Reusable component systemThe component library I built is shared across iOS and Android, reducing design drift between platforms and cutting implementation time for new screens.
Stakeholder buy-inThe prototype and competitive analysis convinced leadership to invest in native mobile rather than continuing to iterate on the responsive web version.
Now that the app is live (6,000+ downloads), I'll keep expanding this section as post-launch usage data comes in.
How I measured success
I defined success before there was a metric to measure.
The first win was reframing the brief: turning a narrow "ticket management" ask into a full attendee app, and getting the team behind it. I presented the expanded scope, with a competitive analysis and rough wireframes, to the PM and engineering lead, and they aligned on building the bigger product. The 48-hour research insight (most tickets get bought within two days of an event) became the design's yardstick: surface what's happening now, not a chronological list. The app is live with 6,000+ downloads; deeper usage data is still coming in.
Accessibility
The brand runs loud, but the ticket has to work for whoever's holding it.
I keep the vibrant nightlife energy in moments (splash, confirmation) while the transactional screens stay quiet and high-contrast, with color contrast checked so text holds up over the brand palette. Primary actions sit in thumb reach at accessible touch-target sizes, text scales with the user's system setting through dynamic type, and the ticket and QR-entry screens are labeled for VoiceOver and TalkBack, because a ticket a screen reader can't read is a broken ticket.
Looking Back
What designing this product taught me.
The ticket doesn't end at checkout
Designing QR entry, the used state, and ticket sharing was as important as the sale. It's what makes the product feel trustworthy and complete.
Match the pattern to the place
WhatsApp verification and mobile money aren't generic defaults; they're deliberate fits for this audience. Designing for context beats importing a familiar Western pattern.
States are the product
Empty searches, sold-out and used tickets, disabled buttons, and guarded destructive actions are where a design earns trust. These are the screens that separate a concept from a shippable product.
Spend brand energy in moments
Concentrating personality in launch and confirmation lets the working screens stay calm without the product feeling generic.