diff --git a/BUILDING.md b/BUILDING.md index cc7ae494..34593c5c 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -219,7 +219,7 @@ Install dependencies: npm install ``` -## Web Development +## Web Development & Deployment ### Web Development Commands diff --git a/CHANGELOG.md b/CHANGELOG.md index 76682c30..91a60779 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.4.9] - 2026.10.11 +### Fixed +- Startup DB error for new installations +### Changed +- Allow in-app notifications on production (as an advanced feature) +- Allow modification of image server URL +- Terms & conditions and privacy policy + + ## [1.4.6] - 2026.09.27 ### Fixed - Incorrect 'test' server URLs on production. diff --git a/README.md b/README.md index ac475939..74746e18 100644 --- a/README.md +++ b/README.md @@ -33,45 +33,6 @@ npm run build:android:test:run Assumes ADB is installed; see [Android Build](BUILDING.md#android-build) for SDK, emulator, and `PATH` setup. -#### Building an APK for Android 6 (API 23) - -App versions up to 1.4.6 support Android 6.0 (API 23); later versions require Android 7.0 (API 24) or newer. To run the app on an Android 6 device, build your own APK from the 1.4.6 release commit (`6183afc2`, "bump version to 1.4.6"). - -Prerequisites: git, Node.js 20 (see `.nvmrc`), Java 21, and the Android SDK with `ANDROID_HOME` set (see [Android Emulator Without Android Studio](BUILDING.md#android-emulator-without-android-studio-command-line-only) for an SDK setup that skips Android Studio). With [pkgx](https://pkgx.dev), prefix the commands with `pkgx`, e.g. `pkgx npm ci`. - -1. Get the 1.4.6 source: - - ```bash - git clone https://gitea.anomalistdesign.com/trent_larson/crowd-funder-for-time-pwa.git - cd crowd-funder-for-time-pwa - git checkout 6183afc2 - ``` - -2. Confirm the minimum SDK is 23: - - ```bash - grep minSdkVersion android/variables.gradle # expect: minSdkVersion = 23 - ``` - -3. Install dependencies and build a production APK: - - ```bash - npm ci - npm run build:android:prod -- --apk - ``` - - `npm ci` installs the exact dependency versions locked for 1.4.6. `build:android:prod -- --apk` builds the web app with production server settings, syncs it into the Android project, and runs `./gradlew assembleDebug`. The result is signed with your local Android debug key, so it installs on any device without a release keystore. - -4. Find the APK at `android/app/build/outputs/apk/debug/app-debug.apk` and install it, either with `adb install android/app/build/outputs/apk/debug/app-debug.apk` (USB debugging enabled on the phone) or by copying the file to the phone and opening it (allow "Install unknown apps" for the file manager). - -Notes: - -* **Back up your identity first.** A self-built APK has a different signature from the Play Store app, so Android refuses to install it over the store version. Uninstalling the store version deletes the app's local data, including your identifier keys. Back up your seed phrase (Profile page → "Backup Identifier Seed") before uninstalling, then import it into the self-built app. -* This build has Firebase disabled, so push notifications through Google's FCM service are off. -* The daily notification plugin calls `java.time`, which Android provides only from 8.0 (API 26). On Android 6, scheduling a daily reminder can crash the app; leave daily reminders off. See [doc/plugin-feedback-android-6-api23-zoneid-fix.md](doc/plugin-feedback-android-6-api23-zoneid-fix.md). -* Barcode scanning uses Google Play Services; on devices without them, scanning fails while the rest of the app works. -* A self-built APK does not auto-update. - ### iOS ```bash @@ -378,7 +339,7 @@ The application uses a platform-agnostic database layer with Vue mixins for serv **Architecture Decision**: The project uses Vue mixins over Composition API composables for platform service access. See [Architecture Decisions](doc/architecture-decisions.md) for detailed rationale. -## 📁 Project Structure +### 📁 Project Structure ```text timesafari/ @@ -393,6 +354,45 @@ timesafari/ └── 📄 doc/README-BUILD-GUARD.md # Guard system documentation ``` +### Building an APK for Android 6 (API 23) + +App versions up to 1.4.6 support Android 6.0 (API 23); later versions require Android 7.0 (API 24) or newer. To run the app on an Android 6 device, build your own APK from the 1.4.6 release commit (`6183afc2`, "bump version to 1.4.6"). + +Prerequisites: git, Node.js 20 (see `.nvmrc`), Java 21, and the Android SDK with `ANDROID_HOME` set (see [Android Emulator Without Android Studio](BUILDING.md#android-emulator-without-android-studio-command-line-only) for an SDK setup that skips Android Studio). With [pkgx](https://pkgx.dev), prefix the commands with `pkgx`, e.g. `pkgx npm ci`. + +1. Get the 1.4.6 source: + + ```bash + git clone https://gitea.anomalistdesign.com/trent_larson/crowd-funder-for-time-pwa.git + cd crowd-funder-for-time-pwa + git checkout 6183afc2 + ``` + +2. Confirm the minimum SDK is 23: + + ```bash + grep minSdkVersion android/variables.gradle # expect: minSdkVersion = 23 + ``` + +3. Install dependencies and build a production APK: + + ```bash + npm ci + npm run build:android:prod -- --apk + ``` + + `npm ci` installs the exact dependency versions locked for 1.4.6. `build:android:prod -- --apk` builds the web app with production server settings, syncs it into the Android project, and runs `./gradlew assembleDebug`. The result is signed with your local Android debug key, so it installs on any device without a release keystore. + +4. Find the APK at `android/app/build/outputs/apk/debug/app-debug.apk` and install it, either with `adb install android/app/build/outputs/apk/debug/app-debug.apk` (USB debugging enabled on the phone) or by copying the file to the phone and opening it (allow "Install unknown apps" for the file manager). + +Notes: + +* **Back up your identity first.** A self-built APK has a different signature from the Play Store app, so Android refuses to install it over the store version. Uninstalling the store version deletes the app's local data, including your identifier keys. Back up your seed phrase (Profile page → "Backup Identifier Seed") before uninstalling, then import it into the self-built app. +* This build has Firebase disabled, so push notifications through Google's FCM service are off. +* The daily notification plugin calls `java.time`, which Android provides only from 8.0 (API 26). On Android 6, scheduling a daily reminder can crash the app; leave daily reminders off. See [doc/plugin-feedback-android-6-api23-zoneid-fix.md](doc/plugin-feedback-android-6-api23-zoneid-fix.md). +* Barcode scanning uses Google Play Services; on devices without them, scanning fails while the rest of the app works. +* A self-built APK does not auto-update. + ## 🤝 Contributing 1. **Follow the Build Architecture Guard** - Update BUILDING.md when modifying build files