Lesson 1Form handling and validation (controlled vs uncontrolled, libraries: Formik, React Hook Form, VeeValidate)Put in place strong form handling and validation mechanisms. Compare controlled and uncontrolled inputs, utilise libraries such as Formik, React Hook Form, and VeeValidate, and create validation rules, error notifications, and submission processes for intricate forms.
Controlled vs uncontrolled input strategiesFormik and React Hook Form in practiceVeeValidate and Vue form patternsSynchronous and async validation rulesError messages, UX, and accessibilityLesson 2UI component libraries and accessibility practices (Tailwind, Material, Chakra, ARIA roles, keyboard navigation)Discover how to employ modern UI libraries while upholding excellent accessibility. Examine Tailwind, Material UI, and Chakra, then implement ARIA roles, focus control, and keyboard navigation to construct inclusive, ready-for-production interfaces.
Design systems with Tailwind and utility classesMaterial UI and Chakra component patternsSemantic HTML and ARIA role strategiesFocus management and keyboard navigationColor contrast, theming, and reduced motionLesson 3Choosing a frontend framework and justification (React, Vue, Svelte) and ecosystem tradeoffsAssess and justify your selection of frontend framework. Compare React, Vue, and Svelte structures, ecosystem development, performance, and learning paths to pick and support the optimal choice for various project settings.
React, Vue, and Svelte core conceptsEcosystem maturity and community supportPerformance and bundle size tradeoffsTypeScript and tooling integrationDecision frameworks for real projectsLesson 4Build, bundling, and optimization: Webpack/Vite/Rollup, code splitting, tree-shaking, asset handlingMaster contemporary build tools for efficient frontends. Compare Webpack, Vite, and Rollup, set up code splitting and tree-shaking, and refine asset management, caching, and source maps to produce swift, sustainable production packages.
Comparing Webpack, Vite, and Rollup setupsCode splitting and dynamic importsTree-shaking and dead code eliminationOptimising images, fonts, and static assetsCaching, hashes, and source map strategiesLesson 5Client-side tests: unit testing components, integration tests, testing library choices and examplesCreate a solid client-side testing plan. Understand unit testing for components, integration tests over routes and APIs, and selecting between Jest, Vitest, Cypress, and Testing Library to build dependable, easy-to-maintain test collections.
Unit testing UI components in isolationIntegration tests for flows and routingUsing Testing Library for user-centric testsChoosing Jest, Vitest, Cypress, or PlaywrightMocking APIs and handling flaky testsLesson 6Local dev and environment configuration: env vars, .env files, feature flags for frontendSet up dependable frontend environments for local and cloud configurations. Learn to manage environment variables, .env files, build-time insertion, and feature flags to securely switch features across development, staging, and production stages.
Managing .env files and build-time variablesSeparating dev, staging, and production configsRuntime configuration and environment safetyImplementing frontend feature flagsSecrets handling and configuration pitfallsLesson 7Project structure and folder conventions for single-page apps (components, pages, services, hooks)Design expandable project structures for single-page applications. Learn folder arrangements for components, pages, services, and hooks, and organise shared tools, tests, and styles to maintain large codebases easy to find and upkeep.
Organising components, pages, and layoutsServices, hooks, and data access layersShared utilities, types, and constantsStructuring tests and story filesRefactoring toward modular boundariesLesson 8API integration patterns: REST vs GraphQL clients, error handling, request retries, timeoutsImplement sturdy API integration patterns on the client side. Compare REST and GraphQL clients, configure Axios or Fetch, manage errors and retries, and design timeouts, cancellation, and normalisation for resilient data retrieval layers.
Configuring REST clients with Axios or FetchUsing GraphQL clients like Apollo or URQLGlobal error handling and user messagingRequest retries, backoff, and timeoutsCancellation, abort controllers, and cachingLesson 9Authentication on the frontend: storing tokens, refresh flows, and secure cookie approachesGrasp secure frontend authentication patterns. Compare localStorage, sessionStorage, and cookies, design refresh token processes, and implement HttpOnly cookies, CSRF protections, and logout methods that safeguard users in actual applications.
Token storage: localStorage vs cookiesImplementing refresh token flows safelyHttpOnly cookies and CSRF protectionHandling logout, revocation, and rotationAuth error handling and user feedbackLesson 10State management options and patterns (local component state, Context, Redux/Pinia/MobX, React Query)Compare state management choices for complex frontends. Explore local state, Context, Redux, Pinia, MobX, and React Query, and learn patterns for caching, normalisation, and preventing needless re-renders in big applications.
Local component state and lifting patternsContext API for cross-cutting concernsRedux, Pinia, and MobX store designServer state with React Query or SWRPerformance tuning and selector patternsLesson 11Routing and protected routes: client-side routing, route guards, lazy loadingBuild reliable client-side routing with protected paths. Learn route setup, nested routes, lazy loading, and route guards that enforce authentication and authorisation while maintaining fast and accessible navigation.
Configuring client-side routers and routesNested routes and layout hierarchiesImplementing lazy loading and code splittingAuth-based route guards and redirectsHandling 404 pages and fallback routes