Show HN: I built an inbox-zero expense tracker with CRDTs and SQLite in browser (tender.run)
I got tired of doing expenses by hand - going through several accounts to figure out refunds, subscription cancellations, getting paid back via venmo, etc. I’d get to the point where I’d have to go through months of transactions at a time if I got lazy and fell behind.
The workflow in Tender is centered around getting to inbox-zero. Transactions leave the inbox when they’re categorized and there’s a basic rules engine for automation. You can also do things like add notes, set reminders, and link refunds to their original payment. If you’re a splitwise.com user, there’s an integration to send shared expenses to a group to be split.
On the technology side, the data is stored using Automerge (crdt) and indexed using sqlite (wasm) - all running in the browser so the UI stays pretty snappy. For persistence, the data is also backed up server-side using Automerge’s sync protocol. Like everyone else in this space, I’m using plaid to sync in account data.
Although Tender isn’t multiplayer, the crdt still gives a lot of out of the box: syncing, file format, change tracking... Since everything is running in the browser, I’ve also hacked up a quick demo environment at https://demo.tender.run that you can play with!
I’ve put in a decent amount of effort into the project at this point, and would appreciate any feedback on the product, pricing, feature requests, etc! If you want to give it an extended try, there’s a coupon code (HN2023) that basically prices Tender at-cost for me.
8 comments
[ 5.3 ms ] story [ 21.9 ms ] threadI created a tool that helps people stay on top of shared transactions (https://reconcile.app/) a few years ago and have recently been working on another iteration of it that has some similarities to what you've built, but with a focus on couples who share much of but not all of their financial lives.
It looks like you have an Venmo integration ("Sent to Venmo" in screenshots) which I haven't quite cracked yet - curious if you're willing to talk about how it works. Tender has venmo via plaid, but it only supports importing tx, not initiating payments/requests.
I thought about either: integrating unofficially (https://github.com/mmohades/VenmoApiDocumentation) or just doing links to venmo payment (i.e. venmo.com/user?pay=500) and having some way to import venmo contacts
Neither seems great from a UX or security perspective.
I wrote about how it works here: https://gabeoleary.com/posts/venmo-deeplinking-including-fro...
When I wrote this it only worked on mobile. The deep link would take one into the app with the amount/details etc prefilled out. Just tested and it looks like the same format works on desktop now too.
I had until just now not realized that Plaid has a Venmo integration.
I could imagine using the deep link to begin the transaction and then using the plaid connection to look for it's completion...
One facet of that is that I’d like ro support e2e encryption, which feels harder to do in something electricsql and co (since the postgres sees fields for replication). e2e2 seems more obvious in automerge (though, also not supported out of the box), and I recently encountered secsync.com which looks like a new-ish project that could get there.
I’m really excited to see the influx of local-first frameworks though. A lot of these solutions also weren’t nearly as mature when I started working on tender about a year ago. If I were starting now instead of a year prior, I might try to go with github.com/vlcn-io/cr-sqlite which seems to share ideals with my architecture, and automerge has some issues I've run into.