Case study · Draft 02 2026

A third path between engage and dismiss.

End users get a new minimize action on Tours, Modals, and Microsurveys. A small pill stashes the Experience at the bottom of the screen until they're ready.

Role
Product Lead — owned spec, design partnership, rollout
Team
Val (Design), Felipe (EM), Kristin / Nary / Olivia / Raphael (Eng)
Status
V1 in build · 2026

The user controls when, not just whether.

Today, an end user has two options when a Tour, Modal, or Microsurvey opens: complete it or dismiss it. Dismiss is a one-way door. We lose the engagement and the user loses the thing they might have actually wanted — they just didn't want it now.

Minimize is the third path. Pause it, get back to work, come back to it on your own terms. It only works if the paused state feels like the user's own pinned content, not a corner bubble nagging from the runtime.

APrinciple. Minimize is not a dismiss; it's a pause. The user controls when, not just whether.
BWhy a pill rail. A corner bubble reads as a help widget or a Launcher. A pill rail along the bottom feels like the user's own pinned content.
CScope. V1 ships for Announcement Tours, Announcement Modals, and Microsurveys. Anchored Tours and mobile come later.

One pill, anchored bottom-right.

When the user minimizes, the Experience hides and a 320-pixel pill appears at the bottom of the viewport. Icon left (from Chameleon's per-type defaults), title right (truncated generously — most titles fit at rest). Background is the Theme primary accent; everything else inherits.

In-product announcement with minimize control
Chameleon announcement modal showing dismiss (X) and minimize (—) controls in the top-right corner
Minimized pill rail showing the stashed Experience title at the bottom of the screen
AFixed 320 px width. Same for every pill regardless of title length. Sized to fit four across on a 1280-wide viewport with margin to spare.
BIcon source is the Experience type, not a generic icon picker. Tour gets a star, Microsurvey a question mark, Modal a megaphone — these are Chameleon's existing per-type defaults.

Hover grows the pill taller — never wider.

Hovering anywhere on the pill expands it in place to reveal the full title (up to two lines), the Experience type label, and a progress bar with step/question count. Width stays fixed so the pill rail doesn't shift around. A tooltip above the pill reads "Click to resume experience."

ANo inline dismiss. Removing dismiss from the hover state is intentional — to dismiss a minimized Experience, the user resumes it and then dismisses from the Experience itself.
BOther pills don't shift. Expansion only changes height, so an active hover on a stack of three doesn't push neighbors around. Important for cursor stability.

Click resumes — the pill disappears in the same place it came from.

Clicking the pill re-shows the Experience in its original position, preserves progress (Microsurvey question 2 of 4 returns at question 2), and removes the pill from the rail. The animation matches the minimize transition in reverse — the pill is the same object as the Experience, paused, not a separate UI.

Off by default. On by Experience type.

Admins opt in per Experience. New Experiences inherit the default for their type (set at the account level). This keeps the rollout safe — no surprise pills appearing on a customer's product on day one — and lets adoption follow conviction, not toggles.

  • Account-level default per Experience type (Tour / Modal / Microsurvey).
  • Per-Experience override on the publish modal.
  • Telemetry from day one: minimize rate, resume rate, time-to-resume, dismiss-after-resume rate. These tell us whether minimize is a pause or a polite dismiss.

The harder questions, saved for V2.

  • Anchored Tours — the spatial model breaks when the target element scrolls offscreen.
  • Mobile — pill rail doesn't survive small viewports without rethinking the bottom region (where Chameleon already plays).
  • Persistence across sessions — V1 minimize state is in-session only. Cross-session needs an explicit conversation about cookie strategy.
  • Stacking limits — if a user has minimized seven Experiences, something else is wrong upstream. We'll watch for it and cap later.

What I learned writing this one.

The spec went through three drafts before the team and I agreed on what minimize meant. The shortest version: "is this a pause or a soft dismiss?" Until that was nailed, every UI conversation was actually a values conversation in disguise. Naming the principle in section 01 — the user controls when, not just whether — collapsed a half-dozen open threads. Worth the time.

I'm leaning into visual specs (rather than long Notion docs) because designers read them and engineers don't get lost. Bullet specs scale badly past a few hundred words; a sectioned, illustrated spec gets better the longer it is.