docs(qa): private MVP checklist, internal testing checklist, store assets checklist, code QA scan (batch 13)

This commit is contained in:
null 2026-06-17 01:34:32 -05:00
parent 4ede77f067
commit 160fb38c4f
3 changed files with 299 additions and 0 deletions

View File

@ -0,0 +1,139 @@
# Private MVP QA Checklist
Manual testing checklist for the Closer app private MVP.
## Onboarding
- [ ] App launches to onboarding screen on fresh install
- [ ] Onboarding screens advance correctly (swipe/tap)
- [ ] "Get Started" leads to sign-up screen
- [ ] Sign-up: email + password creates account
- [ ] Sign-up: validation errors show (empty fields, weak password, existing email)
- [ ] Login: existing user can sign in
- [ ] Login: "Forgot password" navigates to reset screen
- [ ] Create Profile: name + avatar saved to Firestore
- [ ] Profile creation completes and navigates to home
## Home Screen
- [ ] Home screen loads after onboarding
- [ ] Daily question card is visible
- [ ] Question pack sections display correctly
- [ ] Navigation between tabs (Home, Dates, Wheel, Settings)
- [ ] Pull-to-refresh reloads content
- [ ] Partner home view shows when coupled
## Questions
### Daily Question
- [ ] Today's question loads
- [ ] User can answer (select option or type response)
- [ ] Answer is saved to Firestore
- [ ] "Partner answered" notification flow works (if coupled)
### Question Packs
- [ ] Pack library screen lists available packs
- [ ] Premium packs show lock icon (if not subscribed)
- [ ] Free packs can be opened
- [ ] Category picker shows categories
- [ ] Selecting a category loads questions from that category
### Question Detail & Thread
- [ ] Question detail screen loads with full text
- [ ] Answer reveal shows both partner answers (if both answered)
- [ ] Discussion thread loads messages
- [ ] User can send a message in thread
- [ ] Answer history screen shows past answers
## Date Match
- [ ] Date match screen shows swipe UI
- [ ] Swipe right = "love", swipe left = "skip"
- [ ] "Maybe" button works
- [ ] Match reveal screen appears when both partners like same idea
- [ ] Date matches screen shows all mutual matches
- [ ] Empty state shows when no matches
## Date Builder
- [ ] Date builder screen loads with suggestion fields
- [ ] Date and time picker buttons present (currently TODO placeholders)
- [ ] Save date plan works (if implemented)
## Bucket List
- [ ] Bucket list screen shows saved date ideas
- [ ] Adding items works
- [ ] Completing/removing items works
## Wheel
- [ ] Spin wheel animates and selects a category
- [ ] Category picker shows available categories
- [ ] Wheel complete screen shows result
- [ ] Wheel history screen shows past spins
## Partner Pairing
### Create Invite
- [ ] Invite code generates and displays
- [ ] Copy button copies code to clipboard
- [ ] Share button opens Android share sheet (Intent.ACTION_SEND)
- [ ] "Accept instead" link navigates to AcceptInvite
### Accept Invite
- [ ] Code entry field works
- [ ] Back button navigates correctly
- [ ] Valid code proceeds to InviteConfirm
### Invite Confirm
- [ ] Partner info displays correctly
- [ ] "Confirm" button links couple in Firestore
- [ ] "Wrong code" link returns to AcceptInvite
- [ ] Back button works
## Settings
- [ ] Settings screen loads with all sections
- [ ] Profile row shows local profile state (not fake data)
- [ ] Partner row tappable, navigates to RelationshipSettings
- [ ] Account screen shows profile info
- [ ] Delete account screen requires checkbox acknowledgement
- [ ] Notification settings screen present
- [ ] Privacy screen present
- [ ] Subscription screen present
- [ ] Legal section: Privacy Policy link opens externally
- [ ] Legal section: Terms of Service link opens externally
- [ ] Sign out works
## Paywall
- [ ] Paywall screen shows benefits list
- [ ] Product options display with prices
- [ ] Purchase button triggers RevenueCat flow
- [ ] Restore purchases link works
- [ ] Privacy Policy and Terms links at bottom open externally
- [ ] "Subscription terms apply" disclaimer visible
- [ ] Thank-you overlay appears on successful purchase
- [ ] Loading and error states display correctly
## Notifications
- [ ] App requests POST_NOTIFICATIONS permission on Android 13+
- [ ] FCM token obtained and stored in Firestore
- [ ] Quiet hours can be set in notification settings
- [ ] Notification channel "Reminders" created
## Edge Cases & Crash Risks
- [ ] App works offline (local cache)
- [ ] App handles no network gracefully (error states, not crashes)
- [ ] Rapid navigation doesn't crash (tap all tabs quickly)
- [ ] Back navigation from every screen works
- [ ] Rotation doesn't crash (if not locked to portrait)
- [ ] Empty states show for: no questions, no matches, no history, no partner
## Known Issues (from code scan)
- **TODOs in code**: `DateBuilderScreen.kt` has TODO placeholders for date/time picker dialogs (lines 174, 182)
- **Debug logging**: `QuestionJsonParser.kt` uses `android.util.Log.e()` — should use Timber or remove before release

View File

@ -0,0 +1,74 @@
# Internal Testing Release Checklist
Steps to prepare and distribute a private MVP build for internal testing.
## 1. Signing Config
- [ ] Generate or locate keystore for signing
- Keytool command: `keytool -genkeypair -v -keystore closer-release.jks -keyalg RSA -keysize 2048 -validity 10000 -alias closer`
- [ ] Store keystore file securely (NOT in git)
- [ ] Add signing config to `app/build.gradle.kts`:
- `storeFile`, `storePassword`, `keyAlias`, `keyPassword`
- Read from `local.properties` or environment variables
- [ ] Verify debug and release build variants both compile
## 2. Build Configuration
- [ ] Set `applicationId` to `app.closer` (verify not `com.couplesconnect`)
- [ ] Set versionCode and versionName in `app/build.gradle.kts`
- [ ] Set `minSdk`, `targetSdk` to appropriate values
- [ ] Verify `RC_API_KEY` in `local.properties` (or placeholder for testing)
- [ ] Verify `google-services.json` is present and points to correct Firebase project
- [ ] Remove or guard debug logging (`android.util.Log` calls)
## 3. Firebase Configuration
- [ ] Firebase project created (or confirmed existing)
- [ ] Authentication enabled: Email/Password sign-in method
- [ ] Firestore rules deployed and tested
- [ ] Cloud Functions deployed:
- [ ] `revenueCatWebhook`
- [ ] `syncEntitlement`
- [ ] `sendDailyQuestionReminder`
- [ ] `sendPartnerAnsweredNotification`
- [ ] `health`
- [ ] FCM enabled for the project
- [ ] RevenueCat project configured with Firebase integration (placeholder for now)
## 4. Test Accounts
- [ ] Create 2 test accounts (couple A: user1@test.com / user2@test.com)
- [ ] Create 1 solo test account (single user: solo@test.com)
- [ ] Verify sign-up → profile creation → home flow on each
- [ ] Pair test couple via invite code
- [ ] Verify paired state persists across app restarts
## 5. Android App Distribution
- [ ] Install Firebase App Distribution Gradle plugin
- [ ] Add `app distribution` section to `app/build.gradle.kts`
- [ ] Build release APK: `./gradlew :app:assembleRelease`
- [ ] Distribute via Firebase App Distribution:
```bash
firebase appdistribution:distribute app/build/outputs/apk/release/app-release.apk \
--app <FIREBASE_APP_ID> \
--groups internal-testers \
--release-notes "Private MVP v0.1.x"
```
- [ ] Add tester email addresses to Firebase App Distribution group
- [ ] Testers receive download link via email
## 6. Pre-Distribution Smoke Test
- [ ] Install release APK on a physical device
- [ ] Walk through the full QA checklist (`docs/qa/private-mvp-checklist.md`)
- [ ] Verify no crashes on cold start, warm start, or background restore
- [ ] Verify notification permissions prompt appears on Android 13+
- [ ] Verify paywall loads (even with placeholder API key)
## 7. Post-Distribution
- [ ] Collect crash reports from Firebase Crashlytics
- [ ] Monitor Firestore usage in Firebase Console
- [ ] Monitor Cloud Function logs for errors
- [ ] Collect tester feedback via dedicated channel

View File

@ -0,0 +1,86 @@
# Store Assets Checklist
Google Play Store asset preparation for Closer app release.
## Required Assets
### Screenshots (phone)
- [ ] 28 screenshots, minimum 320px, maximum 3840px
- [ ] Recommended: 1080x1920 or 1440x2560 (16:9 ratio)
- [ ] Required screenshots:
- [ ] Home screen with daily question
- [ ] Date Match swipe screen
- [ ] Date Matches (mutual likes)
- [ ] Question thread / answer reveal
- [ ] Spin Wheel
- [ ] Settings screen
### Feature Graphic
- [ ] 1024x500px JPEG or PNG
- [ ] Should convey app theme (couples, connection, questions)
- [ ] Must not contain device frames or text that duplicates store listing
### App Icon
- [ ] 512x512 PNG, 32-bit color, no transparency
- [ ] Adaptive icon already defined in project — verify it renders well
## Store Listing Text
### Title
- [ ] Max 30 characters: "Closer — Couple Questions"
### Short Description
- [ ] Max 80 characters
- [ ] Suggested: "Daily questions, date ideas, and deeper connection for couples."
### Full Description
- [ ] Max 4000 characters
- [ ] Should cover: daily questions, date match, spin wheel, bucket list, premium features
- [ ] Include relevant keywords naturally
### Category
- [ ] Primary: Lifestyle
- [ ] Secondary: Social (if available)
### Tags
- [ ] Couple, Relationship, Questions, Date Ideas, Connection
## Legal Links
- [ ] Privacy Policy URL: `https://closer.app/privacy` (currently placeholder — must be live before submission)
- [ ] Terms of Service URL: `https://closer.app/terms` (currently placeholder — must be live before submission)
- [ ] Subscription terms: `https://closer.app/subscription-terms` (placeholder)
## Content Rating
- [ ] Complete IARC questionnaire
- [ ] Expected rating: PEGI 3 / ESRB Everyone (no violence, no gambling, no user-generated content moderation concerns)
- [ ] Note: If question packs include sensitive topics, may need higher rating
## App Signing
- [ ] Opt in to Google Play App Signing (recommended)
- [ ] Upload signing certificate to Play Console
- [ ] Keep local keystore backup in secure location
- [ ] DO NOT commit keystore to git
## Pricing & Distribution
- [ ] Free with in-app purchases (RevenueCat)
- [ ] Subscription tiers configured in Google Play Console:
- [ ] Monthly premium
- [ ] Annual premium (if offering)
- [ ] Distribution: All countries (or select markets for soft launch)
## Pre-Launch Report
- [ ] Run Google Play pre-launch report (automated after upload)
- [ ] Address any accessibility issues flagged
- [ ] Address any performance issues flagged
## Known Gaps (resolve before public release)
- Date/Time pickers in DateBuilder are TODO placeholders
- RevenueCat API key is placeholder
- Cloud Functions are scaffolded but not deployed to Firebase
- Privacy/Terms URLs are placeholders — need real hosted pages