Sanghyun Lee
← Back to work

Rebuilding Uplimit's event & live-meeting flow to design out a year of recurring bugs

Live Event Setup

Reframed a “patch the UI” mandate into a focused rebuild of Uplimit's event & live-meeting setup — 10 shipped engineering tickets that structurally design out ~50 recurring calendar bugs.

Role
Lead Product Designer (sole designer)
Contribution
Strategy · Interaction · Visual · Eng collaboration
Platform
Enterprise SaaS · Admin tooling
Year
2026

~50

Calendar bugs/yr structurally targeted

10

Eng tickets — all shipped

6+

Enterprise accounts affected

3

Meeting types, one inline flow

You can get over the hump and ‘get it’ — but jumping in cold is genuinely hard.
Senior stakeholder, in a design review

The situation

Uplimit's admin tooling for running cohort programs had grown feature by feature, and the seams showed: 77 calendar/event tickets in a year, 50 of them bugs (about one a week) across six enterprise accounts. Leadership reframed it from a bug backlog into a usability and reliability problem.

The problems, concretely

Four failures recurred: critical settings buried under “advanced settings”; confusion over which meeting link learners actually get; type-switching that left dead URLs behind; and cluttered setup that quietly let empty required fields through.

Decision 1 — Rebuild the flow, don't patch it

The mandate was to patch, not rebuild. Mapping the flow against the failures showed patching would cost about the same while leaving the model just as confusing — so I made the effort-vs-outcome case, got alignment to rebuild, and de-risked it with peer review first.

Before

After

The event-setup UI, before and after the rebuild.

Decision 2 — Meet admins inline, on the calendar

I replaced the disconnected center-screen modal with an inline popover anchored to the day you click — the Google Calendar mental model — with explicit positioning so it opens predictably rather than jumpy.

Positioning logic — the popover picks a side so it always opens fully on-screen, wherever you click.

Before

After

A packed day — before, events overflowed and got buried; now the day expands inline so every one stays reachable.

Decision 3 — Progressive disclosure by meeting type

I dropped “advanced settings” for three tabs — Virtual live session, In-person, Reminder — surfacing only the settings each type needs, with sensible defaults and plain-language descriptions.

Picking a type reveals only the settings it needs — no more buried “advanced settings.”

Decision 4 — Make the link unambiguous

The meeting-type selector (Uplimit Stream / Zoom / External) shows the platform and actual URL upfront, and switching type now clears the old URL — killing the stale-link bug at its source.

The meeting-type selector surfaces the platform and real URL; switching type clears the stale one.

Decision 5 — Surface notifications, close the loop

Invitations moved out of hidden settings into a visible control with a template editor and test-send, plus color-coded published states and an invite-status view after creation.

Result & impact

The design decomposed into 10 independently buildable tickets — all shipped with two QA passes and now in controlled rollout, including front-end PRs I shipped myself. It structurally designs out the ~50 prior-year calendar bugs; since it's a controlled rollout, I'm tracking completion rate, inline-flow adoption, and tickets vs. baseline as leading indicators.

What I'd carry forward

Push back on a constraint in service of its intent — “just patch it” existed to protect eng effort, and showing a rebuild cost the same is what bought the better outcome. And much of “good UX” on a fragile system is error-prevention, not visual polish: clearing the URL on type-switch did more for reliability than any layout change.