docs(qa): private MVP checklist, internal testing checklist, store assets checklist, code QA scan (batch 13)
This commit is contained in:
parent
4ede77f067
commit
160fb38c4f
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
# Store Assets Checklist
|
||||
|
||||
Google Play Store asset preparation for Closer app release.
|
||||
|
||||
## Required Assets
|
||||
|
||||
### Screenshots (phone)
|
||||
- [ ] 2–8 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
|
||||
Loading…
Reference in New Issue