Skip to content

Product Roadmap — Objectuve

A living checklist of planned product enhancements, organized into strategic phases. Check items off as they ship. Update success metrics with actuals post-launch.

Last updated: 2026-09-15

Companion docs: Engineering milestones (v1.0–v2.0+) records what shipped per GSD milestone. This page tracks user-visible product phases (3, 3.5, 4–7).

Recent milestones shipped (since 2026-04-26): v1.9 Goal Roadmap, v1.10 Visual Evolution, v1.11 Streak Compassion, v1.12 Architecture Health, v1.14 Coach Surfaces Always Valuable, v1.15 PWA Augment, v1.16 Community Cold-Start, v1.18 Enneagram Assessment, v1.21 Goal Template Library, v2.0 Ally Social Graph (Write Side), v2.2 Smoke Test Playwright Migration, v2.4 Goal Motivation Snapshot, v2.5 Documentation Audit & Refresh, v3.11 Goal Flow & App Polish Batch, v3.11.25 Hallmark Pre-Beta Design Remediation, v3.12 Identity-Anchored Goal Journey, v4.0 Teams V1 (GA), v4.1 Engagement & Retention. See .planning/ROADMAP.md for detailed tracking.


Strategic Rationale

Objectuve has shipped a complete daily engagement loop (Phases 1-2), a production-ready observability stack, all launch blockers (Phase 3), and a polish iteration covering architecture modernization, user feedback infrastructure, and goal detail redesigns (Phase 3.5). Beyond those initial phases, continuous development through GSD milestones (v1.0–v2.0) has delivered:

  • Engagement foundations: Goal templates, streak compassion, welcome-back flows, AI Coach personalization via Enneagram assessment
  • Social connectivity: Ally request flow (write-side), community cold-start features, foundational member badges
  • Visual & UX polish: Design system evolution, responsive goal detail redesign, PWA support (offline shell, install CTA, update detection)
  • Architecture maturity: DDD bounded contexts, domain events, Relay pagination in admin UI

The core product — goals, habits, streaks, XP, badges, ranks, levels, AI coaching, communities, mood logging, activity feed, progress visualization, and emerging social graph — is functional, actively improving, and deployed to iOS, Android, and Web.

Phase 4 (Engagement & Retention) has shipped in full, and Phase 7's core Teams V1 slice (billing, private team communities, leaderboards, team goals) reached GA 2026-07-15. With a 2-3 person team, the roadmap must be ruthlessly scoped. The phasing prioritizes:

  1. Social Read-Side — a basic ally list view (/allies) shipped as a triage fix (PR #1167); filtering by ally and ally-specific goal/event visibility remain undelivered, with no dedicated phase yet opened for them.
  2. Engagement & Retention (Phase 4) ✅ Shipped — Accountability partner matching, community challenges, re-engagement flows, offline-first check-ins, goal reflection, past-attempt context. See the rolled-up Phase 4 entry under Completed Phases.
  3. Intelligence & Analytics (Phase 5) — next priority. AI personalization deepening, mood-goal correlation, smart notification timing, weekly digests.
  4. Growth & Virality (Phase 6) — Celebration sharing, seasonal events, profile/discovery overhaul, import from other apps.
  5. Monetization & Teams (Phase 7) — Teams V1 core (Stripe + RevenueCat billing, private team communities, leaderboards, team goals) ✅ Shipped GA 2026-07-15; custom badges, admin dashboard/manager view, accountability auto-matching, SSO/SAML, and Slack/Teams integration remain backlog.

Target flywheel: open app → check feed → log habit → accountability partner gets notified → accountability partner opens app → cycle repeats

Teams flywheel: admin invites team → members set goals → leaderboard drives competition → admin sees engagement → org renews

Architecture note: The UserAlly model (rails_api/app/models/user_ally.rb) provides the foundation for social connections. Write-side shipped in v2.0 (request flow, accept/block mutations). Read-side (viewing allies, filtering) planned for next phase. Phase 4 extends with accountability partner features (matching, notifications). Phase 7 extends with Teams auto-matching.

Push notification note: FCM/APNs delivery shipped in Phase 3 (v3.4.8+). All notification kinds now push to devices. Notification actions (quick-add from notifications) also shipped in v1.7-1.8.


Completed Phases

Phase 1: Quick Wins (Shipped Jan 2026)

Low-effort, high-signal improvements shipped independently.

  • [x] 1. Level-Up Celebrations — Confetti + toast on level-up, notification in panel
  • [x] 2. Onboarding Goal Prompt — Post-onboarding CTA to personalize first goal
  • [x] 3. Badge Rarity Indicators — Rarity tiers (Common/Rare/Epic/Legendary) + unlock percentages
  • [x] 4. Dark Mode Audit & Polish — All components render correctly in both themes
  • [x] 5. Goal Sharing Cards (OG Meta Tags) — Rich social media previews for public goal URLs
Phase 2: Daily Engagement Loop (Shipped Feb 2026)

Core daily loop features that give users a reason to open the app every day.

  • [x] 6. Habit Tracking Mode — Recurring habits with daily/weekly check-in, per-habit streaks, completion rings, streak freezes
  • [x] 7. Progress Visualization — Line/area charts, pace vs. target, projected completion
  • [x] 8. AI-Generated Check-In Prompts — Personalized nudges via Anthropic/Gemini referencing user context
  • [x] 9. Unified Activity Feed — 4-source feed with 14-day lookback merging ally activity, community posts, and goal updates
Observability (Shipped Mar 2026)

Production observability stack, previously a pre-launch blocker. Now fully operational.

  • [x] P1. Observability — Lograge structured logging, Sentry error tracking + APM, GCP Uptime Checks, GET /health endpoint, Cloud Monitoring alerting, admin Monitoring tab
Phase 3: Launch Preparation (Shipped Apr 2026 — ahead of schedule)

Timeline: Apr-Jun 2026 (completed Apr 2026 — ahead of schedule) North star mapping: Enables the 6-month milestone (Oct 2026: Foundation & Engagement) Theme: Remove every blocker between the current product and a credible public launch. Legal compliance, real push notifications, infrastructure cleanup, and a baseline quality bar.

Status: All Phase 3 items shipped. Quality audit and accessibility work exceeded original scope — the Phase 4 WCAG 2.1 AA audit was pulled forward and completed alongside the Phase 3 baseline.


- [x] 10. Push Notifications (FCM/APNs + Capacitor) ✅ Shipped

User story: As a user, I want to receive timely push notifications on my phone when something needs my attention — a check-in reminder, an encouragement, a badge earned — so I stay engaged without opening the app.

Current state: Backend SendPushNotification interaction exists. UserDevice model stores device tokens. Frontend has NO push notification plugin (@capacitor/push-notifications not installed).

Scope:

  1. Install @capacitor/push-notifications in ionic_frontend/
  2. Configure Firebase Cloud Messaging (FCM) for Android and APNs for iOS
  3. Implement client-side push registration flow: request permission, obtain token, call StoreDeviceToken mutation
  4. Wire backend delivery to FCM/APNs (evaluate current Pushy.me usage — replace or complement)
  5. Handle notification tap routing (deep link to relevant screen: goal detail, achievements, feed)
  6. Implement notification permission prompt UX (coach-toned explanation of why notifications help, not a cold system dialog)

Acceptance criteria:

  • [x] Push notifications delivered on iOS (APNs) and Android (FCM)
  • [x] Device token registration works on app launch and after permission grant
  • [x] Tapping a notification opens the relevant in-app screen
  • [x] Permission prompt explains value before triggering system dialog
  • [x] All existing notification kinds (badge, encouragement, comment, reminder, past_due, follow, ai_check_in) trigger push
  • [x] Backend specs for updated push delivery
  • [x] Frontend unit test for registration composable
  • [x] Manual QA on iOS simulator and Android emulator

Success metrics:

  • Push notification opt-in rate: >60% iOS, >80% Android
  • Push notification delivery rate: >95%
  • Push-driven app opens: 15%+ of daily sessions

- [x] 11. Terms of Service & Privacy Policy

User story: As a user, I want to understand how my data is used and what the platform's terms are, so I can trust the app with my personal information.

Priority: Legal blocker for public launch. Tool: Termly

Scope:

  1. Generate ToS and Privacy Policy via Termly covering: data collection (goal data, mood logs, AI coaching interactions), third-party services (Clerk, GCP, AI providers), PBC obligations (no ads, no data selling), GDPR/CCPA provisions, data export and deletion rights
  2. Link from Settings > Legal in ionic_frontend/
  3. Link from marketing_landing/ footer
  4. Reference in app store metadata

What shipped:

  • ToS, Privacy Policy, Acceptable Use Policy, and Cookie Policy generated via Termly and published as branded iframe pages at /policies/*
  • Community Guidelines and User Content Guidelines authored and published as self-hosted pages
  • Termly consent banner added to all marketing site pages (auto-blocking enabled)
  • Consent Preferences link in every page footer
  • In-app AgreeToTermsModal, TermsOfService, and PrivacyPolicy components updated to point to Termly-hosted policies
  • Contact page updated with business address and phone
  • Sitemap updated with all 6 new policy URLs
  • Documentation: docs/company/legal-and-policies.md

Acceptance criteria:

  • [x] ToS and Privacy Policy generated, reviewed, and published
  • [x] Linked from ionic_frontend Settings page
  • [x] Linked from marketing_landing footer
  • [ ] Referenced in app store metadata (manual: add privacy policy URL in App Store Connect and Google Play Console)
  • [x] Consent checkbox or acknowledgment during sign-up flow

- [x] 12. Business Address

Priority: Legal blocker for public launch.

Objectuve Softworks, LLC (Delaware Public Benefit LLC; principal office in Chicago, IL). DBA: Objectuve. Address: 1449 South Michigan Ave, STE 13474, Chicago, IL 60605. Phone: (464) 733-3653.

Acceptance criteria:

  • [x] Business address registered and active
  • [ ] Updated in app store developer profiles (manual: update in App Store Connect and Google Play Console)
  • [x] Referenced in ToS and Privacy Policy

- [x] 13. Complete GCS Migration & Remove AWS Dependency

User story: As the engineering team, we want to fully consolidate on GCP by removing all AWS S3 references and dependencies.

Scope:

  1. Migrate any existing S3-hosted assets to GCS bucket
  2. Remove amazon configuration from storage.yml
  3. Remove aws-sdk-s3 gem from Gemfile
  4. Remove AWS_* environment variables from all environments
  5. Verify all upload/display flows work end-to-end with GCS
  6. Update documentation referencing AWS

Acceptance criteria:

  • [ ] All existing images accessible after migration
  • [ ] Upload/display works for goal events, avatars, community images
  • [ ] No AWS SDK in Gemfile
  • [ ] No AWS environment variables referenced
  • [ ] storage.yml contains only test, local, and google services

- [x] 14. Goal Reactions ✅ Shipped v3.4.24

User story: As a user, I want to react to a friend's update with a supportive emoji without writing a comment, so I can show support with minimal effort.

New GoalEventReaction model. Lower friction than comments, higher engagement signal. Reactions appear as counts on goal events in the feed.

Available reactions: 🚀 💪 🎯 🏁 🥇 🌟 ✨ 💥 🧨 👀 🙌 🤝 🐐 🛠️ 🔁 🧱

🔁 ties to the "Visualize, Actualize, Repeat" theme. 🧱 ties to the "stacking bricks" theme.

Acceptance criteria:

  • [x] New GoalEventReaction model with emoji support (16 reaction types)
  • [x] GraphQL mutation to add/remove reaction
  • [x] Reaction counts visible on goal events in feed and goal detail
  • [x] Push notification when someone reacts to your update
  • [x] Model specs, mutation specs, frontend unit tests
  • [x] Storybook story for reaction component

Success metrics:

  • Social interactions/user/week increase 3x
  • 60%+ of update viewers leave a reaction

- [x] 15. Basic Content Moderation ✅ Shipped v3.4.25

User story: As a community member, I want to feel safe knowing that inappropriate content is caught before it reaches me.

Lightweight initial moderation system. Full moderation suite deferred to post-launch.

Scope:

  1. AI pre-screening of community posts and comments via Ai::CoachService (flag toxic, spam, or discouraging content)
  2. Community report/flag button for users
  3. Admin review queue in admin dashboard (new tab or sub-tab under existing admin)
  4. Basic auto-moderation rules (profanity filter)

Acceptance criteria:

  • [x] Posts and comments pass through AI pre-screen before publishing
  • [x] Users can flag/report content
  • [x] Flagged content appears in admin review queue
  • [x] Admin can approve, remove, or warn
  • [x] Interaction specs for moderation flow

Success metrics:

  • Toxic content visible to users < 1% of total posts
  • Report-to-action time < 4 hours

- [x] 16. Screen Time Nudges ✅ Shipped

User story: As a user, I want the app to gently remind me to take a break if I've been on too long, reinforcing that this is an anti-social app.

Client-side session duration tracking (privacy-preserving, no server-side data). After ~15 minutes of continuous use, show a friendly nudge. Brand differentiator that reinforces the anti-social philosophy from day one.

Acceptance criteria:

  • [x] Session timer starts on app foreground, resets on background
  • [x] Nudge appears after 15 minutes of continuous use
  • [x] Nudge is dismissible and does not reappear for current session
  • [x] If browsing-heavy session, suggest returning to own goals/check-ins
  • [x] All tracking is client-side only (no server-side data)
  • [x] Frontend unit test for timer logic
  • [x] Storybook story for nudge component

Success metrics:

  • Average session duration stays within 8-12 min target range
  • Browsing-redirect nudges increase own-goal engagement by 15%

- [x] 17. Quick-Add from Notification ✅ Shipped

User story: As a user, I want to check in on a habit directly from a push notification without opening the app, so I can stay on track in seconds.

Capacitor push notification actions support action buttons. When a habit reminder notification arrives, include a "Check In" action button that completes the check-in without fully opening the app.

Acceptance criteria:

  • [x] Habit reminder notifications include "Check In" action button
  • [x] Tapping the action button calls the check-in mutation in the background
  • [x] Success confirmation shown as a follow-up local notification
  • [x] Works on both iOS and Android
  • [x] Degrades gracefully if notification actions aren't supported

Success metrics:

  • 20%+ of habit check-ins via notification action (vs. opening app)
  • Notification action rate 2x higher than tap-to-open rate

- [x] 18. "App Just Works" Quality Audit ✅ Shipped

User story: As a user, I want every interaction to be buttery smooth — errors handled gracefully, loading states clear, empty states helpful.

Systematic audit of all user-facing flows before public launch.

Scope:

  1. Audit all views: Dashboard, Goals, Goal detail, Communities, Community detail, Achievements, Settings, Feed, Profile
  2. Verify all error states show helpful messages with recovery actions
  3. Verify all loading states have skeletons or spinners
  4. Verify all empty states guide users toward action
  5. Fix any broken dark mode edge cases
  6. Performance audit: every tap responds within 100ms
  7. Tap states (pressed/hover/active) are consistent across all components
  8. Transitions/animations are consistent and not jarring (no abrupt jumps)
  9. Navigation feels predictable (back behavior always makes sense)
  10. No flicker between loading → loaded → empty states
  11. No layout shift when data loads (content doesn't jump)
  12. Retry flows don't reset user context unnecessarily
  13. Offline / poor network behavior handled gracefully
  14. Slow API responses don't block interaction unnecessarily
  15. Duplicate taps / spam actions are safely handled
  16. Partial failures don't break entire screens
  17. Consistent tone across the app
  18. No placeholder text, lorem ipsum, or debug copy
  19. No visual glitches (overlaps, clipping, misalignment)
  20. No console errors in production builds

What shipped:

  • All 9 views audited against 20 quality checks (83 files changed, +2400 lines)
  • Error states with retry buttons added to Dashboard, Goals, Goal detail, Communities, Community detail, Achievements
  • Dimension-matched loading skeletons replacing full-viewport spinners (Goals, Dashboard)
  • Actionable empty states added (Achievements filters, Goals)
  • Dark mode: hardcoded colors replaced with design tokens across 10+ components
  • Tap feedback (active:scale-95) added to all interactive elements
  • Duplicate-tap guards on mutation buttons (Dashboard, Goal detail, Communities)
  • Route lazy-loading + vendor chunk splitting for performance (FCP improvement)
  • Lighthouse a11y/SEO fixes: viewport zoom enabled, meta description, robots.txt
  • Pre-existing bug fix: missing Target icon import in Dashboard

Acceptance criteria:

  • [x] Every view audited and issues logged
  • [x] All critical issues fixed
  • [x] No unhandled error screens in any user flow
  • [x] All empty states have actionable guidance
  • [x] Performance meets 100ms response target for all interactions

Success metrics:

  • Zero unhandled error screens in production
  • App store rating maintained at 4.5+

- [x] Accessibility Baseline ✅ Shipped (exceeded scope — full WCAG 2.1 AA)

User story: As a user with a disability, I want the app to be usable with assistive technology and without requiring precision motor control, so I can track my goals like everyone else.

Priority: Pre-launch baseline. Considering Objectuve's mission as an empowerment tool, accessibility broadens the market and aligns with the PBC charter. In the US, 20-29% of adults have a disability that may impact web usage, and 73% of disabled users will leave a site that is difficult to use.

Scope:

  1. All tap targets meet minimum size (44px)
  2. Sufficient color contrast ratios in both light and dark mode (WCAG AA: 4.5:1 for text, 3:1 for large text)
  3. Forms are usable without precision tapping (adequate spacing, clear hit areas)
  4. Screen reader labels on all key actions (buttons, navigation, interactive elements)

What shipped (exceeded scope — completed full Phase 4 WCAG 2.1 AA audit alongside baseline):

  • eslint-plugin-vuejs-accessibility installed and configured (ESLint a11y errors: ~150 → 0)
  • cypress-axe + jest-axe for automated a11y testing in CI
  • useAccessibility.ts composable: useFocusTrap, useAnnounce, useReducedMotion, useSkipLink
  • Skip-to-main-content link + aria-live announcer region in App.vue
  • Global prefers-reduced-motion CSS media query
  • UiButton/UiInput bumped to 44px minimum tap targets
  • ARIA tab patterns on Settings, ActivityFeed, Goals, Community detail
  • aria-label on all 60+ icon-only buttons, aria-hidden on decorative icons
  • role="navigation" + aria-current="page" on BottomTabBar and SideMenu
  • Keyboard support (role="button" + tabindex + @keyup.enter) on 30+ clickable elements
  • Form label associations (for/id pairs) across 15 form components
  • role="radiogroup" with roving tabindex on MoodSelector and GoalForm
  • Focus traps on 5 custom div-based modals via useFocusTrap
  • aria-labelledby on all 12 modals
  • Image alt text audit across 16+ components
  • role="alert"/aria-live on dynamic content (errors, toasts, feed, notifications)
  • PageTransition respects prefers-reduced-motion
  • Cypress a11y smoke test covering all core views
  • docs/development/accessibility.md standards document
  • Viewport zoom enabled (user-scalable=yes, maximum-scale=5.0)

Acceptance criteria:

  • [x] Audit all interactive elements for 44px minimum tap target size
  • [x] Verify color contrast ratios meet WCAG AA in both themes
  • [x] All buttons, navigation items, and form controls have descriptive aria-label or visible text
  • [x] Test core flows with VoiceOver (iOS) and TalkBack (Android)
  • [x] Fix critical failures identified during testing

Success metrics:

  • Zero critical accessibility violations on core flows (onboarding, goal creation, check-in, feed)
  • All interactive elements meet 44px minimum tap target

- [x] 30. Social Simulator (Dev Tooling) ✅ Shipped v3.4.25

User story: As the engineering team, we need a way to simulate social interactions in dev/staging to test social features at scale.

Dev/staging tool generating realistic social data: multiple users with goals, events, encouragements, comments, community posts, ally relationships. Supports configurable scenarios (active community, lapsed users, new user onboarding). Needed pre-launch to validate social features (reactions, content moderation, nudges) before real users arrive.

Success metrics:

  • [x] Can generate 50+ users with realistic activity in < 1 minute
  • [x] All social features testable without manual data entry
Phase 3.5: Polish, Infrastructure & Feedback (Shipped Apr 2026)

Timeline: Apr 2026 (post-launch-prep iteration) Theme: With Phase 3 launch blockers cleared, this iteration focused on product polish, architecture modernization, developer infrastructure, and building a user feedback channel. Not originally planned — these changes emerged organically from QA, dogfooding, and infrastructure needs.


User-Facing Features

In-App Feedback Board (v3.4.35)

  • Voting and commenting system with category filters (Feature/Improvement/Bug/Other)
  • Admin roadmap view with kanban columns (Planned/In Progress/Completed)
  • "My Posts" and "My Votes" views, voter notifications on status changes
  • Official admin comments, admin dashboard with stats cards
  • "Voice Heard" and "Community Voice" gamification badges
  • Accessible from Settings tab

PostHog Analytics Integration (v3.4.49)

  • Session replay, autocapture, and user identification on login/logout
  • Gated by environment variable, disabled in development
  • Enables product metrics tracking and user behavior analysis

Focus Mode Desktop Redesign (v3.4.49)

  • Responsive ambient sidebar showing streak, XP/level, urgent goal, and daily quote
  • Mobile layout unchanged; desktop gets "Full Dashboard" toggle

Magic Code Email Sign-In Fallback (v3.4.40)

  • Fallback authentication when Clerk SDK fails to load or encounters CORS errors
  • 6-character alphanumeric codes with 10-minute expiry, rate-limited to 3 per window
  • Two-step UI (email → code verification) plus auto-verify via magic link URLs
  • HS256 JWT session tokens (24-hour expiry), branded email template via Mailtrap

Client-Side Photo Cropping (v3.4.44)

  • vue-advanced-cropper integrated across all upload surfaces
  • Circle crop for Settings avatar, free crop for GoalForm, GoalEventForm, CreateCommunityModal
  • Fixed 5 backend interactions passing raw UploadedFile to ActiveStorage

Avatar Upload on Settings (v3.4.34)

  • Photo upload wired to Settings page via UserPhoto model and GraphQL mutation

Streak Details Modal (v3.4.32)

  • Flame icon in MomentumBar now opens StreakDetailsModal for intuitive access

Community Creation (v3.4.46)

  • Replaced stub mutation with real implementation supporting cover image uploads

Goal Detail Page Redesign (v3.4.51-52)

  • Private goal detail: Compact 200px hero with inline stats (streak, progress, milestones, days left), sticky action bar with primary CTA + overflow menu, content-first layout with description, milestones, and timeline as main content, analytics/habits/charts in collapsed accordion
  • Public goal page: Matching compact hero with owner + progress card, milestones with progress bar, social proof follower avatars, prominent 16:9 timeline images with reactions, dark mode Tailwind styling

Badge Illustration Refresh (v3.4.50)

  • All 16 badge SVGs redesigned with polished illustrations

Timeline & Milestone UX Improvements (v3.4.50-51)

  • Click-to-toggle milestone completion from goal detail
  • Milestone selector dropdown in GoalEventForm for event attribution
  • Optimistic timeline updates with instant event appearance and auto-scroll
  • Timestamps include time ("April 4, 2026 at 7:15 AM")
  • Milestone creation events show emerald styling, achievement events stay gold
  • Mood emoji display on event cards, cleaner card layout with dark mode support

Infrastructure & Architecture

DDD Phase 1: Bounded Context Namespacing (v3.4.31)

  • 38 interactions namespaced into 5 bounded contexts: goal_tracking/, social/, user_identity/, gamification/, content_moderation/
  • 13 jobs namespaced into 4 context directories
  • Monolithic 1,620-line graphql.js split into 7 context-aligned modules
  • All 44 models annotated with DDD ownership comments
  • Ubiquitous Language documentation expanded to 60+ terms
  • Zero runtime behavior changes, 761 RSpec examples passing

Deploy Pipeline Optimization (v3.4.39)

  • Production reuses staging Docker image (saves ~5 min per deploy)
  • Frontend and backend jobs run in parallel
  • Demo reset made fire-and-forget (saves ~9 min blocking)
  • deploy-sites.sh script for one-command supporting site deployment

Lighthouse Audit Fixes (v3.4.48)

  • Firebase cache headers: 1-year immutable for hashed assets, no-cache for index.html
  • Preconnect hints for fonts.gstatic.com (502ms LCP savings)
  • WCAG contrast fixes: sidebar text 4.5:1 ratio, selected nav items
  • Aria-labels for progress dots, theme toggle, and logo

Logo Rotation (v3.4.37-38)

  • Arc repositioned: starts at 12 o'clock, sweeps 270 CW, gap/taper at 9 o'clock
  • Gold dot moved to upper-left (~225 degrees)
  • All static SVGs, Vue animations, favicon, and marketing assets regenerated

Marketing Site & About Page Overhaul (v3.4.31)

  • Storytelling rewrite with "Built to Help You Leave" philosophy section
  • Pricing section (Free $0 + Supporter $4/mo), visible FAQ accordion
  • New About page (/about): progress statement, timeline, values, logo symbolism
  • Self-hosted fonts (eliminated 2 render-blocking CDN requests)
  • Plausible Analytics (cookie-free), WCAG skip-to-content links, 44px touch targets
  • Brand copy changed: "AI" replaced with "Coach" throughout

Bug Fixes

Engineering milestones shipped alongside product polish (v1.5–v1.8):

  • v1.5 (2026-04-15) — DDD Phase 2 Domain Events: thin DomainEvents facade, three cross-context seams (Feedback / AI Workforce / Billing) migrated. See v1.5 milestone.
  • v1.6 (2026-04-16) — Audit Remediation: secrets scrubbed, security headers, GraphQL hardening, codegen + schema-drift CI gate, Apollo typePolicies, coverage thresholds. See v1.6 milestone.
  • v1.7 (2026-04-18) — Admin Evolution: roles + role-aware shell, Relay pagination on six admin queries, Rack::Attack throttles, /system/self-health probe, Sentry + PostHog wired into admin frontend, GDPR intake table. See v1.7 milestone.
  • v1.8 (2026-04-18) — Onboarding Wizard Overhaul: full-page /welcome route, persona-aware branching, server-authoritative onboarding state, reusable SlideWizardLayout framework, full funnel analytics. See v1.8 milestone.
  • Phase 38 (in flight, post-v1.8) — Supporter & Revenue Analytics: admin Revenue tab with MRR tiles + theme-aware Doughnut chart, AdminStatsService#supporter_stats aggregation, SupporterStatsType GraphQL field. Backend shipped; frontend Revenue tab landed v3.7.x.

Bug Batch 1 (v3.4.50-51)

  • Mobile save button visibility on GoalCreate, target date removal with clear button
  • Coach refinement "Revert to original" text, notification popover fix
  • Follow notification navigation, GoalForm template nesting
  • Focused mode card contrast and mobile layout, goal hero redundant edit icon
  • ClerkUserSync email-based linking for existing users
  • Milestone generation error handling, milestone names truncated to 50 chars
  • Onboarding wizard made dismissible, newMilestones atomic argument added
Phase 4: Engagement & Retention (Shipped Jul 2026)

Timeline: Jul-Sep 2026 (first 3 months post-launch) — completed ahead of schedule (2026-07-08) North star mapping: Drives the 6-month targets (Oct 2026: 30%+ 7-day retention, 25%+ DAU/MAU) Theme: Deepen the daily loop. Reduce churn. Give users human and AI-driven reasons to come back. Every feature in this phase addresses the question: "Why should a user return tomorrow?"

Status: All Phase 4 items shipped. Delivered across ad-hoc feature PRs (accountability partners, welcome-back flow, community nudges/challenges, offline-first check-ins, curated goal templates) plus two dedicated milestones: v3.12 Identity-Anchored Goal Journey (goal reflection on completion + past goal attempt context, shipped 2026-07-06) and v4.1 Engagement & Retention (daily micro-journal, privacy controls, onboarding philosophy pledge, home screen widgets — 4 phases, shipped 2026-07-08). See v3.12 milestone and v4.1 milestone.


- [x] 19. Accountability Partners ✅ Shipped (Phase 4 Feature 1, PR #352)

User story: As a user, I want to pair with an ally on a shared goal with mutual visibility and missed-day alerts, so we hold each other accountable.

Extends UserAlly with accountability partner mode. Paired users see each other's check-ins, get notified on missed days, and earn bonus XP for mutual streaks. Users invite existing allies as accountability partners. The app suggests potential partners from shared communities with similar goal types.

What shipped:

  • AccountabilityPartner interactions (invite, accept, decline, end pairing) under social/accountability_partner/
  • GraphQL mutations and types exposed via the existing UserAlly graph
  • Missed-day alert pipeline tied to the partner's check-in cadence
  • first_accountability_partner UserAction (badge trigger)
  • Dashboard partner widget surfaces partner activity + missed-day status
  • Bonus XP awarded for mutual same-day check-ins

Success metrics:

  • Partnered users retain at 2x solo rate
  • 30%+ of active users pair within 60 days

- [x] 20. Re-engagement / "Welcome Back" Flow ✅ Shipped

✅ Verified shipped in the 2026-07-04 audit (OBJ-1110/1117/1125/1134): useWelcomeBack.ts + WelcomeBackInterstitial.vue.

User story: As a user returning after a lapse, I want the app to acknowledge my absence and help me restart without judgment.

When a user returns after 5+ days of inactivity: acknowledge the break, offer streak mercy (optional retroactive freeze), suggest reducing goal frequency, and surface AI coach personalized restart advice referencing their specific goals.

Success metrics:

  • Returning users who see welcome-back flow set a new goal event within 48h at 60%+ rate
  • Streak mercy reduces permanent churn by 20%

- [x] 21. Community Nudges ✅ Shipped

✅ Verified shipped in the 2026-07-04 audit (OBJ-1110/1117/1125/1134): SendPartnerNudge interaction + PartnerWidget — shipped at ally-to-ally scope, matching the item's own "lapsed ally" framing.

User story: As a user, I want to send a one-tap nudge to a lapsed ally to encourage them to get back on track.

Rate-limited to 1 nudge per day per pair to prevent harassment. Push notification with direct link to log a check-in. Complements AI-generated check-in prompts from Phase 2 with human-driven motivation.

Success metrics:

  • Nudged users return within 24h at 40%+ rate
  • 50%+ of active users send at least one nudge per month

- [x] 22. Community Challenges ✅ Shipped

✅ Verified shipped in the 2026-07-04 audit (OBJ-1110/1117/1125/1134): CreateCommunityChallengeModal, ChallengeLeaderboard, and the social/*_community_challenge interactions.

User story: As a community member, I want time-boxed group challenges with a leaderboard and completion badge.

New CommunityChallenge and ChallengeParticipant models. Opt-in, shared leaderboard, and unique badge on completion.

Success metrics:

  • Community posts/week +40%
  • Challenge participants retain 1.5x non-participants

- [x] 23. Goal Reflection on Completion ✅ Shipped (v3.12 Phase 115, PR #1289)

User story: As a user completing or archiving a goal, I want to reflect on what I learned, so I can carry that wisdom into future goals.

What shipped:

  • completion_reflection field on Goal (free text, ≤200 chars), captured via a new GoalCompletionSheet.vue at goal completion ("What did you take away?", Save/Skip)
  • Always sent explicitly (trimmed text or null) on save, so re-completing a goal without new text clears a stale reflection rather than silently leaving it
  • Threaded into CoachService#generate_welcome_back()'s streak-lapse pathway, sourced from the user's most recently completed goal (not the lapsed goal itself)
  • Scope collapsed from "completion/archive" to completion-only — Goal has no archive state (only completed/completed_at)
  • Presence-only instrumentation (completion_reflection_present); raw text is never logged

Success metrics:

  • 40%+ of completed goals include a reflection
  • Goals created after a reflection complete at 15%+ higher rate

- [x] 24. Daily Micro-Journal ✅ Shipped (v4.1 Phase 1, PR #1271)

User story: As a user, I want to optionally add a one-sentence note alongside my habit check-in, building an emotional data layer over time.

Optional 1-sentence note field during check-in ("How was today?"). AI coach can reference patterns over time ("You tend to feel great after morning runs"). Lightweight — does not break the 10-min session target.

What shipped:

  • habit_completions.note (nullable text, ≤280 chars, stripped) via GoalTracking::CheckInHabit
  • Mutations::CheckInHabit(note:) + Types::HabitCompletionType#note, scoped server-side to the completion's owner so it never leaks via public/community/ally goal reads
  • HabitCard.vue opt-in note capture with post-check-in echo; one-tap check-in path left unchanged
  • Behind flag micro_journal_enabled — fails closed client and server-side
  • BuildCoachContext folds recent habit notes into the existing recent-reflections signal for the Coach (no new read path)

Success metrics:

  • 25%+ of check-ins include a journal note
  • Users who journal retain at 1.3x rate

- [x] 25. Home Screen Widgets (iOS/Android) ✅ Shipped (v4.1 Phase 4, PRs #1306, #1321, #1325)

User story: As a user, I want to see today's habits and my current streak on my phone's home screen, so I get a zero-friction daily reminder without opening the app.

Capacitor/native widget showing today's habits with completion status and current streak count. Aligns with anti-social philosophy (check progress without entering the app).

What shipped:

  • Custom Capacitor plugin WidgetBridge (write + reload in one call) writes a habits+streak snapshot to iOS App Group UserDefaults / Android SharedPreferences on check-in and app foreground — no @capacitor/preferences split-brain risk, no new backend/GraphQL (projects the existing GOALS_QUERY/USER_QUERY)
  • Native iOS WidgetKit + Android App Widget rendering all 5 states (default · all-done · empty · stale · first-run) at small + medium sizes, both themes; streak number always in foreground, flame in accent (the one a11y constraint not to regress)
  • Whole-widget tap deep-links to the dashboard via the existing appUrlOpen handler — no new route
  • Read-only V1 — interactive check-in from the widget is a documented, out-of-scope fast-follow, not shipped here
  • In-app "Add widget" affordance (Settings row + setup sheet with live preview and per-platform instructions), fail-closed behind home_widgets_enabled
  • Full details: docs/features/home-widgets.md

Success metrics:

  • Widget users check in 30%+ more frequently
  • Widget adopters retain at 1.5x rate

- [x] 26. Onboarding Philosophy Pledge ✅ Shipped (v4.1 Phase 3, PR #1300)

User story: As a new user, I want to understand what Objectuve stands for during onboarding so I know this isn't another attention-grabbing app.

Optional, skippable "Our Philosophy" screen during onboarding. Presents five core values about consistency, accountability, and anti-addictive design. Values also referenced in community guidelines.

What shipped:

  • New PhilosophySlide.vue registered at index 1 (startphilosophylife-area) in the onboarding wizard, skippable via the existing chrome (no slide-local skip/advance logic needed).
  • Values + tagline sourced from a new shared module, ionic_frontend/src/constants/ourStoryValues.ts (OUR_STORY_VALUES, PHILOSOPHY_TAGLINE), consumed by both OurStory.vue and PhilosophySlide.vue — no copy drift between /our-story and onboarding.
  • Behind flag onboarding_pledge_enabled — fails closed. Flag-off removes the slide from the registry entirely (not a skip: guard), so the step counter and resume position are correct with the slide absent.
  • getPlaceholderSlides() re-evaluates the flag on every call (no module-scope caching) so WelcomeView.vue's known-slide check and WelcomeLayout.vue's registry both read the same live flag state; resumeResolver.ts's resume fallback checks isFeatureFlagEnabled() directly (it doesn't consume the slide registry) so a cached resume position at the flag-gated philosophy slide doesn't resolve when the flag is off.
  • wizard_slide_viewed / _advanced / _skipped analytics fire automatically — the chrome's analytics wiring is slide-id-agnostic.

Success metrics:

  • 70%+ of new users view the pledge screen
  • Users who engage with the pledge retain at 1.3x rate vs. skippers

- [x] 27. Past Goal Attempt Context ✅ Shipped (v3.12 Phase 114, PR #1260)

User story: As a user creating a goal, I want to share whether I've tried this before and what happened, so the AI coach can personalize my experience.

What shipped:

  • past_attempt_context field on Goal (free text, ≤200 chars) captured in GoalForm.vue via a "Tried this before?" disclosure, collapsed by default, auto-expands if a saved value exists
  • Threaded into Coach's existing prompt templates (Ai::Prompts::Coaching, Synopsis, CheckIns) — no new prompt module, each template's VERSION bumped
  • Presence-only instrumentation (past_attempt_context_present); raw text is never logged

Success metrics:

  • 30%+ of new goals include past attempt context
  • Goals with context complete at 15%+ higher rate

- [x] 28. Offline-First Check-ins ✅ Shipped

✅ Verified shipped in the 2026-07-04 audit (OBJ-1110/1117/1125/1134): syncStore.ts + useOfflineMutation.ts offline mutation queue (PWA phases 70–72).

User story: As a mobile user, I want my habit check-ins to work even when I have no internet connection, syncing when I'm back online.

Queue check-ins locally when offline and sync when connectivity returns. Critical for mobile-first users with spotty connectivity.

Success metrics:

  • Zero failed check-ins due to connectivity
  • Offline check-ins represent 5-10% of total check-ins

- [x] 29. Privacy Controls: "Go It Alone" & Private Mode ✅ Shipped (v4.1 Phase 2, PR #1281)

User story: As a user, I want to control my social visibility — either locking community features entirely or hiding my profile from search and ally requests — so I can use Objectuve on my own terms.

Two complementary privacy features:

  1. "Go it alone" mode — A toggle in Settings that hides all community-related UI (communities tab, ally activity, social feed). The user sees only their goals, streaks, and personal progress. Ideal for users who want pure self-accountability without social features.

  2. Private mode — A profile visibility toggle that hides the user from community search results, ally request discovery, and public leaderboards. The user can still join communities and accept ally requests via direct invite — they just aren't discoverable.

  3. User search by username — A search mechanism for users who want to find specific people by username. Respects private mode (private users don't appear in search results).

What shipped:

  • users.go_it_alone / users.private_mode (boolean, default false, private_mode indexed) via migration AddPrivacyControlsToUsers
  • Mutations::UpdatePrivacySettings (self-only, fails closed — raises FORBIDDEN when privacy_controls_v1 is off for the acting user) + UserIdentity::UpdatePrivacySettings interaction
  • go_it_alone suppresses Social::FindSuggestedAllies and CommunityQueries#recommended_communities recommendations, gated on the target user's own flag state
  • private_mode excludes a candidate from search_users (username search), gated on the candidate's own flag state (not the searcher's) — Admin::UserSearch (admin search) unaffected
  • PrivacyControlsCard.vue in Settings → Privacy, gated on privacy_controls_v1 (card absent entirely when off, no layout gap)
  • Behind flag privacy_controls_v1 — fails closed client and server-side across all three surfaces (frontend card, mutation, search filter)
  • Scope note: shipped as prompt-suppression + search-discoverability control rather than hiding all community UI outright, and username search reuses the existing search_users resolver rather than a new dedicated surface; Teams PrivacyStrip is a separate, out-of-scope surface.

Acceptance criteria:

  • [ ] "Go it alone" toggle in Settings that hides community UI elements
  • [ ] Private mode toggle in Settings that removes user from search/discovery
  • [ ] Username search in the ally/community context
  • [ ] Both modes persist across sessions (stored on User model)
  • [ ] AI coach respects mode — no community-related suggestions when solo
  • [ ] Model specs, mutation specs, frontend unit tests
  • [ ] Storybook stories for settings toggles

Success metrics:

  • 10-15% of users enable "go it alone" mode
  • Private mode adoption doesn't reduce community engagement for remaining users
  • Username search drives 20%+ of new ally connections

- [x] 29b. Goal Templates Library — Curated Seed ✅ Shipped

✅ Verified shipped in the 2026-07-04 audit (OBJ-1110/1117/1125/1134): 28 seeded curated templates (7 themes × 4) + TemplatePickerModal in the goal creation flow.

User story: As a new user, I want to pick a curated template with pre-built milestones so I don't start from scratch.

Curated seed set of 10-20 templates handpicked by the team, with pre-built milestones. Template picker in goal creation flow with customization after selection. Reduces onboarding friction for users arriving from organic search. User-generated marketplace and submission flow remain at 3-year horizon per Appendix C.

Success metrics:

  • Template users complete goal setup 40%+ faster
  • Template users set 1.5x more milestones
  • 30%+ of new goals created within first 7 days are template-derived

(re-sequenced from Phase 6, 2026-04-29)


- [x] WCAG 2.1 AA Accessibility Audit ✅ Shipped (pulled forward from Phase 4)

User story: As a user with a disability, I want the app to meet WCAG 2.1 AA standards comprehensively, so every feature is fully accessible.

Full accessibility audit and remediation, building on the Phase 3 baseline. Screen reader navigation for all flows, keyboard support, focus management, ARIA roles and states, motion-reduction support, and assistive technology compatibility testing across iOS and Android. Over 90% of websites fail basic accessibility standards — Objectuve should not be one of them.

Note: This was originally a Phase 4 item but was pulled forward and completed during Phase 3 launch readiness alongside the Accessibility Baseline. See the Phase 3 Accessibility Baseline entry for the full "What shipped" details.

Scope:

  1. Full WCAG 2.1 AA audit of all views and user flows
  2. Screen reader navigation testing (VoiceOver, TalkBack) for complete task flows
  3. Focus management: logical tab order, visible focus indicators, focus trapping in modals
  4. ARIA roles and states for all custom components (switches, modals, accordions, tabs)
  5. Motion and animation: respect prefers-reduced-motion system setting
  6. Form validation: errors announced to screen readers, associated with fields
  7. Image alt text and decorative image marking
  8. Live region announcements for dynamic content (toasts, feed updates, XP gains)

Success metrics:

  • Zero critical or serious WCAG 2.1 AA violations
  • All core flows completable via screen reader
  • Storybook a11y addon reports clean for all component stories

Phase 5: Intelligence & Analytics

Timeline: Oct-Dec 2026 North star mapping: Drives the 1-year milestone (Mar 2027: find product-market fit signals, validate Phase 2-4 success metrics) Theme: Make the app smarter. Measure everything. Use data to personalize the experience and validate product decisions.


- [x] 31. Mood-Goal Correlation Insights ✅ Shipped (v4.6 Phase 3, OBJ-1509, PR #1595)

User story: As a user, I want to see patterns between my mood and goal progress to understand what improves my wellbeing.

Correlate MoodLog data with GoalEvent timestamps. Surface insights through existing useAiInsights.ts system.

Success metrics:

  • Mood-insight users log moods 30%+ more
  • Insight dismissal rate < 40%

- [x] 32. Goal Auto-Adjustment ✅ Shipped (v4.6 Phase 3, OBJ-1509, PR #1595)

User story: As a user, I want the app to suggest adjusting my timeline when I'm consistently ahead or behind.

Analyze event frequency vs. expected pace. Surface AI insight suggesting adjustment with one-tap accept.

Success metrics:

  • Auto-adjusted goals complete at 20%+ higher rate
  • 50%+ of suggestions accepted

- [x] 33. Weekly Progress Digest Email ✅ Shipped v1.22

✅ Verified shipped in the 2026-07-04 audit (OBJ-1110/1117/1125/1134): shipped in v1.22, at 100% rollout.

User story: As a user, I want a weekly summary of my streak, XP, and goals so I'm reminded to come back.

New WeeklyDigestJob in cronotab.rb. Extends UserMailer with weekly_digest(user). Aggregates streak, XP, goals updated/stalled, milestones, ally highlights.

Success metrics:

  • Email open rate > 30%
  • Digest recipients return within 24h at 25%+ rate
  • Week-over-week retention +15%

- [x] 34. Personal Analytics Dashboard ✅ Shipped (v4.6 Phase 2, OBJ-1508, PR #1597)

User story: As a user, I want to see patterns across all my goals — completion rates, streaks by category, activity heatmap.

New /analytics view with Chart.js: completion by category, activity heatmap, streak history, XP over time, "month in review" card.

Success metrics:

  • Analytics becomes top-5 most visited page within 30 days
  • Analytics viewers log events 20%+ more the following week

- [x] 35. Smart Notification Timing ✅ Shipped (v4.6 Phase 5, OBJ-1511, PR #1617)

User story: As a user, I want notifications to arrive at the time I'm most likely to act on them, not at a generic hour.

Learn each user's optimal notification time from check-in patterns (e.g., user usually checks in at 7:30am → send nudge at 7:15am). Privacy-preserving, computed server-side from existing data.

Success metrics:

  • Smart-timed notifications have 2x action rate vs. fixed-time
  • Check-in-within-30min rate increases 25%+

- [x] 36. Analytics Instrumentation ✅ Shipped (v4.6 Phase 1, OBJ-1507, PR #1596)

User story: As the product team, we want proper product analytics to measure success metrics defined in each roadmap phase.

Implement event tracking for key user actions (goal creation, check-ins, community joins, feature usage). Dashboard tooling to validate Phase 2-6 success metrics and inform future prioritization.

Success metrics:

  • All roadmap success metrics have corresponding dashboards
  • Weekly metrics review process established

- [x] 37. Feature Switches ✅ Shipped

✅ Verified shipped in the 2026-07-04 audit (OBJ-1110/1117/1125/1134): featureFlags.ts (frontend) + FeatureFlagService (backend) + PostHog sync script + CI drift gate.

User story: As the engineering team, we want a feature flag system so we can gradually roll out features, run A/B tests, and toggle per environment.

Per-environment toggles, percentage-based rollouts, user-segment targeting. Evaluate Flipper gem vs. custom implementation.

Success metrics:

  • All Phase 5+ features launched behind feature flags
  • Zero-downtime feature rollouts for 100% of flagged features
  • A/B test capability operational for at least one feature

- [x] 38. Goal Brainstorming Quizzes ✅ Shipped (v4.6 Phase 4, OBJ-1510, PR #1607)

User story: As a user who isn't sure what goals to set, I want a guided quiz that helps me discover meaningful goals based on my life situation.

Quiz-based goal discovery: 3-5 questions about life areas (health, career, relationships, creative, financial) and current pain points. AI generates 3-5 suggested goals. Accessible from onboarding and goal creation flow. Uses Ai::CoachService with a new suggest_goals() method.

Success metrics:

  • 40%+ of quiz users adopt at least one suggestion
  • Onboarding drop-off at goal creation reduced by 25%

Docs: AI Coaching Expansion


- [x] 38b. Feedback AI Summarization ✅ Shipped (v4.6 Phase 4, OBJ-1510, PR #1607)

User story: As an admin, I want a weekly summary of top feedback themes so I can prioritize the roadmap with confidence.

Coach-powered analysis of feedback posts, grouping by theme, highlighting vote trends, and surfacing emerging requests. Displayed in the admin feedback dashboard. Uses existing Ai::CoachService with a new summarize_feedback() method.

Success metrics:

  • Admin reviews weekly summary within 24h of generation
  • Summary insights correlate with top-voted posts

Docs: AI Coaching Expansion


Phase 6: Growth & Virality

Timeline: Jan-Mar 2027 North star mapping: Drives organic growth toward 1-year targets (5K-15K registered users, 1.5K-4K MAU) Theme: Features that drive organic acquisition. Every item in this phase answers: "How does this bring a new user to Objectuve?"


- [x] Data Portability / Export ✅ Shipped v3.9.103-104

User story: As a user, I want to download a complete archive of my data so I own my information and can leave any time.

What shipped:

  • Full data export (ZIP) accessible from Settings > Privacy > Your data
  • Export includes user profile, all goals/events, mood logs, milestones, community memberships, AI coaching memories, feedback
  • Asynchronous processing with 24h request cooldown per email
  • Email notification with 30-day signed URL for download
  • Four UI states: idle (request), requesting (spinner), processing (email pending), ready (download)
  • PBC obligation satisfied — users always own their data

Acceptance criteria:

  • [x] Export available to authenticated users on demand
  • [x] 24-hour cooldown enforced per email
  • [x] Data archive includes all user-owned records
  • [x] Email notification with 30-day download window
  • [x] Fully accessible component with ARIA labels
  • [x] Backend specs for export pipeline

Success metrics:

  • 50% of users interact with export card within 6 months of feature launch

  • Zero support tickets for export access issues
  • Feature surfaces as trust signal in user feedback

See docs/features/data-export.md for full documentation.


- [x] 39. Celebration Sharing Cards ✅ Shipped (v4.56 Celebration Sharing Cards)

User story: As a user hitting a milestone or badge, I want to share a branded card to social media so my friends see what I've accomplished.

Generate branded shareable cards (like Spotify Wrapped or Duolingo screenshots) for badges, milestones, and streaks. One-tap share to Instagram Stories, Twitter, etc. Builds on existing OG meta tag work from Phase 1.

Success metrics:

  • 15%+ of badge/milestone earners share a card
  • Shared cards drive 5%+ of new signups (referral attribution)

- [x] 40. Public User Profile Overhaul ✅ Shipped

✅ Verified shipped in the 2026-07-04 audit (OBJ-1110/1117/1125/1134): PR #1146, merged 2026-06-15.

User story: As a user, I want a polished public profile showcasing my goal progress and achievements.

Focus on accountability signals (active goals, streaks, badges, community memberships) rather than vanity metrics (follower counts, post volume). Anti-social ethos front and center — profiles should inspire action, not passive browsing.

Success metrics:

  • Profile page visits increase 2x
  • 50%+ of users customize their profile within 30 days
  • Profile-to-encouragement conversion: 10%+

- [x] 41. Community Discovery Improvements ✅ Shipped (v4.63 Community Discovery & Seasonal Events)

User story: As a user, I want community recommendations based on my goals and allies, not a generic list.

Replace placeholder trending_communities / recommended_communities logic with real recommendations using goal categories, ally overlap, and community health score.

Success metrics:

  • Community join rate from discovery +25%
  • 40%+ of new users join a community within 7 days

- [x] 43. Seasonal Events & Challenges ✅ Shipped (v4.63 Community Discovery & Seasonal Events)

User story: As a user, I want time-boxed platform-wide events that give me an extra reason to engage and bring friends along.

Platform-wide events: "New Year New Goals" (January), "Spring Reset" (April), "Back to School" (September). Each event has a unique badge. Drives organic growth at peak search times for goal/habit apps. Builds on community challenges infrastructure from Phase 4.

Success metrics:

  • 30%+ of MAU participate in seasonal events
  • Event periods see 2x signups vs. non-event periods

- [x] 44. Goal Visibility Controls (Allies-Only) ✅ Shipped (v4.61 Allies-Only Goal Visibility, PRs #3189/#3193/#3205/#3187/#3220)

User story: As a user, I want a visibility option between public and private — visible to my allies only — so I'm more comfortable sharing.

Added "allies only" visibility to goals — a third visibility tier alongside public and private, visible to the owner and every accepted ally. See Allies § Goal visibility tiers for the shipped model. Rollout state: the control is behind goal_allies_only_visibility, currently at 0% rollout — this is build-out, not yet a launch; no real user can set a goal to allies-only from the app today.

Success metrics:

  • 20%+ of goals set to allies-only visibility — not yet measurable at 0% rollout. Instrumented via a PostHog capture on every visibility change (Phase 5); readable once the flag ramps.
  • Allies-only goals receive 3x more encouragements than private goals — not yet measurable at 0% rollout. No new instrumentation needed — derivable from the visibility column against existing encouragement rows once real goals exist in the allies tier.

- [x] 45. Import from Other Apps ✅ Shipped (v4.64 Import From Other Apps, Phases 1–7)

User story: As a user switching from another app, I want to import my existing habits and goals so I don't lose my history.

CSV import for goals.csv/habit_completions.csv shipped as the baseline — see Data Import for the full contract. Habitica and Strides API integrations map to this same CSV importer rather than needing new backend work; Apple Health and Google Fit are Connected Apps candidates instead, out of scope for this milestone — see Import Provider Evaluation for the full per-provider verdicts. Rollout state: merged to master behind data_import_enabled, currently at 0% rollout — this is build-out, not yet a launch; no real user can import data from the app today.

Success metrics:

  • 10%+ of new users import data — not yet measurable at 0% rollout. data_import_committed is captured via PostHog on every commit (Phase 3); readable once the flag ramps.
  • Importers retain at 1.5x rate vs. fresh-start users — not yet measurable at 0% rollout.

- [x] 45b. Feedback Categories Expansion ✅ Shipped (v4.62 Phases 3–4, PRs #3210/#3260)

User story: As a user, I want to tag my feedback with specific topics so posts are easier to find and organize.

Admin-managed FeedbackTag vocabulary alongside the 4 fixed categories (feature/improvement/bug/other), up to 3 tags per post, plus a board-side tag filter and an admin tag-management screen. See Feedback § Data Model and § Admin: Tag Management for the full model/UI. Rollout state: merged to master behind feedback_tags_enabled, currently at 0% rollout — this is build-out, not yet a launch; no real user sees the tag picker, tag chips, or tag filter today.

Success metrics:

  • 60%+ of posts use at least one tag — not yet measurable at 0% rollout.
  • Tag-based filtering usage > 20% of board visits — not yet measurable at 0% rollout.

- [x] 45c. Public Feedback Board ✅ Shipped (v4.62 Phases 6–7, PRs #3214/#3230/#3231)

User story: As a potential user, I want to see what the community is requesting so I can gauge whether the product is right for me.

Public, unauthenticated read path (publicFeedbackPosts/publicFeedbackPost) plus a standalone feedback_site/ Vue app and a crawler-facing SSR HTML path, all serving anonymous viewing of posts, votes, and comments. Clerk auth still required for voting, posting, and commenting. Separate Firebase Hosting target (enkidu-feedback). See Feedback § Public Feedback Board for the full contract, including the anonymized author fields. Rollout state: merged to master, but dark for two independent reasons — the PUBLIC_FEEDBACK_READ_ENABLED kill switch is unset (off) in every environment, and feedback.objectuve.com's Firebase Hosting site was never provisioned in GCP (OBJ-3864, same gap shape as enkidu-guide/OBJ-1846). No real visitor can reach this board today.

Success metrics:

  • Public board drives 5%+ of new signups — not yet measurable; the board isn't reachable yet.
  • Pre-signup users who view feedback board convert at 2x rate — not yet measurable; the board isn't reachable yet.

- [x] 46. Brand & Marketing Assets ✅ Shipped (v4.65 Brand & Marketing Assets Completion)

Grouped brand and marketing items needed for growth phase:

  • [x] Logo Update — Modern refresh of the 2018 logo. SVG/PNG assets (16px favicon through 1024px app store), app icon variants (iOS rounded, Android adaptive), updated across ionic_frontend/, marketing_landing/, and Capacitor native projects. Evidence: PR #3219 (3eedee8d) — marketing apple-touch-icon + site.webmanifest across 11 pages, iOS 18 dark/tinted appearance variants, logo.svg refreshed to V12; shipped, first iOS build will confirm the asset catalog.
  • [x] Origin Story — "What is and Why is Objectuve" content for marketing site. Authentic, reflective, coach-toned narrative covering 2016-2026. Published on marketing_landing/ with OG meta tags for social sharing. Evidence: PR #3221 (6ba1c29e) — live at https://www.objectuve.com/story, full OG + Twitter meta pointing at story-og-card.png (1200×630).
  • [x] Competitive Analysis — Structured comparison vs. Habitica, Strides, Way of Life, Streaks, and Fabulous. Published as docs/product/competitive-analysis.md with comparison matrix and strategic positioning recommendations. Evidence: PR #3207 (ee07eef0) — docs/product/competitive-analysis.md published; Fabulous added, competitor count 18 → 19.

Phase 7: Monetization & Teams

Timeline: Apr 2027+ (Teams V1 core pulled forward and shipped GA 2026-07-15) North star mapping: Drives the 1-year milestone ($2K-8K MRR, first paying teams) and 3-year targets ($30K-100K MRR) Theme: Unlock the paid tiers. Billing is the foundation; everything else gates behind it. See docs/product/pricing-philosophy.md for full pricing rationale.

Status: Teams V1 core (billing, private team communities, leaderboards, team goals) shipped GA 2026-07-15 via the v4.0 Teams V1 milestone (9 phases, 69/69 requirements) — pulled forward well ahead of the Apr 2027+ target. Custom badges & challenges, admin dashboard/manager view, and accountability pair auto-matching were explicitly deferred to a future Teams iteration (not delivered by v4.0). SSO/SAML, Slack/Teams integration, and the remaining items below are still backlog. See v4.0 milestone.

Pricing tiers:

  • Free — Full-featured for individuals. No ads, no data selling, no feature gates.
  • Supporter — $3/month or $25/year. Optional cosmetic perks. No functional advantage.
  • Teams — $5/user/month or $50/user/year. Collaboration features for organizations.

- [x] 47. Billing & Subscriptions (Stripe + RevenueCat) ✅ Shipped

✅ Verified shipped in the 2026-07-04 audit (OBJ-1110/1117/1125/1134): shipped as Stripe (web) + RevenueCat (native IAP), not Clerk Billing as originally planned.

User story: As a team admin, I want to subscribe to a paid plan and manage seats. As an individual, I want to optionally support Objectuve with a Supporter subscription.

Stripe handles web checkout and subscription management; RevenueCat handles native in-app purchases (App Store / Play) for Supporter. New models: Plan (tiers and pricing), Subscription (user-to-plan or community-to-plan link, status, billing cycle), Invoice (payment history). For Teams, the community creator becomes the billing owner. Feature gating middleware checks subscription plan for Teams-only features. Billing admin UI under settings: current plan, invoices, upgrade/downgrade.

Success metrics:

  • Conversion from free community to Teams: 5%+ within 90 days
  • Billing churn rate < 5%/month
  • Average team size: 8+ seats

- [x] 48. Streak Insurance for Supporters ✅ Shipped (v4.67, PRs #3370/#3375/#3376/#3379/#3381/#3386/#3402)

✅ Shipped as a third recovery lane, Gamification::ClaimStreakInsurance, reusing the existing repair window and freeze backfill rather than adding new streak math. Two corrections against the original item text: the window is 48 hours, not 24 — "within 24 hours" predates v1.11's 48-hour repair window and was already stale before this milestone; and the allowance is one claim per calendar month, not "per billing period" — a yearly Supporter's billing period is a year and lifetime has none at all, so a calendar month is the only period every tier shares. See docs/features/habits.md § Streak Repair and Streak Insurance and docs/features/supporter.md § Streak Insurance. Ships behind streak_insurance_enabled, at 0% rollout as of this writing — see docs/operations/rollouts/v4.67-streak-insurance.md.

User story: As a Supporter, I want to recover a broken streak within 48 hours as a functional-but-emotional perk of my subscription.

Paid streak recovery for Supporter tier only. First Supporter perk that does something beyond cosmetics. Builds on existing streak freeze infrastructure (GoalTracking::UseStreakFreeze interaction, called with system_granted: true to backfill the missed day(s)). One recovery per calendar month, free of XP cost. Does not provide a functional goal-tracking advantage over the free XP-repair lane sitting beside it — it's an emotional safety net, same recovery, no XP charge.

Success metrics:

  • 30%+ of Supporters use streak insurance at least once
  • Streak insurance reduces Supporter churn by 10%

- [x] 49. Private Team Communities & Invites ✅ Shipped (v4.0 Teams V1 Phase 3, PR #1268)

User story: As a team admin, I want to invite specific people to my private team via link or email, and manage who has access.

New CommunityInvite model with invite codes/links, expiration, and usage limits. Admins generate shareable invite links or enter email addresses for direct invites. Builds on existing Community.private boolean and CommunityMember.role (admin/moderator/member). Team onboarding flow guides invited users through setting goals and introducing themselves.

Success metrics:

  • 80%+ of invite links converted to joins within 7 days
  • Average time from invite to first goal event: < 48 hours

- [x] 50. Team Leaderboards ✅ Shipped (v4.0 Teams V1 Phase 4, PR #1280)

User story: As a team member, I want to see how I rank against teammates on a leaderboard to stay motivated through friendly competition.

Points engine populating existing CommunityMember.points field: logging a goal event (+5), completing a milestone (+15), completing a goal (+50), posting in community (+3), encouraging a teammate (+2), streak multiplier bonus. Weekly/monthly/all-time views. Leaderboard change notifications ("You moved up to #2 this week!"). Builds on existing stubbed rank field in CommunityMemberType.

Success metrics:

  • Leaderboard viewers log events 30%+ more
  • 70%+ of team members check leaderboard weekly

- [ ] 51. Custom Badges & Challenges (Teams)

Not delivered by the v4.0 Teams V1 epic (OBJ-1089), which shipped GA 2026-07-15 without this feature. Not called out in the epic's ROADMAP scope or its explicit V1.1/V1.2 deferral list either — unscoped, still backlog.

User story: As a team admin, I want to create custom badges and time-boxed challenges for my team to drive engagement around our specific goals.

New CustomBadge model belonging to a Community. Admin-defined badges with name, emoji/icon, description, rarity tier, and trigger (manual award or automatic criteria). Time-boxed challenges with participation tracking and automatic badge award on completion. Extends CommunityChallenge from Phase 4 with team-specific features.

Success metrics:

  • 50%+ of team admins create at least one custom badge
  • Challenge participation: 60%+ of team members

- [ ] 52. Team Admin Dashboard & Analytics

Explicitly out of scope for v4.0 Teams V1 (deferred to V1.1 per the epic's ROADMAP § Out of scope). The epic shipped GA 2026-07-15 without this feature — still backlog.

User story: As a team admin, I want to see how my team is doing — who's active, who's falling behind, and how engagement trends over time.

Community-scoped analytics modeled after AdminStatsService: member activity rates, goal completion rates, average streaks, mood trends. Member health signals flag members inactive for 7+ days. Goal alignment view for OKR alignment. CSV export for stakeholder reporting.

Success metrics:

  • 80%+ of team admins visit dashboard weekly
  • Health signal follow-ups reduce member churn by 20%

- [x] 53. Team Goals (Collective Progress) ✅ Shipped (v4.0 Teams V1 Phase 5, PR #1303)

User story: As a team, I want shared goals that multiple members contribute to collectively so we can track team-wide progress together.

Extend existing CommunityGoal association with collective boolean. Shared progress bar aggregating events from all contributing members. Per-member contribution breakdown. Members opt in to contribute their individual goal events toward the team total.

Success metrics:

  • 40%+ of teams create at least one collective goal
  • Members contributing to collective goals retain at 1.8x rate

- [ ] 54. Accountability Pair Auto-Matching (Teams)

Explicitly out of scope for v4.0 Teams V1 (deferred to V1.1 per the epic's ROADMAP § Out of scope). The epic shipped GA 2026-07-15 without this feature — still backlog.

User story: As a team member, I want to be auto-matched with an accountability buddy so we keep each other on track.

Auto-matching algorithm pairs team members based on shared goal categories, similar activity levels, or admin assignment. Builds on UserAlly model with a new accountability_partner flag. Weekly pair summary: "You and [partner] both hit your goals 4/5 days this week!"

Success metrics:

  • Paired users retain at 2x solo rate
  • 50%+ of team members opt into pairing within 30 days

- [ ] 55. Manager View

User story: As a team admin, I want a bird's-eye view of everyone's goals and progress without visiting each profile individually.

Grid/table of all team members: active goals, progress percentages, current streak, recent activity, mood trend. Sortable and filterable by activity level, goal category, or streak status. Complements the analytics dashboard with a people-focused lens.

Success metrics:

  • 70%+ of team admins use manager view weekly
  • Time to identify at-risk members reduced by 60%

- [ ] 56. Priority Support (Teams)

User story: As a Teams subscriber, I want faster support response times and dedicated onboarding help.

In-app support channel routing Teams users to a priority queue. SLA tagging (target: < 4 hour response for Teams vs. < 24 hours for free). Onboarding concierge for 10+ seat teams.

Success metrics:

  • Teams support response: < 4 hours average
  • Onboarding concierge NPS: 50+

- [ ] 57. SSO / SAML Integration

User story: As an enterprise team admin, I want my team to log in with our company's identity provider so I don't manage separate credentials.

SAML 2.0 and OpenID Connect support. New SsoConfiguration model on Community. Auto-provision users on first SSO login and auto-assign to team community. Enforce SSO-only login for configured teams.

Success metrics:

  • SSO teams onboard 3x faster
  • SSO teams have 90%+ monthly active rate

- [ ] 58. Slack / Microsoft Teams Integration

User story: As a team member, I want goal completions and leaderboard updates posted to our Slack or Teams channel so the whole team stays in the loop.

Webhook-based integration posting to configured channels. Events: goal completed, milestone reached, streak milestone (7/30/100 days), leaderboard weekly summary, challenge started/completed. Optional: Slack bot for logging events directly (/objectuve check-in "Ran 5km").

Success metrics:

  • 60%+ of teams connect a channel
  • Slash command users log 2x more events

- [ ] 59. Standalone Admin Portal

User story: As a platform operator, I want a dedicated admin experience separate from the user-facing app.

Separate admin application or dedicated route namespace. Role-based access beyond the isAdmin flag (permissions like admin:read, admin:write, admin:super). Expanded tooling: user management, content moderation, feature flags, system monitoring. Desktop-optimized UI. The in-app admin Monitoring tab provides the foundation.

Success metrics:

  • Admin tasks complete 50% faster
  • Role-based access enables delegating to support team

- [ ] 60. Milestone Dependencies & Sequencing

User story: As a user with complex goals, I want to order milestones so completing one unlocks the next.

Extend Milestone model with position and optional depends_on_milestone_id. UI shows locked/unlocked states.

Success metrics:

  • Sequenced milestones: 25%+ higher goal completion rate
  • 60%+ adoption among users with 5+ milestones

- [ ] 61. Media-Rich Goal Events

User story: As a user, I want to attach photos to updates and see before/after comparisons.

Promote GoalMedia to first-class. Multiple media per event, before/after view, progress photo grid, auto-generated collage via GoalCollage.

Success metrics:

  • Media events get 3x more reactions
  • Media users retain at 1.5x rate

- [ ] 62. Investigate Modular Monolith

User story: As the engineering team, we want to evaluate whether extracting the Rails monolith into bounded contexts would improve maintainability as the codebase grows.

Research item, not a refactor commitment. DDD documentation already exists at docs/architecture/ddd/ with 5 bounded contexts mapped. Evaluate Packwerk for module enforcement and produce an architecture decision record (ADR). Decision gate: proceed only if codebase scale justifies the effort.

Success metrics:

  • Architecture decision record published
  • Domain boundaries validated against code
  • Go/no-go decision made with clear criteria

Appendix A: Notification Events Reference

Notification TypeTriggerPhase
badgeUser earns a badge or levels upPhase 1 (shipped)
reminderScheduled goal reminder (user-configured)Shipped
past_dueGoal deadline passed without completionShipped
ai_check_inAI-generated personalized check-in promptPhase 2 (shipped)
encouragementSomeone encourages your goal eventShipped
commentSomeone comments on your goal eventShipped
followSomeone follows your public goalShipped
generalSystem announcements, welcome messagesShipped
reactionSomeone reacts to your goal event (fire, clap, heart, 100)Phase 3
nudgeAlly sends a one-tap nudge to a lapsed friendPhase 4
partner_missedAccountability partner missed a check-inPhase 4
welcome_backUser returns after extended inactivityPhase 4
challenge_inviteCommunity challenge starts, user invited to participatePhase 4
reflection_promptGoal completed or archived, prompt for reflectionPhase 4
digestWeekly progress digest summaryPhase 5
celebrationBadge/milestone/streak achievement (shareable card)Phase 6
seasonal_eventPlatform-wide seasonal event startingPhase 6
leaderboard_changeUser's position on team leaderboard changedPhase 7
team_inviteInvited to join a private team communityPhase 7
streak_insuranceSupporter streak recovery availablePhase 7

Appendix B: Timeline Mapping to North Star

PhaseTimelineNorth Star HorizonKey Deliverables for Horizon
Phase 3: Launch PreparationApr-Jun 2026Prerequisite for all horizonsPush notifications, legal, GCS, quality audit, accessibility baseline, social simulator
Phase 3.5: Polish & InfrastructureApr 2026Prerequisite for all horizonsFeedback board, PostHog analytics, DDD namespacing, goal detail redesign, magic code auth, deploy pipeline, photo cropping
Phase 4: Engagement & Retention ✅ Shipped 2026-07-08Jul-Sep 2026 (completed ahead of schedule)6mo (Oct 2026): Foundation & EngagementAccountability partners, goal templates (curated seed), privacy controls, challenges, re-engagement, goal reflection, past-attempt context, micro-journal, home screen widgets, WCAG 2.1 AA audit, 30%+ 7-day retention
Phase 5: Intelligence & AnalyticsOct-Dec 20266mo → 1yr bridgeAI personalization, analytics instrumentation, success metric validation
Phase 6: Growth & ViralityJan-Mar 20271yr (Mar 2027): Monetization & Teams LaunchOrganic acquisition features, seasonal events, 5K-15K registered users
Phase 7: Monetization & TeamsApr 2027+1yr → 3yr (Mar 2029): Scale & EcosystemStripe + RevenueCat billing, Teams tier, $2K-8K MRR, first B2B customers

Appendix C: Feature Ideas Backlog

Features evaluated but not assigned to a specific phase. Tracked here for future consideration.

FeatureDescriptionRationale for Deferral
Accountability Partner Matching QuizQuiz about goals, schedule, communication style for partner matchingDepends on organic user base large enough to match meaningfully. Reconsider at 5K+ MAU.
Wearable IntegrationsApple Watch, Fitbit, Garmin for habit check-insHigh effort, platform-specific. North star targets this for 5-year horizon (Mar 2031).
Internationalization (i18n)Multi-language support starting with Spanish, Portuguese, FrenchNorth star targets this for 3-year horizon (Mar 2029).
API for Third-Party IntegrationsPublic API for external apps to integrate with ObjectuveNorth star targets this for 3-year horizon. Requires stable data model.
Goal Template MarketplaceUser-generated templates with attribution and discoveryRequires large template library and active community. 3-year horizon.
Dedicated AI ServiceExtract AI from Rails monolith into standalone service via LiteLLM. Separate Coach and Moderator personas with configurable styles (tough love, exuberant, stoic).Premature until AI usage patterns are clear at scale. 3-year horizon.
Federated GraphQL APISplit backend into domain services (AI, Social) behind a federated GraphQL gateway. Frontend interaction patterns remain intact.Depends on domain service extraction. 3-year horizon.
Data Portability / ExportFull data export (goals, events, mood logs, journal entries). Users always own their data.PBC obligation. Should be prioritized before monetization. Consider for Phase 6.
Lifetime Supporter TierOne-time $100+ contribution with Legendary badge and permanent perks. See docs/product/pricing-philosophy.md.Depends on the Stripe + RevenueCat billing infrastructure (Phase 7, shipped).
Platform IntegrationsCross-app streak linking with Duolingo, Chess.com, and other habit/streak apps.Requires public API and partner agreements. 3-5 year horizon.
Community Sponsorships"Community sponsored by" partnerships with aligned brands (GoFundMe, Knot, Fitbit).Requires significant community scale. Revisit at 10K+ MAU.
Vendor Cost AnalysisProjected infrastructure cost analysis against growth curves. Current vendor list with costs.Operational need. Track as part of ongoing business operations.
Kid ModeAge-appropriate experience with reduced social features, enhanced moderation, and a positive/reassuring tone. Children can set and achieve goals in a safe, encouraging environment. Parental controls for visibility and content restrictions.Requires COPPA compliance research, dedicated moderation tooling, and age-gating UX. Significant legal and design effort. Revisit after core product is stable and user base includes family use cases.
Data Portability / ExportFull data export (goals, events, mood logs, journal entries). Users always own their data.Shipped v3.9.103-104. Moved to Phase 6 completed.

Appendix D: Tracking & QA

Detailed acceptance criteria tracking has moved to GitHub Projects for proper tracking with assignees, status columns, and QA verification. High-level acceptance criteria remain in this document for reference. All items should be independently tested before being marked complete in the project board.

Loading…