Once upon a time there was an extremely bored and lazy engineering student that wanted to start a project in order to pass the time. He had adopted typescript just a few months ago and grew very fond of the advantages it brought for object oriented programming. He liked Express.js very much but was wondering how he could improve on it and help diminish the effect of writing boring boilerplate code on his productivity.

That’s when he reminded himself of two other beautiful frameworks he had fond memories of. Ruby on Rails was the framework he learned when he first got familiar with server-side programming and the MVC pattern. It had a cozy development workflow based on the convention over configuration paradigm. What it meant in practice was that Rails can take care of handling most of the boilerplate for you if you adhere to it’s convention of where the controllers, views and models must be kept as well as how they interact with each other. It takes a while to get started, but as soon as you grow into it your productivity sky-rockets. For those interested this is the book the undergrad used when first studying rails.

Even though Rails was so elegant and easy to use it was very opaque and didn’t allow you to see much behind the scenes. That’s when he discovered the power of micro-frameworks in the form of Express.js.

Express is a middleware-based routing micro-framework for Node.js. It makes it easy for the developer to route multiple controllers and attach middleware to them, such as authorisation and loggers, and doesn’t force much else down your throat. This was all fun and games at first but as our little student started building bigger and bigger apps he got bored of having to remember so many paths or check the routes file everytime he wanted to make a request.

He had recently played with a cool Python toy, Flask, at a hackathon and saw the value in using decorators to make routing your controllers more obvious.

At this point he channeled his desire to reduce boilerplate with the frustration of not being allowed to be as lazy as he was in Rails when working with Node into an unapologetically horrible template that took the worst of Flask and Rails and combined it with the abomination that is the Javascript programming language.