How developers install tooling and run the app in development.
| Tool | Requirement | Notes |
|---|---|---|
| Bun | ≥ 1.0 | Primary package manager and script runner |
| Node | ≥ 24 | Declared in package.json engines |
| Git | any recent | Clone this repo |
| Android Studio | latest stable | SDK, emulator, or USB device (Android work) |
| JDK | 17 (typical for RN/Gradle) | Used by Android Gradle |
| Xcode | latest stable | macOS only — required for iOS simulator / device |
| CocoaPods | current | iOS native deps after prebuild (pod install) |
Optional:
- WSL2 on Windows — used by scripts like
wsl:prebuild-android/build:android:wslif you prefer Linux Gradle. - Expo account — only needed for optional EAS Build / Submit. Not required for local debug or a local Play AAB (
.envupload key +./gradlew bundleRelease— deployment-local.md). JS OTA does not use EAS Update.
This app uses a development build (expo-dev-client), not Expo Go. You must produce a native binary once, then use Metro against that client.
From the clone root (Ax108/ssa-app):
cd ssa-app
bun installprepare runs Husky. If hooks fail in a restricted environment, fix permissions or re-run bun install after cloning.
android/ and ios/ are generated (and typically gitignored). Create them with Expo prebuild:
# Both platforms (ios/ only fully useful on macOS)
bun run prebuild
# Android only (common on Windows)
bun run prebuild:android
# iOS only (macOS)
bun run prebuild:iosOn Windows + WSL for Android:
bun run wsl:prebuild-androidAfter changing native plugins, permissions, or packages that touch native code, run prebuild again (--clean when native config drifts).
- Start an emulator or enable USB debugging on a device.
- Build and install the debug app:
bun run androidThis runs expo run:android (compiles native + installs).
- In another terminal (or after the build finishes), start Metro:
bun run start
# or clear cache:
bun run devClearOpen the installed Sadhan Sangha Ashram / sadhan.sangha (Android) app; it should connect to Metro.
bun run prebuild:ios
bun run ios
bun run startUse a simulator from Xcode or a signed development device. Physical devices need an Apple Developer team configured in Xcode after prebuild.
- Custom splash stays until fonts, awaited
contentController.init()(cache and/or CDN + version sync), and a ~3000ms floor after fonts (minimum; longer if content init is still running). JS OTA is not part of the splash gate (background sync afterAppRootmounts). - Custom bottom bar over a single nested stack: Home, Ashram, Satsang, Gallery, Contact (see architecture.md).
- Images load from the production CDN (or seed JSON offline); YouTube/Spotify open externally.
If the binary is missing Expo modules (e.g. after adding expo-linear-gradient), rebuild the native app (bun run android / ios) — Metro alone is not enough.
-
bun installcompleted without errors -
android/exists after prebuild (andios/on Mac if needed) - Emulator/device visible (
adb devicesfor Android) -
bun run androidorbun run iossucceeded once -
bun run startshows Metro; app loads JS bundle -
bun verifypasses before you push (see testing.md)
- folder-structure.md
- development-workflow.md
- architecture.md
- deployment-local.md — local Play AAB (
.envsigning) and iOS archive - testing.md —
bun verifyand GitHub Actions CI