Add future improvements documentation

Co-authored-by: jonasbark <1151304+jonasbark@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-12-26 13:03:53 +00:00
parent 0bf336643d
commit 7689da9acd

263
FUTURE_IMPROVEMENTS.md Normal file
View File

@@ -0,0 +1,263 @@
# Future Improvements for RevenueCat Integration
This document tracks potential improvements for the RevenueCat integration that are not critical but would enhance code quality and maintainability.
## Code Quality Enhancements
### 1. Dependency Injection Consistency
**Current State:** The RevenueCatService uses callbacks for some values but direct access for others.
**Issue:**
- Uses `getDailyCommandLimit()` callback ✅
- Uses `isPurchasedNotifier.value` directly ⚠️
- Checks `isTrialExpired` and `Platform.isAndroid` directly ⚠️
**Proposed Improvement:**
```dart
// Add more callbacks for complete DI pattern
RevenueCatService(
this._prefs, {
required this.isPurchasedNotifier,
required this.getDailyCommandLimit,
required this.setDailyCommandLimit,
required this.isAndroid, // NEW
});
```
**Priority:** Low - Current implementation works correctly
**Effort:** Medium - Would require refactoring constructor and call sites
---
### 2. Magic Number for Android Command Limit
**Current State:**
```dart
if (!isTrialExpired && Platform.isAndroid) {
setDailyCommandLimit(80); // Hardcoded value
}
```
**Issue:** The value `80` is hardcoded without explanation.
**Proposed Improvement:**
```dart
// In RevenueCatService
static const int androidTrialCommandLimit = 80;
// Usage
if (!isTrialExpired && Platform.isAndroid) {
setDailyCommandLimit(androidTrialCommandLimit);
}
```
**Priority:** Low - Value is only used once, well-documented in context
**Effort:** Trivial - Just extract to constant
---
### 3. Platform Detection Abstraction
**Current State:**
```dart
if (!isTrialExpired && Platform.isAndroid) {
// Android-specific logic
}
```
**Issue:** Direct platform checks could be abstracted for testability.
**Proposed Improvement:**
```dart
// Pass platform info through DI
final bool isAndroidPlatform;
RevenueCatService(
this._prefs, {
// ... other params
this.isAndroidPlatform = kIsAndroid, // Can be mocked in tests
});
```
**Priority:** Very Low - Current approach is standard for Flutter
**Effort:** Low - Simple parameter addition
---
## Feature Enhancements
### 4. Subscription Support
**Current State:** Only supports lifetime (non-consumable) purchases.
**Proposed Addition:**
- Monthly subscriptions
- Annual subscriptions
- Subscription status tracking
- Expiration handling
**Priority:** Medium - Depends on business requirements
**Effort:** High - Requires:
- RevenueCat offering configuration
- UI updates for subscription display
- Subscription renewal handling
- Cancellation support
---
### 5. Analytics Integration
**Current State:** No purchase analytics beyond logs.
**Proposed Addition:**
- Track purchase attempts
- Monitor conversion rates
- A/B test different offerings
- Revenue analytics
**Priority:** Low - Nice to have for business insights
**Effort:** Medium - Requires analytics SDK integration
---
### 6. Promotional Offers
**Current State:** No promotional offer support.
**Proposed Addition:**
- iOS promotional offers
- Android promo codes
- Limited-time discounts
- First-purchase incentives
**Priority:** Low - Marketing feature
**Effort:** Medium - RevenueCat SDK supports this
---
## Testing Improvements
### 7. Unit Tests for RevenueCat Service
**Current State:** No unit tests for RevenueCat integration.
**Proposed Addition:**
```dart
test('RevenueCatService initializes with valid API key', () async {
// Mock RevenueCat SDK
// Verify initialization
});
test('RevenueCatService falls back gracefully without API key', () async {
// Verify fallback behavior
});
```
**Priority:** Medium - Would improve confidence in changes
**Effort:** High - Requires mocking RevenueCat SDK
---
### 8. Integration Tests
**Current State:** Manual testing only.
**Proposed Addition:**
- Automated purchase flow tests
- Entitlement checking tests
- Paywall presentation tests
- Customer Center tests
**Priority:** Medium - Would catch regressions
**Effort:** Very High - Requires test environment setup
---
## Documentation Enhancements
### 9. Video Tutorial
**Current State:** Text documentation only.
**Proposed Addition:**
- Setup walkthrough video
- RevenueCat dashboard configuration video
- Build configuration demonstration
**Priority:** Low - Text docs are comprehensive
**Effort:** Medium - Recording and editing
---
### 10. Troubleshooting Flowchart
**Current State:** Text-based troubleshooting.
**Proposed Addition:**
- Visual decision tree for common issues
- Error code reference
- Quick diagnosis guide
**Priority:** Very Low - Current docs are clear
**Effort:** Low - Create diagram
---
## Implementation Priority
### High Priority (Do Soon)
- None currently - all critical issues resolved
### Medium Priority (Consider for Next Sprint)
- Unit tests (#7)
- Subscription support (#4) - if business needs it
### Low Priority (Backlog)
- Extract magic number (#2) - trivial, do if touching that code
- Analytics integration (#5) - if product team requests
- Dependency injection consistency (#1) - only if refactoring for other reasons
### Very Low Priority (Optional)
- Platform detection abstraction (#3)
- Promotional offers (#6)
- Video tutorial (#9)
- Troubleshooting flowchart (#10)
- Integration tests (#8) - high effort, moderate value
---
## Notes
- Current implementation is **production-ready** as-is
- These improvements are **optional enhancements**
- Prioritize based on actual business/technical needs
- Don't optimize prematurely - wait for real pain points
## Decision Log
**Why not implement these now?**
1. **Time constraints** - Minimal change requirement
2. **Working implementation** - No critical issues
3. **YAGNI principle** - Don't add complexity until needed
4. **Maintainability** - Simpler code is easier to maintain
5. **Testing** - Manual testing sufficient for initial release
**When to revisit?**
- If adding subscriptions → Do #4, #5
- If testing becomes pain point → Do #7, #8
- If code becomes hard to maintain → Do #1, #2, #3
- If users need help → Do #9, #10
- If new promotional campaigns → Do #6