Modern JavaScript
From scratch: HTML, CSS and JavaScript applied to real interfaces, with step-by-step explanations and labs where you write only the logic.
A 10-chapter program designed for complete beginners: every concept (tags, padding, variables, events, promises…) is explained before you practice it. The DOM labs come with a ready-made HTML interface (inputs, cards, buttons, messages): your job is to write the JavaScript that selects it and transforms it. Running project: Factura Fácil.
9 chapters · 170 labs · ~44 h · US$8.99, one-time payment. The first chapter is free.
What you'll be able to do
- Connect JavaScript to HTML and CSS through the DOM.
- Respond to events and validate forms without reloading the page.
- Consume APIs with fetch and handle asynchrony with async/await.
- Build basic components with React.
- Publish and present a complete project.
Syllabus
Chapter 1 · HTML, CSS and Git (free)
HTML structure, responsive CSS with Flexbox and Grid, and version control with Git. Your first project.
- Lesson: What is a web page? (10 min)
- Lesson: HTML from scratch: tags, attributes and structure (25 min)
- Lab: Fill in: the link and the image (5 min)
- Lab: Fill in: the missing attributes (5 min)
- Lab: Put in order: a list of services (5 min)
- Lab: Navigation bar with three links (10 min)
- Quiz: Check: HTML (5 min)
- Lesson: CSS from scratch: rules, selectors, colors and text (25 min)
- Lab: Fill in: your first CSS rule (5 min)
- Lab: Card with a shadow (12 min)
- Lab: Styled heading (10 min)
- Lesson: The box model: padding, border and margin (20 min)
- Lab: Fill in: the box model (6 min)
- Lab: Box with padding, border and margin (12 min)
- Lesson: Flexbox and Grid step by step (25 min)
- Lab: Fill in: centering with Flexbox (6 min)
- Lab: Fill in: three columns with Grid (6 min)
- Lab: Business card with Flexbox (20 min)
- Lab: Responsive gallery with Grid (15 min)
- Lesson: Git and GitHub from scratch (20 min)
- Lab: Price table (12 min)
- Lab: Contact form (12 min)
- Quiz: Check: CSS and Git (5 min)
- Link: Git and GitHub: getting started guide (5 min)
- Lesson: Course glossary (5 min)
- Quiz: Quiz · HTML, CSS and Git (10 min)
Chapters 2-3 · JavaScript fundamentals (in the full course)
Variables, types, conversions, operators, template literals, conditionals and functions. The two units were covered together.
- Lesson: What is JavaScript and where do you write it? (15 min)
- Lesson: Variables and data types (20 min)
- Lab: Fill in: const or let (6 min)
- Lab: Personalized greeting (8 min)
- Lesson: Type conversions (15 min)
- Lab: Build the line: from text to number (5 min)
- Lab: From text to number (8 min)
- Lesson: Operators and expressions (15 min)
- Lab: Purchase subtotal (8 min)
- Lesson: Conditionals: making decisions (15 min)
- Lab: Put in order: did they pass? (6 min)
- Quiz: Check: variables and types (5 min)
- Lab: Old enough (10 min)
- Lesson: Functions: reusing logic (20 min)
- Lab: Fill in: an arrow function (5 min)
- Lab: Discount function (12 min)
- Lab: Classify the temperature (8 min)
- Lab: Invoice summary with a template literal (8 min)
- Lab: Stock label (8 min)
- Lesson: Arrays and objects: storing several values (20 min)
- Lab: Fill in: the message with a template literal (5 min)
- Lab: Fill in: discounted prices (6 min)
- Quiz: Check: functions and arrays (5 min)
- Lab: Add up the prices in an array (8 min)
- Lab: A list from an array (10 min)
- Lab: A card from an object (10 min)
- Quiz: Quiz · JavaScript fundamentals (10 min)
Chapter 4 · DOM (in the full course)
querySelector(), textContent, attributes, classList and the visible Factura Fácil quote.
- Lesson: What is the DOM? (12 min)
- Lesson: Selecting elements (15 min)
- Lab: Fill in: find the title (5 min)
- Lab: Fill in: color every title blue (6 min)
- Lesson: Read and modify: text, values, attributes, classes and new elements (25 min)
- Lab: Fill in: read what's in the box (5 min)
- Quiz: Check: the DOM (5 min)
- Lab: Fill in: add an item to the list (6 min)
- Lab: Fill in: turn on dark mode (5 min)
- Lab: Fill in: change the image (5 min)
- Lab: Build the line: create an element (5 min)
- Lab: Put in order: render the list from an array (6 min)
- Quiz: Check: creating and modifying elements (5 min)
- Lab: Change the title (5 min)
- Lab: Dynamic image (6 min)
- Lab: Safe external link (6 min)
- Lab: Dark mode (5 min)
- Lab: Service list from an array (12 min)
- Lab: Product cards (15 min)
- Lab: Character counter (5 min)
- Lab: Completed tasks (10 min)
- Lab: Add up the price column (12 min)
- Lab: Highlight the expensive services (12 min)
- Lab: Visible quote · Factura Fácil (20 min)
- Quiz: Quiz · DOM (10 min)
Chapter 5 · Events and forms (in the full course)
addEventListener(), clicks, form events, preventDefault() and validation. Includes the first midterm.
- Lesson: Events from scratch (20 min)
- Lab: Fill in: make the button respond (6 min)
- Lab: Build the line: listen for the click (6 min)
- Lab: Fill in: count while typing (6 min)
- Lab: Fill in: the total when choosing a quantity (6 min)
- Lab: Fill in: one listener for all the buttons (7 min)
- Quiz: Check: events (5 min)
- Lesson: Forms: submit without reloading and validate (20 min)
- Lab: Fill in: keep the form from reloading (6 min)
- Lab: Fill in: read what was typed (6 min)
- Lab: Put in order: submit without reloading (6 min)
- Quiz: Check: forms (5 min)
- Lab: Button that greets (8 min)
- Lab: Validate that nothing is missing (15 min)
- Lab: Character counter with a warning (15 min)
- Lab: Counter with buttons (8 min)
- Lab: Show or hide the password (8 min)
- Lab: Submit without reloading (10 min)
- Lab: Filter the list as you type (15 min)
- Lab: Button that locks when submitting (12 min)
- Lab: Total based on the quantity (12 min)
- Lab: Validate an email (10 min)
- Lab: Real-time total (8 min)
- Lab: Factura Fácil: calculate on click (15 min)
- Lab: Shopping list (12 min)
- Exam: First midterm · Chapters 1-5 (45 min)
Chapter 6 · Asynchronous JavaScript (in the full course)
Timers, promises, async/await and error handling applied to events and forms: buttons that wait, submissions with validation, searches with debounce and several requests at once. Review Chapter 5 as you go.
- Lesson: Synchronous and asynchronous: why asynchrony exists (15 min)
- Lab: In what order does it print? (6 min)
- Lesson: Timers: setTimeout, setInterval and how to stop them (15 min)
- Lab: Fill in: do something later (5 min)
- Lab: Fill in: repeat and stop (6 min)
- Lab: A notice that disappears (12 min)
- Lab: Countdown with start and stop (15 min)
- Lesson: Promises (18 min)
- Lab: Fill in: make a promise (7 min)
- Lab: Put in order: chaining with then (6 min)
- Quiz: Check: promises (5 min)
- Lab: Promise with a delay (8 min)
- Lab: Chaining with then (8 min)
- Lesson: async/await and error handling (20 min)
- Lab: Fill in: wait for the result (6 min)
- Quiz: Check: asynchrony (5 min)
- Lab: Build the line: wait for the data (5 min)
- Lab: Fill in: no matter what (6 min)
- Lab: async/await with try/catch (10 min)
- Lab: Loading… (10 min)
- Lab: A visible error (10 min)
- Lesson: Events that wait: buttons, states and delegation (18 min)
- Lab: Save without double clicks (12 min)
- Lab: Favorites with event delegation (15 min)
- Lab: Municipalities by province (15 min)
- Lesson: Asynchronous forms: validate, submit and respond (20 min)
- Lab: Sign-up with validation and a server (20 min)
- Lesson: Search as you type: input and debounce (15 min)
- Lab: Search box with a wait (debounce) (15 min)
- Lesson: Several promises at once: all, allSettled, race and retries (18 min)
- Lab: Fill in: request three things at once (7 min)
- Lab: Several promises with Promise.all (12 min)
- Lab: Dashboard with Promise.allSettled (15 min)
- Lab: Time limit with Promise.race (10 min)
- Lab: Retry until it works (10 min)
- Lab: Factura Fácil: saving the quote (25 min)
- Quiz: Quiz · Asynchronous (20 min)
Chapter 7 · REST APIs (in the full course)
fetch(), JSON, consuming data and rendering cards or lists.
- Lesson: What is a REST API? (15 min)
- Lesson: Errors and status codes: 200, 404 and 500 (18 min)
- Lab: Fill in: fetch the products (6 min)
- Lab: Build the line: request and wait (5 min)
- Lab: Count the products in the catalog (12 min)
- Lesson: fetch step by step (20 min)
- Lab: Put in order: the steps of a call (7 min)
- Lab: Fill in: warn when it doesn't exist (6 min)
- Quiz: Check: fetch (5 min)
- Lab: The most expensive product (15 min)
- Lab: Search with a not-found notice (15 min)
- Lab: Show “Loading…” and remove it (12 min)
- Lab: Consume an API (15 min)
- Lesson: Sending data to an API: POST, PUT and DELETE (18 min)
- Lab: Fill in: just the names in the catalog (6 min)
- Lab: Only the cheap products (12 min)
- Lab: Fill in: place an order (7 min)
- Lab: Fill in: survive a network failure (6 min)
- Lab: Catalog with a total (15 min)
- Lab: User 1's profile (12 min)
- Quiz: Check: REST (5 min)
- Lab: User cards (15 min)
- Lab: Find a user by id (15 min)
- Lab: Loading status (15 min)
- Quiz: Quiz · REST APIs (8 min)
Chapter 8 · React (in the full course)
Components, JSX, props and basic state.
- Lesson: React: why it exists and how to think in it (25 min)
- Lesson: JSX: HTML inside JavaScript (18 min)
- Lab: Fill in: your component says hello (6 min)
- Lab: Put in order: the parts of a component (6 min)
- Lab: Fill in: passing data with props (6 min)
- Lab: Product card with props (15 min)
- Quiz: Check: components and props (5 min)
- Lab: Your first component (15 min)
- Lab: Fill in: a list with map (7 min)
- Lab: Task list with map (15 min)
- Lab: Product list from an array of objects (15 min)
- Lab: List with props (12 min)
- Lesson: State and events in React: useState step by step (20 min)
- Lab: Build the line: declaring state (6 min)
- Lab: Fill in: the counter that actually changes (7 min)
- Lab: Counter with add and subtract (15 min)
- Lab: Show and hide the details (15 min)
- Lab: Counter with useState (15 min)
- Lab: Fill in: type and see it instantly (8 min)
- Lab: Fill in: show it only if it's available (7 min)
- Lab: Controlled field with a counter (15 min)
- Lab: Filtering the list with state (18 min)
- Lab: Adding tasks with React (20 min)
- Quiz: Check: state (5 min)
- Quiz: Quiz · React (8 min)
Chapter 9 · Browser APIs (in the full course)
Local Storage, geolocation, Canvas, and media. Includes the second midterm.
- Lesson: Browser APIs: storage, location, drawing, and media (25 min)
- Lesson: Saving data in the browser: localStorage step by step (18 min)
- Lab: Fill in: save and read back the name (5 min)
- Lab: Build the line: save the theme (5 min)
- Lab: Fill in: save a list (6 min)
- Lab: Fill in: a default value (6 min)
- Lab: Put in order: remember the chosen theme (7 min)
- Quiz: Check: storage (5 min)
- Lab: A to-do list that doesn't get lost (18 min)
- Lab: Visit counter (10 min)
- Lab: Save the theme (8 min)
- Lesson: Dates, currencies, and links that carry data (16 min)
- Lab: Fill in: a price in Dominican pesos (6 min)
- Lab: Fill in: read the link's data (5 min)
- Lab: Prices in Dominican format (12 min)
- Lab: Show the link's category (12 min)
- Lab: Remember the name (8 min)
- Lab: Geolocation (10 min)
- Lab: Drawing on Canvas (10 min)
- Lab: Fill in: draw a rectangle (6 min)
- Lab: Bar chart on a canvas (18 min)
- Quiz: Check: browser APIs (5 min)
- Lab: Audio control (10 min)
- Lab: Player with status (12 min)
- Exam: Second midterm · Chapters 6-9 (45 min)
Chapter 10 · Wrap-up and publishing (in the full course)
Accessibility, good practices, GitHub, deployment and your final project presentation.
- Lesson: Accessibility and good practices (20 min)
- Lesson: Semantic HTML: choosing the right tag (18 min)
- Lab: Fill in: the tags that mean something (5 min)
- Lab: Fill in: headings in order (5 min)
- Lab: Put in order: the page structure (6 min)
- Lab: Fill in: the label and its field (5 min)
- Lab: Fill in: what a screen reader hears (5 min)
- Lab: Build the line: naming the menu button (5 min)
- Quiz: Check: accessibility (5 min)
- Lab: Basic accessibility (8 min)
- Lab: Fill in: a menu that says whether it is open (7 min)
- Lab: An accessible form from start to finish (16 min)
- Lab: A table that reads well (14 min)
- Lab: Keyboard-accessible menu (16 min)
- Lesson: Publishing with GitHub Pages (15 min)
- Lesson: Fast to load, easy to find (16 min)
- Lab: Fill in: the language and the description (5 min)
- Lab: Fill in: an image that doesn't slow the page down (5 min)
- Lab: Metadata for sharing the project (12 min)
- Lab: The home page, well structured (18 min)
- Lab: Light and dark mode that is remembered (18 min)
- Quiz: Check: performance and publishing (5 min)
- Link: GitHub Pages: official documentation (5 min)
- Lesson: Final project presentation (10 min)
- Quiz: Quiz · Wrap-up and publishing (8 min)
Before you start
- Eagerness to type: every chapter has several hands-on challenges.
- A modern browser (Chrome, Edge or Firefox).
Try the first lesson for free, no account needed
Also in: Español