Files
alva/LAUNCH.md
T
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

4.0 KiB
Raw Blame History

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.jsonextra (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.