✨💻My Project for 2020: 🚄Node On Rails🚄
Tags: javascript, beginners, node, rails
Published: 2020-01-06 17:00:22

####🛑Disclaimer

As of the time writing this blog post, this project is not meant to be “production-ready”. This is a hobby project to learn new technologies, frameworks, and general exercise. 

###⏮Preface

I always loved Ruby and Ruby on Rails. Ruby is just such an elegant language and also easy to read and, most of the time, too easy to understand. My first experience of MVC was with RoR, and even my first more significant project was written in RoR. It was a Yelp-like app before Yelp was popular.

Then meteorjs came, and I loved it too. I was already used to code in Javascript. I mean, you have to when you want to have some interaction with the user besides forms. Meteorjs was fantastic, and it was super fast to have an MVP up and running with meteorjs.

Meteorjs is kind of dead since the company named MDG behind meteorjs is now mostly working on the Apollo project. With that, we don’t have anything right now, at least in my opinion that comes near to the features and ease of use like these frameworks were back in their days.

I know that we have projects like sails.js, but that project did not have any updates since mid-June 2019. Then you have expressjs, which is as minimal as a framework can get, and you need to add everything on your own. This means everything — the database layer, the authentication provider, routing, logging, etc.

People usually say that they like that freedom and that they can pick what they want. Yes, sometimes you need this, and it is the right choice. I think that some projects, especially in their early phase, don’t need that kind of flexibility and want to get things done.

This is also why frameworks like laravel or dot.net are so popular. The basic and sometimes boring stuff is set up, and you can scaffold it with on command. You don’t have to think about so many technical details, and it is harder to screw up. __Sometimes opinionated frameworks are the better choice__.

###✨Motivation

NodeJS and typescript are everywhere these days at big tech companies and small startups. __Always bet on Javascript__. Javascript will not go away in the next 10 to 20 years. Getting people to update their browsers will not be easy. Maybe we will not write directly Javascript, but in the end, it will be vanilla javascript after some transformation steps.

Setting up a new nodejs project is hard. Only configuring webpack and babeljs can be a big pain point. Not speaking about all the other stuff like coming up with a structure for a new project.

Frameworks like Ruby on Rails are often very opinionated about things like that. They are easy to use, and the project you never touched is easy to understand because you know the skeleton of the project.

This is why this year, I want to start a hobby project and work on it. It should be as easy to use and understand as Ruby on Rails, but it should be based on node js. Also, it should use modern Javascript and, for example, avoid `this` as much as possible.

### 🛠Technological choices 

- Node js
- Typescript
- Eslint
- Yarn
- Yarn workspaces
- Docker
- Docker compose
- Typeorm.io
- Mongodb
- Graphql
- Redis

This is just the first draft of the tools/libs/frameworks that I want to use. This list will change over time. You can see right now there is no testing framework, for example. This is still a hobby project, and I don’t want to plan everything from the beginning and add things when needed.

### ⏭ Next steps

The first step will be setting up a new project. Since node-on-rails should be modular and easy to maintain, I will make it a `mono repo` on GitHub. This means that all the code and packages and all the extra things will be in one git repo.

Okay, after that is done, I will start to implement the CLI, the core, and a basic project. 

The CLI should generate a new project and all the other things like models or tests etc.

The Core should have the minimal basic things needed to bootstrap the rest. What `minimal` means? I have no clue. This is what I will explore with that project.

Somewhere in that process, I will post the link to the repo.

__I will have it open for contribution, right away and every input is welcome!__

### 👍 How can you help?

By sharing, linking, and posting and discussing suggestions!
I already posted a question yesterday on twitter about how the folder structure should look. you can find that tweet >>[here](https://twitter.com/lampewebdev/status/1213884296538271750)<< 




**👋Say Hello!** [Instagram](https://www.instagram.com/lampewebdev/) | [Twitter](https://twitter.com/lampewebdev) | [LinkedIn](https://www.linkedin.com/in/michael-lazarski-25725a87) | [Medium](https://medium.com/@lampewebdevelopment) | [Twitch](https://dev.to/twitch_live_streams/lampewebdev) | [YouTube](https://www.youtube.com/channel/UCYCe4Cnracnq91J0CgoyKAQ)