e5b81f46b0
Closes the remaining store-compliance gaps before App Store / Play submission: - Account deletion (App Store guideline 5.1.1): DELETE /me removes the user row (usage cascades). The app exposes it through one quiet 'Account' caption link under the chat, visible only when signed in, driving two native dialogs (Sign out / Delete account with a destructive confirm) — no new views, no menus, minimalism intact. Deletion signs out and resets the app; copy notes that store subscriptions are cancelled in App Store / Play settings. - docs/store/privacy-policy.md: the complete data inventory (matching the actual schema), transient OpenAI processing with no training, no profiling or ads, GDPR legal bases and rights, in-app erasure. - docs/store/terms-of-service.md: not-therapy positioning with crisis guidance, AI-generated-content caveat, 18+ eligibility, auto-renewal/cancellation terms, liability, Swedish governing law. - docs/store/listing.md: App Store and Play copy written to the honest-claims rule (subtitle 'Think Beyond Thought', keywords, descriptions), plus App Privacy and Data safety questionnaire mappings. - LAUNCH.md updated: host the policy/terms, set store URLs, use the prepared listing copy. - Tests: 30 passing (adds DELETE /me coverage). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0118DaxZR36RpnY524vRqx3z
4.0 KiB
4.0 KiB
Launch checklist — closed beta
The path from this repo to 20–50 test users. Everything below is configuration and store work; the code is done (see Definition of Done in the README).
1. AWS
cd infra && npx cdk bootstrap(once per account/region).npx cdk deploy— note the outputs:ApiUrl,UserPoolId,UserPoolClientId,CognitoDomain.- Fill the
semantika/appsecret in Secrets Manager:OPENAI_API_KEY(required for chat),APPLE_SHARED_SECRETandGOOGLE_SERVICE_ACCOUNT_JSON(required before purchases work). - Run
db/migrations/001_init.sqlagainst the Aurora cluster (credentials in the RDS-managed secret; connect via a bastion or the RDS query editor). - Smoke test:
curl <ApiUrl>/suggestionsreturns the starter list.
2. Sign-in
- Email sign-in works out of the box (Cognito hosted UI).
- Apple: create a Services ID + key in the Apple Developer portal, then
redeploy with CDK context
appleTeamId,appleKeyId,applePrivateKeySecretName. - Google: create an OAuth client in Google Cloud, then redeploy with
googleClientId,googleClientSecret. - For the beta, email-only is acceptable — Apple/Google can land in a later build. Note: Apple's review requires Sign in with Apple if other third-party logins are offered, so enable it before public App Store release.
3. App configuration
- Put the CDK outputs into
apps/mobile/app.json→extra(apiUrl,cognitoDomain,cognitoClientId). - Keep product ids as
semantika_monthly/semantika_yearly.
4. Stores
- App Store Connect: create the app (bundle id
com.semantika.app), add auto-renewable subscriptionssemantika_monthly($5.99/month) andsemantika_yearly($49.99/year) in one subscription group. Generate the App-Specific Shared Secret →APPLE_SHARED_SECRET. - Play Console: create the app (package
com.semantika.app), add the two subscriptions with the same ids and prices. Create a service account with Play Developer API access → its JSON key becomesGOOGLE_SERVICE_ACCOUNT_JSON. - Store copy: use
docs/store/listing.md(already written to the honest-claims rule — inspiration, not proven effects; reflection partner, not therapy). - Fill the [PLACEHOLDERS] in
docs/store/privacy-policy.mdanddocs/store/terms-of-service.md, host them on a public URL (GitHub Pages is enough), and set the URLs in both store consoles. - App Privacy / Data safety forms: mappings are in
docs/store/listing.md. In-app account deletion (App Store 5.1.1) is implemented: Account → Delete account.
5. Builds
cd apps/mobile && npx eas build --profile preview --platform all(in-app purchases require a real build, not Expo Go).- iOS: distribute via TestFlight (internal, then external testers).
- Android: distribute via Play Console internal testing track.
- Purchases in test: use TestFlight sandbox accounts / Play license testers — no real charges.
6. CI/CD
- Create the GitHub OIDC deploy role in AWS; set repo secret
AWS_DEPLOY_ROLE_ARN(and optionally theAWS_REGIONvariable). - Merge this branch to
main— CI runs lint/typecheck/tests,deploy.ymldeploys the stack automatically.
7. The beta itself (20–50 users)
Measure before building anything new:
- Do they come back? — active users over time (
usageactivity). - How deep do dialogues go? —
messages_useddistribution. - When do they upgrade? —
subscriptiontransitions relative tocreated_at. - Which starter questions create value? — conversations are never stored, so ask the testers directly (short interviews or a 3-question survey beats analytics here).
Exit criteria for V1 → V2 decisions: a clear picture of retention, dialogue depth, upgrade timing, and which conversation types resonate. Only then open the Version 2 list.