Corporate events - 2023–2025

GoodTeam

A mobile app for creating and joining internal team events, split into two views: one for the person organizing, one for the person deciding whether to show up.

Role
UX/UI and product design
Platform
Mobile app
Scope
UX research, two-mode UI/UX design system
Year
2023–2025
GoodTeam events feed showing a Beer Festival event card next to its details screen with location, date, joined members and a Join button
The events feed a team member scrolls, and the details screen behind any card in it - location, date, who's already joined, one button to join.

The problem

Every event app turns into a Swiss Army knife

Corporate event apps tend to accumulate functionality - chat, polls, integrations, notifications, calendar sync, attendance tracking - until the core action of creating or joining an event is buried three taps deep. I was asked to build GoodTeam for internal team events, not public ticketing, and given one constraint to defend the whole way through: no feature bloat.

Approach

Finding the two jobs before drawing a screen

The process started by identifying the two jobs the app needed to do exceptionally well - organizing an event and responding to one - and treating everything else as supporting context. I mapped how people already coordinate outside of dedicated apps, things like a lunch, a ride home, a birthday reminder, a game of table tennis, to see where the real friction sat. Only after the navigation structure was prototyped and validated internally did I move on to individual screens.

Early navigation wireframes for GoodTeam next to the shipped version, comparing a flatter tab structure to the final Home, Events, Add Event, Chats and Profile layout
Early navigation wireframes, reworked into the tab structure that shipped: Home, Events, Add Event, Chats, Profile.
A customer journey map tracing five coordination scenarios - dinner, a ride home, a table tennis game, a birthday reminder, a group chat - through thoughts, actions, problems and feelings
The journey map behind that friction search - five everyday coordination moments traced through what people think, do and feel at each step.

Personality

Friendly enough to open without a sigh

The visual language runs on soft shapes, generous spacing and a warm palette, aimed at one specific reaction: opening GoodTeam shouldn't feel like opening corporate software. Every microinteraction confirms what just happened, so a host who published an event or a teammate who tapped RSVP can tell the action actually landed.

Persona and goals board for GoodTeam: a target-user profile named Taras, a list of personality traits, product goals like streamline event creation, and current pain points like manual event planning
The persona and goals board - who the app is for, the traits it needed, and the gaps in existing tools it had to close.

One app, two jobs. Organizing and attending never share a screen.

Two-mode architecture

Organize mode, Attend mode

The app's structure mirrors how people actually use event tools - you're either the person creating something or the person responding to it. Organize mode gives hosts a fast path to set up an event, invite people and track who's answered. Attend mode gives team members a feed of what they've been invited to, with one-tap RSVP and the option to open an event for more detail. Switching between the two is meant to feel like switching contexts in your head, not hunting through a menu.

Scope discipline

Two frameworks, one job: saying no

Before I drew a screen, I ran a SWOT analysis of the GoodTeam concept against existing corporate event tools. The strengths were real - a tightly defined use case of internal events, not public ticketing, and room to compete on simplicity instead of feature count. So were the weaknesses: a crowded market, and no strong reason for a team already living in Slack or Outlook to switch. Every feature proposal after that got tested against one question - does this solve a real internal-event problem, or is it a copy of Eventbrite?

I mapped the Business Model Canvas too, mostly to keep design decisions honest about how the product would work day to day: a narrow customer segment of mid-sized companies with distributed or hybrid teams, and a value proposition built on speed - event creation faster than writing a Slack message, RSVP simpler than replying to an email. The canvas's revenue and cost sides shaped what I deliberately left out: no in-app payments, no premium feature gates, no analytics dashboard beyond what an HR coordinator would actually use.

SWOT board for GoodTeam listing strengths, weaknesses, opportunities and threats around the corporate events market
The SWOT board - strengths, weaknesses, opportunities and threats, mapped against the existing corporate-events landscape.
Business Model Canvas for GoodTeam covering key partners, activities, resources, customer segments, channels, cost structure and revenue streams
The Business Model Canvas - partners, activities, customer segments and the cost and revenue tradeoffs that ruled features out.

Discovery

Finding events without hunting a list

For hybrid teams or companies spread across offices, an interactive map surfaces events geographically - what's happening nearby, filterable by date or category, tappable straight into event details. It's built as a discovery layer, not a primary navigation element, so it stays useful without turning into the app's centerpiece.

Map view in GoodTeam showing nearby events as pins on a map, with the closest event surfaced as a card at the bottom of the screen
The map view - nearby events as pins, with the closest one surfaced as a card one tap from its details.

Creating an event

Essentials first, everything else optional

Event creation guides a host through the essentials - name, date, location, participants - before progressively revealing optional fields like agenda, notes or attachments. The same form covers a two-line lunch invite and a fully-detailed offsite; there's no separate "simple" and "advanced" mode to choose between first.

Onboarding, calendar, events list with today's and this month's events, event details with a Join button, and a category browser with Filter option, all from GoodTeam
Onboarding, the events list, the details screen with a Join button, and the category browser used to filter what's showing.

Organized messenger

A chat thread that knows when to close

Each event gets its own chat thread, scoped to its participants and tied to the event's lifecycle. Conversations stay about the event instead of bleeding into a general team channel, and once the event is over, the thread archives on its own. It's a small mechanic, but it answers the most common complaint about team chat apps - that messages from last week's lunch are still pinging you a month later.

GoodTeam Chats tab split into Events, Personal and Group threads, next to an open event chat thread for Beer Festival with participant messages
The Chats tab, split into Events, Personal and Group, and an open thread for Beer Festival - a conversation that closes when the event does.

Process

From coordination research to a shipped system

  1. Research

    Mapped everyday coordination moments - a dinner, a ride, a birthday - into a journey to find where existing tools actually failed.

  2. Strategize

    Ran a SWOT and a Business Model Canvas to decide, on paper, what GoodTeam would not do.

  3. Design

    Prototyped the navigation first, then built the two-mode architecture and visual language around it.

  4. Ship

    Delivered organize, attend, map discovery and per-event messaging as one connected system.

Design decisions

Three choices that mattered more than polish

2
Modes - organize and attend
<1
Minute to publish a basic event
<1
Minute to RSVP to one

Outcome

Two screens, not twenty

GoodTeam shipped as a UI/UX design system organized around two user intents - organize and attend - with everything else, the map, the messaging, the event details, nested as sub-flows that surface only when relevant. The home screen makes it clear at a glance whether you're creating an event or responding to one, instead of routing both through the same generic list.