Add post-subscription onboarding activation - #204
Open
paulocastellano wants to merge 52 commits into
Open
Conversation
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…tests. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Prevent polling analytics noise, short-circuit completed onboarding status, and align subscribe copy across locales. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Tighten welcome persona/goals/referral screens, slim goal options, redesign residual onboarding in the sidebar footer, and merge workspace/user menus into one header dropdown with notifications at the top. Co-authored-by: Cursor <cursoragent@cursor.com>
- Update .env.example to clarify trial days and promotion code settings. - Replace FirstMonthCheckoutDiscount with ConfigureSubscriptionCheckout for better handling of subscription checkouts. - Ensure trial days are validated when card is not required during signup. - Introduce support for promotion codes in the checkout process. - Remove deprecated FirstMonthCheckoutDiscount class and its associated tests. Co-authored-by: Cursor <cursoragent@cursor.com>
Replace polling with Echo broadcasts, keep shared residual reads pure, and DRY welcome/platform/MCP surfaces for a cleaner activation path. Co-authored-by: Cursor <cursoragent@cursor.com>
Fill the English fallback gaps left after the activation i18n prune, including welcome_anonymous and sidebar onboarding labels. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Mirror Changelogfy’s connect/disconnect MCP UI under workspace settings, share settings tabs via a composable, and pin Outros/account links in the sidebar menus. Co-authored-by: Cursor <cursoragent@cursor.com>
Match onboarding/settings card chrome: border-2, shadow-2xs, bold type, and bordered icon tiles. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
AccordionItem’s default border-b was zeroing the bottom edge when combined with card borders. Co-authored-by: Cursor <cursoragent@cursor.com>
Hosted clients use config settings URLs with connect buttons; keep accordion config paste for other MCP apps. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
MCP lives under /settings/workspace, so exclude that path from the Settings active match. Co-authored-by: Cursor <cursoragent@cursor.com>
Drop the redundant connect intro, clarify section blurbs, and align titles with other workspace settings pages. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Treat only OAuth grants as MCP connections, broadcast checklist updates on revoke/delete, stamp completion off-page, and tighten dismiss/disconnect/docs handling. Co-authored-by: Cursor <cursoragent@cursor.com>
Stamp completion with a single Completed event, gate skip to owners, harden disconnect, and generate mcpUrl via route('mcp.trypost').
Co-authored-by: Cursor <cursoragent@cursor.com>
Harden residual to owners with hasAppAccess, expire MCP grants, atomically stamp completion, and cut disconnect/Echo noise. Co-authored-by: Cursor <cursoragent@cursor.com>
Avoid fanning out syncProgress across every account user on MCP token exchange, stamp completion when another workspace is already ready, and fix frontend type/lint nits from review. Co-authored-by: Cursor <cursoragent@cursor.com>
Backfill onboarding dismissal via hasAppAccess so past_due/grace accounts are covered, owner-gate welcome checkout and completion stamping, keep dismiss terminal, stamp account completion from workspace sync even when the actor's persisted current workspace differs, restore a poll fallback beside Echo, and filter legacy goals that would soft-lock welcome submit. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
Limit Checkout trials to first-time card-required signups, add a welcome logout escape for unpaid members, poll the residual banner when Echo is down, and stamp account completion from sync/residual when another workspace already finished activation. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
Run observer sync/analytics afterCommit, keep shared residual read-only, align Welcome with hasAppAccess, require app access to start social OAuth, throttle welcome checkout, allow teammates to complete activation, and stop the onboarding poll once the checklist is done. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
Generic-trial accounts could complete MCP OAuth during onboarding and then receive 402 on every API/MCP call because the token middleware still required subscribed(). Match EnsureAccountReady so checklist step 1 is usable. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
Add broadcastForAccount so teammate completion and owner skip refresh every workspace channel without waiting on the residual poll, and clarify the residual Echo terminal-state comment. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
Broadcast from markCompleted so auto-complete clears banners account-wide, fan out workspace Echo to siblings while activation is open, and stop the onboarding poll (redirecting on remote dismiss) once status is terminal. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
Redirect dismissed revisits server-side before Viewed analytics, refuse dismiss after completion, skip client calendar visits during local Skip, and cover afterCommit rollback so sync never outlives a failed transaction. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
Full visits after completion leave before Viewed analytics while Echo partials still show celebration; complete() stamps via tryMarkAccountComplete when another workspace is ready; residual counts social/posts account-wide. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
Full revisits still redirect to calendar, but markCompleted flashes onboarding_just_completed so the post-OAuth router.reload can render the checklist celebration without re-firing Viewed. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
Only pull onboarding_just_completed on full visits, and reload onboarding OAuth success as a partial so checklist celebration survives the race. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
Limit qualifiesForCheckoutTrial to the default Cashier subscription type, refresh the workspace gate docblock, and resolve checklist/residual steps account-wide so multi-workspace progress stays consistent. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
Account-scoped checklist steps already stamp via all_complete/syncProgress, so the ready-workspace fallback is gone. Add an incomplete_expired Checkout trial case to match the qualifiesForCheckoutTrial allow-list. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
Keep both onboardingResidual share props and main's contentTypeMediaRules shareOnce / ContentType frontend types after conflict resolution. Co-authored-by: Paulo Castellano <hello@paulocastellano.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
/welcome/{persona|goals|referral-source|subscribe}) and removes the social-connect gate before checkout./onboarding(connect MCP → connect social → create first post, draft OK), with skip + residual banner in the app shell./billing/processingto/onboardinginstead of/accounts, with PostHog welcome/onboarding events and account timestamps for completion/dismissal.Test plan
/welcome/persona→ goals → referral → subscribe (no social required) → Stripe checkout/onboardingonboarding_completed_at/onboarding/goals,/onboarding/referral-source,/onboarding/connectredirect to welcome equivalentsphp artisan test --compact tests/Feature/Welcome tests/Feature/Onboarding tests/Feature/Actions/OnboardingMade with Cursor