Last refreshed: 2026-06-29
Use this as the first read for first-contact engineering, incident response, and change planning.
This document answers:
For complete file-by-file ownership enumerations, use:
docs/reference/ios-file-inventory.mddocs/reference/android-file-inventory.mddocs/reference/web-file-inventory.mdThis document keeps those inventories as source-of-trust and adds change-oriented context and behavioral mappings.
backend/supabase/functions/*).| Surface | Primary roots | Notes |
|---|---|---|
| iOS app | ios/ |
SwiftUI + service/feature split + tests |
| Android app | android/ |
Jetpack Compose + DI/core + feature modules + tests |
| Legacy web app | web/python-web-app/ |
Flask request surface + service/router layer + legacy compatibility seam |
| Marketing web | web/marketing/ |
Static hosting + waitlist callback/copy |
| Backend | backend/supabase/ |
Edge functions + shared helpers + migrations + migration SQL |
ios/SpeakTrue/SpeakTrueApp.swiftios/SpeakTrue/ContentView.swiftios/SpeakTrue/AuthGateView.swiftios/SpeakTrue/MainTabView.swiftios/SpeakTrue/SupabaseConfig.swiftios/SpeakTrue/SupabaseClientProvider.swiftios/SpeakTrue/AuthService.swiftios/SpeakTrue/AIProxyService.swiftios/SpeakTrue/AuthState.swiftios/SpeakTrue/UserSettings.swiftios/SpeakTrue/TTSViewModel.swiftios/SpeakTrue/TextToSpeechView.swiftios/SpeakTrue/TTSCatSelectView.swiftbackend/supabase/functions/user-settings-*backend/supabase/migrations/ios/SpeakTrue/STTViewModel.swiftios/SpeakTrue/STSViewModel.swiftios/SpeakTrue/SpeechToTextView.swiftios/SpeakTrue/SpeechToSpeechView.swiftios/SpeakTrue/AudioRecorderService.swiftios/SpeakTrue/LiveVoiceSTSService.swiftios/SpeakTrue/RealtimeSTTService.swiftsts-*ios/SpeakTrue/SoundboardViewModel.swiftios/SpeakTrue/SoundboardView.swiftios/SpeakTrue/SoundboardCacheManager.swiftios/SpeakTrue/SoundboardCacheIndex.swiftsoundboard-*ios/SpeakTrue/VoiceCloneTabView.swiftios/SpeakTrue/VoiceCloneViewModel.swiftvoice-clone-*ios/SpeakTrue/SettingsTabView.swiftios/SpeakTrue/SettingsView.swiftios/SpeakTrue/SettingsModels.swiftios/SpeakTrue/UserSettingsSyncService.swiftuser-settings-*, quota-status, _shared/subscription-gating-config.tsios/SpeakTrueTests/*ViewModel*, *Tests.swiftios/SpeakTrueTests/Settings*ios/SpeakTrueUITests/*ios/Config/App.*.xcconfig if changing runtime keys.android/app/src/main/java/com/speaktrue/app/SpeakTrueApp.ktandroid/app/src/main/java/com/speaktrue/app/MainActivity.ktandroid/app/src/main/java/com/speaktrue/ui/navigation/AppNavGraph.ktandroid/app/src/main/java/com/speaktrue/core/config/RuntimeConfig.ktandroid/app/src/main/java/com/speaktrue/core/network/*android/app/src/main/java/com/speaktrue/core/auth/*android/app/src/main/java/com/speaktrue/core/audio/*android/app/src/main/java/com/speaktrue/core/storage/*android/app/src/main/java/com/speaktrue/features/tts/data/*android/app/src/main/java/com/speaktrue/features/tts/presentation/TTSViewModel.ktandroid/app/src/main/java/com/speaktrue/features/tts/ui/TTSScreen.kttts-generate, models-list, voices-list, user-settings-*, quota-statusandroid/app/src/main/java/com/speaktrue/features/stt/*android/app/src/main/java/com/speaktrue/features/sts/*android/app/src/main/java/com/speaktrue/features/sts/data/*stt-transcribe, sts-*android/app/src/main/java/com/speaktrue/features/soundboard/*soundboard-save-generated, soundboard-delete, clip-order-batchandroid/app/src/main/java/com/speaktrue/features/voiceclone/*voice-clone-preflight, voice-clone-create, voice-clone-deleteandroid/app/src/main/java/com/speaktrue/features/settings/*android/app/src/main/java/com/speaktrue/features/agreement/*backend/supabase/functions/user-settings-*android/app/src/test/java/com/speaktrue/**android/app/src/androidTest/java/com/speaktrue/**GenerationContractParityTestSettingsContractParityTestSoundboardContractParityTestVoiceCloneContractParityTest./gradlew -p android :app:assembleDebug./gradlew -p android :app:bundleRelease./gradlew -p android :app:testDebugUnitTest./gradlew -p android :app:lintDebugandroid/scripts/ and docs/ops/ANDROID_PLAY_RELEASE_CHECKLIST.mdweb/marketing/index.html, web/marketing/auth/callback/index.htmlweb/marketing/scripts, web/marketing/styles)docs/ops/CLOUDFLARE_PAGES_DEPLOY.md)web/python-web-app/wsgi.pyweb/python-web-app/src/app.pyweb/python-web-app/src/routes/*.pyweb/python-web-app/src/services/*.pyweb/python-web-app/templates/*web/python-web-app/static/*web/python-web-app/src/legacy_runtime_adapter.pyweb/python-web-app/src/legacy_runtime.pyweb/python-web-app/src/routes/stt.py, tts.pyweb/python-web-app/src/services/stt_service.py, tts_service.py, speech_service.pyweb/python-web-app/static/js/*web/python-web-app/tests/* and web/python-web-app/tests/js/*web/python-web-app/src/routes/settings.pyweb/python-web-app/src/services/user_settings_service.pyweb/python-web-app/templates/settings.htmlweb/python-web-app/static/js/index_settings.jsweb/python-web-app/tests/test_settings*web/python-web-app/src/routes/soundboard.pyweb/python-web-app/src/services/soundboard_service.pyweb/python-web-app/static/js/index_soundboard.jsweb/python-web-app/templates/soundboard/*web/python-web-app/src/routes/stt.pyweb/python-web-app/static/js/index_speech.js, index_stt.js, index_sts_live_voice.jsweb/python-web-app/tests/js/sts_*.mjsThis section is the canonical behavior map for function ownership and maintenance.
Legend:
route is the logical endpoint name at /functions/v1/<route>.read = read-only operation.write = persistence or mutation operation.providers = third-party API interactions.account-delete/account-deletebackend/supabase/functions/account-delete/index.ts, handler.ts, handler_test.tsbilling-apple-sync/billing-apple-syncbackend/supabase/functions/billing-apple-sync/index.ts, logic.ts, logic_test.tsactive/expired/revoked), and classifies mutation decisions for entitlement writes.itunes endpoints), auth JWS flow.billing-apple-notifications/billing-apple-notificationsbackend/supabase/functions/billing-apple-notifications/index.ts, handler.ts, handler_test.ts, deno.jsonbilling-google-play-sync/billing-google-play-syncbackend/supabase/functions/billing-google-play-sync/index.ts, handler.ts, google-play-verifier.ts, google-play-verifier_test.ts, handler_test.tsbilling-stripe-webhook/billing-stripe-webhookbackend/supabase/functions/billing-stripe-webhook/index.ts, logic.ts, dispatch.ts, persistence.ts, signature.ts, validation.ts, *_test.tsstt-transcribe/stt-transcribebackend/supabase/functions/stt-transcribe/index.ts, capture.ts, capture_test.ts, validation.ts, validation_test.ts, handler.ts, handler_test.tstts-generate/tts-generatebackend/supabase/functions/tts-generate/index.ts, handler.ts, pronunciation.ts, pronunciation_test.ts, policy.ts, policy_test.ts, handler_test.tslanguage-recommend/language-recommendbackend/supabase/functions/language-recommend/index.ts, handler.ts, handler_test.tsmodels-list/models-listbackend/supabase/functions/models-list/index.ts, handler.ts, handler_test.tsvoices-list/voices-listbackend/supabase/functions/voices-list/index.ts, handler.ts, handler_test.tssts-live-voice-tts-session/sts-live-voice-tts-sessionbackend/supabase/functions/sts-live-voice-tts-session/index.ts, handler.ts, handler_test.tssts-near-realtime-session/sts-near-realtime-sessionbackend/supabase/functions/sts-near-realtime-session/index.ts, handler.ts, handler_test.tssts-realtime-session/sts-realtime-sessionbackend/supabase/functions/sts-realtime-session/index.ts, handler.ts, handler_test.tssts-realtime-finalize/sts-realtime-finalizebackend/supabase/functions/sts-realtime-finalize/index.ts, handler.ts, handler_test.tssts-live-interpreter-session (migration/untracked state)/sts-live-interpreter-sessionbackend/supabase/functions/sts-live-interpreter-session/index.tshandler layer before release.sts-live-interpreter-tts-session (migration/untracked state)/sts-live-interpreter-tts-sessionbackend/supabase/functions/sts-live-interpreter-tts-session/index.tsuser-settings-get/user-settings-getbackend/supabase/functions/user-settings-get/index.ts, handler.ts, handler_test.tsuser-settings-update/user-settings-updatebackend/supabase/functions/user-settings-update/index.ts, handler.ts, handler_test.tsquota-status/quota-statusbackend/supabase/functions/quota-status/index.ts, handler.ts, handler_test.tsclip-order-batch/clip-order-batchbackend/supabase/functions/clip-order-batch/index.ts, handler.ts, handler_test.tssoundboard-save-generated/soundboard-save-generatedbackend/supabase/functions/soundboard-save-generated/index.ts, handler.ts, handler_test.tssoundboard-delete/soundboard-deletebackend/supabase/functions/soundboard-delete/index.ts, handler.ts, delete_storage_error.ts, delete_storage_error_test.ts, handler_test.tssoundboard-clip-ingest (migration/untracked state)/soundboard-clip-ingestbackend/supabase/functions/soundboard-clip-ingest/ (currently empty)pronunciation-dictionary/pronunciation-dictionarybackend/supabase/functions/pronunciation-dictionary/index.ts, handler.ts, handler_test.tsbug-report-submit/bug-report-submitbackend/supabase/functions/bug-report-submit/index.ts, handler.ts, handler_test.tsstyle-presets/style-presetsbackend/supabase/functions/style-presets/index.ts, handler.ts, handler_test.tspronunciation-dictionary, style-presets, language-recommend, voices-list are important for speech UX parity and should remain in sync with mobile-side UI.byok-resolve/byok-resolvebackend/supabase/functions/byok-resolve/index.ts, handler.ts, handler_test.tsbyok-upsert/byok-upsertbackend/supabase/functions/byok-upsert/index.ts, handler.ts, handler_test.tswaitlist-signup/waitlist-signupbackend/supabase/functions/waitlist-signup/index.ts, handler.ts, handler_test.tsvoice-clone-preflight/voice-clone-preflightbackend/supabase/functions/voice-clone-preflight/index.ts, handler.ts, validation.ts, validation_test.ts, handler_test.tsvoice-clone-create/voice-clone-createbackend/supabase/functions/voice-clone-create/index.ts, handler.ts, validation.ts, validation_test.ts, handler_test.ts, telemetry.ts, telemetry_test.tsvoice-clone-delete/voice-clone-deletebackend/supabase/functions/voice-clone-delete/index.ts, handler.ts, validation.ts, validation_test.ts, handler_test.tsbackend/supabase/functions/_shared/cors.ts (CORS envelope behavior)backend/supabase/functions/_shared/auth-context.ts (auth extraction and resolution)backend/supabase/functions/_shared/usage.ts (usage counters and usage metadata)backend/supabase/functions/_shared/quotas.ts (quota computations)backend/supabase/functions/_shared/entitlements.ts (entitlement fetch helpers)backend/supabase/functions/_shared/billing-entitlement-policy.ts (entitlement precedence/de-duplication)backend/supabase/functions/_shared/private-voice-access.ts (private voice gating)backend/supabase/functions/_shared/byok.ts (BYOK utilities)backend/supabase/functions/_shared/subscription-gating-config.ts (feature flags, if you are touching gating)When backend behavior changes touch persistence, migration strategy is:
backend/supabase/migrations/ with a timestamp and clear intent in filename.backend/supabase/functions/*_test.ts.Duplicate migration naming risks exist in current history; avoid reusing older migration stamps and prefer strictly monotonic filenames.
ios/ and any assets in ios/ as needed../gradlew -p android :app:testDebugUnitTest and ./gradlew -p android :app:lintDebug before merge.android/scripts/ for screenshot/verification if release-bound.web/python-web-app/ together.pytest) and JS browser checks (web/python-web-app/tests/js/*.mjs) for public-facing behavior.web/marketing/.docs/ops/CLOUDFLARE_PAGES_DEPLOY.md).Use this decision checklist:
Add or change feature defaults for all clients: 1) migrate defaults SQL → 2) backend user settings handlers → 3) platform mappers/tests (iOS + Android + web) → 4) docs/contracts.
Change voice availability / filtering:
1) backend entitlements/voice list functions (voices-list, _shared/private-voice-access.ts) → 2) client catalogs/view models (voices/language) → 3) parity tests.
Change soundboard ordering rules:
1) clip-order-batch and DB stored function logic → 2) Android/iOS soundboard models → 3) platform integration tests.
Change STS workflow mode:
1) user settings schema/migration and handlers → 2) STS function route contracts (sts-*) → 3) iOS/Android UI mode selectors and tests → 4) web STS runtime.
docs/reference/repository-full-deep-reference.mddocs/reference/repository-operator-manual.mddocs/contracts/speech-workflow-contract.mddocs/contracts/native-speech-parity-anchor.mddocs/ops/* for release-specific gatesdocs/reference/{ios-file-inventory,android-file-inventory,web-file-inventory}.md