SpeakTrue

Android Play Release Checklist

Reader and action

Use this checklist before any SpeakTrue Android upload to Google Play. It separates source-controlled release readiness from external Play Console proof so local checks do not overclaim production upload readiness.

Source-controlled readiness

These items must be true in the repository before a release candidate is considered Play-ready:

Data safety mapping

Use the current privacy policy as source text for Play Console Data safety answers. Do not invent broader collection claims than the app and providers require.

Play disclosure area SpeakTrue answer source
Data shared with third parties Speech user content is sent to ElevenLabs only for requested AI speech processing. Supabase handles auth, database, edge functions, and optional storage.
Data collected Account/session identifiers, user content, usage data, app settings/preferences, diagnostics, and optional local fallback/provider keys.
Tracking No tracking, no sale of personal data, no advertising data broker sharing.
Security practices Data in transit uses HTTPS. Account-backed cloud features use authenticated sessions. Optional local fallback keys remain on-device.
Deletion / user control Users can revoke microphone permission, uninstall for local data removal, delete cloud-backed soundboard content, delete a signed-in account in Settings, and request account/data deletion from https://haddadios.github.io/SpeakTrue/account-deletion.

Play Console external proof

These checks require Play Console access, real credentials, or a disposable live account. Record results outside source control unless they are redacted and intentionally added to docs.

Play Console pasteable entries

Use these entries as release-review source text. Replace only the bracketed disposable-account placeholders with real review-account values in Play Console; do not commit credentials.

App access instructions

SpeakTrue requires sign-in for account-backed speech and soundboard workflows.

Reviewer account:
Email: [disposable-review-email]
Password: [disposable-review-password]

After sign-in, accept the Terms of Use gate. The app opens to the main speech tools. Reviewers can test Text to Speech, Speech to Text, Speech to Speech, Soundboard, Voice Clone, Settings, Privacy Policy, Terms of Use, and Account Deletion from the bottom navigation and Settings links. Microphone permission is requested only when recording for Speech to Text, Speech to Speech, or Voice Clone.

Internal testing notes

Upload the signed AAB to internal testing before production. Confirm package name com.speaktrue.app, app name SpeakTrue, version name 1.2, version code 15, launcher icon, privacy policy URL, terms URL, and account deletion URL. Do not enable subscriptions or in-app products for this Android free/open-access baseline.

Live smoke evidence note

Before promoting beyond internal testing, install Deno, deploy the required Supabase Edge Functions, and run the redacted live smoke with a disposable account. Keep only command name, exit code, and pass/fail summary as evidence. Do not paste Supabase JWTs, auth tokens, provider keys, user content, transcripts, generated audio URLs, or account passwords.

Opt-in smoke command:

SPEAKTRUE_ANDROID_LIVE_SMOKE=1 \
SPEAKTRUE_ANDROID_SUPABASE_URL=<redacted-supabase-url> \
SPEAKTRUE_ANDROID_SUPABASE_ANON_KEY=<redacted-anon-key> \
SPEAKTRUE_ANDROID_TEST_EMAIL=<redacted-test-email> \
SPEAKTRUE_ANDROID_TEST_PASSWORD=<redacted-test-password> \
SPEAKTRUE_ANDROID_TEST_CATEGORY_ID=<redacted-category-uuid> \
deno run -A scripts/live_android_play_release_smoke.mjs

Safe verifier:

python3 scripts/generate_android_play_release_evidence_snapshot.py
python3 scripts/verify_android_ios_parity_release.py
./android/gradlew -p android :app:testDebugUnitTest
./android/gradlew -p android :app:lintDebug
python3 scripts/verify_android_release_bundle.py android/app/build/outputs/bundle/release/app-release.aab
python3 scripts/verify_android_release_bundle.py --require-signed android/app/build/outputs/bundle/release/app-release.aab
python3 scripts/verify_android_play_assets.py
python3 scripts/verify_android_play_screenshots.py /private/tmp/speaktrue-android-play-screenshots --labels tts,stt,sts,soundboard,voice-clone,settings
python3 scripts/verify_android_play_policy_urls.py
python3 scripts/verify_android_play_policy_urls.py --live
python3 scripts/verify_android_play_release_smoke.py
python3 scripts/verify_android_play_release_blockers.py --local-only
python3 scripts/verify_android_play_release_blockers.py --local-only --skip-screenshots
python3 scripts/verify_android_play_release_blockers.py --local-only --skip-aab
python3 scripts/verify_android_play_release_evidence.py
python3 scripts/verify_android_play_release_blockers.py --include-live-policy
bash scripts/verify_android_release_signing_plumbing.sh
bash android/scripts/run-instrumented-smoke.sh
ANDROID_PLAY_SCREENSHOT_AUTOMATED=1 bash android/scripts/capture-play-screenshots.sh
bash android/scripts/capture-play-screenshots.sh

If the explicit env is absent, the verifier exits with a skipped state and says no live success is claimed. If live env is configured but Deno is unavailable, the verifier fails with live-smoke runtime missing: deno instead of claiming a live result.

Use docs/ops/ANDROID_PLAY_RELEASE_EVIDENCE_TEMPLATE.md for the final redacted release-evidence record. Keep NO_LIVE_SUCCESS_CLAIMED until live provider/storage smoke passes against deployed services.

After every external proof row is filled and marked COMPLETE, run:

python3 scripts/verify_android_play_release_evidence.py --require-complete docs/ops/ANDROID_PLAY_RELEASE_EVIDENCE_TEMPLATE.md

Blockers

Do not promote to production if any item below is true: