Skip to content

B2C Post-Signup Workspace: Chat-first freemium

The post-signup home for b2c_user: the chat workspace, with a persistent quota pill and the freemium limits wired visibly into the chat shell so a returning user always lands on a live surface instead of a blank dashboard. Generated artifacts preview at full fidelity; only the download is gated.

Superseded by student-guided-ux.md: /learn (a Brainly-style intent grid) is now the post-login default for learners, and chat is reached via intents rather than as the front door. The quota-pill and paywall mechanics below still apply to the chat surface, which still exists at /chat.

How it works

/dashboard conditionally renders <AITutorPage variant="b2c" seedTopic={user.signup_topic}> for b2c_user instead of redirecting. No second route change, so bookmarks survive a refresh and the signup-intent seed is passed as a prop consumed once. Other roles get the unchanged <DashboardPage />.

AITutorPage accepts variant?: 'b2b' | 'b2c' (default 'b2b') plus seedTopic / seedMode. B2C chrome (<QuotaPill>, <PaywallModal>, download-lock icons, the library-CTA sidebar tab) renders behind variant === 'b2c' guards; B2B surfaces (PublishModal, class-publish dropdown) render behind variant === 'b2b'. The page-refactor landing (0034b922) already cut AITutorPage to a ~295-line orchestrator, so the variant prop reuses those seams instead of a full <ChatWorkspace> extraction.

Surface behavior:

/dashboard (role === 'b2c_user')
  โ†’ <AITutorPage variant="b2c">
       Persona empty state (from signup_topic/mode, falls back to user_type)
       Mode chips (lock icon if Pro-only for this role)
       Inline artifact cards โ†’ "Download PPTX ๐Ÿ”’" โ†’ <PaywallModal>
       Quota pill in header (colour-coded green/amber/red)
       Right sidebar: [Chats] (recent 10) ยท [Library ๐Ÿ”’] โ†’ upgrade CTA card

Key rules:

  • No B2C screen renders blank: every surface either generates value or makes the upgrade path legible.
  • Full preview, gated export only. Artifacts render at 100% fidelity; only the download/export control is gated. No watermark, no blur.
  • The Library tab is paid-only. Free users see a single upgrade-CTA card (it doesn't 404 or hide the tab); paid users see the artifact grid. Free users still get the [Chats] tab (conversation history is a product necessity, not a library).
  • Payment is link-out-only here: <PaywallModal> links to /pricing. Razorpay checkout is a later phase (see b2c-payments.md).
  • The quota pill and download-lock icons refetch on auth.user.plan change, so an upgrade mid-session re-renders without a reload.

Where it lives

  • apps/web/src/pages/DashboardPage/index.tsx: conditional B2C render.
  • apps/web/src/pages/shared/AITutorPage/: variant prop + B2C guards.
  • apps/web/src/components/b2c/ (or packages/ui/): <QuotaPill>, <PaywallModal>, download-lock wrapper.
  • apps/web/src/i18n/locales/en/b2c.json: all B2C chrome copy.