Change ZSH terminal prompt

You can test what prompt you like by running the following command in the terminal – PROMPT='%/ %# '

My preferred basic prompt – PROMPT='%n@%1~ %# '. This will give me a prompt that looks like this – alex.jv@ec2code %.

In order to make sure this prompt is available on opening new terminal, its needs to be added to profile.

touch ~/.zshrc – create – zshrc file

open ~/.zshrc – open zshrc file and add PROMPT='%n@%1~ %# ' to the file.


Book digest – “knock knock” by Seth Godin


This post is my take away from this book – knock knock (it is available online) by Seth Godin

I found this book from Value Saas Basecamp guide: An Indian founder’s guide to achieve first $10k MRR.

Book digest

What a website does? 

Big picture #1: purpose

  • Turns a stranger into a friend and a friend into a customer
  • Talks in a tone of voice that persuades people to believe the story that you are telling

Big picture #2: what can happen

After someone sees it, it can cause one of these 4 things to happen:

  • clicks and goes somewhere you want that person to go
  • Clicks and gives you permission to follow up by email or phone
  • Clicks and buys something
  • Tells a friend either by clicking on or by blogging or phoning or talking

A web page is a step in a process.

A webpage is not a place. A web page is a step in a process. They are supposed to choose a direction and take you to the next step.

Web page are better off being good at one thing. 

Eg: Buying traffic:

$1 cost per click

People who land up 20% of then clicks on next step- say free trial- cost $5 per user at this step

After trial the conversion turns out to be – 20% conversion – $100 for a customer.

In the case, pages clearly acts as steps in your conversion funnel.

First big rule: 

View your site as a service of steps that go from stranger clicking on an ad, all the way to a satisfied customer telling ten friends. Figure out which step is least efficient, and focus all your energy on making it more efficient. Measure everything. 

Another great principle

Like it or not, every page on your site has a ton of voice. That tone must match the expectation of the visitors or they will misunderstand who you are (or worse, flee). Choose a tone that matches or exceeds the tone of your sucessful competitions 

The challenging thing here, is that one person’s appropriate vernacular is another person’s trite over-design. There is n o way to predict what the visitor’s worldview is going to be … no way to know what a given person is going to get it. 

Principle- you have to choose

You have to choose – you are never going to please everyone, so you should  not ever try. If you do, you will fail at pleasing anyone. Instead, imaging who your very best audience is and go straight for the heart of that group – and ignore everyone else. 

Principle – there is nothing just as a home page. 

When you send someone to your website, dont send them to your home page. You can have as many entrances to your site as you want – landing pages. 

People can land on your landing pages via google search or via ads or via people sharing links. 

We are been trained by the engineers to see a website as a pyramid, with a home page at the top and an ever-increasing range of choices as the user digs deeper. 

Instead I’d like you to see a website as a series of processes, as different from each other as each customer is different. 

Other random points:

Choice is a bad thing – If you give people too many choices, 

Contact is a good thing – Give out your contact. With your website you want the conversation to happen.

This is the biggest challenge that most sites face. It takes guts to say,- here is one thing I want you to do. It is much easier to just list every choice. Alas, every choice is no choice. 

Simple internal sitemaps

Simple admin sitemap

What ever solution that you build, there will be some internal pages that you would be building for internal employees to do administrative work such as clean up data, manually create new user etc.

The minimum functionality that you can build is to have an simple clean admin sitemap. HTML code the the above sitemap:

<div class='ui container'>
  <div class='ui grid'>
    <div class='sixteen wide column'>
      <div class='ui segment'>
        <h2>Admin sitemap</h2>
        <div class='ui ordered list'>
          <div class='item'>
            <div>Users and VAs</div>
            <div class='ui ordered list'>
              <a href="" class="item">List all users</a>
              <a href="" class="item">List all VAs</a>
              <a href="" class="item">Create a user or va</a>
          <div class='item'>
            <div class="ui ordered list">
              <a href="" class='item'>VA hours consumed per month</a>

Use trix for as rich text editor

Trix used with semantic ui

Semantic UI does not support a native wysiwyg. Trix by Basecamp team is a very elegant rich text editor (wysiwyg).

Use the sails-business-stack-generator to install trix in your sails project.

Sample code for using trix.

<div class="field">
    <label>Summary of work for this subscription</label>
    <input id='report_body' type="hidden" name="report_body" placeholder="write your summary here" value="<%=dr.body%>">
    <trix-editor input="report_body"></trix-editor>

Things to note about the above code – 1) trix editor has an attribute called input. This should be the id of the input element on which the trix editor is applied. 2) Also make sure that this page includes the trix js and trix css.

<link rel='stylesheet' type='text/css' href='/trix/trix.css'> 			
<script type='text/javascript' src='/trix/trix.js'></script> 	

This post is part of the business solution stack series

Setup metabase via AWS elastic beanstalk

  1. Create a new application on elastic beanstalk
  2. Create a new environment
    • platform -> preconfigured platform -> docker
    • choose single instance – optional
    • choose t2.micro – optional
  3. Clone this repo
    • make changes if need (eg – ssl cert etc)
  4. eb init
  5. eb deploy
  6. Create a database
  7. Configure environment
    • MB_DB_TYPE : postgres
    • MB_DB_DBNAME : metabase
    • MB_DB_PORT : 5432
    • MB_DB_USER
    • MB_DB_PASS
    • MB_DB_HOST
  8. setup dns map via cloudflare – optional
  9. Modify security group to accept traffic only from cloudflare – optional

Cashflowy – Monthly update (November)

Updates summary:


  • First self hosting user
  • Self hosting guideline
  • Doc parser – initial implementation
  • Tags
  • 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.

Self-hosting guideline

Now that we have the first person who showed interest in self hosting cashflowy, we needed a self-hosting guide. We do now – . 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:

  1. Some information is not available in email eg. HDFC credit card transactions
  2. For being exhaustive(all sources of data is looked into)
  3. To inspire confidence to user that the accounts are accurate

Currently ,we have doc-parser for HDFC credit card only. We use 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.

Cashflowy – Monthly update (October)

Updates summary:


  • 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.

Automated snapshots

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.

Unaccounted money

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

Income transaction – in this case a refund on credit card

Expense transaction

Transfer of money into Paytm account from the credit card account

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.