If you store your money in multiple banks, BTC exchanges and in cash it is extremely inconvenient to track all your balances and convert them to different currencies. You have to either login into each of the systems every time you want to check how much money you have overall or use Excel spreadsheet/Notepad to track this.
This app allows you track your holdings/assets value in different currencies in a single place.
There are two different Categories - Custom and Api Integration:
- Custom - you can add/edit/remove asset to this category as you want
- Api Integration - your assets will be fetched from the service you use using your API key.
Available integrations:
- Starling Bank
- Bittrex (BTC exchange)
- Kraken (BTC exchange)
- Binance (BTC exchange)
These instructions will help you deploy your own infrastructure for this project in AWS. All the services used in this project are eligible for free tier.
The project consists of two parts:
- Serverless backend
- React.js front end
Serverless backend includes:
- DynamoDB for storing the data
- Cognito authentication for lambdas and for accessing front-end
- API gateway endpoints with AWS proxy integration and Cognito authoriser
- Lambdas to fetch categories and assets from DynamoDB and to fetch assets from API integrated categories
Front-end
- Two-page React.js app with Amplify authentication:
- Login page
- Categories page
Where you can add/edit/delete categories and custom categories assets.
- AWS account
- Terraform (I use v0.12.20)
- npm
- AWS CLI
Using macOS terminal
brew install terraform
brew install node
Follow the steps to:
- Deploy serverless infrastructure
- Deploy publicly accessible front-end with login page
- Create your user in Cognito
-
Set up your terraform state bucket and table for locks:
- Go to
/backend/category-api/terraform/state/variables.tfand change the default variables (or specify them when runningterraform applyin the next step) - Use terminal from the root of the project to run:
cd ./backend/category-api/terraform/stateterraform applyto create state bucket and table for terraform locks
- Go to
-
Set your BACKEND properties in
gradle.propertiesin the root of the project with your properties. -
Use Gradle to deploy your infra:
asset_manager > backend > Tasks > other > packageLayerasset_manager > backend > Tasks > other > packageLambdaasset_manager > backend > Tasks > other > deploy
-
Update your FRONTEND properties in
gradle.propertiesin the root of the project- Go to your AWS account (double-check you are in the correct AWS region) and verify an API Gateway has been created.
- Open your API
- Go to Stages > select and copy the Invoke Url - this is your
api_urlingradle.properties - Go to AWS > Cognito > Manage User Pools > select your user pool
- Copy the Pool Id - this is your
userPoolId - Go to App clients > find the newly created user pool - App client id is your
userPoolWebClientId
-
Install and deploy your frontend:
- Use terminal from the root of the project to run:
cd ./frontendyarn install
- Use Gradle to deploy your frontend:
asset_manager > frontend > Tasks > other > packFrontendasset_manager > backend > Tasks > other > deploy
- Use terminal from the root of the project to run:
-
Use AWS CLI to create your user:
aws cognito-idp --profile <your_profile> admin-create-user --user-pool-id <your_user_pool_id> --username <username> --temporary-password <temp_pass_for_first_login> --message-action SUPPRESS -
Go to your AWS account > Cloudfront and find domain name for your bucket
-
Open the url and login
This project is licensed under the MIT License - see the LICENSE file for details
