A couple of weeks ago, I was inspired to start my blog. Initially I was planning on using my traditional technologies of React.js and Keystone.js. But as is often good to do, I did some digging to see what else was now available.
Recently at Nuvoair I have learned Python and Django. Django is a fantastic ORM framework and administrative system - albeit a little dated in its frontend technology out of the box (2005 was original release). But it works incredibly well due to its wide support for various databases, hundreds of available plugins, and the simplicity of its admin panel.
Django was originally built for the ancient web, where form tags ruled and AJAX didn't. As a result, a lot of the traditionally most powerful features of Django (like its templating engine) are lost if you want to build a Single Page Application (SPA).
That said, there are plenty of plugins to make it possible to build a SPA with Django, I just did not feel like doing so for another reason. Speed. Both speed of development and speed of the underlying language.
The reality is that Python is unreasonably slow compared to Node.js, even for basic things like mathematical operations.
So I knew that I wanted to do something with Node.js. Ideally I wanted the following:
- ORM for Postgres (so I can use the awesome JSON field features)
- Typescript
- Administrative panel for CRUD operations on the database
- Wysiwyg support
A long time ago I had used Keystone.js and found it super useful. In many ways Keystone.js was one of the first "Wordpress in Node.js" frameworks. But I decided to see what else was available out there and found a giant list, including names like:
You can read a giant 2020 comparison list here.
2020 has numerous options for Node.js CMS and ORM frameworks. But what I was looking for was something similar to Django, and that ended with me deciding to take a whirl with Strapi.js.
Ultimately I scrapped the idea of TypeScript for now at least, due to the overhead in compilation and I wanted to get this off the ground quickly.
So after a couple weeks of work in the evenings and weekend, JoshOnCode.com is currently built with the following stack:
- Backend/ORM/API: Strapi.js
- Frontend: Nuxt.js (Vue.js)
- Container: Docker w/ docker-compose
- Network: Traefik
- Cloud: AWS EC2 instance
My estimate is that getting everything online, including DNS setup, fighting hours and hours of trying to get VSCode debugger working, and troubles with an AWS EC2 instance and Docker, I spent around 28 hours. However, if you want to do the same thing I think this series could probably cut that down to about 12 hours to get a fully functioning blog online.
As I continue this series, I will walk you through the technical things I learned setting up the blog. When I am done, I hope to release an open-sourced foundation for this entire blog for anyone else to use.
- Josh