Frontend Developer
A step-by-step path from web basics to production React, covering HTML, CSS, JavaScript, TypeScript, React 19 and Next.js 16. Each stage lists what to learn, why it matters at that point, and a project that proves you can do it.
- Before you start
- Made for beginners and self-taught developers, so no prior coding is needed. You should be comfortable installing software, willing to learn basic terminal commands, and able to read documentation in English.
- Where it gets you
- You can build accessible, fast and tested React and Next.js apps in TypeScript, ship them through a Git and CI workflow, and explain the trade-offs behind your choices in a technical interview.
0 of 61 topics done
Tick a topic once you can explain it and have used it in a project. Progress is saved in this browser.
- Core
- Recommended
- Optional
- Done
- 1
How the Web Works and HTML
About 3-4 weeks0/6
Explain what happens between typing a URL and seeing a page, and write semantic, accessible HTML pages with working forms.
Build: Accessible Event Site
Build a three-page site in plain HTML for a real or made-up event, with a schedule table, a registration form using built-in validation, and an FAQ built from details elements. It should pass the W3C validator and a Lighthouse accessibility audit with no errors.
- 2
CSS Layout and Modern CSS
About 5-6 weeks0/6
Turn a design mockup into a responsive, themeable layout using current CSS and no framework.
Build: Responsive Landing Page from a Design
Pick a free landing page design from a design community and rebuild it in plain CSS, with grid-based sections, a card that changes layout through container queries, and light and dark themes driven by custom properties. Match the design at 360px, 768px and 1280px widths.
- 3
JavaScript in Depth
About 6-8 weeks0/7
Write interactive pages in plain JavaScript that fetch data, handle errors and update the DOM without a framework.
Build: Movie Search in Vanilla JavaScript
Build a search page for a public movie or book API with debounced input, cancelled stale requests, clear loading, error and empty states, and recent searches saved to localStorage. Use no frameworks or libraries.
- 4
Tooling and TypeScript
About 4-5 weeks0/7
Set up a professional project with Git, a package manager, Vite, linting and strict TypeScript, and deliver changes through pull requests.
Build: Typed Rewrite with a Team Workflow
Move the movie search app into a Vite and TypeScript project with strict mode, ESLint, Prettier and typed API models. Land every change through a small pull request on GitHub with a short description of what changed and why.
- 5
React 19 Fundamentals
About 6-8 weeks0/7
Build interactive, typed React apps with well-placed state, forms, effects and reusable components.
Build: Budget Tracker
Build a React and TypeScript app to add, edit and delete expenses through a form that uses Actions, filter and sort them by category, and persist data to localStorage with a custom hook. Include a modal dialog that moves focus in on open and returns it on close.
- 6
Styling and UI at Scale
About 4-5 weeks0/7
Build a consistent, accessible and themeable set of components that a team can reuse across many pages.
Build: Mini Component Kit
Build a small kit with a button, input, select, tabs, dialog and toast using Tailwind and Radix or shadcn/ui, themed through tokens with light and dark modes. Add a demo page that shows every variant, state and keyboard interaction.
- 7
Data, State and Routing
About 5-6 weeks0/7
Build multi-screen apps that load, cache and change server data, keep each piece of state in the right place, and validate user input.
Build: GitHub Repo Explorer
Build a multi-screen app that searches GitHub repositories with React Router and TanStack Query, keeps filters and page number in the URL, and reuses cached results between screens. Add a Zod-validated form for saving repos to a list and a mocked sign-in that protects the saved lists screen.
- 8
Next.js and Server Rendering
About 5-6 weeks0/7
Build a Next.js 16 App Router app that mixes static, cached and dynamic rendering, changes data with Server Actions, and is ready for search engines.
Build: Product Catalog on Next.js
Build a catalog in Next.js 16 with statically rendered category pages, a product page that streams its reviews inside a Suspense boundary, and an admin form whose Server Action revalidates the cached product list. Add per-page metadata, a sitemap and generated share images.
- 9
Testing, Performance and Production
About 6-7 weeks0/7
Ship an app with automated tests, good Core Web Vitals, sensible security settings and a CI pipeline that deploys on every merge.
Build: Production-Ready Release
Take the Next.js catalog to production with Vitest and Testing Library tests, three Playwright flows with axe checks, a GitHub Actions pipeline that blocks failing pull requests, and a Vercel or Netlify deploy. Reach Lighthouse scores of 90 or above on mobile and write up what you changed to get there.
Where it gets you
You can build accessible, fast and tested React and Next.js apps in TypeScript, ship them through a Git and CI workflow, and explain the trade-offs behind your choices in a technical interview.
Core must know for the roleRecommended expected in most jobsOptional for specific teams or later
How the Web Works and HTML
About 3-4 weeks
Explain what happens between typing a URL and seeing a page, and write semantic, accessible HTML pages with working forms.
How the Web Works
CoreThe request and response cycle sits behind every page you will build, so it is the first thing to understand and the thing you will debug most.
- Clients, servers and URLs
- DNS lookups and domain names
- HTTP methods and status codes
- Request and response headers
- HTTPS and why TLS matters
- What hosting and CDNs do
Browsers and DevTools
CoreKnowing how a browser turns HTML into pixels, and how to inspect each step, makes every later bug easier to find.
- Parse, style, layout, paint steps
- Inspect and edit the DOM
- Read the Network panel
- Use the Console for errors
- Throttle network and CPU
- Emulate mobile devices
Semantic HTML
CoreChoosing the right element gives you structure, accessibility and search visibility before you write any CSS or JavaScript.
- Heading levels and document outline
- Landmarks: header, nav, main, footer
- Links versus buttons
- Lists, tables and figures
- Useful alt text for images
- The head and meta tags
- Validating markup
HTML Forms
CoreForms are how users send data, and their built-in behavior is worth knowing well before any library takes over.
- A label for every input
- Input types and autocomplete
- Built-in validation attributes
- Fieldset and legend for groups
- GET versus POST submission
- Clear, accessible error messages
Accessibility Basics
CoreBuilding for keyboard, screen reader and low-vision users from day one is far cheaper than fixing it later, and many employers require it.
- Who uses assistive technology
- Keyboard access and focus order
- Accessible names for controls
- Color contrast requirements
- ARIA only when HTML falls short
- Quick screen reader check
Built-in Interactive Elements
RecommendedModern HTML ships dialogs, disclosures and popovers that used to need a JavaScript library, so check the platform first.
- details and summary disclosures
- dialog with showModal()
- The popover attribute
- Lazy-loading images and iframes
- picture and srcset for images
Build: Accessible Event Site
Build a three-page site in plain HTML for a real or made-up event, with a schedule table, a registration form using built-in validation, and an FAQ built from details elements. It should pass the W3C validator and a Lighthouse accessibility audit with no errors.
CSS Layout and Modern CSS
About 5-6 weeks
Turn a design mockup into a responsive, themeable layout using current CSS and no framework.
The Cascade and Box Model
CoreMost CSS confusion comes from specificity and sizing, so learn how the browser picks the winning rule and how big each box is.
- Selectors and specificity
- Cascade order and inheritance
- Cascade layers with @layer
- Box model and box-sizing
- Units: rem, em, %, vw
- Display types and normal flow
- Margins, padding and collapsing
Flexbox and Grid
CoreThese two layout systems handle nearly every layout you will build, and knowing when to use each saves hours.
- Flex direction, wrap and grow
- Alignment with justify and align
- gap for consistent spacing
- Grid rows and columns
- fr, minmax() and auto-fit
- Named grid areas
- Subgrid for aligned cards
- Choosing flex or grid
Responsive Design
CoreUsers arrive on every screen size, so layouts must adapt to both the viewport and the space each component gets.
- Mobile-first media queries
- Fluid type and spacing with clamp()
- Container queries and container units
- Dynamic viewport units like dvh
- User preference media queries
- Testing at real device widths
Custom Properties, Nesting and :Has()
CoreCurrent CSS covers much of what used to need Sass or JavaScript, and these features appear in every modern codebase.
- Custom properties and fallbacks
- Native CSS nesting
- :has() for parent and state styling
- :is() and :where() for grouping
- Logical properties for any direction
- Feature checks with @supports
Color and Typography
RecommendedReadable type and accessible color do more for a UI than any effect, and modern color functions make theming simpler.
- oklch() for predictable color
- color-mix() for tints and shades
- light-dark() for two themes
- Checking contrast ratios
- Web fonts and font-display
- Variable fonts
- Line length and vertical rhythm
Positioning and Stacking
RecommendedSticky headers, menus and tooltips depend on positioning, and stacking context bugs come up constantly on the job.
- Relative, absolute, fixed, sticky
- z-index and stacking contexts
- Overflow and scroll containers
- Anchor positioning for popovers
- Transforms that avoid layout shifts
Build: Responsive Landing Page from a Design
Pick a free landing page design from a design community and rebuild it in plain CSS, with grid-based sections, a card that changes layout through container queries, and light and dark themes driven by custom properties. Match the design at 360px, 768px and 1280px widths.
JavaScript in Depth
About 6-8 weeks
Write interactive pages in plain JavaScript that fetch data, handle errors and update the DOM without a framework.
Language Core
CoreEvery framework is JavaScript underneath, so solid basics pay off in each stage that follows.
- Primitives, objects and references
- let, const and block scope
- Equality, truthiness and coercion
- map, filter and reduce
- Destructuring, spread and rest
- Optional chaining and nullish coalescing
- Template literals and string methods
Functions, Closures and This
CoreReact hooks and event handlers are built on closures, so understanding scope explains many confusing bugs later.
- Declarations versus arrow functions
- Lexical scope and closures
- How this gets its value
- Prototypes and classes
- Copying instead of mutating
- Higher-order functions
DOM and Events
CoreWorking with the DOM directly shows you what frameworks automate and helps when you need to step outside them.
- Query and create elements
- Update text, attributes and classes
- addEventListener and event objects
- Bubbling, capturing and delegation
- preventDefault on forms and links
- Reading forms with FormData
Asynchronous JavaScript
CoreNetwork calls, timers and user input all happen asynchronously, and most frontend bugs involve timing.
- The event loop and task queue
- Promises and chaining
- async and await
- Promise.all and Promise.allSettled
- Cancelling work with AbortController
- Debouncing and throttling input
Fetch and Working with APIs
CoreMost frontend apps are clients for APIs, so you need to request data, handle failures and show every possible state.
- GET and POST with fetch
- JSON bodies and headers
- Checking response.ok and status
- Loading, error and empty states
- REST resource conventions
- Ignoring stale responses
Modules and Error Handling
CoreSplitting code into modules and failing gracefully is how small scripts grow into apps you can maintain.
- import and export syntax
- Named versus default exports
- Dynamic import() for lazy code
- try, catch and finally
- Custom Error classes
- Global error and rejection handlers
Useful Browser APIs
RecommendedThe platform already solves many common needs, so check the built-in APIs before installing a package.
- localStorage and sessionStorage
- URL and URLSearchParams
- Intl for dates and numbers
- IntersectionObserver for lazy work
- Clipboard and History APIs
- structuredClone for deep copies
Build: Movie Search in Vanilla JavaScript
Build a search page for a public movie or book API with debounced input, cancelled stale requests, clear loading, error and empty states, and recent searches saved to localStorage. Use no frameworks or libraries.
Tooling and TypeScript
About 4-5 weeks
Set up a professional project with Git, a package manager, Vite, linting and strict TypeScript, and deliver changes through pull requests.
Git and GitHub
CoreEvery team uses version control, and a clean history with small pull requests is often the first thing a reviewer sees.
- Commits, staging and clear messages
- Branches, merge and rebase
- Resolving merge conflicts
- Pull requests and code review
- Keeping secrets out with .gitignore
- Undoing with restore, revert, reset
npm and Pnpm
CorePackage managers install dependencies and run your scripts, and misunderstanding them is a common cause of broken builds.
- package.json fields and scripts
- Semantic versioning ranges
- Lockfiles and reproducible installs
- dependencies versus devDependencies
- Running tools with npx
- Vetting a package before installing
Vite and Build Tools
CoreA dev server and bundler turn modern source code into files browsers load quickly, and Vite is the usual choice for React apps outside a meta-framework.
- What a bundler does
- Dev server and hot module replacement
- Environment variables and modes
- Static assets and the public folder
- Production build and preview
- Path aliases and plugins
ESLint and Prettier
CoreAutomated linting and formatting catch bugs early and end style debates in code review.
- ESLint flat config setup
- TypeScript and React lint rules
- Prettier for consistent formatting
- Format on save in the editor
- Checks in a pre-commit hook
TypeScript Fundamentals
CoreTypeScript is the default for professional React work, and its checks catch mistakes before your users do.
- Primitive, array and object types
- Type aliases and interfaces
- Union and literal types
- Narrowing with typeof, in, guards
- Typing functions and return values
- Strict mode in tsconfig
- unknown instead of any
Generics and Utility Types
CoreGenerics and utility types let you type reusable functions, hooks and API responses without repeating yourself.
- Generic functions and constraints
- Partial, Pick, Omit and Record
- keyof, typeof and indexed access
- Discriminated unions for UI states
- The satisfies operator
- Typing data from external APIs
Working with AI Coding Assistants
RecommendedMost teams now use AI tools every day, and the skill employers look for is checking and correcting their output, not only generating it.
- Give context: files, types, errors
- Read every generated line
- Ask for tests, then run them
- Spot invented APIs and packages
- Keep secrets out of prompts
- Know when to write it yourself
Build: Typed Rewrite with a Team Workflow
Move the movie search app into a Vite and TypeScript project with strict mode, ESLint, Prettier and typed API models. Land every change through a small pull request on GitHub with a short description of what changed and why.
React 19 Fundamentals
About 6-8 weeks
Build interactive, typed React apps with well-placed state, forms, effects and reusable components.
Components, JSX and Props
CoreComponents are the unit of every React codebase, so start by learning to split a UI into small, pure pieces.
- JSX rules and expressions
- Function components and props
- children for composition
- Conditional rendering patterns
- Lists and stable keys
- Keeping rendering pure
- Typing props with TypeScript
State and Events
CoreState drives what users see, and most React bugs come from where state lives or how it gets updated.
- useState and state snapshots
- Updater functions for next state
- Immutable object and array updates
- Lifting state to a shared parent
- Deriving values instead of storing
- useReducer for complex updates
Effects and Synchronization
CoreEffects connect React to systems outside it, and knowing when not to use one matters just as much.
- Effects sync with external systems
- Dependency arrays and cleanup
- Why effects run twice in development
- No effects for derived data
- Race conditions when fetching
- useEffectEvent for non-reactive logic
Forms and Actions
CoreReact 19 Actions handle pending states, errors and optimistic updates for forms with much less code than hand-rolled handlers.
- Controlled versus uncontrolled inputs
- Passing a function to form action
- useActionState for results and errors
- useFormStatus for pending buttons
- useOptimistic for instant feedback
- Accessible inline validation
Context, Custom Hooks and Composition
CoreSharing logic and data without long prop chains keeps a growing app readable and easy to change.
- Composition before reaching for context
- Context for theme, auth and locale
- Reading context with useContext or use
- Extracting custom hooks
- Compound components pattern
- Splitting context to limit re-renders
Refs, Portals and the DOM
CoreFocus management, measurements and third-party widgets need direct DOM access, and refs give it to you without fighting React.
- useRef for DOM nodes
- Refs for mutable values
- ref as a regular prop
- Managing focus in dialogs
- createPortal for overlays
- Wrapping non-React libraries
Rendering, Suspense and Performance
RecommendedKnowing why components re-render and how Suspense and transitions work helps you keep large apps responsive.
- What triggers a re-render
- React Compiler automatic memoization
- When memo and useMemo still help
- useTransition and useDeferredValue
- Suspense and lazy loading
- Activity for keeping hidden state
- Profiling with React DevTools
Build: Budget Tracker
Build a React and TypeScript app to add, edit and delete expenses through a form that uses Actions, filter and sort them by category, and persist data to localStorage with a custom hook. Include a modal dialog that moves focus in on open and returns it on close.
Styling and UI at Scale
About 4-5 weeks
Build a consistent, accessible and themeable set of components that a team can reuse across many pages.
Tailwind CSS V4
CoreTailwind is the most common styling choice in new React projects, and v4 moves its configuration into plain CSS.
- Utility-first mental model
- Setup with the Vite or PostCSS plugin
- Theme variables with @theme
- Responsive and state variants
- Dark mode variant options
- Merging conditional class names
- When to extract a component
CSS Modules and Other Approaches
RecommendedPlenty of existing codebases use CSS Modules or CSS-in-JS, so you should be able to read them and choose between approaches.
- Locally scoped class names
- CSS Modules in Vite and Next.js
- Mixing modules with global styles
- Runtime CSS-in-JS trade-offs
- Styling limits with Server Components
- Choosing an approach per project
Design Tokens and Dark Mode
CoreTokens give color, spacing and type a single source of truth, which makes theming and redesigns cheap.
- Primitive versus semantic tokens
- Spacing, type and radius scales
- Tokens as CSS custom properties
- prefers-color-scheme as the default
- A persisted theme toggle
- No wrong-theme flash on load
Component Libraries and Headless UI
CoreTeams rarely build dropdowns and dialogs from scratch, so learn to adopt tested primitives and adapt them to a brand.
- Headless primitives: Radix, React Aria
- shadcn/ui copy-in components
- Styling variants and sizes
- Customizing without forking
- Build versus adopt decisions
- Checking a library's accessibility
Accessible Interactive Patterns
CoreMenus, tabs and dialogs have expected keyboard behavior, and getting it right is a frequent interview and audit topic.
- ARIA patterns for common widgets
- Arrow-key focus in menus and tabs
- Trapping and returning focus
- Visible focus styles
- Live regions for announcements
- Large enough touch targets
Animation and Motion
RecommendedSmall, purposeful motion helps users follow changes, as long as it stays fast and respects reduced-motion settings.
- Transitions and keyframes
- Animating transform and opacity
- @starting-style for entry effects
- View Transitions API
- Motion for React components
- Honoring prefers-reduced-motion
Design Systems and Frontend Architecture
OptionalLarger companies share components across many apps, which brings documentation, versioning and monorepos into the job.
- Documenting components in Storybook
- Publishing a versioned component package
- Monorepo workspaces with pnpm
- Syncing tokens from design tools
- Visual regression checks
- Micro-frontends and their costs
Build: Mini Component Kit
Build a small kit with a button, input, select, tabs, dialog and toast using Tailwind and Radix or shadcn/ui, themed through tokens with light and dark modes. Add a demo page that shows every variant, state and keyboard interaction.
Data, State and Routing
About 5-6 weeks
Build multi-screen apps that load, cache and change server data, keep each piece of state in the right place, and validate user input.
Client-Side Routing
CoreReal apps have many screens, and a router ties URLs to layouts, data loading and navigation.
- Route config and nested layouts
- Dynamic segments and params
- Links, navigation and redirects
- Loaders and actions for data
- Error and not-found routes
- Route-level code splitting
Server State with TanStack Query
CoreServer data needs caching, refetching and invalidation, and TanStack Query handles that far better than hand-written effects.
- Queries and query keys
- staleTime versus gcTime
- Mutations and cache invalidation
- Optimistic updates with rollback
- Pagination and infinite queries
- Prefetching before navigation
- Inspecting with Query Devtools
Client State with Zustand or Redux Toolkit
CoreOnce server data is handled separately, a small store covers the UI state that remains, and many existing teams still run Redux.
- Local, lifted, context or store
- Zustand stores and selectors
- Redux Toolkit slices and store
- Never copy server data into stores
- Persisting state across reloads
- Reading older Redux code
The URL as State
RecommendedFilters, tabs and page numbers stored in the URL survive reloads and can be shared as links.
- Search params for filters and sort
- Pagination in the URL
- Keeping inputs in sync with the URL
- Push versus replace in history
- Parsing and validating params
Form Libraries and Zod
CoreLarge forms need field-level validation and typed data, and a schema library lets client and server share the same rules.
- React Hook Form basics
- Zod schemas for validation
- Inferring types from schemas
- Field and form-level errors
- Validating API responses too
- Multi-step and dynamic fields
Authentication in the Frontend
RecommendedMost apps have signed-in users, so you need to understand sessions, tokens and protected screens even when the backend owns the logic.
- Cookie sessions versus bearer tokens
- HttpOnly, Secure and SameSite cookies
- Protected routes and redirects
- Handling 401 and expired sessions
- The OAuth sign-in redirect flow
- Client checks are never enough
Real-Time and Offline Data
OptionalChat, live dashboards and field apps need push updates or offline support, which some teams expect you to handle early.
- Polling, SSE or WebSockets
- Reconnecting with backoff
- Pushing updates into the query cache
- Web app manifest basics
- Service worker caching strategies
- Offline fallback screens
Build: GitHub Repo Explorer
Build a multi-screen app that searches GitHub repositories with React Router and TanStack Query, keeps filters and page number in the URL, and reuses cached results between screens. Add a Zod-validated form for saving repos to a list and a mocked sign-in that protects the saved lists screen.
Next.js and Server Rendering
About 5-6 weeks
Build a Next.js 16 App Router app that mixes static, cached and dynamic rendering, changes data with Server Actions, and is ready for search engines.
Rendering Strategies
CoreChoosing between client, server and static rendering affects speed, SEO and hosting cost, and interviewers often ask about it.
- CSR, SSR and static generation
- Hydration and what it costs
- Time-based and on-demand revalidation
- Streaming HTML with Suspense
- Static shell with dynamic parts
- Choosing a strategy per route
Next.js App Router
CoreNext.js is the React framework named most often in job listings, and the App Router is how new Next.js apps are built.
- Folders as routes
- Layouts, pages and templates
- Dynamic segments and awaited params
- loading, error and not-found files
- Link, prefetching and navigation
- Route groups and private folders
- proxy.ts for redirects and headers
Server and Client Components
CoreDeciding what runs on the server and what ships to the browser is the central skill of modern React.
- Server Components by default
- use client marks the boundary
- Serializable props across the boundary
- Server children inside client components
- Keeping secrets with server-only
- Providers in client files
Data Fetching and Caching
CoreFetching on the server and caching the right parts is where most Next.js performance comes from.
- Fetching in async Server Components
- Parallel versus sequential requests
- Suspense boundaries for streaming
- Cache Components and use cache
- cacheLife and cacheTag
- Revalidating by path or tag
Server Actions and Route Handlers
CoreServer Actions let forms change data without a separate API layer, and Route Handlers cover the cases that still need an endpoint.
- use server functions
- Forms that call Server Actions
- Revalidating after a mutation
- Auth checks inside every action
- Route Handlers for webhooks and APIs
- Validating inputs with Zod
Metadata and SEO
RecommendedSearch results and social previews bring people to public pages, and Next.js gives you typed APIs for both.
- Static and generated metadata
- Open Graph and share images
- Sitemap and robots files
- Canonical URLs and redirects
- Structured data with JSON-LD
- Checking pages in Search Console
Internationalization
OptionalProducts that serve several countries need translated content and locale-aware formatting, which is painful to add late.
- Locale detection and routing
- Message catalogs and translation keys
- Intl for dates, numbers, plurals
- Right-to-left layout support
- Localized metadata and URLs
Build: Product Catalog on Next.js
Build a catalog in Next.js 16 with statically rendered category pages, a product page that streams its reviews inside a Suspense boundary, and an admin form whose Server Action revalidates the cached product list. Add per-page metadata, a sitemap and generated share images.
Testing, Performance and Production
About 6-7 weeks
Ship an app with automated tests, good Core Web Vitals, sensible security settings and a CI pipeline that deploys on every merge.
Unit and Component Tests
CoreTests let you change code with confidence, and most teams expect them in every pull request.
- Vitest structure and matchers
- Testing pure functions and hooks
- Queries by role and label
- Simulating users with user-event
- Mocking the network with MSW
- Testing behavior, not implementation
End-to-End Tests with Playwright
CoreA handful of end-to-end tests on critical flows catches the bugs that unit tests cannot see.
- Role-based locators
- Auto-waiting and web-first assertions
- Reusing signed-in state
- Traces for debugging failures
- Running across browsers in CI
- Keeping tests fast and stable
Accessibility Testing and WCAG
CoreAccessibility is a legal requirement in more places every year, so teams check it with tools and by hand.
- WCAG 2.2 AA success criteria
- Automated checks with axe
- Keyboard-only walkthroughs
- Screen reader testing basics
- Zoom and reflow at 400%
- Contrast and focus visibility
Core Web Vitals and Measurement
CoreGoogle and your users judge speed through LCP, INP and CLS, so learn to measure them in the lab and in the field.
- LCP, INP and CLS explained
- Lab data versus field data
- Lighthouse and the Performance panel
- Real user monitoring with web-vitals
- Finding long main-thread tasks
- Setting performance budgets
Loading Performance
CoreMost slow pages ship too many bytes or load them in the wrong order, and fixing that is routine frontend work.
- Responsive, modern image formats
- Font loading without layout shift
- Code splitting and lazy loading
- Bundle analysis and trimming dependencies
- HTTP caching and CDNs
- Preload and fetch priority hints
Frontend Security Basics
CoreThe browser is a hostile place, and frontend code decides much of what an attacker can reach.
- XSS and unsafe HTML injection
- Content Security Policy headers
- How CORS works and fails
- CSRF and SameSite cookies
- No secrets in client bundles
- Auditing dependencies for vulnerabilities
Deployment, CI and Monitoring
CoreShipping is part of the job: every change should be checked, previewed and deployed automatically, then watched in production.
- Deploying to Vercel or Netlify
- Preview deployments per pull request
- Environment variables per environment
- GitHub Actions for lint and tests
- Error tracking with source maps
- Rollbacks and feature flags
Build: Production-Ready Release
Take the Next.js catalog to production with Vitest and Testing Library tests, three Playwright flows with axe checks, a GitHub Actions pipeline that blocks failing pull requests, and a Vercel or Netlify deploy. Reach Lighthouse scores of 90 or above on mobile and write up what you changed to get there.
Go deeper
Last reviewed .