v4.6 — Intelligence & Analytics
The app now learns from what you actually do — mood patterns, pace, and check-in habits all feed back as reflections, suggestions, and better-timed nudges, and the product team can finally see whether any of it works.
Summary
Before this milestone, Objectuve tracked goals, habits, and streaks, but nothing closed the loop between a user's own data and the product's ability to help them act on it. There was no user-facing surface where someone could see their own patterns across all their goals. The Coach's insight system and Ai::CoachService had no way to notice a mood↔progress correlation, suggest a timeline adjustment, help a user who didn't know what goal to set, or summarize feedback trends for the team. Notification timing was a single fixed hour for everyone, regardless of when a person actually tends to show up. And several Phase 2–6 roadmap success metrics had no underlying event to measure them by.
v4.6 closes Phase 5 of the product roadmap in five independent, per-feature-flagged phases. Analytics instrumentation (Phase 1) filled the metric gaps first, so the new personal analytics dashboard (Phase 2) and every downstream success-metric validation would have real events to read. Two new AI insights extend the existing Coach insight pipeline — mood↔goal correlation and a pace-based timeline suggestion with one-tap accept (Phase 3). Two new Ai::CoachService methods power a goal-discovery quiz and an admin-facing weekly feedback theme summary (Phase 4). And notification timing for habit check-in reminders now learns each user's actual check-in window instead of firing at a fixed hour for everyone (Phase 5).
Every feature shipped dark — behind its own kill-switch flag at 0% PostHog rollout, fail-closed on every side that has one. Two real defects were caught in review before merge: a cross-user privacy leak on a personalized insight field, and an onboarding-flow redirect loop from a quiz entry point that briefly left the wizard. Both are now covered by regression tests. Nothing in this milestone is reachable by a real user yet — rollout is a deliberate, separate decision the product team makes per flag.
Goal
Make the app smarter and measurable: personalize the experience from each user's own data (mood↔goal patterns, pace-based timeline nudges, learned notification timing), give users a first-class analytics surface, extend AI coaching into goal discovery and feedback triage, and instrument the success metrics that validate Phase 2–6 product decisions. Every feature ships behind its own kill-switch flag.
Scope — What Shipped
- Product-analytics events for four previously-uncovered success metrics —
goal_created,habit_checked_in,community_joined,feature_used— via the existingPosthogNotifier.captureconvention, keyed bydistinct_id: user.public_id - New user-facing
/analyticsview (5 surfaces: month-in-review, completion by category, activity heatmap, streak history, XP over time), backed by 5 new owner-scoped GraphQL queries andPersonalAnalytics::Calculate*interactions - Mood↔goal correlation insight on the Dashboard and a pace-based timeline-adjustment suggestion with one-tap accept on the Goals page, both surfaced through the existing
useAiInsights.tspipeline; newacceptPaceSuggestionmutation recomputes server-side and returns the pre-accept date for Undo - Goal-discovery quiz ("Find your goal" with Coach) reachable from both onboarding and
/goals/create, powered by a newAi::CoachService#suggest_goalsmethod andsuggestGoalsmutation - Admin feedback weekly summary — a Coach-analyzed themed digest of the top-voted feedback posts from the last 7 days, powered by a new
Ai::CoachService#summarize_feedbackmethod andfeedbackWeeklySummaryquery Notifications::OptimalTimeCalculatorretimes the habit check-in reminder job toward each user's learned local check-in hour (30-day window, minimum sample + consistency gates), falling back to the existing fixed hour on sparse data- 6 new per-feature flags —
personal_analytics_enabled,mood_goal_insights_enabled,goal_auto_adjust_enabled,goal_quiz_enabled,feedback_ai_summary_enabled,smart_notification_timing_enabled— all registered infeatureFlags.tsand synced to PostHog (disabled, 0% rollout)
Phases
| Phase | Name | Status | Plans | Highlights |
|---|---|---|---|---|
| 1 | Analytics Instrumentation | Shipped | 1 | 4 new PostHog events; gap audit of every Phase 2–6 success metric |
| 2 | Personal Analytics Dashboard | Shipped | 1 | New /analytics view, 5 chart surfaces, owner-scoped resolvers |
| 3 | AI Insight Intelligence | Shipped | 1 | Mood↔goal correlation insight + pace-suggestion one-tap accept |
| 4 | AI Coaching Expansion | Shipped | 1 | Goal-discovery quiz + admin feedback weekly summary |
| 5 | Smart Notification Timing | Shipped | 1 | Learned per-user habit check-in reminder timing |
Key Decisions
- Per-feature flags on master, not an umbrella flag or integration branch — each of the six features ships behind its own kill-switch (the v4.0 Teams-V1 trunk mechanics, but per-feature rather than one umbrella flag), because these are small, single-user, mutually independent surfaces with self-contained blast radius. Deliberately not the v4.1 milestone-integration-branch model.
- Every new AI capability extends an existing surface, never a parallel pipeline — insights via
useAiInsights.ts, coaching viaAi::CoachService. New Coach methods (suggest_goals,summarize_feedback) live on the existing service, not a second one. - Instrumentation ships first — Phase 1 leads so the personal analytics dashboard and future success-metric validation have real tracked events to read, rather than building the dashboard against a metrics gap.
- Pace-suggestion Undo recomputes server-side —
acceptPaceSuggestionderives the adjustment fromgoal_idalone rather than trusting a client-supplied date, and returnspreviousTargetDatefrom the mutation's own pre-accept state so Undo can never revert against a stale client-held value. - Onboarding-embedded AI surfaces must stay inside the wizard — the goal-discovery quiz's onboarding entry point was redesigned mid-phase (R1→R2) from a route-based flow to an in-slide embed after tripping the onboarding-completion redirect gate. The lesson generalizes to any future onboarding-embedded surface: embed in the wizard, don't route out through the gate.
- Notification timing gate is hour-granularity, not minute-exact —
GenerateHabitCheckinReminderJobruns hourly, so the 15-minute lead on the learned check-in time only shifts observed behavior at an hour boundary. Framed in docs as "learned-hour retiming with a lead-time factor," not minute-precise nudging.
Requirements Coverage
28 / 28 requirements satisfied (per v4.6-intelligence-analytics-MILESTONE-AUDIT.md).
| Category | Count | Status |
|---|---|---|
| INSTRUMENT-* | 4 | All satisfied |
| DASH-* | 5 | All satisfied |
| MOOD-* | 3 | All satisfied |
| PACE-* | 4 | All satisfied |
| INSIGHT-PRIVACY | 1 | Satisfied |
| QUIZ-* | 4 | All satisfied |
| FEEDBACK-* | 3 | All satisfied |
| NOTIFY-* | 4 | All satisfied |
Full requirements list lives in the phase-by-phase ### Requirements sections of v4.6-intelligence-analytics-ROADMAP.md on GitHub — this milestone has no standalone REQUIREMENTS.md file, per this repo's planning convention (docs/operations/planning-canon.md).
Outcomes
Every feature in this milestone is merged to master and dark behind its flag at 0% PostHog rollout — nothing is reachable by a real user today. Once enabled, users get a private /analytics view of their own patterns, two new reflective AI insights (mood↔goal, pace), a goal-discovery quiz for users unsure what to set, and habit reminders that arrive closer to when they actually tend to check in. Internally, the product team gains dashboards for four previously-uncovered success metrics and a Coach-generated weekly summary of feedback trends. Enabling each flag (staging distinct_id targeting, then a rollout percentage) is a separate, deliberate decision for the product team — not part of this milestone close.
Tech Debt
- (Phase 2)
/analyticshas no nav entry point yet — direct-URL-only. Must land before enablement; acceptable while the flag sits at 0% rollout. - (Phase 2) Empty-state CTA copy on three chart components isn't in Desi's UI-SPEC microcopy table — tracked as standalone spec-sync task OBJ-1515, assigned to Desi.
- (All phases) Staging
distinct_id-targeted manual verification against Josh's account is a pre-GA rollout step, not yet done — separate from milestone completeness.
Related Artifacts
- Roadmap: v4.6-intelligence-analytics-ROADMAP.md
- Milestone Audit: v4.6-intelligence-analytics-MILESTONE-AUDIT.md
- Phase artifacts: .planning/phases/v4.6-phase-1-analytics-instrumentation/, v4.6-phase-2-personal-analytics-dashboard/, v4.6-phase-3-ai-insight-intelligence/, v4.6-phase-4-ai-coaching-expansion/
- Feature docs: Personal Analytics Dashboard · AI Insight Intelligence · AI Coaching Expansion · Notifications § GenerateHabitCheckinReminderJob · Dashboards § PostHog Product Analytics
- Git tag: not yet cut — all 5 phases are beta merge-only ships on
master, riding the next Wednesday release train - Merge PRs: #1596 (Phase 1), #1597 (Phase 2), #1595 (Phase 3), #1607 (Phase 4), #1617 (Phase 5)
Related Commits
88bbaebff— Phase 1: Analytics Instrumentation (PR #1596)2056ee2— Phase 2: Personal Analytics Dashboard (PR #1597)8f2fa6cd1— Phase 3: AI Insight Intelligence (PR #1595)faab2c1b4— Phase 4: AI Coaching Expansion (PR #1607)693e42415— Phase 5: Smart Notification Timing (PR #1617)
Last updated: 2026-07-20