-
Notifications
You must be signed in to change notification settings - Fork 0
MVP Scope
Status: Defined - Ready for implementation
Target: Prove core concepts (device linking, skill tree progression, conditional builds, on-device CV)
- Mobile (iOS + Android via React Native)
- Desktop (Windows/Mac/Linux via Tauri)
- No Web (defer to v2)
Why both platforms?
- Mobile = primary UI, camera, daily tasks
- Desktop = processing hub for CV/ML, proves device linking
User Flow (BLE):
- User opens Desktop app — BLE advertising starts automatically
- User opens Mobile app — BLE scan starts automatically in background
- Mobile discovers Desktop via BLE, auto-connects via WSS — no user action required
- Connection persists across sessions; auto-reconnects on network drop
User Flow (QR fallback):
- User opens Desktop app → generates QR code
- User opens Mobile app → scans QR code
- Devices pair over local network (direct connection, no cloud)
Technical:
- QR code contains: IP address, port, pairing token
- BLE advertisement contains: IP address + port (company ID
0xFFFE, 6-byte payload) - TLS encryption for all device-to-device WSS communication
- BLE is discovery-only (proximity trust); QR uses pairing tokens
- BLE: Windows-first (WinRT); macOS/Linux pluggable later
User Flow:
- User takes photo of paper bag with recyclables (Mobile camera)
- Mobile sends image to linked Desktop
- Desktop runs ML model (ONNX Runtime + Rust)
- Classify: Is this a paper bag? (vs plastic)
- Detect: Does it contain recyclable items?
- Desktop returns validation result to Mobile
- If valid → award points, mark task complete
Technical:
- Pre-trained ONNX model (bag classification)
- Lightweight model optimized for edge
- Fallback: If no Desktop linked, prompt user to pair
Mechanics:
- Recycling task success = 10 points
- Points stored locally (
~/.zelara/progress.jsonor platform equivalent) - Unlock threshold: 50 points → Finance module unlocks
UI:
- Point counter in app header
- Progress bar toward next unlock
- Notification when module unlocked
Unlocks at: 50 points in Zelara main app → shows "Download Zelara Finance" link
Architecture update (2026-04-05): Finance is a standalone app (
apps/finance-mobile/,ai.zelara.finance) built as an independent React Native project from v0.6.0. There is no embed-then-extract step. All business logic lives insrc/packages/finance/(@zelara/finance, pure TS). Full design: Zelara-Finance.md.
v0.6.0 features (see Zelara-Finance.md for full design):
- Expense logging: Manual entry + receipt OCR via Zelara Core (PaddleOCR v5)
- Auto-categorization: DistilBERT ONNX on Core, rule-based fallback standalone
- 4-tab layout: Overview / Transactions / Analytics / Reports
- Animated charts: Procedural donut, line trend, forecast (Revolut-style)
- Spend coach: Rule-based insights ("Coffee up 40% vs last month")
- Forecasting: Linear regression → projected month-end spend
- Biometric lock: Face ID / fingerprint on every foreground
- Banking report import: OFX, CSV, PDF, XLSX (mobile + desktop)
- Android SMS auto-import: READ_SMS → regex bank transaction parsing
- Donation suggestion: surplus × 5% → green cause
- Desktop dashboard: full-screen analytics in Zelara Core, drag-and-drop import
Technical:
-
@zelara/financeshared TS package: all business logic, adapters, types, SQL schema - Local SQLite — data never leaves the device
- AI inference (OCR, categorization) delegated to Zelara Core via
ai_taskWSS messages
Mechanics:
- User's unlock state stored in
~/.zelara/progress.json:{ "points": 60, "unlocked_modules": ["green"], "available_unlocks": ["finance"] } - When user unlocks finance (reaches 50 points):
- App shows "Update Available" notification
- User clicks "Update App"
- Build system pulls
module-financesubmodule - App rebuilds/reloads with finance module
- Finance module now appears in navigation
Technical:
- Manual rebuild for MVP (user-triggered)
- Git submodule pulling on update
- Module registry system in core
- Hot-reload/restart after update
- ❌ Web platform (Desktop + Mobile only)
- ✅ BLE auto-discovery (Windows Desktop → Android Mobile, implemented v0.5.0)
- ❌ Cloud sync (all data local, no backend)
- ❌ Productivity module (defer to v2)
- ❌ Homeowner module (defer to v2)
- ❌ Marketplace/skins (defer to v2)
- ❌ Nested submodules (flat module structure only)
- ❌ Automatic app updates (manual rebuild only)
- ❌ Complex finance features (no tax prep, no investment tracking)
- ❌ Multiple recycling tasks (paper bag validation only)
Core concept validation:
- ✅ Device linking works (Mobile ↔ Desktop pairing)
- ✅ Task offloading works (Mobile sends image, Desktop processes, returns result)
- ✅ ML validation works (on-device classification with acceptable accuracy)
- ✅ Point system works (tasks award points, unlock threshold triggers)
- ✅ Conditional builds work (finance module appears after unlock)
- ✅ Green initiative integration works (donation suggestion accepted/declined)
User experience:
- ✅ Pairing is simple (QR code scan)
- ✅ Recycling validation feels responsive (< 3 seconds)
- ✅ Finance module feels useful (expense logging valuable on its own)
- ✅ Unlocking feels rewarding (progress visible, new features exciting)
Technical validation:
- ✅ React Native + Tauri architecture works
- ✅ TypeScript + Rust hybrid works
- ✅ ONNX Runtime performs well on-device
- ✅ Git submodule build system works
- ✅ Local-first data storage works
This document defines MVP scope. See Architecture.md for the full implementation log.