Files
FrenoCorp/agents/cto/life/projects/nessa/facts.yaml
2026-03-10 22:04:03 -04:00

106 lines
4.0 KiB
YAML

# Nessa Project Facts
## Project Overview
- Type: "iOS fitness tracking application (Strava competitor)"
- Tech Stack: "Swift, SwiftUI, GRDB (local database), HealthKit"
- Location: "/home/mike/code/Nessa"
- Repository: "https://git.freno.me/Mike/Nessa.git"
- Target: "2,000 paying users = $10k MRR"
## Architecture
### Database
- ORM: "GRDB with migrations"
- Schema: "users, workouts, social features (profiles, follows, kudos, comments), segments"
- Migration pattern: "Incremental migrations with existence checks"
- DatabaseManager: "Centralized database access with read/write methods"
### Current Features
- Workout types: 11
- HealthKit integration: true
- Basic dashboard and authentication: true
- Social features: "profiles, follows, kudos, comments, activity feed"
- Segments with leaderboards and efforts: true
- Heart rate tracking: true
### Subscription Model (Planned)
- Free price: "$0"
- Free features: "Core features except route planning, AI features, offline maps"
- Plus price: "$4.99/mo"
- Plus features: "Route planning, offline maps, advanced segments, personal heatmaps"
- Pro price: "$9.99/mo"
- Pro features: "AI training plans, premium challenges, priority support, fitness tracking"
### Subscription Implementation
- Payment: "StoreKit 2 for iOS native subscriptions"
- Product IDs: "com.nessa.subscription.plus.monthly, com.nessa.subscription.pro.monthly, com.nessa.subscription.plus.yearly, com.nessa.subscription.pro.yearly"
- Feature Gating: "SubscriptionService with PremiumFeature enum"
- Backend: "Receipt validation endpoints, App Store Server Notifications webhook"
- Timeline: "4 weeks (6 phases)"
- Sub-issues: "FRE-108 through FRE-112"
## Completed Work (2026-03-10)
### StoreKit 2 Integration (FRE-108)
- Status: "Completed"
- Deliverables:
- ProductStore.swift: "Product fetching, caching, tier/period management"
- PurchaseManager.swift: "Transaction handling, restoration, secure storage"
- TransactionObserver.swift: "Real-time monitoring, entitlement tracking"
- SubscriptionView.swift: "Complete UI with tier/period selection"
- StoreKitConfiguration.storekit: "4 subscription products configured"
- Products configured:
- Plus Monthly: "$4.99"
- Pro Monthly: "$9.99"
- Plus Yearly: "$49.99 (17% savings)"
- Pro Yearly: "$99.99 (17% savings)"
- Integration points:
- NessaApp.swift: "TransactionObserver initialization"
- SettingsTabView: "Premium section with tier indicator"
- Pending transaction processing on app launch
## Feature Roadmap
### Phase 1 MVP Status
- Status: "Completed"
- Features: "Activity tracking + feed + kudos + comments, Profiles + follow system, Basic segments"
### Phase 2 Community Growth
- Issue: "FRE-92"
- Features: "Clubs system, Monthly challenges, 1v1 challenges, Share to social, Invite system"
- Timeline: "10 weeks"
- Sub-issues: "FRE-102 through FRE-107"
### Phase 3 Premium Features
- Features: "Route planning with turn-by-turn, AI training plans, Offline maps, Advanced analytics"
## Revenue Targets
- Month 1: "$500-1,000 MRR (100 paying users)"
- Month 3: "$2,500-5,000 MRR (500 paying users)"
- Month 6: "$5,000-10,000 MRR (1,000 paying users)"
- Year 1: "$10,000+ MRR (2,000 paying users)"
## Technical Debt and Considerations
- Subscription infrastructure: "Not yet implemented"
- Backend API: "Required for subscriptions (not yet built)"
- Architecture: "Local-first with GRDB (sync TBD)"
- Competitive goal: "Feature parity with Strava"
## Key Files
- User model: "Nessa/Models/User.swift"
- Database manager: "Nessa/Core/Database/DatabaseManager.swift"
- Subscription plan: "plans/2026-03-09-subscription-tiers-implementation.md"
- Community plan: "plans/2026-03-09-phase2-community-growth.md"
## Related Issues
- Strava parity: "FRE-73"
- Community growth: "FRE-92 (in_review)"
- Subscription tiers: "FRE-94 (in_review)"
- Subscription sub-issues: "FRE-108 to FRE-112"
- Community sub-issues: "FRE-102 to FRE-107"
## Access Metadata
- created: "2026-03-09"
- last_accessed: "2026-03-10T23:10:00Z"
- access_count: 2