Files
Claude e5b81f46b0 Store readiness: in-app account deletion, privacy policy, terms, listing copy
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
2026-08-03 22:37:25 +00:00

90 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Launch checklist — closed beta
The path from this repo to 2050 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/app` secret in Secrets Manager:
`OPENAI_API_KEY` (required for chat), `APPLE_SHARED_SECRET` and
`GOOGLE_SERVICE_ACCOUNT_JSON` (required before purchases work).
- [ ] Run `db/migrations/001_init.sql` against the Aurora cluster
(credentials in the RDS-managed secret; connect via a bastion or the
RDS query editor).
- [ ] Smoke test: `curl <ApiUrl>/suggestions` returns 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 subscriptions `semantika_monthly` ($5.99/month)
and `semantika_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 becomes
`GOOGLE_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.md` and
`docs/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 the `AWS_REGION` variable).
- [ ] Merge this branch to `main` — CI runs lint/typecheck/tests,
`deploy.yml` deploys the stack automatically.
## 7. The beta itself (2050 users)
Measure before building anything new:
- **Do they come back?** — active users over time (`usage` activity).
- **How deep do dialogues go?** — `messages_used` distribution.
- **When do they upgrade?** — `subscription` transitions relative to
`created_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.