Desktop & Mobile Shells¶
How portfolio apps escape the browser. Most of these wrap a web UI inside a native shell so you ship one codebase to multiple platforms.
Portfolio map¶
| Shell | App count | Apps |
|---|---|---|
| Tauri 2.0 | 4 | AscendOne, ChoreAndMoreTracker, GoGreenMarketing, Jarvis_Rust_Tauri |
| Electron 33 | 4 | Ecom-Sales, FamilyChat, GogreenSellerAI, PolyMarketAI, Jarvis_Electron |
| Capacitor | 2 | SCO_Mobile, EverythingBeer (Android), GoGreen-AI-Concierge (Android) |
| Expo / React Native | 1+ | GoGreen-SmartForms, FamilyChat |
| Web only | rest | n/a |
Tauri (2.0)¶
What it is. Rust-based desktop shell. Ships a tiny binary (~3–10 MB) that hosts the system's native webview (WebKit on macOS, WebView2 on Windows, WebKitGTK on Linux). Communicates with the JS frontend via an IPC bridge to Rust functions ("commands").
Why over Electron. Bundle size is 10–50× smaller. Native webview means lower memory. Rust backend is fast and lets you ship secure native code (file system, OS keychain, Argon2 hashing in-process).
Used in: - AscendOne — Tauri 2.0 + React 19 + Zustand. Productivity desktop app. - ChoreAndMoreTracker — Tauri 2.0 + React 19 + Rust Axum backend (in the Tauri sidecar). Postgres via sqlx with Row-Level Security; Argon2 password hashing. - GoGreenMarketing — Tauri shell over the Next.js static export. - Jarvis_Rust_Tauri — voice assistant; Picovoice + Whisper + ElevenLabs.
Tradeoffs. Native webview means rendering can differ between OSes (WebKit's edge cases on macOS, Edge's on Windows). Distribution requires Rust toolchain locally, MSVC on Windows.
Electron (33)¶
What it is. Chromium + Node.js + a native shell. Each app ships its own Chromium build (~150 MB); rendering is identical on every OS.
Used in: - Ecom-Sales — Electron 33 + Express + React 19 + Prisma + tRPC. Auto-updates, system tray. - GogreenSellerAI / EcomFlow — same Ecom-Sales template, white-labeled. - FamilyChat — Electron desktop wrapper alongside the React Native mobile + Next.js web triple. - PolyMarketAI — Electron desktop for prediction-market trading UI. - Jarvis_Electron — voice assistant; Picovoice + Whisper + ElevenLabs.
Why Electron over Tauri here. Three reasons in this portfolio: 1. Identical rendering everywhere — important for Ecom-Sales screenshots/marketing parity. 2. Larger Node ecosystem in-process — direct use of Node Buffer, native modules, etc. 3. Auto-updater / squirrel is mature on Electron, less so on Tauri.
Tradeoffs. Bundle size, memory footprint, security surface (whole Chromium per app).
Capacitor¶
What it is. Ionic's mobile/desktop shell. Wraps a web app in a native iOS/Android container, exposes plugins for camera, filesystem, push, etc. Successor to Cordova/PhoneGap.
Used in: - SCO_Mobile — Capacitor mobile build of the SCO Digital Assistant. - EverythingBeer — React Native via Capacitor for Android. - GoGreen-AI-Concierge — Capacitor 8 for Android.
Why Capacitor over React Native. When the app is already a working React web app, Capacitor wraps it in days. React Native would be a rewrite.
Expo / React Native¶
What it is. Native mobile UI rendered through React. Expo is the managed toolchain — file-based routing (Expo Router), OTA updates, prebuilt native modules.
Used in: - GoGreen-SmartForms — React Native + Expo for a mobile companion to the form-processing service. - FamilyChat — RN + Expo for iOS and Android in a pnpm-workspace monorepo with the web app.
Why Expo over bare RN. Setup time, OTA updates, no Xcode/Android Studio for most workflows.
Other native paths (not used)¶
- Native iOS (Swift) — none.
- Native Android (Kotlin) — none.
- Flutter (Dart) — none.
- Maui / .NET MAUI — none.
- Qt / wxWidgets — none.
The portfolio's policy is "don't ship native if a web wrapper will do."
Cross-cutting concerns¶
Auto-update¶
- Electron: Squirrel.Mac / Squirrel.Windows via
electron-updater. Used by Ecom-Sales. - Tauri: built-in updater bundled with the runtime.
- Expo: EAS Update for OTA delivery of JS bundles.
Local storage¶
- Electron / Tauri — file system, IndexedDB in renderer.
- Capacitor / RN —
@capacitor/preferences,expo-secure-store. - WP / browser apps —
localStorage,IndexedDB.
Push notifications¶
- Mobile (RN/Expo): Firebase Cloud Messaging.
- Web: Web Push (VAPID) — used in FamilyChat. Firebase Admin sends.
- Desktop (Electron): native OS notifications, Firebase Admin server-side.
See Integrations-Comms.md for the server side.
Tauri vs. Electron decision matrix¶
| Question | Lean Tauri | Lean Electron |
|---|---|---|
| Bundle size matters? | ✓ | |
| Need identical rendering across OSes? | ✓ | |
| Heavy use of Node-native modules? | ✓ | |
| Secure local OS access (keychain, FS)? | ✓ | |
| Auto-updater is critical? | ✓ (more mature) | |
| Team prefers Rust? | ✓ | |
| Ship today with the existing React app? | ✓ |