- Create a new application on elastic beanstalk
- Create a new environment
- platform -> preconfigured platform -> docker
- choose single instance – optional
- choose t2.micro – optional
- Clone this repo
- make changes if need (eg – ssl cert etc)
- eb init
- eb deploy
- Create a database
- Configure environment
- MB_DB_TYPE : postgres
- MB_DB_DBNAME : metabase
- MB_DB_PORT : 5432
- setup dns map via cloudflare – optional
- Modify security group to accept traffic only from cloudflare – optional
- First self hosting user
- Self hosting guideline
- Doc parser – initial implementation
- Rule engine – initial implementation
- Support more banks/credit cards
- First paying user
- Bug fix – default account
- Support for Singapore dollars
- Highlight in yellow – “things that you need to take action on”
- Hover over amount to see foreign currency in INR
- Commits – 45
- Customers who are actively using the product – 5
- Self-Hosted users – 1
- Paying users – 1
- Commits from external users – 4 (one user)
- Revenue – 3k
- Expense(excluding manpower) – nil
First self-hosting user
This is month where we have the first person to self host cashflowy – Alex Joseph. Alex Joseph works as a data-scientist at System Insights. He has been doing his personal accounting for part 5+ years, and is excited that cashflowy is open source and is try it out.
Now that we have the first person who showed interest in self hosting cashflowy, we needed a self-hosting guide. We do now – https://github.com/alexjv89/cashflowy/blob/master/docs/self_hosting.md . If you are a developer, you should find the self-hosting guide very easy to follow.
Doc parser – initial implementation
This is a contribution by Akash. We have the basic tech to parse documents. Its important to parse bank statements/credit card statements for the following reasons:
- Some information is not available in email eg. HDFC credit card transactions
- For being exhaustive(all sources of data is looked into)
- To inspire confidence to user that the accounts are accurate
Currently ,we have doc-parser for HDFC credit card only. We use docparser.com for processing documents. This is an external service. Using this service is a little difficult when self-hosting. Alex Joseph is testing/helping with a custom build doc parser. We might also consider using the newly released AWS textract.
Categories are different from tags. Categories are buckets. Every expense needs to have a category. Tags are optional. Expense can have more than one tag. Tags are means to come back to something or group something together for some organizing purpose other than budgeting. Categories are dedicated for budgeting. For every other grouping purpose use tags.
Want to know the expense associated with a particular location – use tags. Want to know expenses that are experimental – use tags. Want to know the expense associated with weddings that you attended this year – use tags. Want to know expense in a particular trip – use tags.
Rule engine – initial implementation
This is an initial implementation of rule engine. Example of a rule – Want to categorize all transactions to uber as transport, write a rule. Rules engines are simple logic engines that you can use to automate some of your repetitive work. SBI does not have account numbers in some of their statements. Using rule engine, you can specify that if a particular type of email is parsed, and if it does not contain an account number, then you can inject an account number into the parsed data. This way, the accounting is done accurately.
This is only partly implemented. I will talk about it more in coming months.
Support more banks/credit cards
An an ongoing activity, as an when we come across new users who use a bank that we dont support yet, we write parsers for emails send by these banks/credit cards. This month we have parsers written for the following:
- Yes bank credit card
- SBI bank
- Zerodha – auto transfer
Yes bank credit card filters was written by Alex Joseph.
First paying user
This is a major milestone. Cashflowy has its first paying user- Sunil – a professional consultant who consults for IKP EDEN. Sunil is paying Rs 3000 per year. A lot of my focus is going to make sure he gets his money’s worth over the next year.
Cashflowy is build as a solution to scratch my own itch. I wanted an accounting solution that I can use for life. I wanted something that I can trust, something that will not sell my data. Something that can I pay for, so that the solution will have my best interest in mind both in the short term as well as in the long term. I wanted something that in a long term can nudge me into good financial habits so that my financial health is taken care of. I also wanted something that in the short term can eliminate grunt work associated with tax filing, being a consultant.
Sunil is a professional consultant such as myself. His requirements are definitely not doing to be identical to mine but there is definitely some overlap, adequate overlap to find cashflowy useful. The short term tax grunt work is something that he shares as well. So I maybe some of the value proposition that I wanted from cashflowy resonates with him as well.
Honestly, I was not expecting a paying customer so fast. I am not convinced that cashflowy is a good product yet. It has a long way to go – just to satisfy my requirements. This one customer also does not prove that cashflowy is a viable business yet. Maybe when I get the 10th paying customer, I will start considering cashflowy as something that can be a business.
I honestly think there is something special about professional consultants(PCs). Salaries folks gets predictable income. PCs have taken the first step to owning a business, to obtaining financial freedom. Grunt work associated with tax filings is one thing, but I have noticed they are also more likely to think about long term money management and wealth creation better than salaried folks. There are definitely salaried folks thinking in that direction, but the numbers are less(initial observation). Salaried folks sort of want it, but dont seem to want it enough. Not the case with professional consultants.
Cashflowy is going to focus on this market for a while unless my assumptions/deductions are proven wrong. While we improve the product and make sure that cashflowy remains a finished product for current users, I will also be looking for users similar to Sunil and myself.
- Auto create account from emails
- Weekly email report
- Support for HDFC bank customers
- Support for city bank credit card
- Support for Amazon pay
- Automated snapshots
- Unaccounted money
- Transactions are now 3 types – expense, income and transfer
- Update in list transactions view
- Display only one snapshot of the day
- Category dropdown refactored
- Display account balance on the dashboard
- Edit account
- Commits – 46
- Customers who are actively using the product – 5
- Revenue – nil
- Expense(excluding manpower) – nil
Auto create account from emails
When onboarding new customers, it is tedious to create all accounts on Cashflowy. Sometimes the customer forgets to add some accounts as well. This resulted in Cashflowy’s parsing engine to throw errors as the account mentioned in the parsed email did not exist. With this update, if the account does not exist, then the parsing engine auto creates accounts for the user on Cashflowy.
Weekly email report
We now send out a report on your cash flow every week.
Support for HDFC bank customers
Parsers for HDFC bank are now in production. HDFC bank sends the following information via email:
- UPI transactions
- NEFT/IMPS transactions
- Net banking/debit card transaction
- ATM withdrawal
Parsers for all the above email types are written and is hence processed by Cashflowy.
Note: HDFC does not send an email for credit card transaction. Hence your credit card transactions will not show up on Cashflowy. We are figuring out ways to make sure that data is available on the system.
Support for Citi Bank customers(credit card only for now)
Citi bank has another weird quirk. Citi bank sends email transactions alerts, but for bank transactions, the account number is not mentioned in the email. Hence the parsing engines cannot figure out which account to attribute that transaction to. We could set up some default account but then what if you have 2 citi bank accounts. Due to this reason, the parser for citi bank is put on the hold.
Citi bank credit card transaction contains card details. This parser is in production.
Support for Amazon pay
Parsers for amazon pay is in place. Whether you pay on Amazon or you pay a 3rd party via Amazon pay, the parsing engine captures details and adds those transactions to your Cashflowy transactions.
The state of your account at a given point of time is called .a snapshot. For Bank account a snapshot means balance. For credit card account, a snapshot means – how much you need to pay. Some banks/wallets share the state of the account along with the transaction. A snapshot is auto-created in this case. Eg, Automated snapshots can be created from transactions from ICICI bank, ICICI credit card, HDFC bank, Amazon pay etc.
Cashflowy is an accounting tool. It logs what happens to your money. Currently, Cashflowy is capturing some transactions for you, but how do you know if Cashflowy is doing an exhaustive job? What if Cashflowy is missing transactions or misunderstanding transactions? How do you know if you can trust the data that Cashflowy shows you?
To answer the trust question is why – Unaccounted money is introduced. Unaccounted money is money that is not recorded in Cashflowy. Snapshots give us information on how much money your account contained at any given point of time. So if you sum the transactions between 2 snapshots and add that with the first snapshot, that figure should not be different from the 2nd snapshot. This difference is unaccounted money.
The closer unaccounted money is to zero, the more accurate your accounting is.
Transactions are now 3 types – expense, income and transfer
Until now, every transaction was considered an expense. That is not true. You moving money to Paytm from your credit card is not an expense. It is a transfer. You have not spent that money yet. Some users might consider any transfer to Paytm as a travel-related expense as they might be using it only for Uber. This case is increasingly becoming smaller as more and more physical stores support Paytm. Similarly paying credit card bill via bank account is account transfer. Making this distinction makes your accounting more accurate and meaningful.
Income transactions are also called out separately.
Update in list transactions view
With support for additional kinds of transactions(income, expense, transfer), the UI showing transactions needed an upgrade.
Interested in trying out cashflowy?
Write to me – alexjv89 at gmail.
Starting from college, I have built too many prototypes to count. I have been very good at getting a basic proof of concept out. So many different projects or products, but so far I have never been successful in commercializing any of them. Sometimes I feel the number of failures is soo much that I just don’t even want to think about it.
All these 8 years, I was always been short-term minded. I had always expected to get things working in 6 months. The answer to “How much time will it take” was always 6 months. When I quit postman, I really wanted to convert one of my products to become a business. I joined Ather as software-consultant expecting myself to not stay there for more than 6 months. Why? Because I would have built a product of my own by that time. This coming Jan(2019) will mark my 3 years at Ather as a consultant. I still have not build a business.
Objectively compared to my original intentions, that looks like a failure. I have changed attitudes now. I am thinking long-term now. I think I am starting to understand what Naval Ravikanth, Warren Buffet, Charlie Munger etc mean by compounding. They are not referring to compounding in the context of money alone. Everything in your life can compound if you stop looking for short-term results. Your skills compound, your knowledge compounds, your wealth compounds(obviously), your relationship compounds. For the sake of short-term goals, I did sacrifice lots of things. I called my parents less. I spoke to my grandparents even less. I am starting to realize that I will deeply regret not calling them when they are no more.
I am starting to realize that the definition of success that I set for my projects was very never really my own. I want 1000 users to my saas product. Why? because that is how success looks like. How do I know? That is what the tech press seems to be covering. Or, that is what my friend circle seems to value.
Naval Ravikanth in one of his podcasts mentions that “Success and Happiness are at odds” or something along that lines. Success is usually defined from a global perspective. You could say being a CEO of a company means success. Having a 100 million dollar company is success. Being happy is relative. It is possible that the person on the street could be way more happier than you are.
My new perspective on goals is certainly not unique nor is it something that I invented. Its an amalgamation of what I have learned by reading stuff from DHH & Jason Fried from Basecamp, stories of founders from Indie Hackers, Tim Ferris, Naval Ravikant etc.
The new perspective:
- I don’t want to chase someone else’s definition of success. I don’t want to be in the 40 under 40. I don’t want to be the wealthiest person. I don’t want to be popular
- I want to identify things that I genuinely want to compound in my life. And every year I make sure that it compounds by x%. I would like my food habits to compound. I would like my relationships with key people to compound. I would like my skills to compound. I would like my financial prudence to compound. I would like my cycling to compound. I would like to teach. I would like that to compound. These are things that I genuinely like to do. They make me happy. Some of these things will make adequately wealthy in the future as well.
- I want to look at things from a long enough horizon. I want to look at things from a 3 year perspective. I want to stop sacrificing unnecessary things for the sake of someone else’s definition of success.
This is what my next 3 years look like:
- Build a side-revenue from a product
- Teach people what I know (blog is part of that strategy)
- Get fit – Get to 10% body fat(always put this aside as this goal is not possible in 6 months)
- Go cycling – a lot.
- Re-read books that I read earlier. Compound my wisdom on a strong foundation.
The big difference
After adopting this mindset, I have noticed myself to a lot more calm and composed. I am much less affected by tunnel vision. Since I am comparing the results to my past self, I am much happier. In general, I am also happier because I am focusing on things that I like to compound. I am also more focused on what matters. I am starting to understand how basecamp works. They really don’t care about someone else’s definition of success and over a long enough time, wealth will come to you.
This assumes that you already have an AWS account and a Cloudflare account.
Use case – Why bother?
You have some application server or static website running on www subdomain and you want to redirect traffic from the naked domain(eg highlyreco.com) to the www subdomain(eg www.highlyreco.com). Why? Because :
- When users share your domain verbally, they then to not include www. They just say – go check out highlyreco.com. When the other user tries highlyreco.com they get nothing
- SEO – generally you want to make sure everything is clean and all search results contain www subdomain
Configuration on AWS
1. Click create bucket from S3 console
Click on create bucket
Enter the naked domain as the bucket name and select a region.
Under “set permissions” tab in the bucket creation process, from the “Manage public permissions” choose “Grant public read access to this bucket”
2. Enable static site hosting and redirect to www subdomain
Click on the newly created bucket. Click on the properties tab and you will see the following.
Click on Static site hosting. In the dialog box that opens, choose option – “Redirect requests”. In the input boxes enter the target www domain(eg www.highlyreco.com) and the protocol. Copy the endpoint shown in the modal. You will need to for DNS mapping.
Configuration on Cloudflare:
1. Add a CNAME record to your naked domain
On a regular DNS router, you cant add a “CNAME record” to a naked domain. However cloudflare supports. Cloudflare internally converts that to an “A record”. It should look this when you are done.
Thats it. Your naked domain(highlyreco.com) will now redirect to (www.highlyreco.com).