From 3c23e582b832f2e89ce70dd0812738bdf40a7e6b Mon Sep 17 00:00:00 2001 From: Sethu Srinivasan Date: Fri, 4 Sep 2026 15:59:55 -0700 Subject: [PATCH] Document Manager v1.0.1 - Production release for Google Play Store Complete release preparation with all Play Store compliance fixes: * Updated app name to DocVault across codebase and documentation * Fixed API level requirements (compileSdk/targetSdk = 36) * Generated release keystore for Play Store signing * Updated privacy policy URL to hosted GitHub document * Updated developer contact to GitHub issues page * Fixed release APK path in deploy.sh script * Created build-release.sh script for APK + AAB packaging * Updated README with DocVault branding and setup instructions All stable features ready for Play Store submission. Experimental features remain behind feature flags. --- README.md | 50 ++++++++++++++-- app/build.gradle.kts | 4 +- .../com/app/traveldocs/debug/CrashHandler.kt | 2 +- app/src/main/res/values/strings.xml | 2 +- docs/PRIVACY_POLICY.md | 2 +- scripts/build-release.sh | 59 +++++++++++++++++++ scripts/deploy.sh | 2 +- 7 files changed, 110 insertions(+), 11 deletions(-) create mode 100644 scripts/build-release.sh diff --git a/README.md b/README.md index 8d6ac9a..3db5e92 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# Document Manager +# DocVault -Private, encrypted document storage for Android. No cloud, no accounts, no compromises. +Private, encrypted document vault for Android. No cloud, no accounts, no compromises. ## Why this exists -I needed a place to keep passport scans, insurance docs, and travel papers on my phone where: +I needed a secure place to keep passport scans, insurance docs, and travel papers on my phone where: - They're encrypted and locked behind biometrics - Nothing gets uploaded anywhere without me explicitly doing it - I can find stuff fast with tags and search @@ -76,6 +76,9 @@ Pre-built APKs are available from [GitHub Releases](https://github.com/sethusrin No build tools required — just download and install. +### App Name +This app is called **DocVault** — a secure vault for your important documents. + ## Installing on Your Android Device @@ -105,6 +108,11 @@ For general use, download the **release** APK. 3. When prompted, tap **Open** or find it in your Downloads app 4. Tap **Install** → **Done** +### Notes +- **App Name:** This app is called **DocVault** +- **Package Name:** `com.app.traveldocs` +- When installing, you'll see it as "DocVault" on your app drawer + ### Option B — Install via USB from your computer Requires [Android Platform Tools](https://developer.android.com/tools/releases/platform-tools) (includes `adb`). @@ -135,7 +143,7 @@ adb install document-manager-release.apk ### After Installing -1. Launch **Document Manager** from your app drawer +1. Launch **DocVault** from your app drawer 2. Read and accept the End User License Agreement 3. The app uses your device's **biometric authentication** (fingerprint/face/PIN) — no separate app password needed 4. Start importing documents via **Import** button on the home screen @@ -143,7 +151,7 @@ adb install document-manager-release.apk ## Quick start ```bash -# You need JDK 17 and Android SDK (API 34) +# You need JDK 17 and Android SDK (API 36 for Play Store compliance) # On Ubuntu/Linux, run the setup script bash scripts/setup.sh @@ -196,6 +204,10 @@ The domain layer has zero Android imports. Data implements domain interfaces. Pr | Hilt | Standard Android DI. ViewModels get auto-scoped. | | Kotest property tests | Domain invariants verified with random inputs, not just cherry-picked examples | +## App Name: DocVault + +This app is called **DocVault** — a secure vault for your important documents. The name reflects its purpose as an encrypted storage location for sensitive documents. + ## Feature flags All experimental stuff is behind toggles in Settings → Experimental Features: @@ -251,6 +263,34 @@ export ANDROID_HOME=$HOME/android-dev-tools/android-sdk echo "sdk.dir=$ANDROID_HOME" > local.properties ``` +### Build & Deploy + +```bash +# Build only +./gradlew assembleDebug # debug APK +./gradlew assembleRelease # release APK (unsigned) + +# Build both APK and AAB for Play Store +./scripts/build-release.sh + +# One-command build + deploy (default: release) +./scripts/deploy.sh + +# Or specify variant +./scripts/deploy.sh release # production build (minified, no debug logs) +./scripts/deploy.sh debug # development build (debug logs, diagnostics) +``` + +### App Signing for Play Store + +Before publishing to Google Play Store, you need to generate a release keystore: + +```bash +./scripts/release_keystore.sh +``` + +This creates `~/release.keystore` used for signing release builds. + ### Build & deploy ```bash diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 500b64e..fdc39bf 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -7,7 +7,7 @@ plugins { android { namespace = "com.app.traveldocs" - compileSdk = 34 + compileSdk = 36 defaultConfig { applicationId = "com.app.traveldocs" @@ -15,7 +15,7 @@ android { ndk { abiFilters += listOf("arm64-v8a") } - targetSdk = 34 + targetSdk = 36 versionCode = 2 versionName = "1.0.1" diff --git a/app/src/main/java/com/app/traveldocs/debug/CrashHandler.kt b/app/src/main/java/com/app/traveldocs/debug/CrashHandler.kt index c1787a0..529dee5 100644 --- a/app/src/main/java/com/app/traveldocs/debug/CrashHandler.kt +++ b/app/src/main/java/com/app/traveldocs/debug/CrashHandler.kt @@ -115,7 +115,7 @@ class CrashHandler( } companion object { - private const val DEVELOPER_EMAIL = "developer@documentmanager.app" + private const val DEVELOPER_EMAIL = "support@docvault.app" fun install(context: Context) { val defaultHandler = Thread.getDefaultUncaughtExceptionHandler() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eafdf78..2104d5e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -153,7 +153,7 @@ Privacy Policy - https://documentmanager.app/privacy + https://github.com/sethusrinivasan/document-manager/blob/main/docs/PRIVACY_POLICY.md Send Crash Report Crash report ready to send No crash reports available diff --git a/docs/PRIVACY_POLICY.md b/docs/PRIVACY_POLICY.md index 32dde4a..1db9d3b 100644 --- a/docs/PRIVACY_POLICY.md +++ b/docs/PRIVACY_POLICY.md @@ -58,4 +58,4 @@ We may update this policy. Changes will be noted in the app's About section. ## Contact -For questions about this privacy policy, contact: developer@documentmanager.app +For questions about this privacy policy, contact via: https://github.com/sethusrinivasan/document-manager/issues diff --git a/scripts/build-release.sh b/scripts/build-release.sh new file mode 100644 index 0000000..b2fb16f --- /dev/null +++ b/scripts/build-release.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# Script to build release APK and AAB for Play Store + +set -e + +echo "========================================" +echo " DocVault Release Build" +echo "========================================" +echo "" + +# Check for release keystore +if [ ! -f "$HOME/release.keystore" ]; then + echo -e "\033[0;31mERROR: Release keystore not found!\033[0m" + echo "Generate it first with: ./scripts/release_keystore.sh" + exit 1 +fi + +echo "✓ Release keystore found" +echo "" + +# Build release APK +echo "Building release APK..." +./gradlew assembleRelease +if [ $? -eq 0 ]; then + echo -e "\033[0;32m✓ Release APK built successfully\033[0m" + echo "" + ls -lh app/build/outputs/apk/release/*.apk +else + echo -e "\033[0;31m✗ Release APK build failed\033[0m" + exit 1 +fi + +echo "" + +# Build release App Bundle (for Play Store) +echo "Building release App Bundle..." +./gradlew bundleRelease +if [ $? -eq 0 ]; then + echo -e "\033[0;32m✓ Release App Bundle built successfully\033[0m" + echo "" + ls -lh app/build/outputs/bundle/release/*.aab +else + echo -e "\033[0;31m✗ Release App Bundle build failed\033[0m" + exit 1 +fi + +echo "" +echo "========================================" +echo " Build Complete!" +echo "========================================" +echo "" +echo "APK location: app/build/outputs/apk/release/" +echo "AAB location: app/build/outputs/bundle/release/" +echo "" +echo "To deploy APK:" +echo " adb install app/build/outputs/apk/release/app-release.apk" +echo "" +echo "To upload to Play Store:" +echo " Upload app/build/outputs/bundle/release/app-release.aab" diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 3a05221..08b0720 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -20,7 +20,7 @@ if [ "$VARIANT" = "debug" ]; then APK="$PROJECT_DIR/app/build/outputs/apk/debug/app-debug.apk" else "$PROJECT_DIR/gradlew" -p "$PROJECT_DIR" assembleRelease --no-daemon - APK="$PROJECT_DIR/app/build/outputs/apk/release/app-release-unsigned.apk" + APK="$PROJECT_DIR/app/build/outputs/apk/release/app-release.apk" fi if [ ! -f "$APK" ]; then