The schema is pretty straightforward to be honest. I have one table that covers transactions:<p><pre><code> id, date, date_settled, currency, bank, account, account_type, reference, credit, debit, account_balance, total_balance
</code></pre>
Dates are in ISO UTC, I have several bank accounts across multiple countries so it's helpful to track currency and bank. Credit cards are just an account.<p>Anything additional that I might experiment with (like post processing transactions and assigning tags) I do in additional tables that relate back to the original transaction's PK.<p>I have additional tables tracking my adventures trading stocks/forex and another one for assets.<p>I wanted it to be serverless because of cost/convenience so I host the DB using CloudFlare's D1 database.<p>I have a CloudFlare worker that takes a POST request accepting raw SQL, executes the query and returns the result as JSON. Basically a crappy firebase implementation where the client does the work. Obviously this is not safe for a production application, but I'm the only user so it's fine.<p>I wrote a little web frontend to help with data entry and complete tasks like parse bank statements - which, at least in Australia and New Zealand, are distributed as PDF files. The banking sector is in the stone ages here.<p>Here is my statement parser: <a href="https://github.com/alshdavid/commbank-statement-converter">https://github.com/alshdavid/commbank-statement-converter</a><p>I've experimented with using AWS Lambda + DynamoDB as the back end. I have also tried Lambda + S3 Athena but nothing has been as simple to set up as Cloudflare D1. I may migrate to Athena at some point, but I am lazy and what I have works.<p>To represent the data/generate reports & summaries, I use Google Sheets with custom AppScripts that make http requests to the data source (CF worker) with various SQL queries.<p>AppScripts are a bit slow and I'd like to create a custom front end for this but I am lazy and Google Sheets works.<p>I have my statements sent to my email so I have been thinking about setting up an AWS SES + lambda to receive and automatically parse & add them. I wrote web scrapers for the bank accounts that I could log into programmatically - but there are no "webhook" facilities on transaction events so syncing is manual.<p>I like some of the ideas in OP's app - like calculating cash flow and incorporating assets into the net worth calculation - so I might add those calculations.<p>I'd open source my system, add authentication and all that but I doubt anyone would use it.