Files
chat_web_app/llm-fe/android
westfarn 9e1449f0db
Deploy Beta / unit-tests (push) Successful in 12s
Unit Tests / test (push) Successful in 11s
Deploy Beta / deploy-beta (push) Successful in 2m23s
Add public account-deletion page for Google Play (#103) (#110)
## Summary
- Closes [#103](#103).
- Adds public SPA route `/account-deletion/` (no auth) with Hesychia / `ai.hesychia.chat` branding, in-app deletion steps, soft-delete data retention copy, and a contact path (30-day SLA) for users who cannot sign in.
- Documents Play Console **Account deletion URL** in `ANDROID.md` and `android/README.md` (`https://hesychia.ai/account-deletion/`, legacy host, HashRouter form).

## Notes
- Retention copy matches backend soft-delete (v1): no claim of full erasure / hard purge yet.
- Play Console field still needs to be set out-of-band after deploy.

## Test plan
- [ ] Open `/account-deletion/` signed out — page loads (no redirect to sign-in)
- [ ] Confirm steps match Account → Delete my account + email confirm
- [ ] Confirm retention sections are accurate vs soft-delete
- [ ] `npm run test:ci -- --testPathPattern=AccountDeletionPage`
- [ ] After beta deploy, set Play Console Account deletion URL to the public HTTPS URLReviewed-on: #110
2026-08-04 10:53:48 -07:00
..
2026-08-03 12:14:21 -07:00

Hesychia — Android

Native Capacitor project for ai.hesychia.chat. Web UI comes from the CRA build/ output in the parent llm-fe/ package (synced with npx cap sync).

Broader Capacitor notes (env files, icons, QA): ../ANDROID.md.

Prerequisites

  • Node.js 20
  • JDK 17+
  • Android Studio with SDK Platform 35
  • ANDROID_HOME set, or open this folder once in Android Studio (writes local.properties)

Build the web bundle and sync

From the npm root (llm-fe/, one level up):

cd ..
npm ci
npm run build:mobile    # .env.mobile → react-scripts build → cap sync android

Open this project in Android Studio:

npm run android:open
# or: npx cap open android

Re-sync after changing web code (with an existing build/):

npm run android:sync

Backend URLs are baked in at web-build time via ../.env.mobile (prod by default).

Run on a device / emulator

Android Studio

  1. Sync Gradle when prompted.
  2. Pick an emulator or USB device (enable USB debugging).
  3. Run app.

CLI (debug APK)

./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk

Version before a store release

Edit app/build.gradledefaultConfig:

Field Rule
versionName User-visible string; keep in sync with ../package.json version
versionCode Integer; must increase for every Play upload

Sign a release build

Do not commit keystores or passwords.

  1. Create an upload keystore (once), outside the repo:
keytool -genkey -v -keystore ~/Documents/secrets/aiml-chat-upload.jks \
  -keyalg RSA -keysize 2048 -validity 10000 \
  -alias aiml-chat-upload
  1. Create keystore.properties in this directory (android/, gitignored):
storeFile=/absolute/path/to/aiml-chat-upload.jks
storePassword=REPLACE_ME
keyAlias=aiml-chat-upload
keyPassword=REPLACE_ME
  1. Build a signed App Bundle:
./gradlew bundleRelease

Output:

app/build/outputs/bundle/release/app-release.aab

Signed APK (if needed):

./gradlew assembleRelease
# → app/build/outputs/apk/release/app-release.apk

Without keystore.properties, release builds are unsigned; debug builds do not need it.

Deploy to Google Play

  1. Play Console → app Hesychia (ai.hesychia.chat).
  2. Complete store listing: privacy policy URL, data-safety form, screenshots.
  3. Set Account deletion URL to the public instructions page (no sign-in required):
    • https://hesychia.ai/account-deletion/ (preferred product host)
    • or https://chat.aimloperations.com/account-deletion/ until hesychia.ai cutover
  4. Testing → Internal testing → create release → upload app-release.aab.
  5. Add testers, roll out internal track, verify on devices.
  6. Promote to closed / open / production only after internal QA passes.

See also ../ANDROID.md Play checklist and issue #103.

Each new upload needs a higher versionCode.

Useful Gradle tasks

Task Purpose
./gradlew assembleDebug Debug APK
./gradlew assembleRelease Release APK (signed if props present)
./gradlew bundleRelease Play Store .aab
./gradlew clean Clean build outputs

App identity

Application ID ai.hesychia.chat
Display name Hesychia
Min / target SDK 23 / 35 (see variables.gradle)