The Stack that JavaScript: from Zero to Hero Learning Management System


  • The course is names “JavaScript” from Zero to Hero…

    So, by definition, I use a hell lot of JavaScript, everywhere :D


  • zerotoherojs.com ’s Learning Management System codebase lives in a private GitHub repository.


  • Is there anyone who does not use git.

    git is love, git is life.


  • I use React (and Hooks) for the learning dashboard of nightly.zerotoherojs.com and dojo.zerotoherojs.com


  • 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.


  • It is like IRC, but everybody else uses it. And it works well.

    I use slack as a communication medium for the early-access-program crowd, while I’m also evaluating spectrum.chat as an alternative.


  • 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?


  • Drop the “5”… it is “HTML”.

    Drop the “6”… it is “ES”.

    Drop the “3”. it is “CSS”.


  • NPM: Is there anyone who does “not” use it?


  • I use a micro elesticache instance as a shared session store between the Node.js clusters of dojo.zerotoherojs.com and nightly.zerotoherojs.com


  • 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.


  • 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).


  • 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.


  • 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.


  • Currently I use Amazon S3 to serve the static website of zerotoherojs.com (along with CloudFront).


  • 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 used DataDog for setting up alarms and realtime dashboards for nightly.zerotoherojs.com and dojo.zerotoherojs.com


  • 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.


  • 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 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.


  • 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.


  • 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.


  • I prefer yarn instead of npm.

    Both npm and yarn work great.

    I don’t see any overwhelming reason to choose one over another.

    I just like yarn, that’s it.


  • 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.


  • Uptime Robot is simple; it does what it claims it does, and it does it really well. And its free tier works great for my needs. What more can I want out of it?


  • 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.


  • I use docker mostly on creating small proof-of-concept setups. This way I don’t have to spend AWS cycles (and money) just to validate an idea.


  • Mustache is a simple logicless template language.

    It is lightweight, and currently suits my templating needs.

    I use it, in lieu of things like React SSR etc.


  • 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.


  • JavaScript is a language that works wonders when there are tools like ESLint, Prettier, and FlowType that cover your back.

    I use my IDE’s (Visual Studio Code) ESLint integration to validate the code I write in realtime.


  • Yes, there is variables support in CSS; but still, I like the flexibility that sass has to provides.

    I use sass along with styled components.


  • 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.


  • 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.


  • It is not ES6… it is simply “JavaScript”; and it is the future.

    Write JavaScript: Love JavaScript.


  • 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.


  • At zerotoherojs.com there are two kinds of mailing that I send.

    1. Important system emails.
    2. News and updates.

    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.


  • 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.


  • 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.


  • I mainly use it for the infrastructure notifications and alarms of zerotoherojs.com ’s learning dashboards.


  • I use AWS Workspaces for several things:

    1. As a AWS-secured bastion host to connect to my infra.
    2. As a "research machine" that I can use its upstream and downstream speed to do google searches, computations and downloads (only my 1Gbps office network beats their ~500mbps downlink speed; articles load in the blink of an eye; any download is almost instant).
    3. An alternative development environment to test my tooling (how does that electron binary work in windows?)
    4. A secure backup medium.
    5. A mini-staging environment that also has great connectivity.
    6. And an extension to my current Desktop.
    7. And more…

    Their desktop client, especially for Windows, work amazingly well. And they deliver what they promise.


  • I use CodeCommit for projects that require a tighter integration with the AWS ecosystem.

    Otherwise, my default source control system as a service of choice is: GitHub.


  • Buddy is deployment: simplified.

    With buddy, you can actually have fun while you deploy your infra.

    Beautiful UI, excellent UX, solid product, fanatical support!


  • CloudWatch is “on by default” in Amazon. And by just configuring a few alarms you can have a near-zero-cost monitoring service of your own.


  • With VCP, you can secure and segment your nodes.

    It is easy to manage, flexible, and gives great control over your virtual infrastructure.


  • 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.




Favorite
Views
71
Favorite
Views
71