misty-app
This repository contains all the code for Misty, a personal finance app which helps users budget smarter. Here is a link to Misty - misty-test.herokuapp.com/.
Misty uses Plaid to securely connect to bank accounts in US and Canada. Misty relies on Google Firebase for the backend. In particular, Misty uses Firebase Authentication for handling user auth and Firestore as a document database.
This app was built using the Plaid Quickstart module on Github as a starting point. The landing page for Misty was built using 000kelvin/react-landing-page.
To run Misty locally,
Using https:
$ git clone https://github.com/adijp/misty-app.git
$ cd misty-app
Misty requires API keys from both Plaid and Google Firebase.
- Open
node/index.js. - Replace
PLAID_CLIENT_IDandPLAID_SECRETwith your own keys. If you are running it in development, setPLAID_ENV = "development". You can either enter the keys directly intoindex.jsor use environment variables.
- Open
frontend/firebase.js. - Update the
configvariable with Firebase credentials.
$ cd node
$ npm install
$ node index.js
$ cd frontend
$ npm install
$ npm start
Each user's data is a document in Firestore. Each user's document is made up of three collections :
accountscategoriestransactions
If a user grants access to a bank account, an access_token is authorized and sent from Plaid to Misty. Misty stores each of the access_token in a field called tokens. Every time a user logs in, Misty uses the access_token to check if there are any new transactions with accounts associated with the tokens.
accounts has two documents, cash and other by default. If a user connects to their bank account using Plaid, each of their accounts is added as an additional document. Each account has the following fields:
account
account_id : string,
currency : string,
current_balance : string,
name : string,
official_name : string,
subtype : string,
type : string
categories has 9 default categories. All transactions are by default categorized as unclassified. Users will have to manually designate a category to a transaction. Each category has the following fields:
category
active : bool,
balance : float,
budget : float,
id : string,
name : string,
type : "Spend" or "Save"
Misty only shows the set of categories where active == True. When a category is deleted, active is set to False.
Each document in transactions has the following fields:
transaction
account_id : string,
account_name : string,
amount : float,
category : string,
currency : string,
date : date,
name : string,
transaction_id : string






