Case study
Bt. Budget Tracker
An offline, encrypted personal budget PWA for daily income and expenses in ₹.
Overview
A personal budget tracker for daily income and expenses in Indian rupees. It installs to the home screen, works offline, and keeps every entry on the device, encrypted with your password. There is no server and nothing is uploaded.
Problem
Most budget apps want an account on someone else's server before you can log a ₹20 tea. Bt. keeps the data local and encrypted instead, and focuses on the questions that matter day to day: what's left this month, what bills are coming up, and where the money went.
Architecture
A no-build, vanilla JavaScript PWA built from ES modules, with a service worker for offline support and IndexedDB for storage. The password is never stored: it is stretched into an AES-256 key with PBKDF2-SHA256 (600,000 rounds) and all data is encrypted with AES-256-GCM through the Web Crypto API. Optional fingerprint or face unlock uses passkeys (WebAuthn with the PRF extension) to unwrap the data key, and then requires both the password and the biometric check. Amounts are stored as whole paise so totals never drift. Chart.js and the fonts ship with the app, so nothing loads from other sites.
What shipped
A dashboard with insights, a spending heat-map calendar and charts. Monthly category budgets with alerts. Repeating entries for rent, salary, EMIs and subscriptions, including fixed-length EMIs and bills that ask for the amount each time. Savings goals, money given and taken with WhatsApp/SMS reminders, quick-add favourites, payment-method tracking, and a printable monthly report. Encrypted backups, CSV export, auto-lock, light and dark themes, and app-icon shortcuts are included too. A security review against the OWASP Top 10 2025 and MITRE ATT&CK is documented in the repo, and unit tests cover the calculations.