Replaces the wrong approach (stage + try to bounce into the app, which iOS blocks) with the one Teams/WhatsApp actually use: the picker and the send happen INSIDE the share extension, so there's no app-open at all. Tap Share → Biz Connect → pick a chat → it uploads and sends, right there in the sheet. How the extension can send without the app: it's a separate process that can't see the web app's HttpOnly cookie, so: - server: GET /api/share/token mints a bearer token for the logged-in user. - web: on every launch the app fetches that token and hands it to the extension via the App Group (ShareInbox.setAuth writes token+base to the shared UserDefaults). - extension: reads the token and calls the SAME API the native client uses — GET /api/messages/conversations to list chats, POST /api/messages/upload for each file, POST /api/messages to send. Native UITableView picker with search. Robustness: it still stages the files + writes a manifest first, so if there's no token yet (user never signed in) or the send fails, the file isn't lost — the app collects it on next open, exactly as before. On success the manifest is cleared so the app doesn't re-offer it. Server + web are live now; the token endpoint is harmless until a build ships the extension. NEEDS A NEW iOS BUILD for the picker itself. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Biz Connect — Mobile app (Capacitor)
A Capacitor shell that loads the live Connect web UI (server.url in
capacitor.config.json) and adds native push, camera/mic, and store distribution. See the
overall plan in ../CLIENTS.md.
Android: follow the step-by-step in ANDROID_SETUP.md (project generation, icons/splash, permissions, Firebase/FCM, run, and Play Store build).
Prerequisites
- Node +
npm installhere. - Android: Android Studio + SDK.
- iOS: macOS + Xcode (+ an Apple Developer account to run on device / ship).
Setup
npm install
npm run assets # generate app icons + splash from resources/
npx cap add android
npx cap add ios # macOS only
npx cap sync
Run / build
npx cap open android # build & run from Android Studio
npx cap open ios # build & run from Xcode
Server origin
The app loads server.url from capacitor.config.json (default
https://remote.bizgaze.com). For a local device test against a dev server, set it to your
machine's LAN URL (and allow cleartext for plain http).
Native push (next step)
Native push uses the Capacitor Push Notifications plugin (FCM on Android, APNs on iOS) and a server endpoint to register device tokens — tracked in ../CLIENTS.md Phase B. This is separate from the existing Web Push (VAPID) the PWA already uses. Needs Google/Apple credentials to test end-to-end.
Shipping (gated on accounts)
- Google Play: one-time $25; upload an AAB; signing key.
- App Store: Apple Developer $99/yr; archive via Xcode; App Store Connect listing.