rewrite using a state machine idea
.gitignore
remove node_modules