Product Backlog¶
Completed features log + pending wishlist. For the live access model, see docs/access-control.md. For StartupOS scope, see docs/startupOS.md. For the stage-by-stage roadmap, see docs/roadmap.md.
Last updated: July 17 2026 (historical backlog entries preserved; live access and StartupOS scope now live in the canonical docs)
Completed (June 24–26 2026)¶
Navigation Restructure¶
- [x] Navigation restructured to 5 sections: Home / Discover / Explore / Design / Master
- [x] Book Guide moved to Explore section
- [x] Life Simulator (Career Path) moved to Design section
- [x] Growth Loop + Chemistry Check moved to Master section
- [x] Org users excluded from Explore/Design/Master (
hasPaidAccessreturns false for org plan) - [x]
canAccessChemistryrestricted to Explorer only (org users access Work Chemistry via Team Intelligence only)
Life Design + Self Mastery Removal¶
- [x]
DesignMyLifePage.tsx,LifeDesignPage.tsx,SelfMasteryPage.tsxdeleted - [x]
pages/lifeDesign/folder +components/lifeDesign/folder deleted - [x]
pages/selfMastery/SessionAnalytics.tsxdeleted - [x]
ikigaiEngine.ts,foundationDerivation.ts,selfMasteryData.ts,selfInquiryService.tsdeleted - [x] Routes
/life-design,/life-design-legacy,/self-masteryremoved fromApp.tsx - [x] Dead ProtectedRoute props removed:
requiresCareerPath,requiresLifeDesign,requiresPeopleBlueprint,requiresRelationshipLens,requiresInstitution - [x] Dead gate functions removed:
canAccessInstitution,canAccessSelfInquiry,getJourneyProgress
Institution Plan Removal¶
- [x] Institution pricing card removed from Pricing page (2-card grid: Explorer + Coach)
- [x] Institution plan pages removed (
InstitutionDashboardPage,LecturerDashboardPage) - [x]
plan: 'institution'dropdown option removed from Admin UI
Gate Simplification¶
- [x]
canAccessGrowthLoopsimplified todiscoveryCompletedonly (no Life Design requirement) - [x]
canAccessFutureStudioupdated:discoveryCompleted && !!financialPlan(Money Plan required; wellnessProfile NOT required) - [x]
requiresFoundationsprop: now means Discovery + Money Plan (not Discovery + Wellness + Money Plan)
Career Path Enhancements¶
- [x] CareerFitLab wizard restructured: 3-step → 2-step (role picking merged into Step 1)
- [x]
roleSuitabilityadded toCAREER_DECISION_SCHEMAinserver/src/routes/ai.js - [x]
roleSuitabilitytype added toCareerDecisionAIResultinsrc/types/careerDecision.ts - [x] Role Fit Assessment card added to CareerFitLab results (verdict + score + suited/gaps)
- [x]
roleSuitabilitypersisted tocareerFitResultin MongoDB (via PUT /api/users/me)
Completed (as of March 2026)¶
Core Platform¶
- [x] 13-phase personalised report (rule-based insight panels, no AI)
- [x] PDF export (html2canvas-pro + jsPDF, one section per page)
- [x] Life Design — Ikigai → Vision → Mission → SMART Goals
- [x] Life Path Simulator (Acceleration / Mastery / Contribution)
- [x] Growth Loop — habit tracking, weekly + monthly reviews
- [x] 6-month assessment retake cooldown
- [x] "How to Read" guide modals in Report and Life Design
- [x] Career alignment signal (0–100 score with rationale)
- [x] Life stage financial guidance (calibrated by age)
- [x] Archetype economic future map (automation risk, future-proof skills)
- [x] Leadership readiness profile with growth gap chart
- [x]
IkigaiFormStatetype + full TypeScript strict compliance
Payments¶
- [x] Stripe Checkout via VPS Express (
/api/stripe/create-checkout-session) - [x] Explorer plan (RM 59/year recurring subscription) with
planExpiresAtgate - [x] Coach plan (RM 599 year 1, RM 199/year renewal) — Stripe Subscription Schedule (two-phase)
- [x] Annual renewal extension via
invoice.payment_succeededwebhook - [x] Subscription cancellation via
customer.subscription.deleted— reverts plan, clearscoachAppStatus, deactivates coaches doc - [x] Payment gate on Life Design and Growth Loop (
requiresPaymentprop in ProtectedRoute) - [x] Promo code system (free-access / percent-off / fixed-off) — admin-managed via AdminDashboard
- [x] Stripe coupon creation on-the-fly for discount codes
- [x] Promo usage tracking (usedCount + usedBy[] incremented on webhook)
- [x] Coach referral code support in checkout flow
- [x] Admin complimentary access grant (no Stripe — sets
plan: 'explorer'with noplanExpiresAt) - [x]
hasPaidAccessfix — admin-granted explorer plans (missingplanExpiresAt) now correctly returntrue
Coaching & Community¶
- [x] Verified coach network (Our Coaches) — platform directory removed
- [x] Coach pricing range on profile + displayed on coach cards
- [x] "Find a Coach" and "Workshops" CTAs in Report gated behind paid plan
- [x] Coach proposal + payment confirmation flow
- [x] Certified coach directory + application workflow
- [x] Full 5-step coach onboarding with payment gate:
- Apply via historical
/coach-applyentry (route currently not mounted inApp.tsx) - Admin pre-approves →
coachAppStatus: 'approved_pending_payment' - Coach pays RM 599 via Stripe in CoachPortal payment gate
- Webhook sets
coachAppStatus: 'payment_received'; creates SubscriptionSchedule - Admin activates → coaches doc created,
plan: 'coach'set,coachAppStatuscleared - [x]
coachAppStatusfield on UserProfile for clean gate state ('approved_pending_payment' | 'payment_received') - [x] CoachPortal payment gate screens (payment form, payment confirmed, activating fallback)
- [x] Annual renewal reminder banner in CoachPortal (amber ≤30 days, red if overdue)
- [x] Coach portal with full client roster and archetype/goal visibility
- [x] Coach referral system with unique per-coach referral links
- [x] Admin
handleGrantCoachAccessfixed — now also callsupsertCoachFromUser+ refreshes coaches state - [x] Admin
handleRevokeCoachAccessfixed — now also callsdeactivateCoach+ filters coaches state - [x] Team reports (create/join team, archetype distribution view)
- [x] Workshops page with event listings
- [x] Read-only share link for mentors/parents (
/share/:token)
Admin Tooling¶
- [x] 10-tab AdminDashboard: Overview · Analytics · Engagement · Users · Profiles · Coaches · Workshops · Promo Codes · Feedback · Organisations
- [x] Admin-initiated cooldown reset and plan manager
- Promoting to coach:
upsertCoachFromUser+ coaches state refresh - Demoting from coach:
deactivateCoach+ coaches state filter - [x] Admin complimentary access grant (permanent Explorer, no Stripe)
- [x] Admin report viewer (full paid-tier, PDF export)
- [x] Coaching & referral overview stats on Overview tab
- [x] Per-coach referral leaderboard
- [x] Promo Codes CRUD tab
- [x] Feedback analytics tab (rating breakdown + written notes + filter)
- [x] Coach applications — full lifecycle: Pre-Approve, Reject, Delete, Activate (only on
payment_received)
Organisation Management (March 2026)¶
- [x]
Organisationdata model —inviteCode,coachIds,plan,planExpiresAt,seatLimit - [x]
activateOrgPlan(orgId, expiresAt?)— batch-sets all members toplan: 'explorer' - [x]
deactivateOrgPlan(orgId)— batch-reverts all members toplan: 'free' - [x]
assignMemberToCoach+getOrgMembers+getOrganisationByInviteCode - [x] Org subscription covers all members (denormalized plan on each member user doc)
Feedback¶
- [x] Post-report feedback widget on Report page
- [x] Three-rating system: 😄 Very helpful / 🙂 Somewhat helpful / 😕 Not helpful
- [x] Optional written note; saves to
reportFeedback/{uid} - [x] Admin Feedback tab with summary cards, filtering, and entry list
Growth Loop Phase 2¶
- [x] SMART Goal Progress Tracker — pillar goals visible in monthly cycle reviews
- [x] Historical Comparison — archetype score shifts between reassessments
- [x] Vision / Mission reminder card at top of weekly reflection
Report & Insight Phase 3¶
- [x] Alignment Score Panel — % word overlap between ikigai circles and vision/mission
- [x] Vision Gallery — anonymised examples by archetype (opt-in)
- [x] Ikigai ↔ IkigaiProfile adapter (explicit mapping to prevent field-name regressions)
Access Control & Documentation (April 2026)¶
- [x]
docs/access-control.mdcreated — single source of truth for all 3 tiers (Free/Explorer/Coach), gate functions, org rules, Explorer grant paths - [x]
canAccessWellnessProfileandcanAccessFinancialPlanrefactored — now self-contained (includehasPaidAccesscheck internally); callers no longer need to add separate paid check - [x]
Layout.tsx— removed redundanthasPaidAccesscalls alongside gate functions; removedhasPaidAccessimport - [x]
Pricing.tsxfree plan copy corrected — now accurately shows Phase 1 access only, not full 13-phase report - [x]
docs/architect-analysis-prompt.mdfully rewritten — mandatory doc-reading table, correct MongoDB/VPS references, current gate signatures,compatibilityEngine.tsandrateLimiter.jsentries - [x] Stale Cloud Functions content removed from
docs/stripe-integration.md - [x]
docs/user-journey.mdfree user description corrected (Phase 01 full + Phases 02–13 locked preview)
Compatibility Engine (April 2026)¶
- [x]
compatibilityEngine.tsextended with 4 new output sections:dosList,dontsList,approachGuide,traitsToWatchOut,conflictFlashpoints - [x] 37-change plain-language rewrite of compatibility output text
Rate Limiter (April 2026)¶
- [x]
middleware/rateLimiter.jscreated — per-useruserLimiter(120 req/min keyed onreq.user.uid), with admin bypass - [x]
userLimiterapplied toGET /meandPUT /meinroutes/users.js - [x] Global IP rate limiter raised from 300 to 800 req per 15 min
Self Mastery (April 2026) — menu: Self Mastery, file: SelfMasteryPage.tsx¶
- [x]
SelfMasteryPage.tsx(prev.SelfInquiryPage.tsx) — 5-phase structured self-coaching session (Data → Reactions → Patterns → Reality → Action) - [x] Gated by
canAccessSelfInquiry(Discovery completed + Explorer/Coach plan) - [x] AI guidance at every phase via
AiGuide; prompt builders insrc/services/selfInquiryService.ts - [x] Session storage:
saveSelfInquirySession()→PUT /api/users/me(selfInquirySessions[]field) - [x] Past sessions injected into subsequent session AI context for continuity
- [x]
/self-inquiryroute +Layout.tsxnav entry added
People Blueprint (April 2026) — menu: People Blueprint, file: PeopleBlueprintPage.tsx¶
- [x]
PeopleBlueprintPage.tsx(prev.CorporatePage.tsx) — workplace relationship mapper with per-relationship compatibility guides and AI team coach - [x] Gated by
canAccessCorporate(Discovery completed + Explorer/Coach plan) - [x]
computeCorporateGuide()— per-relationship scores, dimension bars, strengths, challenges, playbook - [x]
computeTeamIntelligence()— team cohesion score, archetype spread, narrative summary - [x] AI team coach via
AiGuidewithbuildTeamCoachSystemPrompt()+buildTeamSuggestedQuestions() - [x]
saveCorporateData()→PUT /api/users/me(corporateRelationships[]field) - [x]
/corporateroute +Layout.tsxnav entry added - [x]
canAccessCorporate+canAccessSelfInquirygate functions added tosrc/utils/journeyGates.ts - [x] All docs updated:
docs/access-control.md,docs/architecture.md,docs/features.md,docs/user-journey.md,docs/architect-analysis-prompt.md
Messaging & Notifications (June 2026)¶
- [x] Conversations stored with string UUID
_id(viarandomUUID()) — fixes allconversations.jsfindOnelookups (previously used ObjectId which never matched string params) - [x]
toDbId()helper added toconversations.jsfor backward compatibility with any pre-existing ObjectId docs - [x]
getOrCreateConversation()now awaited before creating coaching notifications — eliminates dead legacy/messageslinks - [x] Notification links for coaching events (payment confirmed, proposal accepted) embed
?conv=<uuid>— direct deep-link to the correct conversation thread - [x]
Messages.tsxauto-selects the first conversation when no?conv=URL param is present - [x]
DELETE /api/notificationsendpoint added — clears all notifications for the authenticated user - [x] "Clear all" button added to both notification panels in
Layout.tsx(sidebar fixed panel + top bar dropdown) - [x]
clearAllNotifications()added tosrc/api/db.ts
Clean Frontend Deploy (June 2026)¶
- [x] Root cause identified: every
scp -r dist/* ...upload accumulated old Vite-hashed files (8,847 files after repeated deploys) — Vite hash changes each build so old files were never overwritten - [x] Fix:
rm -rf /opt/personality-app/public/assetsmust run before each upload - [x]
c:\My Apps\hostinger\deploy-personality.ps1created — automates build → clear remote assets → SCP upload - [x]
docs/deployment.mdupdated with manual steps, clean-deploy rationale, and script reference
Layout & Sidebar UX (June 2026)¶
- [x] Desktop top header hidden on authenticated inner pages (avoids double navigation chrome)
- [x] Sidebar collapsible on inner pages (Report, Wellness, LifeDesign, Financial) — toggle button collapses to gain reading space
- [x] Notification dropdown uses fixed positioning to prevent overflow/bleed on pages with collapsible sidebar
Firebase Removal & Codebase Cleanup (June 2026)¶
- [x] Firebase SDK completely removed from client — no
firebase,firebase-admin, or@firebase/*packages anywhere - [x]
firebase-adminuninstalled from VPSpackage.json;sa-key.jsondeleted;SA_KEY_PATHremoved from VPS.env - [x]
src/firebase.jsdeleted from both localserver/src/and VPS/opt/personality-app/src/ - [x] All
VITE_FIREBASE_*env vars removed from.envand.env.example - [x]
client/firebase.json(Firebase Hosting config) deleted - [x]
.github/workflows/deploy.ymlrewritten from Firebase Hosting deploy to a plain Vite build workflow - [x]
SelfInquiryPage.tsxdeleted (superseded bySelfMasteryPage.tsx— the live file since April 2026) - [x]
server/src/routes/agents.jsdeleted locally (agents handled by standaloneagents-serviceon port 5003) - [x]
server/src/routes/workshops-sharelinks-feedback.jsdeleted (old combined route file usingverifyFirebaseToken— fully superseded by individualworkshops.js,shareLinks.js,reportFeedback.js) - [x]
server/src/models/empty directory removed - [x]
client/src/data/careerPaths.json.bakdeleted (unused backup file) - [x] VPS stale one-off scripts deleted:
checkorgs.js,checkorgs2.js,checkuser.js,deletedup.js,setorgrole.js,portal-config.js - [x] VPS
agents.jsroute file removed from/opt/personality-app/src/routes/(not mounted in server.js) - [x]
docs/architecture.mdcorrected: removedfirebase.js/agents.jsstale entries, removed non-existent/api/compareroute, fixedselfInquiry.sessionsnested path - [x]
docs/testing-sharing.mdcorrected: replaced stale Firebase integration testing step with MongoDB/VPS testing reference
Financial Stability — Gen Z UX Round (June 16 2026)¶
- [x] Quick Mode in
MoneySnapshotStep.tsx— two-field income/expenses shortcut; skip hints on empty arrays - [x] PillarTip tooltips in
ScoreAndPathStep.tsx— HelpCircle icon on each pillar with hover explanation - [x] Path-to-Next-Level card — archetype-specific nudge + primary action + forecast to next mastery level
- [x] TL;DR badge data-driven from
framework.json financialBehavior.keyRisk(was hardcoded lookup) - [x] Privacy banner compacted to single-line expandable bar; dismiss stored in
localStorage - [x] Mastery celebration toast on
MoneyPlanPage.tsx— fires when health score crosses a mastery level boundary; auto-dismisses after 4.5 s - [x] Protection bonus in
financialEngine.ts— life insurance +3, medical insurance +3, emergency fund present with low coverage +4
Chemistry — People Blueprint + Relationship Lens Merge (June 2026)¶
- [x]
ChemistryPage.tsxcreated — tab wrapper at/chemistrywith Work tab (People Blueprint) + Personal tab (Relationship Lens) - [x] Legacy routes
/people-blueprint,/relationship-lens,/corporate,/compareall redirect to/chemistry - [x] Sidebar updated to show Chemistry entry instead of two separate items
Startup-Playbook — Guided Journey UX (June 16 2026)¶
- [x]
client/src/data/journeyOrder.js— single source of truth for 17-step guided journey across 7 stages - [x] Dashboard redesigned: journey strip with stage progress + locked/current/past stage rendering
- [x] Sidebar rebuilt from
JOURNEY_STEPS— stage headers, completion dots, lock states, progress bar - [x]
PageWrapper.jsx—JourneyNavfooter with prev/next buttons + Mark Done + stage progress bar
Pending Backlog¶
UX & Onboarding¶
- [ ] Improved onboarding flow — guided first-run experience after register; clearer "what to do next" cards on Dashboard
- [ ] Better journey progress visibility — enrich
JourneyProgressStripwith % completion per stage and tooltip guidance - [ ] Sentence-starter prompts in Life Design fields to reduce blank-page paralysis
- [ ] Archetype-specific examples pre-filled in Vision / Mission fields based on user's primary archetype
AI Refinement¶
- [ ] AI refinement buttons — "Make my vision more specific" / "Rewrite my mission" via Gemini (
aiService.tsis wired but not yet invoked from UI) - [ ] AI-powered daily insights — micro-content pushed to dashboard based on current archetype + growth stage
Organisation Management (UI — backend done)¶
- [ ] Org Admin dashboard — manage members, assign coaches, view member report summaries
- [ ] Invite link UI in AdminDashboard — show/copy invite link per org
- [ ] Auto-assign plan on join — members joining an org with an active plan are immediately set to
plan: 'explorer'during registration - [ ] Seat limit enforcement — cap paid access at
seatLimitwhen set - [ ] SSO Integration — SAML / Okta for corporate clients
Platform Growth¶
- [ ] Custom Questionnaire Modules — admin-configurable add-on question sets
- [ ] Coach plan self-serve checkout — currently requires admin to manually set plan to 'coach'
- [ ] Stripe idempotency keys — prevent duplicate webhook deliveries from double-writing
planExpiresAt - [ ] Feedback analytics trends — chart feedback ratings over time in Admin Dashboard