Skip to content

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/migrations applies 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 tsx snippet 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.ts env/Resend audiences API; create audience id in resend.env as RESEND_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: curl against 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.tsx or 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