← Back to feature backlog

πŸš€ First Login Flow β€” Stripe β†’ Password β†’ Wizard

From the moment a realtor's card clears to "I see my first content live." Direct routing, no email-and-wait, no double-email confusion. The deferred-cancellable email pattern keeps the safety net without the chaos. The wizard + bottom-right onboarding video give them their first 5 minutes of value without a popup hijack.

Wave 2 Β· πŸ”΄ Now First-touch experience F-040 Β· F-041 Β· F-042 Β· F-043 Β· F-044 Β· F-046
The goal

Make the first 60 seconds after Stripe checkout effortless.

Today: realtor pays, sees a generic Stripe success page, gets an email "create your password" hours later, half forget, half close the email tab, half click but find a confusing portal. Tomorrow: Stripe success β†’ password creation β†’ password set β†’ auto-login β†’ wizard greets them β†’ onboarding video peeks from the corner. Sub-60 seconds. Email backup fires only if they bail.

βˆ’bounce
Realtors who don't make it past Stripe today are the highest-churn segment. Direct routing catches them.
βˆ’double-email confusion
Welcome email fires only if they DIDN'T set password in-portal. Pattern beats one-or-the-other choice.
+ Day-1 actions
Wizard nudges Brand Profile + first project + social connect β€” feeding F-044 adoption flow.
+ retention
Strongest lever in onboarding research: get them to value within 5 minutes of paying.
The flow Β· 4 stages

Stripe β†’ Password β†’ Welcome β†’ Wizard

1

πŸ’³ Stripe checkout

success_url redirects with one-time signed token

2

πŸ” /create-password

60-sec password set, name fields pre-filled from Stripe

3

✨ Auto-login

Direct to /dashboard?welcome=true Β· no second login screen

4

🧭 Wizard + Video

Wizard overlay greets them Β· video widget bottom-right

Stage 2 Β· Password creation page

The branded landing β€” feels like the start, not paperwork

app.socialrealtr.com/create-password?token=8f3a-x7q2
SOCIAL REALTR

Welcome, Sarah πŸ‘‹

One more step. Set your password and you're in. We're already pre-loading your first week of content while you do this.

Token expires in 7 days. Need help? Email support
Stripe success_url points here directly. No "check your email" intermediate page. The token in the URL is a signed JWT β€” short-lived, one-time use.
Email field disabled, pre-filled from Stripe Checkout. Realtor doesn't have to remember which email they used. Reduces friction by 1 field.
Branded as "Welcome" not "Set up account." Frame matters. They just paid; they should feel like they've started, not like they're filling out paperwork.
"We're pre-loading your content." Sets expectation that something is already happening on our side. Reduces "did this even work?" anxiety.
Stage 4 Β· First dashboard load

Wizard overlay + bottom-right video widget

Welcome=true on the URL triggers both. The wizard sits center-top β€” non-trapping, the user can click around if they want. The video widget is corner-pinned, pulsing softly to draw the eye but never blocking content. Both can be dismissed; both persist their state across sessions.

app.socialrealtr.com/dashboard?welcome=true
Welcome back, Sarah

Posts this week

0

Pending Approval

0

Followers

β€”

πŸ‘‹ You're in! Let's get you set up.

4 quick steps. Skip what you don't want β€” you can always come back.

βœ“

Account created

You're in! Welcome to Social Realtr.

β—·

Complete your Brand Profile (3 min)

Niches, voice, headshots, pillars. Powers everything we make for you.

✏

Submit your first project

Listing? Open house? Send it β€” we deliver in 24 hrs.

πŸ”—

Connect your socials

FB, IG, LinkedIn, TikTok, YouTube. One click each.

⏱ ~5 min total Skip for now
β–Ά
πŸ“Ί Trent Β· 2 min
Welcome to Social Realtr
1
2
3
4
1Wizard greets by name. Pulled from Brand Profile / Stripe. Personal touch. Sets warm tone instead of "Welcome new user."
2Step 1 already done. Auto-checked because the user just got here β€” gives an immediate "I'm making progress" feeling. Crucial onboarding psychology.
3Skippable per step. "Later" on each step. Wizard stays accessible from a "Resume setup" pill in the top bar until completed. Persists across sessions.
4Video widget bottom-right (F-043). Subtle red pulse to draw the eye on first load. Click to expand inline. Auto-collapses if user starts engaging with the wizard. Loom / Stripe pattern β€” non-blocking by design.
The deferred email cancellation pattern Β· F-046

Backup email that fires only if they don't finish in-portal

Industry-standard pattern (Notion, Linear, Stripe Atlas use this exact flow). Email is queued for delivery 5–10 minutes after Stripe success β€” not sent immediately. If the user sets their password in the portal within that window, the email gets cancelled before delivery. If they bail, the email fires with the same token. Solves your double-email problem at the system level.

βœ… Path A Β· User completes in-portal

πŸ“§ Path B Β· User closed the window

THE KEY RULE
Email queue must be cancellable AND must double-check user state at fire time. Belt + suspenders. Either is single-point-of-failure on its own. Together they're bulletproof.
Edge cases & safety nets

What happens when…

Token expires (7 days). Show "this link expired" page with a "send me a new link" button. Manual recovery; rare.
User sets password in portal but loses internet before the page redirects. Auto-login is server-side; next page load picks up the session. Email cancellation already happened.
User pays with one email, sets password with a different email. Disable the email field on the password page (pre-filled from Stripe). They can change it later in My Account.
SMS backup option. If they provided a phone in Stripe Checkout, send the backup as SMS too. Same cancel-on-password-set rule. Phone numbers convert higher than emails for realtors.
Refund inside 5-min window. Stripe webhook fires charge.refunded β†’ cancel any pending welcome email + deactivate the token. Don't onboard people who got their money back.
Multiple emails per user. Realtor signs up twice (different cards). Old token invalidated, new one issued. Old pending email cancelled. Stripe customer record reused.
βœ… DECISIONS LOCKED IN

Trent confirmed β€” Otto, build to these specs

TOKEN LIFETIME
7 days
SaaS sweet spot. Can be revisited if data shows otherwise.
WELCOME EMAIL DELAY
8 minutes
Long enough fast finishers never see the email; short enough bailed users still get nudged.
SMS BACKUP
βœ“ YES β€” when phone provided in Stripe
Realtors check SMS faster. Same cancel-on-password-set rule. Phone numbers convert higher.
WIZARD STEPS (4 OF 4)
βœ“ Confirmed: Brand Profile Β· First project Β· Connect socials Β· Watch tour
Same milestones as F-044's 7-day adoption flow. One source of truth.
ONBOARDING VIDEO HOST
βœ“ Trent (founder)
Founder face on day one builds trust. Bottom-right widget, expandable, ~2 min.
WIZARD PERSISTENCE
βœ“ Persistent until ALL 4 done β€” even if completed outside the wizard
Pill stays in top bar until every milestone is hit, regardless of how. Wizard auto-detects completion (e.g. if user fills Brand Profile from the side nav, that step shows βœ“ in the wizard automatically). NEVER graduates to "you missed this" β€” stays inviting until done. Otto: detect completion from the underlying data, not from a wizard-only flag.

Implementation note for Otto: the wizard's 4-step state should read from the SAME data source as F-044's 7-day adoption flow. user.brand_profile_complete Β· user.first_project_submitted Β· user.has_connected_social Β· user.tour_watched β€” single source of truth. Wizard reads, doesn't write. When any of those flips true (regardless of HOW it flipped true), the wizard step shows βœ“.