Feature Log¶
Last updated: May 2026 (revised — LifeSimulatorPage standalone route; Life Design merged to 3 steps; Foundation redesigned with 7 sub-cards + What Drives You motivational quiz; GoalsKanbanTab per-goal weekly focus/reflection (PR51); daily insights i18n via useTranslatedData; Mind & Body 2 steps; financial goals moved to financialPlan.goals; html2canvas-pro v2 PDF fix; Google Fonts display=swap fix; check-ikigai-alignment endpoint; Admin 11 tabs; Register research consent; questionnaire expanded to 47 items; Introvert sub-scale reliability fix; wellness questions rewritten; admin research stats corrected; JourneyProgressStrip 7-stage; full report now free)
Stage 1 — Discovery (Assessment + Report)¶
Assessment (StartHerePage.tsx)¶
- [x] 47-question psychometric questionnaire with reverse-scoring (items 1–40: 5 archetype sub-scales × 8 items; items 41–43: Extrovert axis; items 44–47: Introvert axis)
- [x] Adaptive question ordering via
smartOrderQuestions() - [x] Early-completion signal via
isAssessmentStable() - [x] Primary and secondary archetype identification
- [x] Force type derivation (Flow / Catalyst / Anchor)
- [x] Confidence score + energy orientation (Introvert / Extrovert split)
- [x] Animated step transitions, 5 questions per page
- [x] 6-month retake cooldown — users are locked from retaking for 6 months after first submission
- Lock date and next unlock date shown on a friendly locked screen
- Manual admin override: edit
responses/{uid}.createdAtin MongoDB to 6+ months ago
My Report (MyReportPage.tsx)¶
Free vs paid access: The main report (PART 1+2) — all three layer sections (Layer 1 · Your Archetype, Layer 2 · Your Force, Layer 3 · Secondary Voice) plus Blueprint Decoded, Know Before You Start, and Insight panels — is fully visible to all registered users. The Express Report (
/report/express) — Learning Mode, Growth Gap, Career Enhancement, Leadership Profile, and Force Adaptation sections — is Explorer-only (requiresPaymentgate). PDF export, print, and module summary downloads are Explorer-only. Free users see an upgrade banner at the bottom of the main report linking to/report/express.
- [x] Phase 01 — Core Identity: Archetype radar chart, strength bars, clarity gauge, energy split
- [x] Phase ◈ — Energy Pattern (Force Profile): Core energy, natural strengths, stress response, growth direction
- [x] Phase ◈ — Natural Life Rhythm: Productivity style, best activities, burnout signals, balance strategy
- [x] Phase 02 — Social Signature: Emotional style, communication, team role, team synergy, secondary dynamic
- [x] Phase 03 — Performance Engine: Learning style, work habits, decision strategy, Power Moves
- [x] Phase ◈ — Learning Mode Distribution: Learning profile, stacked bar chart, retention strategy, growth edge
- [x] Phase 04 — Growth Roadmap: Blind spots, stress pattern, growth path
- [x] Phase ◈ — Leadership Readiness Profile: Leadership radar, growth gap chart with baseline marker
- [x] Phase ◈ — Leadership Signature & Evolution Path: Signature label, decision pattern, development focus, evolution by life stage
- [x] Phase 05 — Strategic Direction: Future fields, skills to build, mentor guidance, ideal setting
- [x] Phase 06 — Career Direction & Income Strategy: Financial profile, income style, wealth strategy, financial risk, personalised career context panels
- [x] Phase 07 — Financial Growth Profile: Three smart money habits with archetype-specific rationale
- [x] Phase 08 — Skill Development Path: Education direction, investment priority, key skills grid
- [x] Phase 09 — Future Industry Alignment: High-growth industries, why-it-fits explanation, career alignment signal (0–100 score), emerging AI-era opportunity
- [x] Phase 10 — Life Stage Financial Guidance: Stage insight, financial focus, key action, money rule (calibrated by age)
- [x] Phase 11 — Archetype Economic Future Map: Economic role, automation risk badge, AI-era opportunities, future-proof skills
- [x] Phase 12 — Insight Intelligence: Four personalised insight panels (self, direction, decision, evolution)
- [x] Phase 13 — Committed Future Path: Static summary of the path chosen in Life Design (shown when set)
- [x] PDF export — each section on its own page via
html2canvas-prov2.0.2 +jsPDFv4.2.0 (image-based JPEG, 14 pages) - All responsive Tailwind classes (
md:text-*,lg:text-*) mapped to inline styles before capture overflow: hiddenremoved from all cloned elements before capture to prevent content clipping- Encoding fix applied (April 2026): all U+FFFD replacement characters restored to correct Unicode (— – × ' …)
- html2canvas-pro v2 fix (May 2026):
skipValidation: true+ dimension clamping (Math.min(Math.max(dim, 1), 16383)) prevents Validator throws on zero-width or oversized sections - Font fix (May 2026): Google Fonts URL changed from
display=optionaltodisplay=swapso Inter always loads and renders correctly;Inter-fallback@font-face (size-adjust: 107%) prevents CLS - [x] Print support
- [x] "How to Read This Report" modal — 13-phase guide with tips per section
- [x] Architecture Breakdown section (technical score view)
- [x] Life Design bridge card (context-aware: in-progress vs not-started)
Stage 2a — Know Self (Mind & Body / MindBodyPage.tsx)¶
Navigation group: Your Foundation. Positioned before Life Design.
- [x] 2-step wellness module: Step 1 — Prakriti Quiz (21 questions), Step 2 — Dosha Profile
- [x] (Wellness Goals step removed — goals now live in the Health pillar of Life Design/Life Blueprint)
- [x] Prakriti Assessment — 21 questions rating lifelong tendencies on a 1–5 scale
- [x] Dosha Profile — Vata/Pitta/Kapha percentage split, dominant dosha, constitution type
- [x]
deriveDoshaType()maps raw scores to{ dominant, doshaType }('Pure Vata', 'Vata-Pitta', etc.) - [x] Force–Dosha bridge card: explains connection between Energy Force and body type (Flow=Vata, Catalyst=Pitta, Anchor=Kapha)
- [x] Expanded Dosha Result sections: practice, movement, rhythms, reflection, science, stress blueprint, insights
- [x] Wellness profile saved to MongoDB via API (
wellnessProfileobject field on user doc) - [x]
wellnessProfileobject presence used by Journey Progress Strip and Dashboard NBA
Stage 2b — Design (Design My Life / DesignMyLifePage.tsx)¶
3-step wizard: Foundation → Guided Ikigai → Life Wheel & Blueprint
Navigation group: My Journey. Gate: Discovery + Mind & Body + Money Plan completed + paid plan.
Step 1 — Foundation¶
7 sub-sections (accordion UI, each with readiness state): 1. Self Snapshot — read-only archetype, force, wellness, financial profile recap 2. Life Path — committed path badge (Acceleration/Mastery/Contribution); selection happens in Life Simulator 3. Joy Audit — 3-part card (time disappears, people come to you, free energy) 4. Ideal Day — long-form (min 80 chars) 5. Origin Signal — inner child + productive anger 6. Ambition — career goal + hobbies array 7. Synthesized Identity — "I am…" statement + AI synthesis button (3 calls/day limit)
- [x] What Drives You quiz — 6-option motivational driver (Stability/Variety/Recognition/Connection/Mastery/Impact). Stored at
user.motivationalDriver. Gates the full Foundation step until answered. Drives tone of AI-drafted goals in the Plan Assembly Engine. - [x] Path-drift detection — compares goal + ideal day text against selected path; flags misalignment in amber banner
- [x] Archetypal starters — 6 "I am…" prompts per archetype for the identity textarea
- [x] AI Synthesis —
SynthesizeFoundationCarddrafts identity statement from all 4 filled cards (limited to 3 calls/day)
Step 2 — Guided Ikigai¶
- [x] Four colour-coded quadrant cards: passion (indigo) / profession (rose) / mission (emerald) / vocation (amber)
- [x] Each card has "Ask yourself…" starter questions and archetype suggestion with "↺ Use this as my starting point" button
- [x] Live 6/6 counter (4 Ikigai + Vision + Mission)
- [x]
buildIkigaiStatement()— assembles statement from all four circles - [x] "Draft my Ikigai, Vision + Mission" merged AI button — single click makes two sequential AI calls (
scope=ikigaithenscope=vision-mission). Empty-only fill. Card auto-hides when all 6 are filled. - [x] Per-field tune menu — chevron on any filled field: Regenerate, More Specific, More Ambitious, More Realistic, Shorter
- [x] SourceChip provenance — "Drawn from: …" pill below each AI-drafted field
- [x]
POST /api/ai/check-ikigai-alignment— verifies coherence of all 4 circles + Vision + Mission; returns{ verdict: 'coherent'|'gaps'|'scattered', critique, suggestion? }. Shares the 10/hr draft bucket. - [x] Deterministic helpers (free, no AI): Build Vision from Ikigai, Derive Mission from Vision
Step 3 — Life Wheel & Blueprint¶
Phase 1 — Life Wheel: Score 6 life areas 1–10 + write 12-month area statements (min 30 chars) + optional "why this score" reality field (min 20 chars). All 6 statements required before Blueprint unlocks.
Phase 2 — Life Blueprint (inline per pillar):
- [x] Vision + Mission carried from Step 2 (already filled by the time users reach Blueprint)
- [x] 6 pillar SMART goal cards (Faith, Health, Family, Career, Finances, Growth)
- Health goals sourced from
user.wellnessProfile.goals(read-only bridge from Mind & Body) - Finances goals sourced from
user.financialPlan.goals(read-only bridge from Money Plan) - Faith, Family, Career, Growth — editable goal cards
- [x] 6-dot alignment system per pillar — green/amber/red dots + hover hints: Life Wheel statement overlap, Reality fit, Identity alignment, Vision alignment, Ikigai connection, SMART quality
- [x] "Check alignment with AI" button per pillar — Gemini returns aligned/drift/missing verdict
- [x] "Draft goal" per pillar — uses
scope=one-pillar(PR41, ~85% cheaper than scope=all) - [x] "Draft my Life Blueprint" bulk AI button — one call drafts Vision + Mission + all 6 pillars (goal/anchor/timeBound/whyMatters). Life Path Simulator grounding: server injects year1–5 milestones into prompt.
- [x] SourceChip + FieldAIActions on every AI-drafted field
- [x] Growth Loop linkage hint — green
animate-inbanner after any AI-drafted pillar goal; direct "Open Growth Loop →" link - [x] Max 3 goals per pillar enforced (PR45)
- [x] Capability Gap field at bottom
- [x] Blueprint PDF download (html2canvas → jsPDF landscape A4)
Stage 2c — Choose Path (Life Simulator / LifeSimulatorPage.tsx)¶
Navigation group: Your Foundation. Route: /life-simulator.
- [x] Standalone page for selecting and exploring the 3 life paths (Acceleration / Mastery / Contribution)
- [x] Per-path: 5-year milestone roadmap (Year 1–5 text cards), economic projection, archetype manifesto quote, force-based insights
- [x] Path download (html2canvas → jsPDF landscape A4)
- [x] Selected path feeds into Foundation Step 2 (committed path badge) and into Plan Assembly Engine AI drafting context
- [x] Data source:
CAREER_PATHS_DATA(mirrored fromserver/src/utils/careerPaths.json)
Stage 3 — Do (Daily Growth / DailyGrowthPage.tsx)¶
Navigation group: My Journey. Gate: Discovery + Mind & Body + Money Plan + Life Design completed + paid plan.
Route: /growth-loop — 2 tabs: Today, Goals (Habit Tracker and Reflect tabs removed May 2026)
Today Tab (dashboard)¶
- [x] Streak banner with freeze counter
- [x] Weekly intention read-only summary (focus + 3 actions for current ISO week)
- [x] Weekly challenge card (archetype-tailored, rotates per ISO week, tick to complete)
- [x] Alignment trend chart — last 10 reflections plotted
- [x] Daily Archetype Insight card — archetype-specific tip that rotates by day-of-year; now loaded via
useTranslatedData('dailyInsights')so Malay/Chinese/Tamil users see translated content (May 2026 i18n fix)
Goals Tab (GoalsKanbanTab)¶
- [x] Goal cards per Life Design pillar — title, pillar label, due date (from
pillar.targetDate) - [x] Kanban columns: Not Started / In Progress / Completed
- [x] Task lists per goal card with inline add/remove
- [x] Task due dates (calendar icon on hover) — capped to parent goal’s
targetDatelast-day-of-month - [x] Overdue task badge (red
! dd MMM) for tasks past due date that are not yet completed - [x] Per-goal weekly focus (PR51, May 2026) — each goal card has a "What am I creating this week?" focus block (
{ focus, why, weekKey }). Collapsible; auto-expands for in-progress goals that have no focus set yet. - [x] Per-goal weekly reflection (PR51, May 2026) — each goal card has a 3-question reflection (
q1,q2,q3) + alignment score (0–100 slider) stored atGoalKanbanCard.weeklyReflection. Weekly rhythm badges show "Set Focus" / "Reflect" / "Week Done" per card. - [x] Max 3 goals per pillar enforced (PR45)
- [x] Saves to
profile.growthLoop.goalKanbanviaPUT /api/users/me
Note (May 2026): Habit Tracker and Weekly Reflection tabs were removed. Habit data in existing user docs (
growthLoop.habits,growthLoop.weeklyReflections) is preserved in MongoDB but not currently surfaced in the UI. Per-goal weekly focus and reflection (PR51) replaces the global reflection tab.
Stage 4 — Fund (Money Plan / MoneyPlanPage.tsx)¶
Navigation group: Your Foundation. Positioned before Life Design — Money Plan must be completed before Life Design unlocks.
5-step financial intelligence wizard: Money Personality → Financial Snapshot → Budget Blueprint → Health Score → Financial Future (Goals step removed May 2026, replaced by Financial Future)
- [x] Money Personality auto-generated from archetype
- [x] Financial Snapshot (income, expenses, assets, liabilities, net worth, savings rate)
- [x] Budget Blueprint with archetype-aligned budget rule + category editor
- [x] Financial Health Score (composite: savings rate + debt ratio + emergency fund + investment presence)
- [x] Financial Future — forward-looking projections and action planning; score-aware callouts per pillar
- [x] Financial goals stored at
user.financialPlan.goals(array ofFinancialGoalobjects) — not inlifeDesign.pillars. These feed as read-only cards into the Finances pillar of Life Blueprint. - [x] Life stage detection from profile age: Student → Early Career → Mid Career → Later Career
- [x] AI guidance (amber accent) with personality-aligned financial tips
- [x] Step-by-step "How this works" inline guide text
Supplementary: Self Mastery (SelfMasteryPage.tsx)¶
Menu name: Self Mastery — Explorer-only, gated by canAccessSelfInquiry (Discovery completed + paid plan).
A structured 5-phase self-coaching session that guides users from raw observation to committed action. AI-assisted at every phase. Past sessions stored for continuity context on subsequent runs.
Phases¶
- [x] Phase 1 — Data: Observe your own results — what surprised you from your personality data, and which habit you most want to stop avoiding
- [x] Phase 2 — Reactions: Identify a real situation that triggered a strong reaction, what drained your energy, and explore an alternative response
- [x] Phase 3 — Patterns: Select one of six recurring patterns (
SIX_PATTERNS), describe a specific situation where it shows up, and articulate who you want to be instead - [x] Phase 4 — Reality: Name the gap, trace it back to the pattern, and test what becomes possible if you act differently
- [x] Phase 5 — Action: Commit to two concrete micro-actions and select a guiding principle from
PERSONAL_PRINCIPLES
AI Guidance¶
- [x]
AiGuidecomponent present at every phase — prompts informed bybuildSelfInquirySystemPrompt()+ phase-specific context builders - [x] Full user personality profile (archetype, force, scores, blind spots) passed as system context
- [x]
buildDataPhaseContext()andbuildRealityPhaseContext()inject report data into AI prompts - [x]
buildActionSystemPrompt()used for Phase 5 AI coach
Session Storage¶
- [x] Completed sessions saved via
saveSelfInquirySession()→PUT /api/users/me(selfInquirySessions[]field) - [x] Past sessions (most recent first) injected into subsequent session prompts for continuity
- [x] Session history displayed in expandable list with date, pattern selected, and action commitments
Services¶
- [x]
src/services/selfInquiryService.ts—PHASES,PHASE_META,SIX_PATTERNS,PERSONAL_PRINCIPLES, all prompt builders
Supplementary: People Blueprint (PeopleBlueprintPage.tsx)¶
Menu name: People Blueprint — Explorer-only, gated by canAccessCorporate (Discovery + Life Design completed + paid plan).
Users map their workplace relationships by archetype and relationship type, then receive personalised compatibility guides and access to an AI team coach that understands their entire org chart.
Relationship Management¶
- [x] Add relationships by name, archetype (from
CORPORATE_ARCHETYPES), and type (manager/peer/subordinate) - [x] Edit and delete existing relationships
- [x] Direction indicator (⬆ Manager / ➡ Peer / ⬇ Report) with colour-coded pills
Per-Relationship Guide (computeCorporateGuide)¶
- [x] Overall compatibility score (0–100) with colour-coded badge
- [x] Dimension bars: expandable score + explanation per dimension
- [x] Strengths, challenges, collaboration playbook, friction points, quick wins
- [x]
CorporateGuideResultshape:{ overallScore, dimensions[], strengths[], challenges[], collaborationPlaybook, frictionPoints[], quickWins[] }
Group / Team Intelligence (computeTeamIntelligence)¶
- [x] Team cohesion score across all relationships
- [x] Archetype spread visualisation
- [x]
generateTeamNarrative()— prose summary of the full org chart for AI context - [x]
GroupCompatibilityResultshape:{ cohesionScore, archetypeSpread, narrative }
AI Team Coach¶
- [x]
AiGuidecomponent withbuildTeamCoachSystemPrompt()— aware of user's archetype + all relationships - [x]
buildTeamSuggestedQuestions()— generates context-aware starter questions per relationship set - [x]
buildSharedFromUserProfile()— constructs shared context object fromUserProfilefor AI system prompt
Data Persistence¶
- [x]
saveCorporateData()→PUT /api/users/me(corporateRelationships[]field) - [x] Share link:
getShareLink()→GET /api/share-links/:token
Corporate Services¶
- [x]
src/services/corporateEngine.ts—computeCorporateGuide,computeTeamIntelligence,generateTeamNarrative,buildTeamCoachSystemPrompt,buildTeamSuggestedQuestions,buildSharedFromUserProfile,CORPORATE_ARCHETYPES,ARCHETYPE_DESCRIPTIONS
Cross-Module: Gamification System¶
An additive XP + levelling + badge layer built on top of the 5-stage journey. All data is stored on the user's MongoDB doc. Awards are fire-and-forget — if an XP write fails, the core save already succeeded.
Levels¶
| Level | Threshold | Colour |
|---|---|---|
| ✨ Stardust | 0 XP | slate |
| ☄️ Comet | 500 XP | indigo |
| 💫 Nova | 1,200 XP | violet |
| 🌟 Supernova | 2,100 XP | amber |
XP Rewards¶
| Action | XP |
|---|---|
| Complete assessment | +500 |
| Complete Life Design | +400 |
| Complete Financial Plan | +300 |
| Complete Wellness Profile | +200 |
| Save a weekly reflection | +100 |
| Hit a streak milestone (7/14/21/30/60/90 days) | +150 |
| Complete weekly challenge | +75 |
Badges (9 total)¶
| Badge | Earned when |
|---|---|
| 🔓 Blueprint Unlocked | Assessment completed (discoveryCompleted = true) |
| 🧘 Self Aware | Wellness Profile completed |
| 🏗️ Life Designer | Life Design completed (lifeDesignCompleted = true) |
| ⚔️ Week 1 Warrior | First weekly reflection saved |
| 🔥 Habit Builder | 7-day habit streak reached |
| 🏆 30-Day Champion | Maintained a 30-day consecutive habit streak |
| 🌈 Full Spectrum | All 5 journey stages completed |
| 📤 Sharer | Report exported (PDF download) |
| 🚀 Trailblazer | Early adopter (account created before a fixed launch cutoff date) |
Streak System¶
streakCount— current consecutive days with at least one habit completionlastStreakDate— ISO dateyyyy-MM-ddof last habit togglestreakFreezes— 0 or 1 tokens; earned by saving a weekly reflection; consumed automatically if a day is missed
Weekly Challenges¶
- Archetype-specific action sentence served each week from
src/data/weeklyChallenges.json - Week is derived via
getISOWeek()seeded byweekNumber % challenges[archetype].length— deterministic, no backend call - Completion stores
growthLoop.weeklyChallenge: { weekKey, completed }on the user doc and awards +75 XP
Retroactive Backfill¶
- On first load for existing users (
xp === undefined),computeBackfill(profile)inUserProfileContextcalculates XP, level, badges, and streak from completed stages, then writes them in a single API update — no re-login required
Admin Controls¶
- Award XP modal — Zap button per user in AdminDashboard → Users tab; quick-select +100/250/500/1000 or custom amount; updates MongoDB and recomputes level
- Award Badge modal — Gift button per user; admin picks from all 9 badges; skips duplicates
- Overview stat cards — Total XP Awarded, Nova+Supernova count, Total Badges, Top Streak
Where Gamification Is Surfaced¶
| Location | What's shown |
|---|---|
| Landing page | "Every Step Counts" section — levels, 9 badge grid, XP table |
| Dashboard | XP progress bar + level + next-level target + badge strip + level legend |
| Profile | Full "Achievements" badge grid (all 9, locked ones dimmed) |
| DailyGrowthPage › Overview | Streak banner + weekly challenge card (marks complete, awards XP) |
| Report | Share Identity button → PNG download (earns Sharer badge) |
| ArchetypeReveal | Animated reveal screen post-assessment before redirecting to report |
Cross-Module: Standardised Life Areas¶
All modules use the same 6 keys and labels everywhere:
| Key | Label | Colour |
|---|---|---|
faith |
Faith & Purpose | Violet |
health |
Health & Vitality | Emerald |
family |
Family & Relationships | Rose |
career |
Career & Impact | Blue |
finances |
Financial Freedom | Amber |
growth |
Growth & Mindset | Indigo |
Used consistently in: Life Wheel, Life Blueprint SMART goals, Growth Loop Goals Kanban, Coach Portal, Shared View.
Cross-Module: Journey Progress Strip¶
7-stage horizontal strip shown on all main pages:
| Stage | Label | Trigger |
|---|---|---|
| 1 | Discover | discoveryCompleted (assessment taken) |
| 2 | Report | Report viewed / assessment taken |
| 3 | Wellness | wellnessProfile object exists on user doc |
| 4 | Money Plan | financialPlanStarted (financialPlan exists) |
| 5 | Life Simulator | simulatorCompleted (path selected) |
| 6 | Life Design | lifeDesignCompleted flag |
| 7 | Growth Loop | growthLoopActive (habits or reflections exist) |
Messaging (Messages.tsx)¶
- [x] Polling-based real-time messaging between coach and client (conversations every 5 s, messages every 3 s)
- [x] Left-panel conversation list; clicking a conversation opens the thread
- [x] Active conversation set from
?conv=<uuid>URL param; auto-selects the first conversation if no param is present - [x] Conversation
_idvalues are string UUIDs (server usesrandomUUID()) — not MongoDB ObjectIds - [x]
toDbId()helper on server handles both string and ObjectId formats for backward compatibility - [x] Notifications for new messages embed
?conv=<uuid>in the link to deep-link to the correct thread - [x]
getOrCreateConversation()awaited before creating any coaching-related notification (prevents dead notification links)
Notifications (Layout)¶
- [x] Bell icon in sidebar and top bar with unread count badge
- [x] Fixed-position dropdown panel (avoids overflow/clipping on inner pages)
- [x] "Mark all read" — marks every notification read server-side, clears badge
- [x] "Clear all" button — calls
DELETE /api/notifications, removes all notifications for the user, empties local state and closes panel - [x] Notification links for coaching events include
?conv=<uuid>for direct deep-link to the conversation thread
Layout & Navigation¶
- [x] Collapsible sidebar on inner pages — toggle button collapses the sidebar to gain horizontal reading space
- [x] Desktop header hidden on authenticated inner pages — top header bar shown on mobile/tablet only (avoids double navigation chrome)
- [x]
Layout.tsxis the single source for both the fixed sidebar notification panel and the top-bar notification dropdown - [x] Navigation sidebar groups (May 2026 — updated):
- My Assessment (emerald): Start Here (
/questionnaire), My Report (/report) - Your Foundation (teal): Mind & Body, Money Plan, Life Simulator
- My Journey (indigo): Design My Life, Daily Growth
- Grow Deeper (violet): Self Mastery, People Blueprint, Relationship Lens, Team Report
- Account, Coaching, Organisation, Platform Admin groups also present
- [x] All nav display labels use plain everyday language — no product/technical terminology
- [x]
GROUP_DISPLAYmap inLayout.tsxtranslates internal group keys to human-readable headings
Registration & Auth¶
- [x] Email + password registration (
/register) - [x] Research consent checkbox (May 2026) — users opt in to anonymous use of their data for psychometric research. Stored as
researchConsent: booleanon user doc. Admin Research tab surfaces consent rates and exclusion flags. - [x] Referral code field (agent affiliate tracking via
?ref=CODEURL param) - [x] Org invite code field (auto-assigns
orgIdon registration) - [x] JWT 30-day token stored in
localStoragekeypersonality_auth - [x] Reset password flow (
/reset-password) — email-based, server-side token - [x] Complete Profile page (
/complete-profile) — name, age, gender, location (required before report access)
Admin Dashboard¶
- [x] 11-tab AdminDashboard: Overview · Analytics · Engagement · Research · Users · Profiles · Coaches · Workshops · Promo Codes · Feedback · Organisations
- [x] User list and search
- [x] Archetype distribution analytics (doughnut + bar charts)
- [x] Assessment completion tracking
- [x] Research Stats tab — per-sub-scale Cronbach alpha, item-level means/SDs, archetype × force distribution breakdown, module engagement %; completion tracked via
wellnessProfileobject presence (not awellnessCompletedboolean — fix applied May 2026) - [x] Admin-initiated cooldown reset (LockOpen button per user, shows days-remaining badge)
- [x] Admin plan manager (inline dropdown to switch any user between Free / Explorer / Coach)
- Promoting to
coach: callsupsertCoachFromUserto create/reactivate coaches doc + refreshes Active Coaches list - Demoting from
coach: callsdeactivateCoach+ removes from Active Coaches list - [x] Complimentary access grant — sets
plan: 'explorer'with noplanExpiresAt(permanent, no Stripe required) - [x] Admin report viewer — opens any assessed user's full paid-tier report in a new tab, with amber "Admin view" banner and ← Back to Admin link; PDF export works from admin view
- [x] Coach applications management — full lifecycle: Pre-Approve / Reject / Delete Application; "Activate Coach" button appears only when
status === 'payment_received' - [x] Active coaches roster with referral links, client counts, Grant/Revoke portal access per coach
- [x] Workshop CRUD (create, edit, delete workshop events)
- [x] Promo Codes tab — create free-access / percent-off / fixed-off codes; toggle active/inactive; delete
- [x] Feedback tab — view all post-report feedback submissions with summary cards (% per rating), filter by rating, written note + UID + timestamp per entry
- [x] Organisations tab — create orgs, assign invite codes, activate/deactivate org plans
Organisation Management¶
- [x]
Organisationdata model —inviteCode,coachIds,plan,planExpiresAt,seatLimit - [x]
createOrganisation(name)— generates unique 8-char invite code - [x]
getOrganisationByInviteCode(code)— used at registration to auto-assignorgId+orgRole: 'member' - [x]
updateOrgCoaches(orgId, coachIds[])— whitelist which coaches serve this org - [x]
activateOrgPlan(orgId, expiresAt?)— setsplan: 'explorer'on org doc + batch-updates all member user docs (Explorer access, covered by org subscription) - [x]
deactivateOrgPlan(orgId)— clears org plan + batch-reverts all members toplan: 'free' - [x]
assignMemberToCoach(memberUid, coachId)— Org Admin assigns a member to a specific coach - [ ] Org Admin dashboard UI (manage members, assign coaches, view reports)
- [ ] Org invite link UI (show/copy link in AdminDashboard)
- [ ] Auto-assign
plan: 'explorer'to members who join an org that already has an active plan
Payments (Stripe)¶
- [x] Stripe Checkout integration via VPS endpoint (
POST /api/stripe/create-checkout-session) - [x] Explorer plan (RM 99, 1-year access) — yearly recurring Stripe subscription
- [x] Coach plan (RM 599 year 1, RM 199/year renewal) — Stripe Subscription Schedule (two-phase: first year at RM 599, then RM 199 recurring)
- [x] Post-payment plan activation via Stripe webhook (VPS
/api/stripe/webhook) - [x]
planExpiresAtfield on UserProfile — payment gates check expiry - [x] Annual renewal extension via
invoice.payment_succeededwebhook (subscription_cycle) - [x] Subscription cancellation handling via
customer.subscription.deletedwebhook — reverts toplan: 'free', clearscoachAppStatus, deactivates coaches doc - [x] Promo code support: free-access bypass (skips Stripe), percent/fixed discount (Stripe coupon created on-the-fly)
- [x] Coach referral code field on checkout — links new client to coach
- [x]
/payment/successconfirmation page
Coaching & Community¶
- [x] Verified coach network (
/coaching) — browse coaches, filter by module, request to work together - Platform directory removed — page shows only "Our Coaches" network directly
- Pricing badge on each coach card (
$min–$max/session) when coach has set a price range - Personalised matching banner when coach's archetypes match the user's archetype
- [x] Coach application form (
/coach-apply) — requires auth + Discovery + Explorer/Coach plan (coaches must have personally completed the assessment and hold a paid plan before applying) - [x] Full coach onboarding payment gate — 5-step managed flow:
- Coach applies via
/coach-apply→coachApplicationsdoc created (status: 'pending') - Admin pre-approves →
coachAppStatus: 'approved_pending_payment'set on user doc; "Coach Portal" nav link appears - Coach pays RM 599 via Stripe Checkout (shown as gate screen in
/coach-portal) - Stripe webhook sets
coachAppStatus: 'payment_received'; CoachPortal shows "Payment Confirmed!" screen; admin sees "Activate Coach" button - Admin activates →
coachesdoc created,plan: 'coach'set,coachAppStatuscleared; full portal unlocked - [x]
coachAppStatusfield on UserProfile ('approved_pending_payment' | 'payment_received') — cleared when portal is activated or access revoked - [x] Coach portal (
/coach-portal) — payment gate screens + full tabbed interface when active - Payment gate screen (when
coachAppStatus === 'approved_pending_payment'): Stripe checkout + promo code redemption - Payment confirmed screen (when
coachAppStatus === 'payment_received'): teal confirmation with "what happens next" steps - Activating screen (when
plan === 'coach'but no coaches doc yet): loading fallback - Full portal (when coaches doc exists): Clients / Requests / Team / Cohorts / My Profile tabs
- My Profile tab: editable bio, title, archetypes, modules, location, session type, price range (min/max)
- Requests tab: incoming client requests; send proposals with price, format, payment details; confirm payment received
- Annual renewal reminder banner above tab bar: amber if within 30 days of anniversary, red if overdue, hidden otherwise (based on
coach.createdAt) - [x] Coach referral system — unique referral code per coach;
/register?ref=CODEauto-links new user - [x] Admin Active Coaches "Grant Portal Access" — creates coaches doc via
upsertCoachFromUser+ setsplan: 'coach'; refreshes coaches state - [x] Admin Active Coaches "Revoke Portal Access" — deactivates coaches doc via
deactivateCoach+ setsplan: 'explorer'; filters coaches from UI state - [x] Team reports (
/team) — create/join a team, compare archetype distributions - [x] Workshops page (
/workshops) — browse and register for events (gated behind paid plan) - [x] Read-only share link (
/share/:token) — for mentors, parents, or employers - [x] "Find a Coach" and "Workshops" CTAs in Report — locked for free users with an "Upgrade" prompt
Post-Report Feedback¶
- [x] Feedback widget at bottom of Report page (hidden in print/PDF, hidden for free users and admin view)
- [x] Three rating options: 😄 Very helpful · 🙂 Somewhat helpful · 😕 Not helpful
- [x] Optional free-text note field
- [x] Saves to
reportFeedback/{uid}— one doc per user, re-submitting overwrites - [x] Pre-loads existing feedback on mount (shows current rating if already submitted)
- [x] Green confirmation shown after submit
- [x] Viewable in AdminDashboard → Feedback tab with summary stats and filter
All user-facing text follows these rules:
- Readable at age 15+
- No psychology jargon, no corporate speak
- Short sentences, everyday words
- Strength/growth fields in
framework.jsonare complete standalone sentences — not fragments for wrappers - No repetition between report phases
- Professional but simple tone