init: extract mobile app from bincio_activity

Expo/React Native app with local SQLite archive and bincio-activity sync.
This commit is contained in:
Davide Scaini
2026-06-02 15:45:20 +02:00
commit 2a7c5fa269
34 changed files with 15133 additions and 0 deletions
Executable
+104
View File
@@ -0,0 +1,104 @@
#!/usr/bin/env bash
# Bincio mobile app — one-time setup
# Run from the mobile/ directory: ./setup.sh
# Or from the repo root: bash mobile/setup.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# ── Colours ───────────────────────────────────────────────────────────────────
GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; RESET='\033[0m'
ok() { echo -e "${GREEN}${RESET} $*"; }
warn() { echo -e "${YELLOW}${RESET} $*"; }
die() { echo -e "${RED}${RESET} $*" >&2; exit 1; }
step() { echo -e "\n${YELLOW}${RESET} $*"; }
echo ""
echo " Bincio mobile setup"
echo " ═══════════════════"
echo ""
# ── 1. Node.js ────────────────────────────────────────────────────────────────
step "Checking Node.js..."
if ! command -v node &>/dev/null; then
die "Node.js not found. Install from https://nodejs.org (v20+ recommended)."
fi
NODE_MAJOR=$(node -v | sed 's/v//' | cut -d. -f1)
if [ "$NODE_MAJOR" -lt 18 ]; then
die "Node.js 18+ required (found $(node -v)). Update at https://nodejs.org"
fi
ok "Node.js $(node -v)"
# ── 2. npm ────────────────────────────────────────────────────────────────────
if ! command -v npm &>/dev/null; then
die "npm not found. It ships with Node.js — check your installation."
fi
ok "npm $(npm -v)"
# ── 3. Expo CLI (global, optional — we use npx) ───────────────────────────────
step "Checking Expo CLI..."
if command -v expo &>/dev/null; then
ok "Expo CLI $(expo --version) (global)"
else
warn "Expo CLI not installed globally. Using npx instead (slightly slower)."
warn "Install globally with: npm install -g expo-cli"
fi
# ── 4. Platform tools ─────────────────────────────────────────────────────────
step "Checking platform tools..."
PLATFORM="$(uname -s)"
if [ "$PLATFORM" = "Darwin" ]; then
if command -v xcodebuild &>/dev/null; then
ok "Xcode $(xcodebuild -version 2>/dev/null | head -1 | awk '{print $2}')"
else
warn "Xcode not found — iOS builds will not work."
warn "Install Xcode from the App Store, then: xcode-select --install"
fi
if command -v xcrun &>/dev/null && xcrun --sdk iphoneos --show-sdk-version &>/dev/null; then
ok "iOS SDK available"
fi
fi
if command -v adb &>/dev/null; then
ok "Android SDK / adb found"
else
warn "adb not found — Android builds require Android Studio."
warn "Install from https://developer.android.com/studio"
fi
# ── 5. Install dependencies ───────────────────────────────────────────────────
step "Installing npm dependencies..."
if [ -d node_modules ] && [ -f node_modules/.package-lock.json ]; then
ok "node_modules already present — running npm install to sync..."
fi
npm install
ok "Dependencies installed"
# ── 6. expo-env.d.ts (required by expo-router) ────────────────────────────────
step "Generating Expo type declarations..."
npx expo customize expo-env.d.ts --no-install 2>/dev/null || true
if [ ! -f expo-env.d.ts ]; then
echo '/// <reference types="expo-router/types" />' > expo-env.d.ts
fi
ok "expo-env.d.ts ready"
# ── 7. Summary ────────────────────────────────────────────────────────────────
echo ""
echo " ══════════════════════════════════════════"
echo " Setup complete! Next steps:"
echo ""
echo " Start with Expo Go (scan QR on your phone):"
echo " npx expo start"
echo ""
echo " Run on Android emulator:"
echo " npx expo run:android"
echo ""
echo " Run on iOS simulator (macOS only):"
echo " npx expo run:ios"
echo ""
echo " Build APK for Karoo sideload:"
echo " npx eas build -p android --profile preview"
echo " ══════════════════════════════════════════"
echo ""