Spend is a personal finance tracker app intended to compete with services like Intuit Mint.
The goal is to be legible, high compatibility, cheap, and lightweight.
As it is based on flutter, the clientside application supports all platforms.
The app is very much so under construction. It was copied from EnergyInfoSwiss since their architecture is pretty similar to what we are aiming for. Most of what you see in the app is still EnergyInfoSwiss functionality, which will slowly be replaced.
Current app features:
- Auth using AWS Cognito
- Linking financial accounts using Plaid Link
Most of this service's functionality will be querying transactions in different ways. Spend exposes a GraphQL API to enable flexibility.
Features:
- Auth using AWS Cognito
- Linking financial accounts using Plaid Link
- Syncing transactions through Plaid
- Automatic and manual transaction categorization
- GraphQL API built with Hot Chocolate
- Plaid API exposed in GraphQL schema
- Database access through MongoDB
GraphQL schema can be pulled from https://iclhluo2w9.execute-api.us-east-1.amazonaws.com/api/graphql/sdl
Everything is currently persisted in MongoDB using Atlas' serverless cluster, which is nearly free. Ideally nearly everything but the raw Plaid transaction would be stored in Postgres, but I don't want to pay for a dedicated server at the moment.
All infrastructure is built using terraform modules. Ideally we would have ansible playbooks to augment terraform, but I'm trying to avoid premature over-automation.
We use S3 as a terraform backend.
Features:
- Auth using AWS Cognito
- VPC
- NAT gateway using fck-nat which is 10x cheaper than standard NAT gateway
- MongoDB Atlas serverless
- PrivateLink (VPC endpoint) connection to AWS
- GraphQL API deployed on lambda with API gateway
See the contributing guide.