╭───────────────╮
        │  ┌─┐     ┌─┐  │
        │  ││  ⌒  ││  │
        │  └─┘ \___/ └─┘ │
        │   V I T R O N  │
        ╰──┬─────────┬──╯
           │ ▮ ▮ ▮ ▮ │
        ╔══╧═════════╧══╗
        ║  ▣  ▢  ▣  ▢   ║
        ║ ───────────── ║
        ║  ░ SYNC ░ OK  ║
        ╚══╤═════════╤══╝
           │         │
          ─┴─       ─┴─
          ╱ ╲       ╱ ╲

// MONITORING UNIT // ONLINE

VITRONITOR

One React codebase → web, iOS, Android, Electron.
Self-hosted OTA on all four. TanStack DB offline-first, wired across all four.

WHAT_IS_THIS

briefing

Vitronitor is a React boilerplate that ships one codebase to four targets — web (PWA), iOS, Android, and Electron — and keeps every one of them working when the network drops.

The headline differentiator is the self-hosted OTA pipeline across all four targets. Push JS-only updates without an app-store review or a forced restart, on web + iOS + Android + Electron, with one signing key and zero vendor lock-in. No EAS Update, no Capgo Cloud, no GitHub Releases dependency. Bundles ship to any S3-compatible bucket. The full publish → sign → serve → verify loop is yours.

The other genuine work is the offline-first stack wired across all four targets: TanStack DB collections with @tanstack/offline-transactions as a unified mutation outbox, durable SQLite persistence on every platform — OPFS-backed wa-sqlite on web and Electron renderer (over a registered app:// scheme so OPFS gets a real origin), native SQLite via @capacitor-community/sqlite on iOS and Android. Writes survive full app crashes; the outbox drains on reconnect and dead-letters on permanent failure. The read path is plain HTTP — collections fetch GET /api/sync/:table through @tanstack/query-db-collection, and Supabase Realtime broadcasts trigger invalidateQueries for cross-device propagation. No bespoke streaming protocol to host or operate.

Native shells are Capacitor for iOS/Android and raw Electron for desktop (with tray, IPC, and safeStorage — not the Capacitor-Electron wrapper). Built on Vite + React 19 + Tailwind v4. Reference backend is Hono + Supabase + S3-compatible storage — all swappable. MIT.

VITAL_SIGNS

core pillars

THE_STACK

what's in the box

BUNDLED_SYSTEMS

deps · upstream

PLATFORM_MATRIX

4 of 4 ONLINE

BOOT_SEQUENCE

copy · paste · run

Prereqs: Node 22+, a Supabase project (used for auth, Postgres, and Realtime broadcast), an S3-compatible bucket for OTA bundles. Caddy is optional for the reference Hono backend.

~ /vitronitor
$ git clone https://github.com/simonflore/vitronitor
$ cd vitronitor
$ bash scripts/setup.sh
$ cp .env.example .env.local
$ npm install --legacy-peer-deps
$ bash scripts/setup-signing-key.sh
$ npm run dev
# Vite SPA on :5173. Vitals nominal.