What you’re starting from
Every exported composable, component, api function and type is ready to use — pull it in as you need it. The account, sessions and settings screens (views/pages/account/*,
_settings/AccountSettings.vue) are placeholders on purpose: you build your product’s
screens on top, and the kit supplies the plumbing behind them.
Layout
Session storage — encrypted, non-exportable key
services/localStorage/core/secure_storage.ts is a transparent AES-GCM over IndexedDB layer:
- The key is a random, non-exportable
CryptoKey— never derived from a device fingerprint, never stored as raw bytes. WebCrypto (authenticated); nocrypto-js. - A canary detects a key/data mismatch and resets the store once, cleanly (a reset = a sign-out, since only the session lives here).
- Works in the web build and in the Capacitor / Tauri WebViews.
sessions.device_id.
Quick start
env/.env.example → .env and point VITE_BACKEND_URL at the backend. Add any new var
to src/vite-env.d.ts too — vite/client has an index signature, so a typo is not a type
error, it just reads undefined.
Environment
Native builds (Capacitor 8 / Tauri)
Use
npm run build:native for iOS/Android — it sets SHIPWIDE_NATIVE=1 so the pre-compressed
.gz/.br web assets aren’t bundled into the native WebViews (dead weight there, and they break
Android’s asset packager). Plain npm run build keeps them for the web/PWA deploy. The ios/
and android/ projects are committed.