Skip to content

Phase 4: Engagement & Retention -- PRD

Product: Objectuve (codename: Enkidu) Phase: 4 (Engagement & Retention) Status: Partially Shipped Date: April 2026 Last updated: 2026-06-08


Implementation Status

FeatureStatusNotes
Accountability Partners✅ ShippedFully implemented with dashboard widget, nudges, and missed-day alerts (v4.3.3+)
Re-engagement / Welcome Back Flow⚠️ SupersededExpanded and shipped as part of v1.11 Streak Compassion (Phases 49–52)
Community Challenges✅ ShippedFully implemented with leaderboards, badges, and completion celebrations (v1.15+)
Offline-First Check-ins📅 DeferredPlanned for future release (OBJ-32 syncStore); mutation buffering partially addressed via PWA architecture
Goal Templates Library✅ ShippedFully implemented with 12 curated templates across fitness, learning, financial, and habit/wellness (v1.21, Phases 82–85)

1. Problem Statement

Objectuve has a solid foundation for daily goal tracking, AI coaching, and basic social interaction (Phase 1-3). However, to reach the 6-month North Star metrics (30%+ 7-day retention, 25%+ DAU/MAU), we need to deepen the daily engagement loop.

Right now, if a user's intrinsic motivation falters, there's little social pressure holding them accountable. When a user streaks out and takes a break, the app offers no guided path back. And for users with spotty internet on their commute, failing to log a habit because of network issues creates artificial friction.

Phase 4 focuses on solving these retention gaps. Instead of trying to build 10 small features, this PRD deep-dives into the 4 most critical features that answer the question: "Why should a user return tomorrow?"


2. Priority Features Scope

This PRD details the implementation of the five highest-impact features for this phase:

  1. Accountability Partners (High Social Commitment)
  2. Re-engagement / "Welcome Back" Flow (Churn Recovery)
  3. Community Challenges (Group Motivation)
  4. Offline-First Check-ins (Friction Reduction)
  5. Goal Templates Library — Curated Seed (Activation Multiplier)

Phase 4 Success Metrics

MetricTarget (90 days post-launch)
7-day retention rate30%+
Daily Active Users / Monthly Active Users (DAU/MAU)25%+
Network-failure-related check-in drops0%
Paired (Accountability Partner) retention lift2x vs. solo users
New goals created from templates within first 7 days30%+

3. Feature 1: Accountability Partners

3a. Concept & Value

Extend the existing UserAlly system. Instead of just seeing an ally's feed, two users can mutually agree to become Accountability Partners on specific goals. They receive shared score multipliers, mutual visibility, and automatic alerts if the other misses a day.

3b. User Stories

  • US-1: As a user, I want to invite an ally to be my accountability partner for my "Run 5k" goal.
  • US-2: As a partner, I want to receive a push notification if my buddy hasn't checked in by 8:00 PM, so I can nudge them.
  • US-3: As a partnered user, I want to earn bonus XP when my partner and I both complete our daily habits, creating a "co-op streak."

3c. UX Flow

  1. Invite: On the Goal Detail page, a new "Find a Partner" button opens a modal listing current Allies. User selects an ally and sends a request.
  2. Acceptance: Ally receives a push notification and in-app alert. They can accept and optionally link one of their own goals to create a mutual pairing.
  3. Daily Loop: A "Partner" widget appears on the Dashboard showing the partner's status today (e.g., "Sarah completed her Check-in" or "Sarah hasn't checked in yet").
  4. Nudging: If the partner is incomplete by evening, the widget turns into a "Send Nudge" button. Tap once to send a supportive push notification.

3d. Engineering Notes

  • Models: Add accountability_partner boolean to UserAlly. Create a GoalPartnership join table liking user_id, ally_id, goal_id, and partner_goal_id.
  • Jobs: A daily cron job at 7:00 PM (user local time) checks GoalPartnership records and fires a PartnerMissedCheckIn notification if the partner's check-in is pending.
  • Gamification: Update the XP calculation in app/interactions/gamification/ to include a partner_bonus multiplier if the partner has already completed their task today.

4. Feature 2: Re-engagement / "Welcome Back" Flow

Status: Superseded by v1.11 — This feature has been expanded and shipped as part of the Streak Compassion & Welcome Back milestone (v1.11, Phases 49–52). See docs/product/completed/streak-compassion-prd.md for the full implementation, which ships Welcome Back interstitial + Streak Mercy as part of a broader streak-protection bundle (also including starter freeze, Streak Repair window, compassionate messaging, and Comeback badge).

4a. Concept & Value

When a user goes inactive for 5+ days, their existing streaks break, creating massive psychological friction to return. The "Welcome Back" flow intercepts their first session back, acknowledges the break kindly, and offers "Streak Mercy" — keeping their momentum alive while suggesting a slightly easier path forward to rebuild the habit.

4b. User Stories

  • US-1: As a lapsed user returning after a week, I want the app to welcome me back rather than just showing me broken streaks.
  • US-2: As a lapsed user, I want the option to retroactively apply a "Streak Freeze" to save one important goal.
  • US-3: As a user, I want my AI Coach to give me personalized advice on restarting, so I don't feel overwhelmed.

4c. UX Flow

  1. Detection: Frontend detects daysSinceLastActive >= 5 on app launch.
  2. Interception: A full-screen interstitial modal appears before the Dashboard: "Welcome back, [Name]. We missed you."
  3. The Offer (Streak Mercy): "Breaks happen. That's life. Do you want to use a free Streak Freeze to save your 'Learn Spanish' streak?" -> [Yes, save it] [No, I'll start fresh].
  4. AI Coach Nudge: "Your Coach says: 'Momentum is about starting again. Let's aim for just 5 minutes today.'"
  5. Dashboard Drop: The user lands on the Dashboard with a clear, achievable first action highlighted.

4d. Engineering Notes

  • State check: Triggered via query on last_sign_in_at or a new last_activity_date on the frontend before fetching the main dashboard payload.
  • Streak Mercy: Extending the existing UseStreakFreeze interaction. The app grants a temporary, one-time use system freeze that bypasses the normal freeze cost logic.
  • AI Integration: The build_personality_preamble from Phase 3 interacts with a new prompt context: user_status: 'returning_from_lapse'.

5. Feature 3: Community Challenges

5a. Concept & Value

Communities currently serve as passive feeds of member activity. Challenges turn communities into active arenas. An admin creates a time-boxed challenge (e.g., "7 Days of Code" or "10k Steps May"). Members opt-in, sharing a unified leaderboard and earning a unique community badge upon completion.

5b. User Stories

  • US-1: As a community admin, I want to create a 14-day challenge for my group, setting the rules and the badge reward.
  • US-2: As a community member, I want to hit "Join Challenge" and have a progress bar track my contributions automatically.
  • US-3: As a participant, I want to see a leaderboard of who else is participating to motivate me.

5c. UX Flow

  1. Creation: Community Admin taps "Create Challenge". Modal asks for Name, Description, Duration (Start/End dates), Target Goal Type, and selects a Badge Icon.
  2. Discovery/Opt-in: Challenge appears pinned to the top of the Community space. A push notification invites members. One tap to "Join".
  3. Active Phase: For 14 days, the community page shows a "Challenge Leaderboard" widget.
  4. Completion: When the challenge ends, qualifying users receive a celebration modal, the custom badge is added to their Profile, and a summary post hits the community feed.

5d. Engineering Notes

  • Models: Add CommunityChallenge (community_id, name, start_date, end_date, badge_id). Add ChallengeParticipant join table (user_id, challenge_id, progress_count).
  • Data Hook: During standard CreateGoalEvent interaction, a hook checks active ChallengeParticipant entries and increments progress_count if the event matches challenge criteria.
  • UI: A new CommunityChallengeCard.vue component and ChallengeLeaderboardTable.vue component in the frontend.

6. Feature 4: Offline-First Check-ins

6a. Concept & Value

Objectuve is an on-the-go tool. Users often do habits out in the world (hiking trails, gym basements, subway commutes). If a check-in fails due to no network, the user might lose their streak, creating intense frustration and support tickets. Offline-first queues actions locally until connectivity is restored.

6b. User Stories

  • US-1: As a user with no cellular data in the gym, I want to mark my "Weightlifting" habit complete, and have the app remember it.
  • US-2: As a user, I want the UI to immediately show my habit as checked-off, even before the server confirms it, so my session isn't blocked.
  • US-3: As a user, when I reconnect to Wi-Fi, I want the app to quietly sync my queued check-ins in the background.

6c. UX Flow

  1. Action: User taps the check-in button. The UI immediately updates to completed (Optimistic UI).
  2. Offline Mode: If the GraphQL mutation fails due to a network error (ECONNREFUSED / NetworkError), a subtle "Saved offline. Syncing later." toast appears (but the check-in stays visually completed).
  3. Restoration: When Capacitor detects networkStatus.connected == true, the app processes the background sync queue.
  4. Success: The user receives no interruption; the data just silently reconciles.

6d. Engineering Notes

  • Data Model (Frontend): Leverage Apollo Client's apollo-link-retry and persistent offline caching, OR build a generic Pinia syncStore that caches pending mutations (mutation_name, variables, timestamp).
  • Timezone Safety: The backend CreateGoalEvent interaction must accept a client_timestamp attribute. If the device was offline for 6 hours, the check-in must be logged at the time it occurred locally, not the time it hit the server, to properly calculate streaks.
  • Conflict Resolution: Usually Last-Write-Wins based on client_timestamp.

7. Feature 5: Goal Templates Library — Curated Seed

Status: ✅ Implemented v1.21 (Phases 82–85, shipped 2026-05-15)

7a. Concept & Value

New users often face high friction when starting a goal from scratch. Competitive analysis shows Strides (the closest direct goal-tracker competitor) has 150+ curated templates that serve as an onboarding win, reducing time-to-first-goal and improving activation funnel conversion. A curated seed set of 10-20 handpicked templates — scoped to templates only, with user-generated marketplace deferred to 3-year horizon — lowers cognitive cost for users arriving via organic acquisition during the critical 6-month post-launch window where PMF signal matters most.

7b. User Stories

  • US-1: As a new user who wants to "get fit" but doesn't know where to start, I want a template like "Couch to 5K" with pre-built milestones and realistic timelines, so I can get started immediately.
  • US-2: As a user, I want to customize the template after selecting it — rename goals, adjust timelines, reorder milestones — without starting from scratch.
  • US-3: As the product team, I want curated templates sourced by the team (not user-generated) so quality is high and discovery is simple.

7c. UX Flow

  1. Discovery: During goal creation, after selecting goal category, a "Browse Templates" section appears with 10-20 curated options (grouped by common themes: fitness, learning, financial, creative, habit-building).
  2. Selection: User taps a template preview. A modal shows the template name, description, suggested milestones, and target timeline.
  3. Customization: After selecting, the goal creation form pre-fills with template data (name, milestones). User can edit freely before saving.
  4. Tracking: Once saved, the goal behaves like any user-created goal. A small "From template: [template name]" badge appears in goal details for analytics and UX context.

7d. Engineering Notes

  • Storage: Either a GoalTemplate ActiveRecord model with seed migrations, or a static YAML/JSON file loaded into memory. Recommend the model for future extensibility (ratings, usage metrics), but static seed is acceptable for v1.
  • v1 scope boundary: Curated seed only. NO user-generated submissions, moderation, or discovery ranking in v1. Marketplace functionality (Appendix C) stays at 3-year horizon.
  • GraphQL: Expose goalTemplates query returning id, name, description, milestones, estimatedDuration, category.
  • Instrumentation: Add UserActions: template_browsed, template_selected, goal_created_from_template for activation funnel tracking.

8. Delivery Strategy

Sprint 1: Accountability Partners (Models, Jobs, Notifications) & Backend for Offline-First client_timestamp updates. Sprint 2: Accountability Partners UX, Optimistic UI & Pinia Sync Store for Offline Check-ins. Sprint 3: Re-engagement Flow & Streak Mercy. Sprint 4: Community Challenges (Models, Admin UX, Leaderboards). Sprint 5: Polish, End-to-End QA, Analytics validation.

Last updated: 2026-06-08

Loading…