- All of the user's budget data is stored client side in IndexedDB
- Offline support via a service worker
- Peer to peer synchronization between devices via WebRTC data channel
- Lightweight IdP server which also handles the WebRTC signalling (via web sockets)
This setup is nice because the user's data never touches the server and very little server side infrastructure is needed (none at all if you don't need data synchronization). One downside with the data sync is that both devices must be online with the app open at the same time to sync, but perhaps this could be improved with web workers?