Skip to content

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}.createdAt in 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 (requiresPayment gate). 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-pro v2.0.2 + jsPDF v4.2.0 (image-based JPEG, 14 pages)
  • All responsive Tailwind classes (md:text-*, lg:text-*) mapped to inline styles before capture
  • overflow: hidden removed 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=optional to display=swap so 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 (wellnessProfile object field on user doc)
  • [x] wellnessProfile object 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 SynthesisSynthesizeFoundationCard drafts 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=ikigai then scope=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-in banner 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 from server/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-loop2 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 targetDate last-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 at GoalKanbanCard.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.goalKanban via PUT /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 of FinancialGoal objects) — not in lifeDesign.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] AiGuide component present at every phase — prompts informed by buildSelfInquirySystemPrompt() + phase-specific context builders
  • [x] Full user personality profile (archetype, force, scores, blind spots) passed as system context
  • [x] buildDataPhaseContext() and buildRealityPhaseContext() 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.tsPHASES, 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] CorporateGuideResult shape: { 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] GroupCompatibilityResult shape: { cohesionScore, archetypeSpread, narrative }

AI Team Coach

  • [x] AiGuide component with buildTeamCoachSystemPrompt() — aware of user's archetype + all relationships
  • [x] buildTeamSuggestedQuestions() — generates context-aware starter questions per relationship set
  • [x] buildSharedFromUserProfile() — constructs shared context object from UserProfile for 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.tscomputeCorporateGuide, 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 completion
  • lastStreakDate — ISO date yyyy-MM-dd of last habit toggle
  • streakFreezes — 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 by weekNumber % 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) in UserProfileContext calculates 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 _id values are string UUIDs (server uses randomUUID()) — 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.tsx is 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_DISPLAY map in Layout.tsx translates 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: boolean on user doc. Admin Research tab surfaces consent rates and exclusion flags.
  • [x] Referral code field (agent affiliate tracking via ?ref=CODE URL param)
  • [x] Org invite code field (auto-assigns orgId on registration)
  • [x] JWT 30-day token stored in localStorage key personality_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 wellnessProfile object presence (not a wellnessCompleted boolean — 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: calls upsertCoachFromUser to create/reactivate coaches doc + refreshes Active Coaches list
  • Demoting from coach: calls deactivateCoach + removes from Active Coaches list
  • [x] Complimentary access grant — sets plan: 'explorer' with no planExpiresAt (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] Organisation data model — inviteCode, coachIds, plan, planExpiresAt, seatLimit
  • [x] createOrganisation(name) — generates unique 8-char invite code
  • [x] getOrganisationByInviteCode(code) — used at registration to auto-assign orgId + orgRole: 'member'
  • [x] updateOrgCoaches(orgId, coachIds[]) — whitelist which coaches serve this org
  • [x] activateOrgPlan(orgId, expiresAt?) — sets plan: '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 to plan: '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] planExpiresAt field on UserProfile — payment gates check expiry
  • [x] Annual renewal extension via invoice.payment_succeeded webhook (subscription_cycle)
  • [x] Subscription cancellation handling via customer.subscription.deleted webhook — reverts to plan: 'free', clears coachAppStatus, 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/success confirmation 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-applycoachApplications doc 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 → coaches doc created, plan: 'coach' set, coachAppStatus cleared; full portal unlocked
  • [x] coachAppStatus field 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=CODE auto-links new user
  • [x] Admin Active Coaches "Grant Portal Access" — creates coaches doc via upsertCoachFromUser + sets plan: 'coach'; refreshes coaches state
  • [x] Admin Active Coaches "Revoke Portal Access" — deactivates coaches doc via deactivateCoach + sets plan: '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.json are complete standalone sentences — not fragments for wrappers
  • No repetition between report phases
  • Professional but simple tone