Skip to main content

SPEC 020 — Onboarding and Welcome

FieldValue
StatusDRAFT
PriorityP0 — Launch-Critical
Backendequa-server/modules/referral/ (company info), equa-server/modules/agent/ (AI-powered onboarding)
Frontendequa-web/src/modules/welcome/, equa-web/src/shared/components/onboard-checklist/

1. Feature Purpose

The onboarding flow guides new users from registration through profile completion, PIN setup, and organization creation. It operates on two tracks: a traditional flow (welcome page → profile form → PIN → all-set) and an AI-powered flow (pre-registration prompt → Equanaut analysis → organization build → first-login showcase). The onboarding checklist persists post-onboarding as a guide within organization dashboards, tracking setup completion across org details, members, cap table, securities, documents, billing, and more.

2. Current State (Verified)

2.1 Welcome Page

DetailValue
Fileequa-web/src/modules/welcome/pages/welcome-page.tsx
ComponentWelcomePage
ContentWelcome banner image, three feature panels (Control & Empower Agreements, Safeguard Your Entity, Protect & Manage Ownership)
Actions”BUILD YOUR PROFILE” button → buildProfilePath, “SKIP” link → portfolioPath
ThemeSets Themes.EQUA on mount via AppContext.dispatch

2.2 Build Profile Page

DetailValue
Fileequa-web/src/modules/welcome/pages/build-profile-page.tsx
ComponentBuildProfile
FormReuses ProfileForm from profile module
Data loaderloadProfile()
Initial valuesPre-populated from existing profile (firstName, lastName, photo, email, phone, DOB, address, links, website)
File uploadpostFile(httpClient)('profile/{userId}/file', files)
On submitCalls updateUserProfile(), then creates addresses via createAddress(), then navigates to profilePINPath
SkipNavigates directly to profilePINPath
StateRedux state.user for user context

2.3 Add PIN Page

DetailValue
Fileequa-web/src/modules/welcome/pages/add-pin-page.tsx
ComponentAddPinPage
FormReuses AccountSettingsForm from profile module
On submitCalls editAccount(httpClient)({ user: user.id }, { pin }), navigates to allSetPath on success
SkipNavigates directly to allSetPath
Edit modeDetects if path contains /edit/ to differentiate first-time vs. edit

2.4 All Set Page

DetailValue
Fileequa-web/src/modules/welcome/pages/all-set-page.tsx
ComponentAllSetPage
ContentCheckmark illustration, “You’re All Set!” heading, description text
Actions”VIEW YOUR PORTFOLIO” → portfolioPath, “ONBOARD NEW ORGANIZATION” → organizationListPath

2.5 User Dashboard Redirect Logic

DetailValue
Fileequa-web/src/modules/user-dashboard/dashboard.tsx
BehaviorOn login: 0 orgs → welcomePath; 1 org → that org’s page; 2+ orgs → org list

2.6 Onboarding Checklist

DetailValue
Fileequa-web/src/shared/components/onboard-checklist/onboard-checklist.tsx
ComponentOnboardChecklistComponent
State managementRedux checklistReducer with CHECKLIST_EXPANDED / CHECKLIST_COLLAPSED actions
Data sourcegetUserState() + getTasks() API calls
Permission checkloadChecklistPermissions(user) loads permissions before rendering
Task trackingTracks completion of: org details, members, cap table, securities, legends, convertibles, plans, roles, billing
Paths coveredorganizationDetailsPath, organizationMembersPath, captablePath, organizationSecuritiesPath, organizationLegendsPath, convertibleInstrumentsPath, plansPath, rolesPath, selectYourPlanPath
UI featuresExpandable/collapsible, rocket icon progress indicator, help link, completion checkmarks

2.7 Checklist Reducer

DetailValue
Fileequa-web/src/logic/reducers/checklist-reducer.ts
Default state{ expanded: true }
ActionsCHECKLIST_EXPANDED{ expanded: true }, CHECKLIST_COLLAPSED{ expanded: false }

2.8 AI-Powered Onboarding (via Equanaut)

DetailValue
Backendequa-server/modules/agent/src/onboarding/
Frontendequa-web/src/modules/equanaut/components/OnboardingFlow.tsx
Status flowpending_signuppending_setupsetting_upreadyfirst_logincompleted
Pre-registrationUser provides email + free-text company description → creates onboarding context
Post-registrationOnboarding context linked to user → AI analyzes description → builds organization
First login/agent/onboarding/first-login checks for pending context, returns welcome message and setup result
ShowcasePresents extracted data (org info, members, equity, documents) with confidence scores and inline corrections
ClarificationAI generates questions for ambiguous inputs; user answers to refine the analysis

2.9 Company Info Collection (Waitlist Phase)

DetailValue
Backendequa-server/modules/referral/src/referral.tsaddUserCompanyInfo()
FieldsCompany name, email, phone, organization type (public/private), schedule tool (zoom/skype/meet), number of security holders
RewardGenerates a scratch card reward (RewardType.organizationInfo) on first submission
NotificationSends company info to info@equastart.io
UpsertUpdates existing record if user already submitted company info

3. Data Model

CompaniesInfo

ColumnTypeConstraints
iduuidPK
emailcitextCompany contact email
nametextCompany name
phoneNumbertext
numberSecurityHoldernumberExpected member/holder count
organizationTypeOrganizationTypeEnum: public (1), private (2), private (3)
scheduleToolToolTypeEnum: zoom (1), skype (2), meet (3)
useruuidFK to Users, UNIQUE

RegistrationMetadata

ColumnTypeConstraints
useruuidPK, FK to Users
valuejsonbArbitrary registration metadata blob

UserStates (for checklist tracking)

ColumnTypeConstraints
useruuidPK, FK to Users
datajsonbContains checklist completion state

ChecklistState (Redux)

FieldTypeDefault
expandedbooleantrue

OnboardingContext (AI flow, in-memory/persistence TBD)

FieldTypeDescription
idstringUUID
userIduuid?Linked post-registration
emailstringUser’s email
initialPromptstringFree-text company description
statusOnboardingStatusStatus enum (see section 2.8)
setupResultOnboardingSetupResult?Build output
analysisResultOnboardingAnalysisResult?AI extraction results
clarifyingQuestionsClarifyingQuestion[]?Questions for ambiguous data
expiresAtDateContext expiry

4. API Endpoints

Traditional Onboarding

MethodPathAuthDescription
PUT/api/v1/profile/:idSessionUpdate profile during build-profile step
POST/api/v1/profile/:id/fileSessionUpload profile image
POST/api/v1/address/:entitySessionCreate address during profile build
PUT/api/v1/account/:userSessionSet 4-digit PIN
GET/api/v1/user-state/:userSessionGet checklist progress state
PUT/api/v1/user-state/:userSessionUpdate checklist progress state
GET/api/v1/tasks/:organizationSessionGet task completion status for checklist

Company Info (Waitlist)

MethodPathAuthDescription
POST/api/v1/referral/company-infoSessionSubmit company information

AI-Powered Onboarding

MethodPathAuthDescription
POST/api/v1/agent/onboarding/createPublicCreate onboarding context with email + description
GET/api/v1/agent/onboarding/:idPublicGet onboarding context status
POST/api/v1/agent/onboarding/linkSessionLink user to existing onboarding context
POST/api/v1/agent/onboarding/setupSessionTrigger AI organization build
POST/api/v1/agent/onboarding/analyzeSessionTrigger AI analysis of submitted data
GET/api/v1/agent/onboarding/first-loginSessionCheck for pending onboarding on first login
POST/api/v1/agent/onboarding/completeSessionMark onboarding as done
GET/api/v1/agent/onboarding/questions/:idPublicGet clarifying questions
POST/api/v1/agent/onboarding/clarifySessionSubmit clarification answer
GET/api/v1/agent/onboarding/showcase/:idPublicGet showcase data for review
POST/api/v1/agent/onboarding/correctSessionSubmit correction to extracted data
POST/api/v1/agent/onboarding/buildSessionBuild organization from analysis

5. Frontend Components

Module: equa-web/src/modules/welcome/

ComponentFilePurpose
WelcomePagepages/welcome-page.tsxLanding page with feature panels and “Build Profile” CTA
BuildProfilepages/build-profile-page.tsxProfile form with photo upload, fields, address, links
AddPinPagepages/add-pin-page.tsx4-digit PIN setup with confirmation
AllSetPagepages/all-set-page.tsxCompletion page with “View Portfolio” and “Onboard New Org”

Shared: equa-web/src/shared/components/onboard-checklist/

ComponentFilePurpose
OnboardChecklistComponentonboard-checklist.tsxPersistent checklist widget on org dashboard

Reused from Profile Module

ComponentSourcePurpose
ProfileFormmodules/profile/components/profile-form.tsxName, image, phone, DOB, links, website fields
AccountSettingsFormmodules/profile/components/account-settings-form.tsx4-digit PIN form

AI Onboarding (from Equanaut Module)

ComponentFilePurpose
OnboardingFlowmodules/equanaut/components/OnboardingFlow.tsxAI-guided org setup
MVPShowcasemodules/equanaut/components/MVPShowcase.tsxReview extracted org data
ClarifyingQuestionsFlowmodules/equanaut/components/ClarifyingQuestionsFlow.tsxQ&A for ambiguous inputs

Redux

ReducerFilePurpose
checklistReducerlogic/reducers/checklist-reducer.tsExpand/collapse state for onboarding checklist

6. Business Rules

  1. Welcome redirect: Users with zero organizations are redirected to the welcome page on login. Users with one org go directly to that org. Users with multiple orgs see the org list.
  2. Profile form is skippable: Users can skip profile building and PIN setup to reach the “All Set” page.
  3. PIN is optional: The PIN setup step can be skipped. PIN is used for document signing, not authentication.
  4. Profile image types: Only PNG, JPG, JPEG accepted. Square images recommended.
  5. Address creation: During profile build, addresses are created via separate API calls after the profile update succeeds.
  6. Company info reward: First-time company info submission generates one scratch card reward. Subsequent submissions update the record without generating additional rewards.
  7. Theme setting: Welcome page sets Themes.EQUA on mount, ensuring consistent branding during onboarding.
  8. Checklist tracks completion across 9+ setup tasks: org details, members, cap table, securities, legends, convertibles, plans, roles, billing/subscription.
  9. Checklist is permission-aware: Tasks only appear if the user has the relevant permissions (e.g., cap table tasks require viewCapTable).
  10. AI onboarding is optional: Users can follow the traditional flow without engaging the Equanaut pipeline.
  11. AI onboarding pre-registration: Onboarding context can be created before the user has an account, then linked after signup.
  12. Onboarding context expiry: AI onboarding contexts expire after a set period if not completed.
  13. Showcase corrections: Users can edit AI-extracted data before the organization is finalized.
  14. First login detection: The system checks for a pending AI onboarding context on first login and presents the welcome message and setup results if found.

7. Acceptance Criteria

  • New user with 0 orgs is redirected to the welcome page
  • Welcome page displays three feature panels and “Build Profile” / “Skip” actions
  • Build Profile form pre-populates from existing profile data
  • Profile photo upload works with PNG/JPG/JPEG
  • Submitting profile navigates to PIN setup page
  • PIN validation requires exactly 4 numeric digits with matching confirmation
  • Skipping profile or PIN navigates correctly to the next step
  • “All Set” page offers “View Portfolio” and “Onboard New Organization” actions
  • Onboarding checklist appears on organization dashboard
  • Checklist items reflect actual completion status from API
  • Checklist expand/collapse state persists via Redux
  • Checklist only shows tasks the user has permission to complete
  • Company info form collects all required fields and generates a scratch card reward
  • AI onboarding: user can create context pre-registration with email + description
  • AI onboarding: context links to user after signup
  • AI onboarding: analysis extracts entities, equity, and security types
  • AI onboarding: clarifying questions appear when confidence is low
  • AI onboarding: showcase displays extracted data with inline editing
  • AI onboarding: first login detects pending context and shows welcome message

8. Risks

RiskImpactMitigation
Two parallel onboarding tracks (traditional + AI) with no unified stateConfusion about which path the user is onAdd a mode selector or auto-detect based on onboarding context existence
Checklist relies on getUserState() + getTasks() separate API callsExtra latency on org dashboard loadBatch into a single endpoint or cache aggressively
Profile form reuse means changes to profile module affect onboardingRegression risk from unrelated profile changesIntegration tests covering the build-profile flow
AI onboarding context stored in memory (per SPEC 018 risk)Lost on server restartPersist to database before production launch
Company info still references equastart.io emailOutdated brandingUpdate to current domain
organizationType enum has two values mapping to “private” (2 and 3)Ambiguous dataClarify enum or consolidate values
Skip buttons allow users to complete onboarding with empty profile and no PINUsers may miss critical setupShow a reminder on the checklist; track skip rate to assess impact
Checklist module counter (let count = 0) is module-scopedPotential stale state across rendersRefactor to React state or ref