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.

Ref:

Book digest – “knock knock” by Seth Godin

about

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. 

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
    • https://github.com/alexjv89/metabase-beanstalk
    • 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:

Major:

  • First self hosting user
  • Self hosting guideline
  • Doc parser – initial implementation
  • Tags
  • Rule engine – initial implementation
  • Support more banks/credit cards
  • First paying user 

Minor:

  • 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

Stats:

  • 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

Details:

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 – 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:

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

Tags

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.

Thinking of things from a long term perspective

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: 

  1. 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
  2. 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.
  3. 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:

  1. Build a side-revenue from a product
  2. Teach people what I know (blog is part of that strategy)
  3. Get fit – Get to 10% body fat(always put this aside as this goal is not possible in 6 months)
  4. Go cycling – a lot.
  5. 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.

Redirect traffic from naked domain to www using aws s3 and cloudflare

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 :

  1. 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
  2. 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).