Growth Loop — Product Documentation¶
The execution engine that turns your goals into daily actions and consistent progress.
Version 5.0 · Last updated June 26 2026 Route:
/growth-loop· Page:GrowthLoopPage.tsx(export:DailyGrowthPage) Gate: Discovery completed + Explorer paid plan Nav section: Master (Explorer plan users only)
1. What Is the Growth Loop?¶
Growth Loop is where plans become behaviour.
The Personality Test tells you who you are. Career Path helps you plan where you want to go. Growth Loop is how you actually get there — daily check-ins, goal tracking, and a cross-pillar 90-day plan built from your real data.
2. How It Fits the Journey¶
Discovery → Explore (Mind & Body · Money Plan · Career Path) → Growth Loop
(Who) (Foundation) (Execution)
| Source page | What it contributes to Growth Loop |
|---|---|
| Career Path | 90-day sprint goals → pushed to Goals tab on commit |
| Financial Plan | financialPlan.goals → read-only legacy sync |
| Wellness Profile | wellnessProfile.goals → read-only legacy sync |
| AI 90-Day Plan | Generated from Health + Financial + Career data → goals in Goals tab |
3. The Three Tabs¶
| # | Tab key | Label | Icon | Purpose |
|---|---|---|---|---|
| 1 | dashboard |
Today | BarChart3 | Daily Stack check-in, streak, life score, daily insight |
| 2 | goals |
Goals | Target | All goals across 4 pillars — add, track, cycle status |
| 3 | myplan |
My Plan | Map | View, build, and rebuild the AI-generated 90-day master plan |
Tab 1: Today (Daily Dashboard)¶
Purpose. A fast daily check-in — see your state, check off one action per pillar, keep the streak alive.
Daily Stack¶
- One card per active pillar (health / career / finances / people)
- Each card shows the first goal in that pillar
- Tap to check off → saves to
growthLoop.dailyCheckins[date][pillar] - Streak increments when ≥3 pillars checked on consecutive days
| Element | Description |
|---|---|
| 🔥 Streak badge | Current consecutive-day streak count |
| Checked count | X/4 pillars done today |
| Progress bar | Visual completion of today's stack |
| Completion celebration | Appears when all pillars checked |
| Daily Archetype Insight | Archetype-specific tip rotating by day-of-year. Uses dailyInsights.json via useTranslatedData — full i18n (EN/MS/TA/ZH) |
| Life Score section | Computed stats: total goals, done, in-progress, overdue tasks, due-soon tasks, goals with focus/reflection this week |
| Weekly check-in hint | Nudge to keep Today tab lightweight and use Goals tab for detailed status updates |
Weekly Pulse (modal — Sundays only)¶
On Sundays, if no pulse has been submitted for the current ISO week, a modal appears automatically with 4 sliders (0–10): - Health · Career · Finances · People
Saved to growthLoop.weeklyPulse[weekKey]. Tracks life balance trends over time.
Day-of-week nudges¶
- Monday → amber motivational nudge
- Thursday/Friday → violet end-of-week nudge
- Saturday/Sunday → emerald weekend nudge
Tab 2: Goals¶
Purpose. Keep all 4-pillar goals visible and moving. Single source of truth for what you're working on.
Goal Data Sources (priority order)¶
| Source | Written to | Editable from here |
|---|---|---|
| Manual add | growthLoop.goals[] (source: 'manual') |
✅ Delete allowed |
| AI 90-Day Plan | growthLoop.goals[] (source: 'masterPlan') |
✅ Delete allowed |
| Career Path commit | growthLoop.goals[] (source: 'career') |
⌠Manage in Career Path |
| Financial Plan (legacy) | financialPlan.goals[] (read-only) |
⌠Manage in Money Plan |
| Wellness Profile (legacy) | wellnessProfile.goals[] (read-only) |
⌠Manage in Wellness Profile |
| Life Design (legacy) | lifeDesign.pillars.goals.* (read-only) |
⌠Life Design removed June 24 2026 |
New goals are always written to
growthLoop.goals[]. Legacy sources display for backward compatibility only.
The 4 Pillars¶
| Pillar | Key | Emoji | Colour |
|---|---|---|---|
| Mind & Body | health |
💪 | Emerald |
| Career & Skills | career |
🚀 | Blue |
| Financial Freedom | finances |
💰 | Amber |
| My People | people |
🤠| Rose |
Goal card¶
- Title (strikethrough when done)
- Status badge — tap to cycle:
Not started → In progress → Done ✓ - Pillar colour badge + emoji
- Target date (if set)
- 🗑 Delete button (new/masterPlan goals only)
Pillar filter tabs¶
All / Health / Career / Finance / People — each shows a count badge.
Overall progress bar¶
done/total goals with percentage.
Add goal inline¶
- Title input + pillar chip selector
- Enter to submit, Escape to cancel
- Written to
growthLoop.goals[]assource: 'manual'
Empty state quick-start links¶
When no goals exist, shows: - Career Path → run analysis → career goals appear here - Financial Plan → set goals → finance goals sync here - Wellness Profile → health goals → health goals sync here
Tab 3: My Plan (90-Day Master Plan)¶
Purpose. View and manage the AI-generated 90-day plan built from your Health + Financial + Career data.
What it shows¶
- Plan header: generation date + total goal count
- Per-pillar goal cards showing: title ·
whyexplanation ·Week 1:action · live status badge - "Rebuild plan" button (top-right when plan exists)
- Empty state with "Build My 90-Day Plan" CTA
Availability¶
Shows "Your 90-Day Plan is ready to build ✨" banner (above tab bar) when:
- hasAllSources = wellnessProfile OR financialPlan is present on user doc
- masterPlan does not yet exist
4. AI 90-Day Plan¶
Generation flow¶
- User taps "Build My Plan"
POST /api/ai/generate-growth-plan(no body — server reads the full profile)- 4-step animated progress indicator:
- Reading your Health profile…
- Reading your Financial plan…
- Reading your Career path…
- Crafting your 90-day plan…
- Plan review modal: user can remove individual goals before accepting
- On Accept:
- Goals written to
growthLoop.goals[]asSimpleGoalitems (appear in Goals tab immediately) - Full plan (with
why+week1Action) saved togrowthLoop.masterPlan - Previous masterPlan goal IDs purged from
growthLoop.goals[]before insert (no duplicates on rebuild)
Plan review modal¶
- Goals grouped by pillar
- Each card shows: title ·
why·Week 1:action - 🗑 Remove a goal before accepting
- "Looks good, start my plan!" → saves; "Cancel" → discards
Rebuild¶
"Rebuild plan" or "Refresh" → same flow; previous masterPlan goals replaced.
5. Data Model¶
// growthLoop sub-document on user doc
interface GrowthLoopData {
// Primary — unified goals list
goals: SimpleGoal[];
// AI-generated 90-day plan
masterPlan?: { generatedAt: string; goals: MasterPlanGoal[]; };
aiPlan?: any; // legacy field — read-only backward compat
// Legacy kanban execution state (for goals not yet in growthLoop.goals[])
goalKanban: Record<goalId, GoalKanbanCard>;
// Daily Stack check-ins
dailyCheckins: Record<dateStr, Record<pillarKey, boolean>>;
currentStreak: number;
lastCheckDate: string; // YYYY-MM-DD
// Weekly Pulse (Sunday check-in)
weeklyPulse: Record<weekKey, { health: number; career: number; finances: number; people: number; submittedAt: string; }>;
// Legacy — preserved but no longer written
weeklyReflections: any[];
habits: any[];
monthlyReviews: any[];
}
interface SimpleGoal {
id: string;
title: string;
pillar: 'health' | 'career' | 'finances' | 'people';
status: 'not-started' | 'in-progress' | 'done';
targetDate?: string;
source?: 'manual' | 'masterPlan' | 'career' | 'legacy';
createdAt: string;
}
interface GoalKanbanCard {
status: 'not-started' | 'in-progress' | 'done';
tasks: { id?: string; title?: string; dueDate?: string; completedAt?: string; }[];
weeklyFocus?: { focus: string; why: string; weekKey: string; };
weeklyReflection?: { q1: string; q2: string; q3: string; alignmentScore: number; weekKey: string; savedAt: string; };
}
Effective status resolution¶
- Goal in
growthLoop.goals[]→ usegoal.status - Legacy goal → use
goalKanban[goalId].status(default:'not-started')
Kanban auto-sync¶
On profile load, GrowthLoopPage syncs goalKanban:
- Adds missing kanban entries for all current goal IDs
- Removes entries for IDs that no longer exist in any source
6. Streaks and Gamification¶
Streak. Day counts when ≥3 pillars checked. Saved in growthLoop.currentStreak + lastCheckDate.
Sprint XP (Career Path sprint integration):
- SPRINT_TASK_COMPLETE: +25 XP per sprint task completed
- Badge 90day_sprinter: first full 90-day sprint completed
- Badge career_velocity: 3+ sprints across any paths
- Badge path_explorer: 2+ different career paths tried
7. API¶
| Method | Endpoint | Purpose |
|---|---|---|
POST |
/api/ai/generate-growth-plan |
Generate 90-day plan (no body — reads full profile server-side) |
PUT |
/api/users/me |
Save all Growth Loop state (growthLoop.* field) |
All data writes use
createUserProfile(uid, { growthLoop: { ...existing, [field]: value } }).
8. Stats (computed in Today tab)¶
| Stat | Description |
|---|---|
totalGoals / doneGoals / inProgressGoals |
Across all sources |
totalTasks / doneTasks |
Task level (from goalKanban) |
overdueTasks |
Tasks with dueDate < today, not completed |
dueSoonTasks |
Tasks due within 7 days |
goalsWithFocusThisWeek |
Goals with weeklyFocus.weekKey === currentWeek |
goalsWithReflection |
Goals with weeklyReflection.weekKey === currentWeek |
upcoming |
Next 3 tasks by soonest due date |
9. Removed Features¶
| Feature | Removed | Data status |
|---|---|---|
| Habit Tracker tab | May 2026 | growthLoop.habits[] preserved in DB, not displayed |
| Global Reflect tab | May 2026 | growthLoop.weeklyReflections[] preserved in DB, not displayed |
| Global Weekly Intention | May 2026 | growthLoop.weeklyIntention preserved if set |
| 6-pillar system (Faith/Family/Growth) | June 24 2026 | Legacy goals read-only in Goals tab |
| Self Mastery cross-integration | June 24 2026 | SelfMasteryPage.tsx deleted |
10. Design Principles¶
- See before you act. Today is tab 1 — state visibility before action.
growthLoop.goals[]is the canonical source. All new goals go here regardless of origin.- AI plan, zero manual work. One call to
/api/ai/generate-growth-planproduces an aligned cross-pillar 90-day plan from real data. - Four pillars, not six. Health · Career · Finances · People.
- Streaks reward consistency, not perfection. Only 3 of 4 pillars required for a streak day.
11. Glossary¶
| Term | Definition |
|---|---|
| Daily Stack | Per-pillar check-in (Today tab) — one checkbox per pillar showing first goal in that pillar |
| Master Plan | AI-generated 90-day plan in growthLoop.masterPlan, built from Health + Financial + Career profile data |
| Simple Goal | A goal in growthLoop.goals[] with id, title, pillar, status, targetDate, source |
| Weekly Pulse | Sunday modal — 4 sliders (health/career/finances/people) to rate weekly life balance 0–10 |
| Effective Status | Goal status from growthLoop.goals[].status (new) or goalKanban[id].status (legacy) |
| Streak | Consecutive days with ≥3 pillars checked in the Daily Stack |
| Goal Kanban | goalKanban record on growthLoop — legacy execution state (status + tasks + weeklyFocus/Reflection per goal) |
12. FAQ¶
Q: What is the difference between Goals tab and My Plan tab?
Goals shows all goals (manual + AI + legacy) as a flat filterable list you update status on. My Plan shows only the AI 90-day master plan with the original why + week1Action context.
Q: How do Career Path goals appear here?
When a user commits to a career plan in CareerFitLab, careerCommitment.goals[] is written. These goals sync into growthLoop.goals[] and appear as career goals in the Goals tab.
Q: What triggers the "Build My Plan" banner?
hasAllSources = wellnessProfile OR financialPlan set AND no masterPlan exists yet.
Q: What happens to old habit tracker data?
growthLoop.habits[] is preserved in MongoDB — never deleted, just not displayed.
Q: Can I delete a legacy goal from the Goals tab?
No. Legacy goals (source: 'legacy') have no delete button. Manage them in their source page.
Q: How does the Daily Stack choose what to show per pillar?
It uses the first goal in that pillar from the merged allGoalsFull list. One card per pillar regardless of total goal count.
Q: When does the Weekly Pulse modal appear? Automatically on Sundays if no pulse has been submitted for the current ISO week. Never appears on other days.