Setup dashboard
Contents
Build spec for Nanz (design taste), Leah (front-end), and eng (deep-links + instrumentation). The channel post (FTUE-First-Chunk-Alignment-2026-06-25) is the why for Jamie + David; this is the what and how to measure. Per-feature research/baselines: FTUE-Calendar-2026-06-18, FTUE-Team-2026-06-18, FTUE-Clients-2026-06-18. Live prototype: setup-welcome.carlosmccoy.xyz (
flows-real.html?page=calendar|team|clients).
We're shipping per-feature first-run experiences in small chunks. Chunk 1 = Calendar, Team, Clients, the three with the clearest single-focus goal and the lowest lift. Each replaces a dead or fake-populated empty state with one modal-on-landing that states the value at the moment of choice and routes to the one real action. AI Scribe + Templates go to discovery first (Chunk 2). The bet: a sharper FTUE lifts first-session activation, and activation is the leading indicator we believe drives trial→paid conversion and retention.
Measurement is a 2-week pre/post read per flow on a clean completion event. Skippable, in-product brand, honest copy only.
Overall goal: more new accounts take the core first-session action on each feature (connect a calendar, invite a teammate, add a real client), in their first session, without us boiling the ocean.
Hypothesis (the bet):
A focused first-run experience on each feature lifts first-session activation. Activation is our leading indicator; we expect that lift to flow through to trial→paid conversion and early retention downstream.
So we optimize and measure activation now. Conversion is the lagging north star we expect to follow, validated on a delay, not the launch gate. If activation rises and conversion later does not, that's a signal the activation→conversion link is weaker than assumed and we re-examine (it does not retroactively fail the activation work).
Shared problem: today's first run is a set of dead or fake empty states. A new account lands on each feature page with no prompt, no stated value, and either a blank slate or fake demo data it has to clean up. The one real action (OAuth, invite, add a client) is buried behind a settings gear, a "+ New" button, or an Import control in a corner. The value ("nothing double-books," "your team can share clients," "your clients are private") is never stated at the moment of choice. Result: low first-session activation across all three.
Per-feature:
| Flow | The specific problem | wk1 baseline (real action) |
|---|---|---|
| Calendar | Empty grid, no prompt; connect is buried behind the Settings gear; double-booking value never stated. | ~11.6% step (noisy); deliberate connect ~0.5% |
| Team | Fake demo member "Wendy Smith" sits in front of the real action; invite is email-only and buried; no first-run nudge. | 5.4% (create staff, diluted by solo accounts) |
| Clients | Import/add is a corner button; no value framing; switchers (who need migration most) import least. | 21.5% real / 14.3% step |
Baselines: PostHog Production 10924, core-market completer cohort (fired track onboarding completion, countryCode IN US/CA/GB/AU/NZ, completed 30 to 100 days ago, test users excluded, n=4,572), verified 2026-06-18.
Goals
Non-goals (explicitly out of this chunk)
Primary = three per-flow real-action rates (each on its right denominator), measured wk1:
| Flow | Tick on (verified event) | Denominator | wk1 baseline | Target |
|---|---|---|---|---|
| Calendar connect | calendar_oauth_connected (new clean event), not the noisy syncCalendar step |
all new accounts | ~11.6% step / ~0.5% deliberate | ~16% (directional, confirm) |
| Team invite | create staff (or a new invite-sent event for the link path), not the skip-inflated inviteTeam step |
team accounts only | 5.4% on full cohort (diluted) | ~8% (set in the room) |
| Client added | create client OR import client data |
all new accounts | 21.5% real / 14.3% step | ~27% (directional, confirm) |
Targets: Team's ~8% was set in the meeting. Calendar (~16%) and Clients (~27%) are directional, carried from June planning; confirm with Jamie before we hold ourselves to them. On a pre/post read (§5.3) the honest framing is "beat baseline by a meaningful margin," not a hard threshold.
Chunk roll-up (secondary, directional): % of new core-market accounts that complete ≥1 of the applicable first-session setup actions in wk1. Tells us whether the chunk moved overall first-session activation, not just one flow. Treat as directional; it's a composite and inherits the confounds below.
Downstream (lagging, the bet, read on delay): trial→paid conversion and wk4 retention, activated vs non-activated cohorts. This is the activation→conversion validation. It's correlational and read weeks later; it does not gate launch.
The recurring trap across all three: the event we've been crediting is rarely the real action. Fix before/at launch:
calendar_oauth_connected event that fires only on a returned OAuth grant. Today's syncCalendar tick fires for ~39% of synced people with no connect action, so it's unusable as a real-connect rate. Align the /Settings/Personal/ConnectedApps connector and the /Calendar modal connector so both advance the same item.inviteTeam step (fires on remind-me-later skips, over-counting ~27%: 7.4% vs 5.4%). Tick on create staff. Add an invite-link-sent event so link-first invites tick at copy, not only when the invitee accepts days later (otherwise the magic-link path never credits).importClients step emits only on user-confirmed create client / import client data, never on landing or button-click. Instrument the new paste/import fast-lane as its own funnel step.Read each flow's primary clean event for the 2 weeks before launch vs the 2 weeks after, core-market new-account cohort, test users excluded.
Critical sequencing: a pre/post read is only valid if the same clean event exists in both windows. So instrument the clean events first and let them bake for the pre-window (Phase 0 in §6). Otherwise we'd be comparing the old noisy proxy against a new clean event and the "lift" would be an artifact.
Caveats (state these when reporting):
| Chunk | Flows | Status |
|---|---|---|
| 1 (now) | Calendar, Team, Clients | This spec → Nanz → Leah next week |
| 2 | AI Scribe, Templates | Discovery first (get them right, not rushed). Billing is the lead carry-along candidate; confirm with Jamie/Dylan. |
| Later | Workflows, Branding, Booking | After Chunk 2; Inbox + Insurance deprioritised |
Phase 0: instrument (do first). Land the clean events (§5.2) and let them bake so the pre-window is measured on the clean event. Nothing user-facing.
Phase 1: build and ship. Calendar and Team are quick (low-lift reshapes); Clients last (the full-screen import is the one net-new surface). Ship at 100% rollout, behind nothing fancy.
Phase 2: read and decide. 2-week pre/post per flow (§5.3) → keep / iterate / kill. Downstream conversion + retention read on a longer lag.
Carlos prototypes (done) → aligns with Dylan → channel post tags Jamie + David → Nanz design taste (~2026-06-26) → Leah front-end build next week (off Nanz). Danyl owns the Team invite experience (staging). Align on the why in-channel before design, not as an 11th-hour FYI.
All three share one pattern: modal-on-landing over the real (demo-populated, never-blank) feature page. The modal states the value, offers the action(s), is skippable; on dismiss it leaves a reopen prompt and all actions stay on the page. Modal shows the first 3 landings if the action isn't done. In-product brand tokens (Roboto, 673AB7), one primary purple CTA, honest micro-interactions, no fake spinners.
/Calendar; auto-open the existing connect-accounts modal over a clearly-labelled demo week (grid is never empty); state the value at the moment of choice; one tap to OAuth.Maybe later).calendar_oauth_connected (new), wk1.create staff (email path) + invite-link-sent (link path), wk1, team accounts only, baseline 5.4% → ~8%. Framed as the revenue lever: seats → paid → ARR. Secondary: time-to-first-invite, copy-link vs email split.?invite=1).create client OR import client data, wk1, baseline 21.5% → ~27%. Secondary: migration-call bookings from the switcher branch.?add=1)? Verified migration-call booking URL + CX capacity needed before the CTA ships (see §9).Design
673AB7, lilacs, 6px radius, no strokes, 16px floor). Not the marketing brand (Helvetica Display Now / 5b1db1); this is product UI.Tech
/Calendar, Team, /Clients), not a new route.Scope
| # | Item | Owner | Risk if unresolved |
|---|---|---|---|
| 1 | Team invite experience in staging (magic link + permissions, Danyl EOD 2026-06-24) | Danyl / Carlos confirm | Can't build the Team takeover; blocks the highest revenue-lever flow |
| 2 | Migration-call booking URL + CX capacity (Clients switcher CTA) | Carlos / CX | Ship an invented URL or pull the CTA; don't invent |
| 3 | Per-seat subscription wording (Team inline note) | Julian (billing) | Wrong dollar/behaviour claim at point of invite; keep generic until confirmed |
| 4 | Calendar sync direction: inbound rendering vs outbound-push only is unconfirmed (an eng question for Dylan, not resolved; earlier "resolved/one-way" note was an over-claim from a doc summary) | Dylan / eng | Over-claim the value; mitigated today because copy leads only on "nothing double-books" |
| 5 | Clean instrumentation (calendar_oauth_connected, invite-link-sent, de-noised steps) |
eng | No clean event = no valid pre/post read; the whole measurement fails |
| 6 | Pre/post confound (signup-mix, seasonality, the ~May 23 signup drop) | Carlos (analysis) | Mis-read a mix shift as an FTUE lift; report as directional + watch the completion guardrail |
flows-real.html?page=calendar|team|clients; demo deep-links ?page=clients&state=import|manual|skipped, &prof=therapist|physio|gp|coach|dietitian)