Closer/docs/date-planning-roadmap.md

277 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Date Planning Feature Roadmap
## Vision
Build a complete Date Operating System for Closer — not a simple list of date ideas.
Most couples don't struggle to find ideas. They struggle to:
- Decide what to do
- Find something both partners want
- Schedule it
- Follow through
- Remember meaningful moments afterward
The goal is to create a system that helps couples plan, experience, and reflect on dates together — built on top of Closer's existing daily question + spin wheel engagement loop.
## Goals
### Primary Goals
- Increase relationship engagement beyond daily questions
- Encourage regular quality time
- Create meaningful shared memories
- Improve user retention
- Create premium upgrade opportunities
### Success Metrics
- Dates planned per month
- Dates completed per month
- Couple retention
- Premium conversion rate
- Date reflection completion rate
## Existing App Context
### What's Already Built
- Daily question core loop (answer → reveal → history)
- Spin wheel category picker + question sessions
- Question packs with premium gating
- Partner invite system (code + email)
- Firestore-backed auth, couples, sessions, threads
- RevenueCat SDK wired (`purchases:8.20.0`) — purchase flows not yet implemented
- FCM push notifications (daily reminders, partner answered)
- Room local database (answers, questions, categories)
- Hilt DI, Material 3, Jetpack Compose
### Stack
| Layer | Technology |
|-------|-----------|
| Language | Kotlin 2.x |
| UI | Jetpack Compose + Material 3 |
| Navigation | Navigation Compose |
| Backend | Firebase (Auth, Firestore, Functions, FCM, Remote Config) |
| Payments | RevenueCat (`purchases:8.20.0`) |
| Local Storage | Room + DataStore + EncryptedSharedPreferences |
| DI | Hilt |
| Analytics | Firebase Analytics (hashed IDs, coarse categories) |
| Security | ProGuard/R8, SSL pinning, App Check, fail-closed webhooks |
### Architecture Fit
New date planning features slot into the existing architecture:
```
app/
├── data/
│ ├── local/ # Room: date history, reflections, bucket list
│ ├── remote/ # Firestore: shared date plans, couple bucket list
│ └── repository/ # Repository implementations
├── domain/
│ ├── model/ # Date, DatePlan, BucketListItem, Reflection data classes
│ └── repository/ # Repository interfaces
├── ui/
│ ├── dates/ # NEW: date discovery, match, builder, history, reflection
│ ├── questions/ # Existing daily question flow
│ ├── wheel/ # Existing spin wheel
│ └── ...
├── core/
│ ├── navigation/ # New AppRoute.Dates section
│ ├── billing/ # Premium date pack gating
│ └── ...
```
## Phase 1: Date Discovery
### Date Match
Both partners browse date ideas independently — like the existing question reveal mechanic, but for dates.
Actions:
- Love ❤️
- Maybe 💛
- Skip 👎
Only mutual "Love" matches appear. "Maybe" matches surface as secondary suggestions.
**Firestore model:**
- `couples/{coupleId}/date_swipes/{dateId}` — per-partner swipe state
- Revealed matches stored in `couples/{coupleId}/date_matches/{matchId}`
### Date Builder
Both partners contribute preferences. Builder assembles a plan.
Inputs:
- Date
- Time
- Budget
- Duration
Outputs:
- Activity suggestion
- Food suggestion
- Conversation prompts (draw from existing question packs)
- Optional challenge
**Local-first:** Builder preferences stored in Room. Generated plan synced to Firestore couple doc.
### Couple Bucket List
Shared list both partners can add to and check off.
Categories (aligned with existing question categories):
- Adventure
- Travel
- Food
- Learning
- Romance
- Intimacy
- Seasonal
**Firestore model:**
- `couples/{coupleId}/bucket_list/{itemId}` — shared list with added-by, completed-by, completed-at fields
## Phase 2: Date History and Reflection
### Date History
Store completed dates for the couple.
Fields:
- Date, time, location
- Photos (Firebase Storage)
- Notes (per partner)
- Category
- Cost
- Rating (15, per partner)
**Firestore model:**
- `couples/{coupleId}/date_history/{dateId}` — shared history
- Photos stored in Firebase Storage under `couples/{coupleId}/date_photos/{photoId}`
### Private Date Reflection
After a date, both partners answer reflection questions privately. Answers reveal when both complete — same mechanic as the existing answer reveal flow.
Questions:
- What was your favorite moment?
- What surprised you?
- What did you appreciate most?
This reuses the existing `sessions`/`answers`/`threads` Firestore structure but with a date reflection type flag.
### Relationship Insights
Aggregate from date history + existing question engagement.
Track:
- Connection score (composite: date frequency + question engagement + reflection completion)
- Date satisfaction (average rating)
- Date frequency (per month)
- Preferred categories (from date history + question packs)
**Computed client-side** from local Room cache + Firestore snapshots. No server aggregation needed for MVP.
## Phase 3: Smart Planning
### AI Date Concierge
Firebase Cloud Function that generates personalized date plans.
Inputs:
- Budget
- Available time
- Weather (OpenWeather API or similar)
- Interests (from question categories + date history)
- Relationship stage (from account age + date history)
Outputs:
- Complete itinerary
- Estimated cost breakdown
- Conversation prompts (pull from existing premium question packs)
- Backup indoor plan
**Implementation:** Firebase Cloud Function calling an LLM API (OpenAI / Anthropic). Results cached in Firestore.
### Smart Scheduling
Track partner availability and suggest date windows.
- Availability shared via Firestore (simple "free evenings" or calendar integration later)
- Preferred date frequency set per couple
- Auto-suggest when both partners have a free window + haven't had a date recently
## Premium Features
### Premium Date Packs
Curated date collections — same pack model as existing question packs.
- First Year Together
- Married With Kids
- Long Distance
- Anniversary Pack
- Reconnection Pack
- Summer Dates
- Winter Dates
**Implementation:** Same Firestore pack structure + RevenueCat entitlement gating as existing question packs.
### Advanced AI Concierge
- Unlimited AI-generated plans (free tier: 1/month)
- Personalized recommendations based on date history
- Seasonal suggestions
- Local event integration (later: Google Places / Yelp API)
### Premium Insights
- Date trends over time
- Relationship growth patterns
- Favorite activities
- Monthly summaries
## Killer Feature: Date Replay
Both partners answer after a date:
- Best moment
- Unexpected moment
- One thing I appreciated
Months later, they can revisit those reflections as a relationship timeline — like the existing answer history, but for real experiences.
**Implementation:** Reuses the reveal mechanic. Reflections stored as date-typed sessions. Timeline view queries all completed date sessions sorted chronologically.
## Recommended Build Order
### MVP — Phase 1 (v1.1.x)
1. **Date Match** — swipe UI + mutual match reveal (reuses reveal pattern)
2. **Date Builder** — preference input + plan generation
3. **Couple Bucket List** — shared list with checkoff
### Version 1.2
4. **Date History** — log completed dates + photos
5. **Private Reflections** — post-date questions with reveal mechanic
6. **Relationship Insights** — aggregate dashboard
### Version 1.3
7. **Smart Scheduling** — availability + suggestions
8. **AI Date Concierge** — Cloud Function + LLM integration
### Version 2.0
9. **Date Replay** — relationship timeline from reflections
10. **Advanced Analytics** — trends + growth patterns
11. **Premium Date Packs** — curated collections
12. **Local Event Integration** — Places/Yelp API
## Long Term Positioning
Closer becomes a full relationship platform where couples can:
- Communicate (daily questions, spin wheel)
- Plan experiences (date match, builder, AI concierge)
- Build memories (date history, reflections, replay)
- Track relationship growth (insights, analytics)
- Strengthen connection over time
Every feature builds on the same engagement loop: **private input → mutual reveal → shared memory**.