Nuxt 4
Spender
Personal finance app: expenses, income, transfers, accounts, and reports. Web and Android from one codebase, offline-capable with background sync.
What it solves
I wanted to log money without a network. Transactions live in IndexedDB and every mutation is flagged pending; a worker syncs every 60s, sending what is pending with its syncedAt, and the API answers what to create, update, or delete locally. Client-side BSON ObjectIds mean a record written with no signal is born with its final identity. Android adds biometric unlock and receipt scanning by OCR: the photo is never stored or uploaded.
Stack
- Nuxt 4
- Capacitor 8
- Express
- MongoDB
- IndexedDB
- Fly.io
- Netlify
Infra
npm workspaces monorepo. Nuxt 4 as an SSR-less SPA on Netlify; Express + TypeScript API with MongoDB on Fly.io. Capacitor 8 wraps that same build for Android (minSdk 24, targetSdk 36), with the native project committed and a signed release APK. The OCR engine ships inside the APK —around 11 MB of tesseract.js— so scanning works with no network. Play Store still pending.