Monday, May 18, 2020

The Knests stack

The Knests stack image placeholder until we'll have a proper logo
Three non-stacked nests

TL;DR

Let me introduce you The Knests Stack - a modern, typescript based, full stack boilerplate/hackathon starter template project, using the best tools of the moment (mid 2020) in the javascript ecosystem:

Backend

- PostgreSQL
- Knex.js, 
- NestJS, 
- GraphQL (Apollo server), 

Frontend

- GraphQL,
- Next.js
- React (with hooks and typescript), 
- Material-UI, 

Devops

- Docker (with multi stage image containers), 
- Docker compose,
- CI/CD pipeline configured for Gitlab.

Intro

Imagine you get that billion dollar web app idea we're all waiting for and you need it implemented fast, with a decently looking UI. Also, you want to be able to scale the app horizontally to accommodate that huge number of users that are flocking to use your app. When money start pouring in and you start hiring developers, you want to have the app built using modern and hip technologies, so you can find developers easily.
Even though I don't have that billion dollar idea yet, I wanna be prepared for when the opportunity strikes so I put together what seems to be the best full stack javascript stack in 2020.
I work on putting this all together since late 2019.

Objectives

I wanted to:
- Be able to spin out a basic custom web app as fast as possible. Starting a new project is as simple as 
    * git clone ...
        * And a project wide Search & Replace of the keyword "knests" with your project name.
- Be able to deploy the new web app as seamless as possible. This is achieved with the help of the Gitlab CI/CD pipeline that's already configured with the project (see the .gitlab-ci.yml file) if you'll host the project on a gitlab instance, as I am doing with several other side-projects built with this stack.
- Be able to develop web app screens and functionality rapidly. I am working on a few other side projects using this exact stack and the plan is to write articles and tutorials regarding the whole experience in software development using the Knests stack.
- Have the same Docker image that runs on developer's machine, in the testing environment and in production, to stay away from dependency hell
- Choose frameworks/libraries that are popular, well maintained, stable and loved by community. Well, as much as possible, given the pace the whole nodejs/javascript ecosystem evolves.
- Learn GraphQL
- BDD - Buzzword Driven Development.

Road map

- Since this is hosted on Github, migrate the Gitlab CI/CD pipeline to Github actions and dockerhub registry.
- Deployment and hosting on Kubernetes (?)
- Internationalization (?)
- Other good ideas

Wanna Help?

- Pick any task from the road map, develop it, document it and submit a Pull Request
- Clone the repo, build something, see how it goes, come up with ideas on how to improve the overall development experience.
- Review the code, send suggestions, fixes, etc.
- Star the repo, share the articles, write yourself about it :)