I use express.js for nightly.zerotoherojs.com and dojo.zerotoherojs.com web apps.
Express is well-known, lightweight, works out-of-the-box, has great middleware support and has minimal learning curve.
It is the best framework to start developing a general Node.js web app.
Since most of zerotoherojs.com infrastructure is on AWS, Route53 is the obvious DNS of choice.
I’m also considering CloudFlare, but haven’t decided the pros and cons of migrating yet.
I use an Application Load Balancer to balance the load to the EC2 clusters of nightly.zerotoherojs.com and dojo.zerotoherojs.com.
Addditionally, ELB protects my cluster against DDOS attacks: So it is multi-birds with one stone.
Node.js is the app server of choice for the EC2 web app nodes of dojo.zerotoherojs.com and nightly.zerotoherojs.com
I am also considering using
golang; but for now, Node.js works pretty well, so I’m good with it.
Crisp is a realtime chat widget that, unlike its competitors, does not demand your leg and kidney to deliver a decent service.
It works great for zerotoherojs.com and I recommend anyone if they have a similar need.
Even their free tier is more than enough for the majority of the use cases that you can think of.
I use AWS Workspaces for several things:
Their desktop client, especially for Windows, work amazingly well. And they deliver what they promise.
Jest is my unit-testing tool of choice.
Almost all unit testing suites (Mocha, Jasmine, etc.) are more or less the same.
The main advantage I guess, is that it integrates pretty well with React and Enzyme.
What you see is not what you get, never it is.
Documentation is better in Markdown format. You don’t need anything special to read it.
It is compact, portable, comparable.
Markdown is my text file format of choice.
At zerotoherojs.com there are two kinds of mailing that I send.
I send the important emails using Mailgun, and news and updates using MailChimp.
For managing your mailing list, and sending occasional newsletters, MailChimp is the best.
For styling components, styled-components work great (really!)
You don’t have to use it for everything. You can still use good old CSS classes along with your styled components.
What I do generally is to separate the “layout”, “typography”, “vertical rhythm”, and “reset” to good old CSS, and style the rest of the app with styled components.
I use my IDE’s (Visual Studio Code) ESLint integration to validate the code I write in realtime.
When you are using modern (or sometimes experimental) features of the language, you’ll eventually have to transpile them so that your app works in a wide spectrum of user agents.
Babel is the transpilation tool of my choice.
I use CloudFront to front the static website at zerotoherojs.com that I host in an s3 bucket.
This way, I don’t have to worry about scalability or performance, as I’ll know that the content will be delivered to the users as fast as possible from the closest edge location.
I use loader.io for distributed load testing.
That especially matters when you have a cross-region load-balancer and you want to make sure how your app behaves on a global scale.
I like containers and all, but for zerotoherojs.com I am a one-man band, who also works full time. I don’t have any (dev)ops budget, and therefore I need the reliability and uptime of an actual virtual machine.
That’s where AWS EC2 comes in handy.
Mailgun is the only mailing service that I trust to deliver critical user and system emails of zerotoherojs.com
It works great, and for my current usage volume it’s free.
I use NGINX as a reverse-proxy fronting the Node.js web EC2 instances.
It is lightweight, it gets it job done really well. And it’s written by Russians: so it should be good, no?
Using websockets is something, scaling a message pipeline to thousands of concurrent connections is something else.
I trust PubNub with what it does best, and use it as zerotoherojs.com ’s messaging pipeline.
With PubNub, I have one less problem to think about.
Integrating Stripe to your app is dead simple.
It removes all the hassle of integrating with a payment gateway.
Its API is developer-friendly and intuitive, reliable, and works all the time.
It’s my payment gateway of choice.
I use Papertrail as a distributed log aggregator for nightly.zerotoherojs.com and dojo.zerotoherojs.com
I served me really well so far.
It is simple to use, intuitive, and reasonably-priced.
Webpack is the best bundler. Period.
Yes, it has a(n arguably) messy documentation, and a steep learning curve; but once you get the hang of it, there is nothing you cannot do with it.
Use it and you don’t have to use any other bundler at all.
It has a vivid ecosystem, and great plugin support.
I’m using Ruby and Jekyll as a static site generator along with express-static to protect it behind a session.
It’s currently experimental; I may or may not continue to use it—we’ll see.
I mostly use AWS Lambda for triggering DevOps-related actions, like triggering an alarm or a deployment, or scheduling a backup.
I haven’t gone totally “serverless” and I’m not planning to go 100% serverless anytime soon.
But when I do, AWS Lambda will be an important element in my serverless setup.
zerotoherojs.com ’s userbase, and course details are stored in DynamoDB tables.
The good thing about AWS DynamoDB is: For the amount of traffic that I have, it is free. It is highly-scalable, it is managed by Amazon, and it is pretty fast.
It is, again, one less thing to worry about (when compared to managing your own MongoDB elsewhere).