16 stages · 95 topics · 42 core
Roadmap

Become a frontend engineer.

All sixteen stages. The complete arc — what the browser is doing when a page loads, the three languages you can't fake (HTML, CSS, JavaScript), the framework layer, and how to reason about rendering, performance, and accessibility when an interviewer asks you to design a frontend. Start here if you're not sure. Each topic links to a Semicolony deep dive or simulator where one exists, and to a curated external resource where it doesn't. Follow the arc in order, or jump to wherever you're stuck.

FOUNDATIONSLANGUAGEFRAMEWORKSARCHITECTUREMASTERY01020304050607080910111213141516startfrontend engineer
Core (the spine) Recommended (strong upside) Optional (pick if relevant)

Path
Level

Core plus the recommended layer. The optional stops stay hidden — they pay off after you've shipped a couple of real interfaces.


Jump to a stage

01
Stage

How the web loads

What happens between the URL and the first paint.

Most frontend confusion lives below the framework. Before you can fix a slow Largest Contentful Paint or reason about why hydration is janky, you need a real picture of the request: DNS, TLS, HTTP, then the browser parsing HTML, building the DOM and CSSOM, and painting. The framework sits on top of all of this.

02
Stage

HTML & semantics

The markup that gives you accessibility and SEO for free.

HTML is the cheapest accessibility and SEO win you will ever get, and the easiest to fumble. The right element gives you keyboard behaviour, screen-reader semantics, and form handling for free. Reach for a <div> and you are signing up to rebuild all of it by hand.

03
Stage

CSS & layout

Specificity, the box model, and two layout systems.

CSS is not styling sprinkled on at the end; it is a constraint-solving layout engine. Once the cascade, the box model, and the difference between Flexbox and Grid click, most "CSS is hard" problems turn into "I picked the wrong tool for this layout".

04
Stage

JavaScript, the language

Closures, prototypes, and the event loop — the stuff under every framework.

Every framework is JavaScript with conventions on top. Closures, the prototype chain, and the event loop are not trivia — they are the model that explains why a stale value got captured, why "this" is undefined, and why your await didn't block what you thought it would.

05
Stage

TypeScript

Types that catch bugs before they ship.

TypeScript is the default for any frontend of size. The goal is not to satisfy the compiler — it is to encode the shapes your data can take so that whole classes of bug become unrepresentable. Narrowing and generics are where it goes from "annotated JavaScript" to genuinely useful.

06
Stage

The DOM & browser APIs

The platform underneath the framework, for when it leaks through.

Frameworks hide the DOM, but it shows through the moment you need a ref, an event listener, a focus trap, or a third-party script. The DOM, the event model, fetch, storage, and the security boundaries (CORS, XSS, CSP) are the platform every framework is renting.

07
Stage

Version control & collaboration

Git, branching, and the pull-request workflow teams run on.

Git is table stakes, but the gap between "I can commit" and "I can rebase a messy branch and review a 40-file PR without fear" is real and visible to a team on day one. Learn the model, not just the commands.

08
Stage

Build tooling & packages

How your source becomes something a browser can run.

Nobody ships raw source. A bundler resolves modules, a transpiler downlevels syntax, and a dev server gives you instant feedback. You don't need to configure webpack from scratch, but when the build breaks — and it will — you need to know what each tool is responsible for.

09
Branch · pick one

Pick a framework

Depth in one beats a tour of all five.

Roles ask for fluency in one component framework, not a survey of every framework. React is the pragmatic default by sheer market share. Vue and Svelte are excellent and increasingly hireable. Angular still runs much of the enterprise. Pick the one you can build and debug under pressure; the concepts transfer.

10
Stage

State & data fetching

Where most real frontend complexity actually lives.

Most frontend complexity is state: where it lives, who owns it, and how it stays in sync with the server. The biggest unlock of the last few years is separating server state (cached, async, shared) from client state (UI, ephemeral) and stopping the habit of dumping everything into one global store.

Core

Server state & caching

TanStack Query and SWR treat the server as the source of truth: fetching, caching, revalidation, and background updates handled for you. The single biggest reduction in state code.

External TanStack Query
11
Stage

Styling & design systems

From a stylesheet to a system the whole org uses.

Writing CSS for one page is easy; keeping it consistent across hundreds of components and several teams is the real problem. The answers — utility classes, scoped styles, design tokens, and a component library — are about constraints and reuse, not aesthetics.

12
Stage

Rendering & architecture

Where the HTML comes from, and where the work happens.

The defining frontend architecture decision is where rendering happens: in the browser (SPA), on the server per request (SSR), at build time (SSG), or some streaming mix. Each trades off time-to-content, interactivity, and infrastructure. Senior interviews live here.

13
Stage

Performance & Core Web Vitals

Making it fast, and proving it stays fast.

Performance is a feature with a number attached. Core Web Vitals turn "it feels slow" into LCP, INP, and CLS targets you can measure and regress-test. The senior skill is profiling to find the real bottleneck instead of guessing, then setting a budget so it stays fixed.

14
Stage

Accessibility

Building so everyone can actually use it.

Accessibility is both an ethical baseline and, in many places, a legal one. Most of it is free if you start with semantic HTML and keyboard support; the expensive version is retrofitting ARIA onto a div soup. Seniors treat it as a build-time concern, not a final-audit panic.

15
Stage

Testing & quality

The tests that let you change code without fear.

Tests exist to let you change code without fear. The frontend lesson, learned the hard way, is to test behaviour the way a user experiences it rather than implementation details — so a refactor that keeps the UI working keeps the tests green.

Core

Unit testing

Vitest for Vite projects, Jest everywhere else. Fast, isolated tests for logic — utilities, reducers, hooks.

External Vitest
16
Stage

Frontend system design

Designing a real frontend, the way interviews ask you to.

Senior frontend interviews ask you to design something — a news feed, an autocomplete, a design system, a collaborative editor — and reason out loud about rendering strategy, data flow, caching, accessibility, and performance budgets. This is the synthesis stage: the vocabulary from every chapter, applied under time pressure.

Core

Designing a component library

API design for components, composition over configuration, theming, accessibility, and versioning. The most common "design X" prompt for senior frontend.

External Patterns.dev