Plan: CreatorTrack new-user onboarding wizard with personalized starter apps¶
URL: https://mkdocs.justinsforge.com/memory/plans/creatortrack-onboarding-wizard-2026-07-10/
Date: 2026-07-10 Approved spec: Full-screen onboarding wizard shown once after account creation on app.creatortrack.ai. Seven questions, one per screen, progress bar: (1) motivation for joining, (2) first goal, (3) discovery source, (4) creator type, (5) platforms, (6) audience size, (7) email opt-in. Skip link visible from Q2 onward; skipping never blocks the product and yields the default app set. Final "Your starter setup" screen ranks 3-5 recommended apps from the answers (learn content creation maps to University with an early-access badge; organization/tracking to Tasks/Projects/Calendar; clips to Clips; sponsors to Sales CRM; business/finances to Finances + Business; growth to Content Research + Social) with one-click install. Answers stored one row per user, upsert (rerun-safe). Email opt-in = stored consent flag AND subscribe to a CreatorTrack-updates Resend audience. PostHog events: onboarding_started, onboarding_question_answered (per step), onboarding_skipped, onboarding_completed, onboarding_app_installed. Out of scope: A/B testing question variants; editing answers later from Settings; automated drip/update email sending; Mautic integration.
Task list¶
Task 1: Migration for onboarding responses¶
- Files:
/home/justinwieb/creatortrack/db/migrations/<stamp>_onboarding_responses.sql(worktree-relative) - What:
app.onboarding_responses(user_id PK/unique, answers jsonb, email_opt_in bool, completed_at, skipped_at, created_at), RLS consistent with neighboring per-user tables, idempotent DDL. - Verification:
PGDATABASE=<clone> python3 ~/forge/scripts/forge_workspace_migrate.py --dir db/migrationsapplies clean, twice. - Commit:
feat(onboarding): responses table migration
Task 2: Onboarding domain lib¶
- Files:
/home/justinwieb/creatortrack/lib/onboarding.ts - What: Question catalog (ids, copy, options), answer validation, upsert/read of responses, recommendation engine mapping answers to a ranked app list (app ids from
lib/apps.ts), default set for skippers (tasks, calendar, notes). - Verification: unit-style check via
npx tsxsnippet asserting recommendation outputs for 3 canned answer sets (learner -> university first; tracker -> tasks first; clips -> clips first). - Commit:
feat(onboarding): domain lib + recommendation engine
Task 3: API routes¶
- Files:
/home/justinwieb/creatortrack/app/api/onboarding/route.ts(GET state, POST answers/skip),/home/justinwieb/creatortrack/app/api/onboarding/install/route.ts(POST install chosen apps) - What: Session-authed; POST answers upserts + fires Resend audience subscribe when opted in (via
lib/email.tsenv/Resend audiences API; create audience id inresend.envasRESEND_UPDATES_AUDIENCE_ID, document if absent, fail loud but non-blocking to completion); install route reuses the existing app-install path used by the App Library. - Verification:
curlagainst dev slot: GET returns pending for a fresh dev user, POST completes, second POST upserts without error. - Commit:
feat(onboarding): api routes
Task 4: Wizard UI¶
- Files:
/home/justinwieb/creatortrack/app/(suite)/onboarding/page.tsx(or matching route group),/home/justinwieb/creatortrack/components/onboarding/OnboardingWizard.tsx,components/onboarding/onboarding.css - What: Full-screen 7-step wizard matching app theme (Tailwind/theme.css), progress bar, Skip from Q2, final starter-setup screen with ranked app cards (early-access badge for University) and one-click install, then route into the workspace.
- Verification: Playwright/manual on dev slot: complete flow end to end as a fresh user; skip flow lands in app.
- Commit:
feat(onboarding): wizard UI
Task 5: Post-signup routing¶
- Files: wherever new-session landing decides (e.g.
app/(suite)/layout.tsxor login/signup redirect target), minimal touch - What: New users with no onboarding row and no skip get routed to /onboarding once; existing users unaffected; never traps (direct app URLs still work).
- Verification: fresh dev user redirected once; second login not redirected; existing seeded users untouched.
- Commit:
feat(onboarding): first-login routing
Task 6: PostHog events¶
- Files: wizard component + install route (reuse existing PostHog client integration from admin analytics work)
- What: Fire onboarding_started/question_answered/skipped/completed/app_installed with question id + answer value properties (no free-text PII beyond chosen options).
- Verification: events visible in PostHog live events (or debug log) from a dev-slot run-through.
- Commit:
feat(onboarding): posthog events
Task 7: Typecheck, lint, e2e, merge-ready report¶
- Files: none new
- What:
NODE_OPTIONS=--max-old-space-size=6144 npx tsc --noEmit, eslint on touched files, full dev-slot walkthrough (complete + skip paths), report for merge (migration note: prod deploy does not run migrations). - Verification: all commands exit 0; walkthrough screenshots.
- Commit: (fixups only)
Task 8: Register and document¶
- Files:
/home/justinwieb/forge/memory/general/reference_creatortrack_onboarding.md,/home/justinwieb/forge/MEMORY.md - What: Topic file (flow, table, recommendation map, Resend audience env var, PostHog event names) + index line.
- Verification: file exists with mkdocs URL line; MEMORY.md line added.
- Commit:
docs(memory): creatortrack onboarding reference