Install & Build

Prerequisites

  • Node.js 18 / 20 / 22 / 24 (any of these; declared in engines.node)
  • pnpm (the lockfile is pnpm-lock.yaml; npm/yarn will produce different trees)
  • JDK 17 + Android SDK (for Android builds, declared in android/app/build.gradle)
  • Xcode 15+ (for iOS builds)
  • Rust toolchain + Visual Studio Build Tools (for Tauri Windows builds)

Step 1 — Clone and install

git clone https://github.com/lingion/AIaW.git
cd AIaW
pnpm install

pnpm install will run sharp's postinstall (allowed in pnpm.onlyBuiltDependencies); everything else skips native compilation.

Step 2 — Run the dev server

pnpm dev          # Quasar dev mode (SPA, port 9005)
# or
pnpm dev -m pwa   # PWA mode (port 9006)

Open the dev URL Quasar prints to terminal (default http://<your-host>:<your-port>; the exact port is whichever Vite allocates, often 9000 for SPA). First run takes ~30 s while Vite warms the cache.

Step 3 — Build production assets

pnpm build        # writes dist/spa/ (SPA) and dist/pwa/ (PWA)

build is just quasar build. quasar.config.js declares no beforeBuild hook, so dist/spa contains the full SPA ready for static hosting.

Step 4 — Build for Android (Capacitor)

pnpm build -m capacitor -T android
# produces android/ Capacitor project; then:
cd android
./gradlew assembleDebug          # debug APK
./gradlew assembleRelease        # release APK (signed with debug key in build.gradle)

The Android module is pinned to: minSdkVersion 23 (Android 6.0), compileSdkVersion 35, targetSdkVersion 35, Java 17, versionCode 20018.

Step 5 — Build for iOS

pnpm build -m capacitor -T ios
# produces ios/ Xcode project
cd ios
pod install
xcodebuild -workspace App.xcworkspace -scheme App -sdk iphoneos

Step 6 — Build for desktop (Tauri)

pnpm build          # builds the SPA assets
cd src-tauri
cargo tauri build    # produces .deb / .appimage / .nsis / .app / .dmg

Tauri config targets: deb, appimage, nsis, app, dmg. Bundle id: app.aiaw. Window: 1150x750, drag-drop disabled.

Step 7 — Verify what got built

ls dist/spa/                    # SPA output
ls android/app/build/outputs/   # Android APKs
ls src-tauri/target/release/    # Tauri bundles

Customizing the build

All runtime configuration goes through Vite's import.meta.env. The values are read in src/utils/config.ts:

Env varUsed byDefault in this fork
DOC_PARSE_BASE_URLdoc-parse plugin (PDF/Word/Excel parsing)undefined (plugin shows error)
CORS_FETCH_BASE_URLproxy for cross-origin fetchesundefined
SEARXNG_BASE_URLweb-search plugin (SearXNG metasearch)undefined
LITELLM_BASE_URLLitellm proxy (used by custom-provider feature)undefined (hides the route)
BUDGET_BASE_URLbudget/quota displayundefined
DEXIE_DB_URLDexie Cloud syncundefined (cloud-sync disabled)
DISABLE_CHECK_UPDATEskip the new-version check on app bootfalse

Set these via .env.local (gitignored) before pnpm dev / pnpm build. The shipped .env.app file contains the upstream demo URLs and is meant to be replaced, not used as-is.

Scripts beyond the standard Quasar ones

From package.json:

  • pnpm sync-version — copies version metadata to src/version.json
  • pnpm generate:app-icons — regenerates icon set from a single source image
  • pnpm sync:android-shell — syncs the native shell folder between upstream and fork
  • pnpm check:packaging-shell — pre-build sanity check that the native shell is intact
  • pnpm build:android:canonical — canonical Android APK build path

These all run against scripts/*.mjs files. They are not needed for normal SPA / PWA / Tauri builds; they only matter if you are also producing the Android APK from a clean checkout.