An Overview of Boot.dev's Full-Stack Architecture
Because I’ve had several inquiries on this topic, I thought it would be interesting to publish some information on how the boot.dev website and platform work, and how I’ve organized all the technologies I’m using. I’ll do my best to keep this list updated in the future as I migrate from older tools and technologies to newer ones, but assume that this might be a bit out of date by the time you read it.
The blog - WordPress
boot.dev started as a simple tech blog, it was essentially just my personal blogging site. Eventually, when I added the app to host interactive coding courses, I deployed it to https://www.boot.dev. So, there are technically two different “front-ends” on boot.dev.
- The blog and landing pages (WordPress) - https://www.boot.dev/
- The courses and projects (a custom Vue.js web app) - https://www.boot.dev/
I use a custom deployment of WordPress hosted on GCP’s compute engine to serve all my blog posts and landing pages. This has been convenient because I don’t need to edit code to update simple visuals. That said, it’s also been a giant page in the butt as the site has grown, because sometimes it would be easier to just write some code. I’m looking at moving the blog to Hugo and hosting it on Netlify.
The app’s front-end - Vue.js SPA on Netlify
All the coding courses and projects on boot.dev exist within a Vue.js web app. I’m currently running the front-end as a single page app hosted on Netlify. I ended up choosing Netlify over GitHub Pages because Netlify has some server-side-rendering built-in that gives me an SEO boost.
One thing that you might be wondering is how does the code you write within a boot.dev course get executed? Well, I actually think I’m the only educational site taking this unique approach, but it actually runs in your own browser. I spin up a web worker that executes your JavaScript code, or if it’s a different language, it compiles to Web Assembly first.
Here are some additional details on the technologies I’m using within the Vue app.
- Vue 3
- Vite - I switched from Webpack to Vite recently and couldn’t be happier.
- Vuex
- Eslint
- Codemirror - Codemirror has been pretty good, it’s what I use to manage the in-browser code editor.
- Markdown-it - All of the instructions in the app are written in Markdown, so the front-end needs a Markdown renderer.
- Tailwind CSS - Tailwind has been amazing. I would highly recommend it if you have a hard time writing “clean” css.
The app’s back-end - Golang server on Kubernetes
The backend of the boot.dev app consists of two services, both written in Golang, running on a Kubernetes cluster in Google Cloud Platform on auto-pilot mode. One of them is an HTTP server that acts as the RESTful backend for the frontend. The other server powers the Discord bot for our community.
I use Kubernetes so I don’t have to worry about scalability or portability. If the app gets a big rush of traffic k8s will auto-scale the number of servers to handle the load. I also like that my server’s applications are deployed on lightweight docker containers that I could easily move to another infrastructure technology if needs be.
It’s also worth pointing out that when you run code in the boot.dev app that needs to compile to WASM, like Golang for example, your code is shipped to the backend for compilation before the WASM is sent back to your browser for execution.
Here are some more of the technologies I use on the backend:
The database - Postgres on Cloud SQL
I really like PostgresQL. I’m of the opinion that it’s one the best general-purpose solution for new apps, though I do try to build my apps so I can move to more specialized storage mechanisms if need be. The application backend uses this Postgres instance running in Google Cloud SQL to persist things like user preferences, exercise completions, etc.
Payments - Stripe
Not too much to say about Stripe, other than it makes payments pretty seamless for our pro accounts. My biggest complaint about Stripe is that I had to write an annoying about of code for the “lifetime subscription” option because Stripe doesn’t have that built-in.
Deployments and source control - GitHub/GitHub Actions
I really don’t like doing monotonous tasks if I can avoid it. Running tests and deploying applications can be painfully time consuming, so I’ve automated all of that with GitHub actions. Each time code is updated in Git, a new deploy is automatically triggered, and I’ve set this up both for the Vue.js frontend and the Golang backend.
Related Articles
The Best Product Managers Have The Worst Ideas
Nov 02, 2021 by Lane Wagner - Boot.dev co-founder and backend engineer
It’s hard finding good product people. That fact is really a tragedy because they are probably the most important part of any product-focused organization. I think there is a misconception in the software industry that product managers have a good sense of “what users want”, “what the next feature should be” or “ux design”. In reality, I’ve come to believe that the best product managers aren’t good at any of that, and they know it.
Well, We Might Have a Video Call for That!
Sep 27, 2021 by Lane Wagner - Boot.dev co-founder and backend engineer
This article contains some of my thoughts on communications for distributed teams and is a response to No, we won’t have a video call for that! by Florian Hass. Read his article first if you haven’t yet, he makes some great points!
16 Great Coding Challenges You Can Try Out
Jun 24, 2021 by Zulie Rane - Data analysis and computer science techincal author
Coding challenges are a fun way to improve your coding quickly. When I started to learn coding in school, coding challenges were the furthest thing from my mind. In fact, I was struck with one particular issue: I didn’t really want to learn to code. I didn’t care enough about coding. I didn’t care about the language. I wanted to get a decent grade and get out.
The 10x Meeting - Solving for Too Many Meetings
May 10, 2021 by Lane Wagner - Boot.dev co-founder and backend engineer
Perhaps you’ve heard of the fabled 10x developer (or 10x engineer) - the one on the team that’s 10x as productive as their average colleague. While many, including myself, doubt the existence of such people, I do think there are meetings that are 10x as productive as the average meeting. My goal in this article is to break down their properties so we can have 10x fewer meetings.