Low-cost infrastructure is a primary concern, and I hope to be able to offer the application as freeware indefinitely, with costs subsidized by a subset of paying subscribers. All of the app’s functionality is available in the free version, except …
1. Database back-up and restore via cloud storage services (currently S3, Google Drive, and Dropbox)
2. Syncing transactions from banking institutions (via Plaid)
You can read about the app’s selling points on the landing page, so I won’t repeat the rest here. Some of the finer, more interesting technical details …
- The main data store is IndexedDB. Originally, the plan was to use CouchDB, but when I learned about IndexedDB, it allowed me to imagine the local-first architecture that the app eventually implemented. For the needs of this application, I’ve found IndexedDB’s primitive nature very interesting, without being too limiting. My wishlist for it includes an asynchronous API, and encryption-at-rest would be nice, too.
- I rolled my own rendering system instead of using an off-the-shelf framework like React or Svelte. I obviously wouldn’t recommend this for the average project or person, but I was naively curious about the low-level concerns of such a library. My system uses a model—view model—view pattern to render Mustache templates to HTML, and simplifies binding event listeners to HTML elements. While I’m very happy with the developer experience it provides, any issues it causes impact end users — not an ideal trade-off. This is a definite area of focus for the future.
- Excellent accessibility is a goal. A lot of effort has gone into making the app as usable as possible, but the work here is not done. If you do front-end development and don’t have experience around accessibility, I’d recommend learning a bit about it as a great way to level-up your development skills. (In my experience, $INDUSTRY doesn’t place due weight on its importance.)
- Due to my dependency allergies, I also rolled my own Web Components to provide UI widgets that HTML doesn’t provide natively. <https://code.backwater.systems/#landscape> Despite the flak they receive, in my opinion, Web Components are awesome and should be more widely used.
Some questions for the community …
- Why do you think local-first software isn’t more popular?
- What’s the next feature you’d build?