Future Roadmap¶
Last updated: June 2026 (revised — messaging bugfixes, notification clear-all, clean deploy, layout UX, Firebase removal, stale file cleanup)
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] Future Studio — 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 Future Studio
- [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 99/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 Future Studio 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
/coach-apply - 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/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
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 Future Studio 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