Learn React in 30 Days: A Comprehensive Course

Learn React in 30 Days: A Comprehensive Course

Verified Sources
Jun 15, 2026

Learn React in 30 Days: From Zero to Production

React is the world's most popular JavaScript library for building user interfaces, maintained by Meta (formerly Facebook). With over 23 million weekly downloads on npm and powering applications from Netflix to Airbnb, React has become an essential skill for modern web developers. This 30-day immersive course transforms beginners into confident React developers through a structured, project-driven curriculum.

React uses a declarative paradigm, making it fundamentally different from traditional DOM manipulation with vanilla JavaScript or jQuery. Instead of imperatively writing step-by-step instructions to update the page, you declare the desired UI state, and React efficiently computes the minimal set of DOM changes needed.

The React ecosystem has evolved dramatically since its introduction in 2013. Modern React revolves around functional components with Hooks (introduced in React 16.8), JSX, and a rich ecosystem of tools including Vite, Next.js, Redux Toolkit, and React Query. In 2024 and beyond, the recommended way to build React applications uses Vite as the build tool (replacing the now-deprecated Create React App), with React 19 bringing server components, actions, and improved performance.

Footnotes

  1. How To Learn React In 2024 - React Roadmap - PedroTech's comprehensive React roadmap for 2024 covering fundamentals to ecosystem tools.

  2. A Definitive Guide to React Architecture Patterns - eTatvaSoft's guide on React architecture patterns and best practices since React's 2013 introduction.

  3. The Most Popular Build Tools for React Developers in 2024 - Telerik article covering Vite, Turbopack, Rollup, and other modern React build tools.

React 19 Full Course 2025 – Build an App and Master React in 2 Hours

The 30-Day Roadmap at a Glance

This course is organized into four progressive phases, each building on the last. The repository 30 Days of React by Asabeneh provides an excellent companion structure covering 30 distinct topics from setup through advanced patterns to final projects.

PhaseDaysFocusKey Deliverable
Phase 11–7FoundationsJavaScript refresher, JSX, Components, Props
Phase 28–14Core ReactState, Events, Forms, Conditional Rendering, Lists & Keys
Phase 315–22Hooks & PatternsuseEffect, useReducer, useRef, Custom Hooks, Context API
Phase 423–30Ecosystem & ProjectsRouting, Data Fetching, Redux, Testing, Capstone Project

Each day requires approximately 1.5–3 hours of focused study combining theory, coding exercises, and mini-projects. By Day 30, you will have built multiple real applications and possess the skills to confidently develop production-grade React apps.

Footnotes

  1. 30-Days-Of-React by Asabeneh - A step-by-step 30-day React challenge covering setup through advanced hooks and projects.

30-Day React Learning Journey

JavaScript Refresher & Setup

Day 1

Review ES6+ features (arrow functions, destructuring, spread/rest, modules, promises). Install Node.js, configure VS Code, and create your first Vite + React project."

JSX & React Elements

Day 2–3

Learn JSX syntax, expressions, conditional rendering in JSX, JSX vs HTML differences, and the Virtual DOM reconciliation process."

Components & Props

Day 4–5

Build functional components, understand props, prop types, default props, children prop, and component composition patterns."

Lists, Keys & Mini Project

Day 6–7

Render lists with .map(), understand why keys matter, build a Todo List mini-app as your first complete React project."

State Management with useState

Day 8–9

Master the useState hook: state updates, batching, prevState callback pattern, and lifting state up to parent components."

Events & Forms

Day 10–11

Handle onClick, onChange, onSubmit events. Build controlled components, form validation, and multi-field form patterns."

Conditional Rendering & Styling

Day 12–13

Implement conditional UI with ternary operators, &&, and enum patterns. Apply CSS Modules, inline styles, and styled-components."

Week 2 Project

Day 14

Build a Task Manager app combining state, events, forms, conditional rendering, and styling."

Side Effects & useEffect

Day 15–17

Master useEffect: mount/update/unmount lifecycle, dependency arrays, cleanup functions, and common pitfalls (infinite loops, stale closures)."

useReducer & useRef

Day 18–19

Manage complex state with useReducer, access DOM elements with useRef, understand when to choose useReducer over useState."

Custom Hooks

Day 20–21

Extract reusable logic into custom hooks. Build useFetch, useLocalStorage, useDebounce, and understand hook composition patterns."

Context API

Day 22

Implement global state with React.createContext, Provider/consumer pattern, and understand when Context is appropriate vs Redux."

React Router & Navigation

Day 23–24

Set up React Router v6+, define routes, nested routes, dynamic parameters, programmatic navigation, and route guards."

Data Fetching & Async Patterns

Day 25–26

Fetch data from REST APIs, integrate React Query (TanStack Query) for caching and synchronization, handle loading/error states."

Redux Toolkit & Advanced State

Day 27–28

Set up Redux Toolkit with createSlice, configure store, write reducers and actions, integrate RTK Query for API calls."

Testing & Optimization

Day 29

Write unit tests with Vitest/Testing Library, implement React.memo, useMemo, useCallback for performance optimization."

Capstone Project & Review

Day 30

Build a full-stack capable React application incorporating routing, global state, API integration, testing, and deployment."

Phase 1: Foundations (Days 1–7)

Day 1: JavaScript Refresher & Environment Setup

Before touching React, ensure your JavaScript fundamentals are solid. React heavily relies on ES6+ features, and gaps in JavaScript knowledge will become painful obstacles. The key prerequisites include:

  • Arrow functions: const greet = (name) => \Hello, ${name}!``
  • Destructuring: const { name, age } = person; and const [first, second] = array;
  • Spread/Rest operators: const newObj = { ...oldObj, updated: true };
  • Template literals: `Result: ${value}`
  • Array methods: .map(), .filter(), .reduce(), .find(), .some()
  • Promises & async/await: Handling asynchronous operations
  • ES Modules: import and export syntax

For your development environment, install Node.js (v18+ LTS), VS Code with the ES7+ React/Redux/React Native snippets extension, and create your first React project using Vite:

1npm create vite@latest my-react-app -- --template react 2cd my-react-app 3npm install 4npm run dev

Vite has become the standard build tool for new React projects in 2024, replacing the deprecated Create React App. It offers significantly faster hot module replacement (HMR) and optimized builds using Rollup.

Days 2–3: JSX & the Virtual DOM

JSX is not a template language — it is syntactic sugar for React.createElement() calls. Understanding this distinction is crucial:

1// JSX syntax 2const element = <h1 className="title">Hello, React!</h1>; 3 4// Compiles to: 5const element = React.createElement('h1', { className: 'title' }, 'Hello, React!');

Key JSX rules:

  • You must return a single parent element (or use a Fragment <>...</>)
  • All tags must be properly closed (<img />, <br />)
  • Use className instead of class, htmlFor instead of for
  • JavaScript expressions go inside { } braces
  • Conditional rendering uses ternary operators or && inside JSX

The Virtual DOM is React's secret to performance. When state changes, React creates a new Virtual DOM tree, diffs it against the previous one, and computes the minimal set of real DOM changes needed — a process called reconciliation.

Footnotes

  1. 30-Days-Of-React by Asabeneh - A step-by-step 30-day React challenge covering setup through advanced hooks and projects.

  2. 5 React Architecture Best Practices for 2024 - SitePoint's guide on scalable project structures and component organization.

Common JSX Pitfall

JSX does NOT support if/else statements directly inside { }. Use ternary operators (condition ? a : b) or the logical AND pattern (condition && element). For complex conditions, compute the value in a variable above the return statement, then reference it in JSX.

Pro Tip: React DevTools

Install the React Developer Tools browser extension (Chrome/Firefox). It lets you inspect the component tree, view props and state in real-time, and profile rendering performance. It is indispensable for debugging and understanding how React renders your application.

Building Your First React Component

  1. 1
    Step 1

    In src/App.jsx, define a function that returns JSX. React functional components are plain JavaScript functions that return React elements:

    1function Greeting() { 2 return <h1>Hello, World!</h1>; 3}
  2. 2
    Step 2

    Make the component dynamic by accepting props — the mechanism for passing data from parent to child:

    1function Greeting({ name }) { 2 return <h1>Hello, {name}!</h1>; 3}
  3. 3
    Step 3

    Add interactivity using the useState hook. State represents data that changes over time and triggers re-renders:

    1import { useState } from 'react'; 2 3function Counter() { 4 const [count, setCount] = useState(0); 5 return ( 6 <div> 7 <p>Count: {count}</p> 8 <button onClick={() => setCount(c => c + 1)}>+1</button> 9 </div> 10 ); 11}
  4. 4
    Step 4

    Build complex UIs by nesting components. This is the foundation of React's compositional model:

    1function App() { 2 return ( 3 <div> 4 <Greeting name="Alice" /> 5 <Greeting name="Bob" /> 6 <Counter /> 7 </div> 8 ); 9}
  5. 5
    Step 5

    In src/main.jsx, mount the root component using createRoot:

    1import { StrictMode } from 'react'; 2import { createRoot } from 'react-dom/client'; 3import App from './App'; 4 5createRoot(document.getElementById('root')).render( 6 <StrictMode><App /></StrictMode> 7);

Phase 2: Core React (Days 8–14)

Days 8–9: Mastering State with useState

State is the heart of React's reactivity system. The useState hook provides a way to declare reactive variables in functional components:

1const [state, setState] = useState(initialValue);

Critical concepts to master:

  1. State updates are asynchronous — React batches updates for performance. You cannot read the updated value immediately after calling setState.

  2. Use the functional updater form when the new state depends on the previous state:

1// ❌ Can cause stale state bugs in rapid updates 2setCount(count + 1); 3 4// ✅ Always uses the latest state value 5setCount(prevCount => prevCount + 1);
  1. State is isolated per component instance — each component has its own independent state.

  2. Lifting state up — when two sibling components need to share data, move the state to their nearest common parent and pass it down via props.

Component Re-render Trigger=f(state change,props change,parent re-render)\text{Component Re-render Trigger} = f(\text{state change}, \text{props change}, \text{parent re-render})

Days 10–11: Event Handling & Forms

React uses synthetic events to ensure consistent event handling across all browsers. Key patterns:

1// Event handler inline 2<button onClick={() => handleClick(id)}>Delete</button> 3 4// Event handler reference 5<button onClick={handleClick}>Click Me</button> 6 7// Accessing event object 8<input onChange={(e) => setValue(e.target.value)} />

Controlled components are the React way to handle forms. The component's state becomes the "single source of truth":

1function Form() { 2 const [email, setEmail] = useState(''); 3 const [password, setPassword] = useState(''); 4 5 const handleSubmit = (e) => { 6 e.preventDefault(); 7 console.log({ email, password }); 8 }; 9 10 return ( 11 <form onSubmit={handleSubmit}> 12 <input value={email} onChange={(e) => setEmail(e.target.value)} /> 13 <input type="password" value={password} onChange={(e) => setPassword(e.target.value)} /> 14 <button type="submit">Submit</button> 15 </form> 16 ); 17}

Days 12–13: Conditional Rendering & Styling

React offers multiple patterns for rendering different UI based on conditions:

PatternSyntaxBest For
Ternary{condition ? <A /> : <B />}Either/or rendering
Logical AND{condition && <A />}Show/hide single element
Early returnif (!data) return <Loading />Guard clauses
Enum/switch{statusMap[status]}Multiple mutually exclusive states
IIFE{(() => { if... })()}Complex multi-branch logic

For styling, modern React supports CSS Modules (scoped class names), inline styles (for dynamic styles), and CSS-in-JS libraries like styled-components or emotion. CSS Modules are often the simplest and most performant choice for new projects.

Day 14: Week 2 Project — Task Manager

Build a Task Manager application that integrates everything from Phase 2:

  • Add, delete, and toggle tasks
  • Filter by status (all/active/completed)
  • Controlled form inputs with validation
  • Conditional rendering for empty states and filters
  • CSS Modules for scoped styling

Footnotes

  1. State Management in React – Hooks, Context API and Redux - GeeksforGeeks comprehensive guide on useState, useReducer, and Context API.

30-Day Course: Hours Per Week by Activity

Recommended time allocation across the four weeks

Phase 3: Hooks & Patterns (Days 15–22)

Days 15–17: Side Effects & useEffect

useEffect is the second most important hook after useState. It handles all "side effects" — operations that reach outside the React render cycle:

1useEffect(() => { 2 // Effect: runs after render 3 const subscription = subscribe(); 4 5 // Cleanup: runs before next effect & on unmount 6 return () => subscription.unsubscribe(); 7}, [dependency]); // Only re-run when dependency changes

The dependency array is the most critical (and error-prone) aspect of useEffect:

Dependency ArrayBehavior
No arrayRuns after every render — rarely what you want
[] (empty array)Runs once on mount — for initial setup
[dep1, dep2]Runs on mount + whenever dep1 or dep2 change

Common pitfalls and how to avoid them:

  1. Infinite loop: Calling setState inside an effect with no dependency array
  2. Stale closure: Referencing a state variable in an effect without including it in the dependency array
  3. Missing cleanup: Forgetting to return a cleanup function for subscriptions, timers, and event listeners
  4. Over-fetching: Fetching data on every render instead of only on mount

Infinite Loop Trap

If your useEffect calls a state setter and the changed state is referenced in the same effect without a proper dependency array, you create an infinite render loop: render → effect → setState → re-render → effect → setState → .... Always verify your dependency array. Use eslint-plugin-react-hooks to catch these errors automatically.

Days 18–19: useReducer & useRef

useReducer is preferred when state transitions are complex or when the next state depends heavily on the previous one:

1const initialState = { count: 0, step: 1 }; 2 3function reducer(state, action) { 4 switch (action.type) { 5 case 'increment': return { ...state, count: state.count + state.step }; 6 case 'decrement': return { ...state, count: state.count - state.step }; 7 case 'setStep': return { ...state, step: action.payload }; 8 case 'reset': return initialState; 9 default: throw new Error(`Unknown action: ${action.type}`); 10 } 11} 12 13function Counter() { 14 const [state, dispatch] = useReducer(reducer, initialState); 15 return ( 16 <div> 17 <p>Count: {state.count}</p> 18 <button onClick={() => dispatch({ type: 'increment' })}>+</button> 19 <button onClick={() => dispatch({ type: 'decrement' })}>-</button> 20 </div> 21 ); 22}

useRef serves two primary purposes:

  • Accessing DOM elements: const inputRef = useRef(null); <input ref={inputRef} />
  • Storing mutable values that persist across renders but should NOT trigger re-renders (e.g., previous values, timer IDs, measurement values)

Days 20–21: Custom Hooks

Custom hooks are the primary mechanism for code reuse in React. The convention is to name them starting with use:

1// Custom hook: fetches data from an API 2function useFetch(url) { 3 const [data, setData] = useState(null); 4 const [loading, setLoading] = useState(true); 5 const [error, setError] = useState(null); 6 7 useEffect(() => { 8 const controller = new AbortController(); 9 setLoading(true); 10 fetch(url, { signal: controller.signal }) 11 .then(res => { 12 if (!res.ok) throw new Error(`HTTP ${res.status}`); 13 return res.json(); 14 }) 15 .then(setData) 16 .catch(err => { 17 if (err.name !== 'AbortError') setError(err.message); 18 }) 19 .finally(() => setLoading(false)); 20 21 return () => controller.abort(); 22 }, [url]); 23 24 return { data, loading, error }; 25} 26 27// Usage 28function UserProfile({ userId }) { 29 const { data, loading, error } = useFetch(`/api/users/${userId}`); 30 if (loading) return <Spinner />; 31 if (error) return <Error message={error} />; 32 return <UserCard user={data} />; 33}

Day 22: Context API

The Context API solves "prop drilling" — the problem of passing props through many intermediate components that don't use them:

1// 1. Create context 2const ThemeContext = createContext('light'); 3 4// 2. Provide value at tree root 5function App() { 6 return ( 7 <ThemeContext.Provider value="dark"> 8 <Dashboard /> 9 </ThemeContext.Provider> 10 ); 11} 12 13// 3. Consume in any descendant 14function ThemedButton() { 15 const theme = useContext(ThemeContext); 16 return <button className={`btn-${theme}`}>Click Me</button>; 17}

When to use Context vs Redux: Use Context for "low-frequency" updates (theme, auth, locale). For high-frequency updates or complex state interactions, use Redux Toolkit or Zustand, as Context triggers re-renders on all consumers when the value changes.

Footnotes

  1. State Management in React – Hooks, Context API and Redux - GeeksforGeeks comprehensive guide on useState, useReducer, and Context API.

  2. Why You Should Use Redux in 2024 - Mark Erikson's talk on Redux evolution, RTK, and when Redux vs alternatives are appropriate.

1// Simple, local state 2const [isOpen, setIsOpen] = useState(false); 3 4Best for: 5- Simple values (booleans, strings, numbers) 6- Independent state slices 7- UI toggles and form inputs 8 9Avoid when: 10- State transitions are complex 11- Next state depends heavily on previous 12- Multiple related values must update together

Phase 4: Ecosystem & Projects (Days 23–30)

Days 23–24: React Router

React Router v6+ provides a declarative, component-based routing system:

1import { BrowserRouter, Routes, Route, Link, useParams } from 'react-router-dom'; 2 3function App() { 4 return ( 5 <BrowserRouter> 6 <nav> 7 <Link to="/">Home</Link> 8 <Link to="/about">About</Link> 9 <Link to="/users/42">Profile</Link> 10 </nav> 11 <Routes> 12 <Route path="/" element={<Home />} /> 13 <Route path="/about" element={<About />} /> 14 <Route path="/users/:id" element={<UserProfile />} /> 15 <Route path="*" element={<NotFound />} /> 16 </Routes> 17 </BrowserRouter> 18 ); 19} 20 21function UserProfile() { 22 const { id } = useParams(); 23 return <h1>User {id}</h1>; 24}

Key React Router v6 concepts:

  • <Routes> and <Route> for declarative route definition
  • useParams() for accessing URL parameters
  • useNavigate() for programmatic navigation
  • Nested routes with <Outlet /> for layout patterns
  • <NavLink> for active link styling

Days 25–26: Data Fetching & React Query

While you can fetch data with useEffect, the modern approach uses TanStack Query (React Query), which provides automatic caching, background refetching, pagination, and optimistic updates:

1import { useQuery, QueryClient, QueryClientProvider } from '@tanstack/react-query'; 2 3const queryClient = new QueryClient(); 4 5function UsersList() { 6 const { data, isLoading, error, isError } = useQuery({ 7 queryKey: ['users'], 8 queryFn: () => fetch('/api/users').then(res => res.json()), 9 staleTime: 5 * 60 * 1000, // 5 minutes 10 }); 11 12 if (isLoading) return <Spinner />; 13 if (isError) return <Error message={error.message} />; 14 return <UserList users={data} />; 15}

Why React Query over useEffect + useState?

  • Automatic caching and deduplication of requests
  • Background refetching to keep data fresh
  • Built-in loading, error, and stale states
  • Pagination and infinite scroll support
  • Optimistic updates for instant UI feedback
  • Offline support and retry logic

Days 27–28: Redux Toolkit

Redux Toolkit (RTK) has resolved the historical boilerplate problems of Redux with createSlice, createAsyncThunk, and createApi:

1import { createSlice, configureStore, createAsyncThunk } from '@reduxjs/toolkit'; 2 3// Async thunk 4const fetchUsers = createAsyncThunk('users/fetch', async () => { 5 const res = await fetch('/api/users'); 6 return res.json(); 7}); 8 9// Slice with reducers 10const usersSlice = createSlice({ 11 name: 'users', 12 initialState: { list: [], status: 'idle', error: null }, 13 reducers: { 14 addUser(state, action) { state.list.push(action.payload); }, 15 }, 16 extraReducers: (builder) => { 17 builder 18 .addCase(fetchUsers.pending, (state) => { state.status = 'loading'; }) 19 .addCase(fetchUsers.fulfilled, (state, action) => { 20 state.status = 'succeeded'; 21 state.list = action.payload; 22 }) 23 .addCase(fetchUsers.rejected, (state, action) => { 24 state.status = 'failed'; 25 state.error = action.error.message; 26 }); 27 }, 28}); 29 30// Store 31const store = configureStore({ reducer: { users: usersSlice.reducer } });

Day 29: Testing & Performance Optimization

Testing Stack: Use Vitest (test runner) + React Testing Library + jsdom for unit and integration tests:

1// Counter.test.jsx 2import { render, screen, fireEvent } from '@testing-library/react'; 3import { describe, it, expect } from 'vitest'; 4import Counter from './Counter'; 5 6describe('Counter', () => { 7 it('increments count on button click', () => { 8 render(<Counter />); 9 const button = screen.getByRole('button', { name: /\+1/i }); 10 fireEvent.click(button); 11 expect(screen.getByText('Count: 1')).toBeInTheDocument(); 12 }); 13});

Performance optimization techniques:

TechniqueHook/APIPurpose
React.memoWrapper functionPrevent re-renders when props unchanged
useMemoHookMemoize expensive computations
useCallbackHookStable function references for child props
Code splittingReact.lazy + SuspenseLoad components on demand
Virtualizationreact-windowRender only visible list items

Day 30: Capstone Project

Build a full-featured Project Management Dashboard incorporating:

  • React Router for multi-page navigation
  • Redux Toolkit for global state
  • React Query for API data fetching
  • Custom hooks for reusable logic
  • Form handling with validation
  • Responsive CSS Modules styling
  • Unit testing with Vitest
  • Deploy to Vercel or Netlify

Footnotes

  1. Why You Should Use Redux in 2024 - Mark Erikson's talk on Redux evolution, RTK, and when Redux vs alternatives are appropriate. 2

Project Setup & Architecture Best Practices

  1. 1
    Step 1

    Create a new React project using Vite for fast development builds:

    1npm create vite@latest my-app -- --template react 2cd my-app && npm install

    Vite provides instant server start, lightning-fast HMR, and optimized production builds using Rollup.

  2. 2
    Step 2

    Implement a scalable folder structure following community best practices:

    src/
    ├── components/     # Reusable UI components
    ├── pages/          # Route-level components
    ├── hooks/          # Custom hooks
    ├── context/        # React Context providers
    ├── services/       # API calls and external integrations
    ├── utils/          # Helper functions and utilities
    ├── assets/         # Images, fonts, global styles
    └── App.jsx         # Root component

    Footnotes

    1. Roadmap for React JS 2024 - DEV Community roadmap covering fundamentals, advanced topics, and ecosystem tools.

  3. 3
    Step 3

    In vite.config.js, set up path aliases to avoid messy relative imports:

    1import { defineConfig } from 'vite'; 2import path from 'path'; 3 4export default defineConfig({ 5 resolve: { 6 alias: { '@': path.resolve(__dirname, './src') }, 7 }, 8});

    Now use import Component from '@/components/Component' instead of ../../../components/Component.

  4. 4
    Step 4

    Add the core libraries you'll need throughout the course:

    1npm install react-router-dom @reduxjs/toolkit react-redux 2npm install @tanstack/react-query axios 3npm install -D vitest @testing-library/react @testing-library/jest-dom jsdom
  5. 5
    Step 5

    Configure ESLint with React hooks plugin to catch bugs early:

    1npm install -D eslint-plugin-react-hooks eslint-config-prettier

    Enable the react-hooks/exhaustive-deps rule — it will save you from countless useEffect dependency bugs.

  6. 6
    Step 6

    Initialize version control and push to GitHub. This establishes the habit of committing frequently as you progress through the 30 days:

    1git init && git add . && git commit -m 'Initial Vite + React setup' 2gh repo create --source=. --public --push

Skill Proficiency by Day 30

Expected skill levels after completing the full 30-day program

Common Questions & Edge Cases

Knowledge Check

Question 1 of 5
Q1Single choice

Which hook is used to manage simple, local state in a React functional component?

Explore Related Topics

1

React Hooks in Depth

This course explains React Hooks, the functional alternative to class components, covering core hooks, usage rules, performance optimizations, and how to create custom hooks.

  • useState and useEffect replace class state and lifecycle methods; the dependency array controls when effects run.
  • Hooks must be called at the top level of React function components or custom hooks, and the ESLint plugin enforces these rules.
  • useMemo memoizes values and useCallback memoizes functions, both improving performance for expensive calculations or stable callbacks.
  • useReducer is preferred for complex state logic, following a reducer pattern similar to Redux.
  • Building a custom hook involves extracting reusable useState/useEffect logic into a function whose name starts with “use”.
2

Learn SQL in 30 Days: From Zero to Query Master

SQL (Structured Query Language) is the standard language for creating, managing, updating, and retrieving data from relational databases such as MySQL, PostgreSQL, SQL Server, and Oracle. It is widely used across industries — from software engineering to data analytics — making it one of the most in

3

Learn AWS in 60 Days: A Complete Accelerated Cloud Mastery Roadmap

A 60‑day plan to AWS, covering fundamentals, core services, architecture, serverless, IaC, projects, and certification.

  • Phases: Days 1‑10 foundations, 11‑25 core services, 26‑34 architecture, 35‑42 serverless, 43‑50 advanced/IaC, 51‑60 exam prep.
  • Hands‑on using Free Tier, IAM, VPC, and Well‑Architected Framework.
  • Key services: EC2, S3, VPC, IAM, Lambda, RDS, DynamoDB, CloudWatch, CloudFormation, Route 53.
  • Study load: 60×2.5=15060 \times 2.5 = 150 hrs, allocated across phases.
  • Exam: 65 questions (50 scored), 130 min, passing 720720, covering four architecture domains.