OborosReading view
Module 1 of 7 · Overview

How the Web Works & HTML

What you’ll be able to do
  • Trace an HTTP request from URL to rendered page, naming DNS, methods, and status codes.
  • Write a valid, semantic HTML5 document with forms and accessible structure.
  • Explain how the browser turns HTML into the DOM tree that JavaScript manipulates.

3 lessons and a self-check quiz. Tap Next to begin.

Module 1 · Lesson 1 of 3

The request / response cycle, in depth

Every app you build rides on one exchange repeated billions of times a day: a client sends a request, a server sends a response. Understand this precisely and networking stops being magic.

What happens when you hit Enter on a URL
1
DNS lookupThe browser asks DNS to turn app.example.com into an IP address like 93.184.216.34.
2
TCP + TLSIt opens a connection to that IP and, for https, negotiates encryption (TLS).
3
HTTP requestIt sends a request: a method, a path, headers, and maybe a body.
4
Server workThe server routes the request, runs code, maybe hits a database, and builds a response.
5
HTTP responseBack comes a status code, headers, and a body (HTML, JSON, an image…).
6
RenderThe browser parses the body and paints the page — then fetches CSS, JS, images the same way.

A raw HTTP request is just text. Here is roughly what the browser sends and gets back:

http
GET /api/bookings?date=2026-08-01 HTTP/1.1
Host: api.example.com
Accept: application/json
Authorization: Bearer eyJhbGci...

--- response ---
HTTP/1.1 200 OK
Content-Type: application/json

{ "bookings": [ { "id": 1, "time": "18:00" } ] }

Top: a GET request with headers. Bottom: a 200 OK response whose body is JSON.

Why methods and status codes matterWhen you build and consume APIs, you will choose the right verb (GET to read, POST to create) and return the right code (201 Created, 404 Not Found, 401 Unauthorized). Clients — including your own frontend — branch on these. Getting them right is what makes an API predictable.
StatusMeaningYou will use it when
200 OKSuccess, body includedA read or update worked
201 CreatedNew resource madeA POST created a record
400 Bad RequestClient sent bad dataValidation failed
401 UnauthorizedNot logged inMissing/invalid token
404 Not FoundNo such resourceID doesn’t exist
500 Server ErrorYour code threwAn unhandled exception
✎ Knowledge check

A user submits a form to create an account and the server succeeds. Which status code is most correct?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (6)
HTTP
HyperText Transfer Protocol — the request/response text protocol browsers and servers speak.
DNS
Domain Name System — translates a hostname like example.com into an IP address.
status code
A 3-digit number in a response: 2xx success, 3xx redirect, 4xx client error, 5xx server error.
method
The verb of a request: GET (read), POST (create), PUT/PATCH (update), DELETE (remove).
header
Key/value metadata attached to a request or response (e.g. Content-Type).
payload / body
The actual data sent with a request or returned in a response.
Further reading & references (3)
  • MDN: An overview of HTTP — The canonical, free reference — read the "Overview" and "Messages" pages.
  • "How DNS works" (dnsimple comic) — A friendly illustrated walkthrough of name resolution.
  • httpstatuses.com — A quick lookup for every status code and when to use it.
Module 1 · Lesson 2 of 3

Writing semantic HTML

HTML is the skeleton — it describes what content is, not how it looks. A real page is a tree of nested elements. Here is a minimal but correct HTML5 document:

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bookings</title>
  </head>
  <body>
    <header><h1>Book a class</h1></header>
    <main>
      <form id="booking">
        <label>Name <input name="name" required></label>
        <label>Time
          <select name="time">
            <option>18:00</option>
            <option>19:00</option>
          </select>
        </label>
        <button type="submit">Book</button>
      </form>
    </main>
  </body>
</html>

Note the semantic tags (header, main), the

Two habits separate amateurs from pros here. First, use semantic elements (header, nav, main, section, article, footer) so the document is meaningful and accessible. Second, always label form inputs — wrap them in a <label> or use for= — so screen readers and taps work.

The div soup trapYou can build everything from <div>, and beginners do. But a page that is all divs is invisible to assistive tech and harder to style and maintain. Reach for the semantic element first; fall back to <div> only when nothing fits.
✎ Knowledge check

Why wrap an in a

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
element
A building block written with tags, e.g.

. Most have an opening and closing tag.
attribute
Extra info on an element, written as name="value" (e.g. href, id, class).
semantic HTML
Using elements for their meaning (header, nav, main, article) rather than generic
everywhere.
form
An element that collects user input and can submit it to a server.
accessibility (a11y)
Building so assistive tech (screen readers, keyboard nav) works — labels, alt text, roles.
Further reading & references (3)
  • MDN: HTML elements reference — Every element, with examples. Bookmark it.
  • web.dev "Learn HTML" — A modern, free, structured HTML course by Google.
  • WebAIM: Semantic structure — Why headings and landmarks matter for accessibility.
Module 1 · Lesson 3 of 3

From HTML to the DOM

When the browser parses your HTML, it builds the DOM: a tree of objects, one per element, that JavaScript can read and change at runtime. The HTML is the blueprint; the DOM is the living building.

The tree from the form above — tap each node
html
The root element; contains head and body.
body
Everything visible. Parent of header and main.
form#booking
An element node with id "booking" — JavaScript can grab it with document.getElementById("booking").
input / select
Leaf-ish nodes whose .value property holds what the user typed or chose.

This matters because all interactivity is DOM manipulation. Later, JavaScript will select nodes, read their .value, change their text, add/remove them, and listen for events on them. A tiny preview:

js
const form = document.getElementById("booking");
form.addEventListener("submit", (e) => {
  e.preventDefault();               // stop the full-page reload
  const name = form.name.value;     // read a field
  console.log("Booking for", name); // do something with it
});

Selecting a node, listening for an event, and reading a value — the heart of front-end code.

Performance noteEvery DOM change can trigger reflow (recalculating layout) and repaint. Changing the DOM in a tight loop is a classic performance bug. Batch changes, or build a string/fragment and insert once — a habit you’ll use constantly.
✎ Knowledge check

The DOM is best described as…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
DOM
Document Object Model — the browser’s live, in-memory tree of objects built from your HTML.
node
Any point in the DOM tree: an element, a text node, etc.
parent / child
Relationships in the tree; an element contains children and has one parent.
render tree
The DOM combined with CSS, used to actually paint pixels.
reflow / repaint
Recalculating layout (reflow) or redrawing (repaint) when the DOM or styles change.
Further reading & references (2)
  • MDN: Introduction to the DOM — How the tree is structured and traversed.
  • "What, exactly, is the DOM?" (CSS-Tricks) — A clear conceptual explainer.
Module 1 · Quiz

Module 1 quiz

Tap an answer to check it instantly. Graded scoring, the 80% gate, and saving are in the browser app.

✎ Knowledge check

1. In HTTP, which method should read data without changing anything on the server?

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. A request for a resource whose ID does not exist should return…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. DNS is responsible for…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. Which is an example of semantic HTML?

Module 2 of 7 · Overview

CSS & Responsive Layout

What you’ll be able to do
  • Target elements precisely and reason about specificity conflicts.
  • Lay out and align interfaces with Flexbox, responsive to any screen.
  • Use custom properties (variables) to build a themeable, dark-mode-ready system.

3 lessons and a self-check quiz. Tap Next to begin.

Module 2 · Lesson 1 of 3

Selectors, the box model & specificity

CSS is a set of rules: a selector plus declarations. The browser resolves conflicts using the cascade and specificity.

css
/* selector { property: value; } */
.btn { padding: 10px 16px; border-radius: 8px; }
#submit { background: #5b8cff; color: white; }
button:hover { filter: brightness(1.1); }

* { box-sizing: border-box; } /* include padding+border in width */

A class, an id, a pseudo-class (:hover), and the box-sizing reset every pro sets first.

The box model is the mental model for spacing: content is wrapped by padding, then border, then margin. By default width covers only content, which surprises everyone — so set box-sizing: border-box globally and width will include padding and border.

SelectorSpecificityWins against
tag (button)lownothing much
.classmediumtags
#idhighclasses and tags
inline stylehighestalmost everything
!importantnuclearavoid — it breaks the cascade
Specificity warsWhen a style "won’t apply," it is usually being overridden by a more specific rule, not broken. The fix is rarely !important — it’s using a consistent, low-specificity system of classes so nothing fights.
✎ Knowledge check

Rule A is "#save { color: red }" and rule B is ".btn { color: blue }" on the same element. What color wins?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
selector
A pattern that targets elements (.class, #id, tag, [attr]).
box model
Every element is a box: content + padding + border + margin.
specificity
The weight that decides which conflicting rule wins (inline > id > class > tag).
cascade
The order/importance rules by which CSS resolves conflicts.
box-sizing
border-box makes width include padding and border — almost always what you want.
Further reading & references (3)
  • MDN: CSS first steps — Structured intro to selectors and the cascade.
  • "Learn CSS" on web.dev — A thorough, modern free course.
  • Specificity Calculator (polypane) — Paste a selector, see its specificity score.
Module 2 · Lesson 2 of 3

Flexbox & responsive design

Flexbox solved a decade of layout pain. Make a container display:flex and its children lay out along a main axis you control.

css
.row {
  display: flex;
  gap: 12px;              /* space between items */
  align-items: center;    /* vertical centering (cross axis) */
  justify-content: space-between; /* spread along main axis */
}
.row > .grow { flex: 1; } /* this child takes remaining space */

display:flex + gap + align-items + justify-content covers most real layouts.

For responsive design, start mobile-first and add media queries to adjust at larger widths:

css
.grid { display: flex; flex-direction: column; gap: 12px; }
@media (min-width: 640px) {
  .grid { flex-direction: row; }  /* side-by-side on tablets+ */
}

Base = stacked (mobile). At ≥640px, switch to a row. This is the mobile-first pattern.

When to use which layout tool
Flexbox
One dimension — a row or a column. Navbars, toolbars, centering, spreading items. Your everyday tool.
Grid
Two dimensions — rows and columns together. Page layouts, card galleries, dashboards. Learn after Flexbox.
Flow
Normal document flow (no display change) is fine for text-heavy content. Don’t over-engineer paragraphs.
✎ Knowledge check

To center items vertically inside a flex row, you use…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
Flexbox
A 1-dimensional layout system for arranging items in a row or column.
main axis / cross axis
Flex direction axis and the perpendicular one; justify vs align.
media query
A CSS rule that applies only at certain screen sizes.
mobile-first
Writing base styles for small screens, then layering on larger ones.
rem / em
Relative units; rem is relative to the root font size.
Further reading & references (3)
  • CSS-Tricks: A Complete Guide to Flexbox — The single best Flexbox cheat sheet.
  • Flexbox Froggy — A game that teaches Flexbox in ~20 minutes.
  • MDN: Using media queries — Responsive breakpoints explained.
Module 2 · Lesson 3 of 3

Design systems with custom properties

Hard-coding #5b8cff in 40 places is how stylesheets rot. Custom properties (CSS variables) let you name values once and theme the whole app — including dark mode — from a single place. This course app itself is built this way.

css
:root {
  --bg: #ffffff; --ink: #151a23; --accent: #5b8cff;
  --radius: 12px;
}
@media (prefers-color-scheme: dark) {
  :root { --bg: #0e1015; --ink: #e9ebf1; }
}
.card { background: var(--bg); color: var(--ink); border-radius: var(--radius); }

Define tokens once at :root, override them for dark mode, and reference with var(). One switch, whole-app theming.

Why this is a pro moveDesign tokens make a codebase consistent and changeable. A client says "make the blue a bit greener" and you edit one line instead of hunting 40. This is exactly the maintainability that separates a hobby project from a codebase.
✎ Knowledge check

What is the main benefit of CSS custom properties (variables)?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (4)
custom property
A CSS variable, declared with --name and used with var(--name).
:root
The document root; a common place to define global variables.
design token
A named design value (color, spacing) reused everywhere for consistency.
prefers-color-scheme
A media feature to detect the user’s light/dark preference.
Further reading & references (2)
  • MDN: Using CSS custom properties — The variable syntax and scoping rules.
  • "Design tokens" (design systems handbook) — Why naming values scales.
Module 2 · Quiz

Module 2 quiz

Tap an answer to check it instantly. Graded scoring, the 80% gate, and saving are in the browser app.

✎ Knowledge check

1. box-sizing: border-box changes width so that it…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. Between a #id and a .class rule targeting the same element, which wins?

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. Flexbox is fundamentally a … layout system.

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. A mobile-first responsive stylesheet writes base rules for … and adds media queries for larger screens.

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. To center items on the cross axis of a flex row you use…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

6. CSS custom properties are declared with … and read with …

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

7. Reaching for !important to fix a style usually indicates…

Tap an answer to check it — instant feedback, nothing graded.

Module 3 of 7 · Overview

JavaScript Fundamentals

What you’ll be able to do
  • Use JavaScript’s core types, control flow, and functions fluently.
  • Transform data with map, filter, and reduce instead of manual loops.
  • Build interactivity by selecting nodes, handling events, and updating the DOM.

3 lessons and a self-check quiz. Tap Next to begin.

Module 3 · Lesson 1 of 3

Types, variables & functions

JavaScript is the language of interactivity. Start with values and functions. Prefer const; use let only when you must reassign; avoid var.

js
const name = "Ada";          // string (immutable binding)
let count = 0;               // number, will change
const isOpen = true;         // boolean
const nothing = null;        // intentional empty

function greet(who) {        // classic function
  return "Hi " + who;
}
const greet2 = (who) => `Hi ${who}`;  // arrow + template literal

if (count === 0) {           // === compares value AND type
  console.log(greet(name));
}

Note === (strict equality) over ==, and template literals with backticks and ${}.

=== not ==Always use === and !==. The loose == does surprising type coercion (0 == "" is true). Strict equality avoids a whole class of bugs.
✎ Knowledge check

Which declaration should you reach for by default?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
let / const
Block-scoped variable declarations; const can’t be reassigned. Prefer const.
primitive
A basic value type: string, number, boolean, null, undefined, symbol, bigint.
function
A reusable block of code; arrow functions (=>) are the modern short form.
truthy / falsy
Values that act as true/false in conditions (0, "", null, undefined are falsy).
scope
Where a variable is visible; block scope is created by { }.
Further reading & references (3)
  • MDN: JavaScript first steps — Beginner-friendly, official.
  • "Eloquent JavaScript" (free book) — Chapters 1–3 for language basics.
  • javascript.info — A deep, modern, free tutorial.
Module 3 · Lesson 2 of 3

Arrays, objects & higher-order functions

Real apps are mostly moving lists of objects around. The higher-order array methods replace error-prone loops with clear transformations.

js
const bookings = [
  { id: 1, name: "Ada", time: 18, paid: true },
  { id: 2, name: "Ben", time: 19, paid: false },
  { id: 3, name: "Cy",  time: 18, paid: true },
];

// map: transform each item
const names = bookings.map(b => b.name);        // ["Ada","Ben","Cy"]

// filter: keep some
const at18 = bookings.filter(b => b.time === 18); // 2 items

// reduce: collapse to one value
const paidCount = bookings.reduce((sum, b) => sum + (b.paid ? 1 : 0), 0); // 2

// destructuring
const { name } = bookings[0];                    // "Ada"

map/filter/reduce are the workhorses. Learn to reach for them instead of for-loops.

How reduce works, one pass at a time
1
StartAccumulator = 0 (the seed you passed).
2
Item 1 (paid)0 + 1 = 1.
3
Item 2 (unpaid)1 + 0 = 1.
4
Item 3 (paid)1 + 1 = 2 → final result.
✎ Knowledge check

You have an array of products and want only the ones under $50. Which method?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
array
An ordered list: [1, 2, 3]. Access by index; iterate with methods.
object
A collection of key/value pairs: { id: 1, name: "Ada" }.
higher-order function
A function that takes or returns a function (map, filter, reduce).
map / filter / reduce
Transform each item / keep some items / collapse to one value.
destructuring
Pulling values out by shape: const { name } = user.
Further reading & references (2)
  • MDN: Array methods — map, filter, reduce, find — with examples.
  • "JavaScript array methods" (web.dev) — Practical patterns.
Module 3 · Lesson 3 of 3

The DOM API & events

Now combine it all: select nodes, listen for events, update the DOM. This tiny app renders a list and adds to it — the pattern behind every interactive UI.

html
<ul id="list"></ul>
<form id="add">
  <input id="who" placeholder="Name">
  <button>Add</button>
</form>

The markup: an empty list and a form.

js
const list = document.getElementById("list");
const form = document.getElementById("add");
const who  = document.getElementById("who");
let people = [];

function render() {
  // build once, insert once (avoid reflow in a loop)
  list.innerHTML = people.map(p => `<li>${p}</li>`).join("");
}

form.addEventListener("submit", (e) => {
  e.preventDefault();
  if (!who.value.trim()) return;   // guard against empty
  people.push(who.value.trim());   // update state
  who.value = "";
  render();                        // re-render from state
});

The core loop of UI: state (people) → render() → event updates state → render again.

State drives the UINotice the pattern: keep the truth in a variable (people), and write a render() that draws the DOM from that state. Events change state, then call render. This one idea is the seed of every framework (React, Vue, Svelte).
✎ Knowledge check

In the state→render pattern, what should an event handler do?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
querySelector
Selects the first element matching a CSS selector.
event
A signal like click, submit, input that you can listen for.
event listener
A function run when an event fires (addEventListener).
event delegation
Listening on a parent to handle events from many children efficiently.
textContent / value
Read/write an element’s text, or a form field’s current value.
Further reading & references (2)
  • MDN: Introduction to events — The event model and addEventListener.
  • MDN: Document.querySelector — Selecting elements the modern way.
Module 3 · Quiz

Module 3 quiz

Tap an answer to check it instantly. Graded scoring, the 80% gate, and saving are in the browser app.

✎ Knowledge check

1. Which comparison operator avoids type-coercion surprises?

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. array.map() returns…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. To keep only items passing a test, use…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. reduce is used to…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. document.getElementById("x") returns…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

6. In the state→render pattern, the source of truth is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

7. const means the binding…

Tap an answer to check it — instant feedback, nothing graded.

Module 4 of 7 · Overview

Data, State & Async

What you’ll be able to do
  • Model app data as JSON and reason about references vs copies.
  • Persist state in the browser with localStorage and a clean save/load pattern.
  • Write asynchronous code with promises and async/await, handling errors.

3 lessons and a self-check quiz. Tap Next to begin.

Module 4 · Lesson 1 of 3

JSON & modeling data

JSON is the lingua franca of apps — how the frontend, backend, and APIs exchange data. It looks like JavaScript objects but is pure text.

js
const course = {
  id: "app-builder",
  modules: [
    { title: "HTML", lessons: 3 },
    { title: "CSS",  lessons: 3 }
  ]
};

const text = JSON.stringify(course); // object -> string (to store/send)
const back = JSON.parse(text);       // string -> object (after receiving)

back.modules.length;                 // 2

stringify to send/store, parse to read back. This is exactly how APIs and localStorage move data.

The reference gotchaObjects and arrays are held by reference. const b = a makes b point to the same object, so editing b edits a. To copy, use structuredClone(a) or {...a}/[...a] for shallow copies. This trips up every beginner.
✎ Knowledge check

JSON.stringify(obj) is used to…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
JSON
JavaScript Object Notation — a text format for data: objects, arrays, strings, numbers, booleans, null.
serialize
Turn an in-memory object into text (JSON.stringify).
parse
Turn text back into objects (JSON.parse).
reference vs value
Objects/arrays are copied by reference; primitives by value.
schema
The agreed shape of your data (fields and types).
Further reading & references (2)
  • MDN: Working with JSON — stringify/parse and gotchas.
  • json.org — The tiny, complete spec — readable in 5 minutes.
Module 4 · Lesson 2 of 3

Persisting state with localStorage

For a lot of small apps, the browser is enough. localStorage keeps key/value strings across reloads — exactly how this course app remembers your progress.

js
const KEY = "app_state";

function save(state) {
  try { localStorage.setItem(KEY, JSON.stringify(state)); }
  catch (e) { /* storage may be full or blocked; fail gracefully */ }
}

function load() {
  try { return JSON.parse(localStorage.getItem(KEY)) || {}; }
  catch (e) { return {}; }
}

let state = load();          // hydrate on startup
state.lastPage = "m2-l1";
save(state);                 // persist after changes

Wrap storage in try/catch, serialize with JSON, and hydrate on load. This exact pattern runs this app.

When to graduate to a serverlocalStorage is per-device and per-browser — great for preferences and single-user apps. The moment data must be shared across devices or users, or must be trusted/secured, you need a backend and database (Modules 5–6).
✎ Knowledge check

localStorage can store…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (4)
localStorage
Browser key/value storage that survives reloads; strings only.
key
The name you store a value under.
hydration
Loading saved state back into your app on startup.
try/catch
Error handling so a failure (e.g. storage blocked) doesn’t crash the app.
Further reading & references (2)
  • MDN: Window.localStorage — API and limits (~5MB, strings).
  • "Persisting state" patterns (web.dev) — When to use localStorage vs a server.
Module 4 · Lesson 3 of 3

Asynchronous JavaScript

Network calls take time. If JavaScript waited synchronously, the UI would freeze. Instead, async work returns a promise — a placeholder for a value that arrives later. async/await lets you write it linearly.

js
// A promise-returning function (fetch is built in)
async function loadBookings() {
  try {
    const res  = await fetch("/api/bookings");   // wait without blocking UI
    if (!res.ok) throw new Error("HTTP " + res.status);
    const data = await res.json();               // parse JSON body
    return data.bookings;
  } catch (err) {
    console.error("Failed to load:", err);
    return [];                                   // graceful fallback
  }
}

loadBookings().then(list => render(list));

await pauses this function (not the whole page) until the promise resolves. try/catch handles failures.

Always handle the failure pathA fetch can fail (offline, 500, timeout). Beginners write only the happy path; pros wrap in try/catch, check res.ok, and show the user something sensible. Robust error handling is a hallmark of professional code.
✎ Knowledge check

The keyword await can only be used…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
synchronous
Runs top to bottom, blocking until each line finishes.
asynchronous
Starts work now, continues later without blocking (network, timers).
promise
An object representing a future value: pending → fulfilled/rejected.
async / await
Syntax to write async code that reads top-to-bottom.
event loop
The mechanism that runs queued callbacks when the stack is clear.
Further reading & references (2)
  • MDN: Asynchronous JavaScript — Promises, then/catch, async/await.
  • "What the heck is the event loop" (Philip Roberts talk) — The best 26-minute explainer on YouTube.
Module 4 · Quiz

Module 4 quiz

Tap an answer to check it instantly. Graded scoring, the 80% gate, and saving are in the browser app.

✎ Knowledge check

1. JSON.parse does the opposite of…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. const b = a where a is an array means…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. localStorage stores values as…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. A promise represents…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. async/await mainly improves…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

6. Before using a fetch response you should check…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

7. Wrapping localStorage in try/catch matters because…

Tap an answer to check it — instant feedback, nothing graded.

Module 5 of 7 · Overview

Backend, APIs & HTTP

What you’ll be able to do
  • Describe a server’s job and design RESTful endpoints with correct verbs.
  • Build a minimal API route and call it from the frontend with fetch.
  • Apply the security basics: hashing, tokens, env vars, and CORS.

3 lessons and a self-check quiz. Tap Next to begin.

Module 5 · Lesson 1 of 3

Servers & REST API design

A server is just a program that waits for requests and answers them. REST is a widely-used convention: model your data as resources, and map HTTP verbs to CRUD.

ActionMethod + pathCRUD
List bookingsGET /bookingsRead
Get oneGET /bookings/42Read
CreatePOST /bookingsCreate
UpdatePATCH /bookings/42Update
DeleteDELETE /bookings/42Delete

Here is a real, minimal API in Node using Express — the shape you will actually deploy:

js
const express = require("express");
const app = express();
app.use(express.json());          // parse JSON bodies

let bookings = [];

app.get("/bookings", (req, res) => {
  res.json({ bookings });          // 200 + JSON
});

app.post("/bookings", (req, res) => {
  const b = { id: Date.now(), ...req.body };
  bookings.push(b);
  res.status(201).json(b);         // 201 Created
});

app.listen(3000, () => console.log("API on :3000"));

Two endpoints: list (GET) and create (POST). Note express.json() middleware and the 201 on create.

✎ Knowledge check

To create a new resource in REST, the conventional method + code is…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
server
A program that listens for requests and returns responses.
endpoint
A specific URL + method the server handles (GET /bookings).
REST
A convention for URLs/verbs mapping to resources and CRUD.
CRUD
Create, Read, Update, Delete — the four data operations.
middleware
Functions that run on every request (logging, auth, parsing).
Further reading & references (3)
  • MDN: HTTP methods — Verb semantics for REST.
  • "REST API Tutorial" (restfulapi.net) — Resource/verb conventions.
  • Express.js "Hello World" — The most common Node web framework’s intro.
Module 5 · Lesson 2 of 3

Calling your API from the frontend

The frontend talks to that API with fetch. Reading is a GET; creating is a POST with a JSON body and headers.

js
async function createBooking(booking) {
  const res = await fetch("https://api.example.com/bookings", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(booking),
  });
  if (!res.ok) throw new Error("Create failed: " + res.status);
  return res.json();               // the created booking (201 body)
}

createBooking({ name: "Ada", time: 18 })
  .then(saved => console.log("Created", saved.id))
  .catch(err => alert("Could not book — try again"));

method, headers, and a JSON-stringified body. Errors are surfaced to the user, not swallowed.

The CORS wallWhen your frontend on myapp.com calls an API on api.other.com, the browser blocks it unless the server sends CORS headers allowing your origin. It is not a bug in your fetch — it is the server’s policy. You fix it on the server (or use a proxy).
✎ Knowledge check

Your fetch to another domain is blocked with a CORS error. Where is the fix?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (4)
fetch
The browser API to make HTTP requests.
CORS
Cross-Origin Resource Sharing — server rules on which origins may call it.
origin
Scheme + host + port; requests across origins are restricted by browsers.
optimistic update
Updating the UI before the server confirms, for speed.
Further reading & references (2)
  • MDN: Using the Fetch API — Requests, options, JSON.
  • MDN: CORS — Why cross-origin calls get blocked and how servers allow them.
Module 5 · Lesson 3 of 3

Auth & security basics

Security is where beginners get people hurt. Learn the non-negotiables. Never store raw passwords — store a one-way hash. Keep secrets in environment variables, never in code or the frontend.

js
const bcrypt = require("bcrypt");

// On signup: hash before storing
const hash = await bcrypt.hash(password, 12);   // store `hash`, never `password`

// On login: compare
const ok = await bcrypt.compare(attempt, hash); // true/false

// Secrets come from the environment, NOT the code:
const dbUrl = process.env.DATABASE_URL;
const aiKey = process.env.OPENAI_API_KEY;       // never ship this to the browser

Hash passwords with a cost factor; read secrets from process.env so they never land in your repo or client bundle.

The frontend is publicAnything in your frontend JavaScript can be read by anyone (View Source). So API keys and secrets must live on the server. A common, expensive beginner mistake is putting a paid API key in client code — bots find and drain it within hours.
✎ Knowledge check

How should user passwords be stored?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
authentication
Proving who you are (login).
authorization
What you are allowed to do (permissions).
hashing
One-way transform of a password (bcrypt) — never store plain passwords.
token / JWT
A signed credential the client sends to prove it is logged in.
environment variable
A secret (API key, DB URL) kept out of code, in the environment.
Further reading & references (3)
  • OWASP Top Ten — The industry list of the most common security risks.
  • "Password storage cheat sheet" (OWASP) — Hash with bcrypt/argon2, always salt.
  • jwt.io — Decode and understand JSON Web Tokens.
Module 5 · Quiz

Module 5 quiz

Tap an answer to check it instantly. Graded scoring, the 80% gate, and saving are in the browser app.

✎ Knowledge check

1. In REST, GET /bookings/42 should…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. express.json() middleware is used to…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. A CORS error is resolved…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. Passwords must be stored as…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. API secrets belong…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

6. Authentication vs authorization: authentication is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

7. POST to a collection endpoint conventionally returns…

Tap an answer to check it — instant feedback, nothing graded.

Module 6 of 7 · Overview

Databases & Persistence

What you’ll be able to do
  • Choose between relational and document databases for a given need.
  • Read and write core SQL: SELECT, INSERT, JOIN, with a real schema.
  • Understand how an app connects to a database and why migrations exist.

3 lessons and a self-check quiz. Tap Next to begin.

Module 6 · Lesson 1 of 3

Relational vs document, and schema

A database is durable, queryable, multi-user storage — the thing localStorage is not. The big split: relational (tables + relationships, using SQL) vs document (flexible JSON documents).

Which store fits?
Relational
Structured, related data — users, orders, bookings, payments. Strong consistency, powerful queries (JOINs). Default choice for most apps. Postgres is the modern favorite.
Document
Flexible or nested data that varies row to row, or rapid prototyping. Easy to start; you trade some query power and consistency. MongoDB, Firestore.
Both
Real systems often use a relational core plus a document/cache store for specific needs. Don’t agonize early — relational is a safe default.

A relational schema defines tables and how they relate via keys:

sql
CREATE TABLE customers (
  id    SERIAL PRIMARY KEY,
  name  TEXT NOT NULL,
  email TEXT UNIQUE NOT NULL
);

CREATE TABLE bookings (
  id          SERIAL PRIMARY KEY,
  customer_id INTEGER REFERENCES customers(id),  -- foreign key
  starts_at   TIMESTAMP NOT NULL
);

bookings.customer_id references customers.id — the relationship you draw as one-to-many.

✎ Knowledge check

A foreign key is a column that…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
relational DB
Data in tables with defined columns and relationships (Postgres, MySQL, SQLite).
document DB
Flexible JSON-like documents (MongoDB, Firestore).
schema
The defined shape: tables, columns, types, constraints.
primary key
A column that uniquely identifies each row (usually id).
foreign key
A column that references another table’s primary key.
Further reading & references (2)
  • "SQL vs NoSQL" (MongoDB & Postgres docs) — Read both sides.
  • use-the-index-luke.com — A free, deep guide to how databases really work.
Module 6 · Lesson 2 of 3

SQL you will actually write

You do not need to be a DBA, but reading and writing basic SQL is a core skill. Four statements cover most day-to-day work:

sql
-- read with a filter
SELECT id, name FROM customers WHERE email = 'ada@x.com';

-- add a row
INSERT INTO bookings (customer_id, starts_at)
VALUES (1, '2026-08-01 18:00');

-- combine related tables
SELECT c.name, b.starts_at
FROM bookings b
JOIN customers c ON c.id = b.customer_id
WHERE b.starts_at > NOW();

-- count per customer
SELECT customer_id, COUNT(*) FROM bookings GROUP BY customer_id;

SELECT/WHERE/JOIN/INSERT plus GROUP BY handle the majority of real queries.

SQL injectionNever build SQL by gluing user input into a string ("...WHERE email = '" + input + "'"). Attackers inject SQL that way. Always use parameterized queries (placeholders like $1) so the driver escapes input safely. This single habit prevents one of the oldest, most damaging vulnerabilities.
✎ Knowledge check

The safe way to include user input in a query is…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
SELECT
Read rows, optionally filtered and joined.
WHERE
Filter condition.
JOIN
Combine rows from related tables.
INSERT
Add a new row.
index
A structure that makes lookups fast on a column.
Further reading & references (2)
  • SQLBolt — Interactive, free SQL lessons — do them.
  • PostgreSQL Tutorial — Reference with runnable examples.
Module 6 · Lesson 3 of 3

Connecting an app to a database

Your API talks to the database over a connection, usually pooled. You can write raw SQL or use an ORM for convenience and safety. Either way, the endpoint from Module 5 now persists for real:

js
const { Pool } = require("pg");
const pool = new Pool({ connectionString: process.env.DATABASE_URL });

app.post("/bookings", async (req, res) => {
  try {
    const { customerId, startsAt } = req.body;
    const result = await pool.query(
      "INSERT INTO bookings (customer_id, starts_at) VALUES ($1, $2) RETURNING *",
      [customerId, startsAt]                 // parameterized — safe
    );
    res.status(201).json(result.rows[0]);
  } catch (err) {
    res.status(500).json({ error: "Could not create booking" });
  }
});

A real create endpoint: pooled connection, parameterized INSERT, RETURNING the new row, error handling.

Migrations keep teams saneA migration is a versioned script that changes the schema (add a column, a table). Tracking them in code means every environment — your laptop, staging, production — can reach the same schema reproducibly. It is how real teams evolve a database without chaos.
✎ Knowledge check

An ORM lets you…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (4)
connection / pool
A link to the DB; a pool reuses connections efficiently.
ORM
Object-Relational Mapper — lets you query via code objects instead of raw SQL (Prisma, Sequelize).
migration
A versioned change to the schema, tracked in code.
transaction
A group of statements that succeed or fail together.
Further reading & references (2)
  • Prisma "Getting Started" — A modern, typed ORM many freelancers use.
  • "Database migrations" (Prisma/Knex docs) — Why and how to version schema changes.
Module 6 · Quiz

Module 6 quiz

Tap an answer to check it instantly. Graded scoring, the 80% gate, and saving are in the browser app.

✎ Knowledge check

1. A safe default database type for structured, related app data is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. A primary key…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. To combine rows from related tables you use…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. SQL injection is prevented by…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. A migration is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

6. An ORM primarily lets you…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

7. A document database is a good fit when…

Tap an answer to check it — instant feedback, nothing graded.

Module 7 of 7 · Overview

AI, Deployment & The Business

What you’ll be able to do
  • Call an LLM API from a server, with prompts and a RAG sketch.
  • Deploy a frontend and backend and manage environments.
  • Scope, price, and protect freelance projects professionally.

3 lessons and a self-check quiz. Tap Next to begin.

Module 7 · Lesson 1 of 3

Integrating AI (LLM APIs)

Adding AI is, mechanically, just another API call — from your server (to protect the key). You send messages, you get text back.

js
// SERVER-side route (key stays secret in env)
app.post("/summarize", async (req, res) => {
  const r = await fetch("https://api.anthropic.com/v1/messages", {
    method: "POST",
    headers: {
      "x-api-key": process.env.ANTHROPIC_API_KEY,
      "anthropic-version": "2023-06-01",
      "content-type": "application/json",
    },
    body: JSON.stringify({
      model: "claude-3-5-haiku-latest",
      max_tokens: 300,
      messages: [{ role: "user", content: "Summarize: " + req.body.text }],
    }),
  });
  const data = await r.json();
  res.json({ summary: data.content[0].text });
});

The frontend calls YOUR /summarize; your server calls the LLM so the key is never exposed.

RAG in four steps (a "chatbot that knows our docs")
1
IndexSplit the client’s documents into chunks and store embeddings.
2
RetrieveOn a question, find the most relevant chunks.
3
AugmentPut those chunks into the prompt as context.
4
GenerateAsk the model to answer using only that context — grounded, not guessed.
Cost & trustLLM calls cost per token and can be wrong. Cap max_tokens, cache repeats, validate output for high-stakes uses, and never let the model take irreversible actions unchecked. Ship AI with guardrails.
✎ Knowledge check

Why call the LLM from your server rather than the browser?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
LLM
Large Language Model — the AI you call via an API (e.g. Claude, GPT).
prompt
The instruction/context you send the model.
token
A chunk of text the model bills and reasons in; cost scales with tokens.
RAG
Retrieval-Augmented Generation — fetch your data, feed it in, then ask.
streaming
Receiving the response incrementally for responsiveness.
Further reading & references (3)
  • Anthropic / OpenAI API docs — Endpoints, messages format, and pricing.
  • "Prompt engineering" (Anthropic docs) — Practical prompting patterns.
  • "RAG explained" (any vendor guide) — Grounding answers in your own data.
Module 7 · Lesson 2 of 3

Deployment & environments

"It works on my machine" is not shipped. Deployment puts your frontend on a static host/CDN and your backend on a server or serverless platform, each reading config from environment variables per environment.

PieceTypical hostNotes
Static frontendNetlify, Vercel, GH PagesGlobal CDN, instant, cheap/free
Backend/APIRender, Railway, Fly, serverlessReads env vars, scales
DatabaseManaged Postgres (Neon, Supabase, RDS)Backups, connection string in env
SecretsPlatform env settingsNever in the repo
Environments prevent disastersKeep development (your laptop), staging (a prod-like test), and production (real users) separate, each with its own database and keys. Test in staging so a bad deploy never touches real customer data. This discipline is what clients are really paying a professional for.
✎ Knowledge check

Why keep staging and production as separate environments?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
deployment
Putting your app on servers the public can reach.
environment
A named context (development, staging, production) with its own config.
CI/CD
Continuous Integration/Delivery — automated test + deploy on push.
static host
Serves frontend files over a CDN (Netlify, Vercel, GitHub Pages).
build step
Bundling/transpiling source into optimized files to serve.
Further reading & references (2)
  • Vercel / Netlify docs — One-command deploys for frontends and serverless functions.
  • "The Twelve-Factor App" — Timeless principles for config and deploys.
Module 7 · Lesson 3 of 3

The business of freelancing

The code is half the job; running it as a business is the other half. The habits that keep freelancers solvent are unglamorous and non-optional.

  • Write the scope down and get sign-off; treat new asks as separate paid work.
  • Take a deposit (30–50%) before starting; it filters non-serious clients.
  • Use a simple statement of work covering price, timeline, and who owns the code.
  • Keep the client’s hosting/DB accounts in their name so you’re not liable for bills.
  • Sell retainers for maintenance — predictable monthly income beats one-offs.
Pricing modelBest when
HourlyYou’re new / scope is fuzzy
Fixed projectScope is clear; rewards efficiency
RetainerOngoing relationship — the steady income
Your positioning"I build small businesses a custom app with the codebase knowledge to maintain and extend it" is a stronger, higher-paid pitch than no-code alone. The depth you built in this course is the differentiator.
✎ Knowledge check

The steadiest freelance income typically comes from…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
scope
The written list of what a project will and won’t include.
statement of work
A short contract defining scope, price, timeline, ownership.
retainer
A recurring fee for ongoing maintenance/updates.
deposit
Upfront payment before work begins.
handoff
Transferring accounts, code, and docs to the client.
Further reading & references (2)
  • "The Freelancer’s Bible" (S. Horowitz) — A broad, practical reference.
  • Stripe Atlas guides / contract templates — Payment and simple legal scaffolding.
Module 7 · Quiz

Module 7 quiz

Tap an answer to check it instantly. Graded scoring, the 80% gate, and saving are in the browser app.

✎ Knowledge check

1. You should call an LLM API from…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. RAG improves answers by…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. LLM cost scales mainly with…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. A static frontend is typically deployed to…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. Staging exists to…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

6. Before starting paid client work you should have…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

7. Secrets and API keys in a deployed app live…

Tap an answer to check it — instant feedback, nothing graded.

Final Certification Exam

Final exam

Tap an answer to check it. The graded exam and certificate are in the browser app.

✎ Knowledge check

1. The correct HTTP method to read data without side effects is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. 201 Created is returned when…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. Semantic HTML means…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. The DOM is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. Between #id and .class, higher specificity is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

6. Flexbox lays out along…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

7. Prefer which variable declaration by default?

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

8. array.filter returns…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

9. In the state→render pattern, events should…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

10. JSON.stringify converts…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

11. localStorage stores…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

12. await can be used inside…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

13. REST maps HTTP verbs to…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

14. A CORS error is fixed…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

15. Passwords should be stored as…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

16. A foreign key…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

17. SQL injection is prevented with…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

18. You call an LLM API from…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

19. Static frontends deploy best to…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

20. The steadiest freelance income is usually…

Tap an answer to check it — instant feedback, nothing graded.

Reference

Glossary & key vocabulary

:root Module 2
The document root; a common place to define global variables.
accessibility (a11y) Module 1
Building so assistive tech (screen readers, keyboard nav) works — labels, alt text, roles.
array Module 3
An ordered list: [1, 2, 3]. Access by index; iterate with methods.
async / await Module 4
Syntax to write async code that reads top-to-bottom.
asynchronous Module 4
Starts work now, continues later without blocking (network, timers).
attribute Module 1
Extra info on an element, written as name="value" (e.g. href, id, class).
authentication Module 5
Proving who you are (login).
authorization Module 5
What you are allowed to do (permissions).
box model Module 2
Every element is a box: content + padding + border + margin.
box-sizing Module 2
border-box makes width include padding and border — almost always what you want.
build step Module 7
Bundling/transpiling source into optimized files to serve.
cascade Module 2
The order/importance rules by which CSS resolves conflicts.
CI/CD Module 7
Continuous Integration/Delivery — automated test + deploy on push.
connection / pool Module 6
A link to the DB; a pool reuses connections efficiently.
CORS Module 5
Cross-Origin Resource Sharing — server rules on which origins may call it.
CRUD Module 5
Create, Read, Update, Delete — the four data operations.
custom property Module 2
A CSS variable, declared with --name and used with var(--name).
deployment Module 7
Putting your app on servers the public can reach.
deposit Module 7
Upfront payment before work begins.
design token Module 2
A named design value (color, spacing) reused everywhere for consistency.
destructuring Module 3
Pulling values out by shape: const { name } = user.
DNS Module 1
Domain Name System — translates a hostname like example.com into an IP address.
document DB Module 6
Flexible JSON-like documents (MongoDB, Firestore).
DOM Module 1
Document Object Model — the browser’s live, in-memory tree of objects built from your HTML.
element Module 1
A building block written with tags, e.g.

. Most have an opening and closing tag.
endpoint Module 5
A specific URL + method the server handles (GET /bookings).
environment Module 7
A named context (development, staging, production) with its own config.
environment variable Module 5
A secret (API key, DB URL) kept out of code, in the environment.
event Module 3
A signal like click, submit, input that you can listen for.
event delegation Module 3
Listening on a parent to handle events from many children efficiently.
event listener Module 3
A function run when an event fires (addEventListener).
event loop Module 4
The mechanism that runs queued callbacks when the stack is clear.
fetch Module 5
The browser API to make HTTP requests.
Flexbox Module 2
A 1-dimensional layout system for arranging items in a row or column.
foreign key Module 6
A column that references another table’s primary key.
form Module 1
An element that collects user input and can submit it to a server.
function Module 3
A reusable block of code; arrow functions (=>) are the modern short form.
handoff Module 7
Transferring accounts, code, and docs to the client.
hashing Module 5
One-way transform of a password (bcrypt) — never store plain passwords.
header Module 1
Key/value metadata attached to a request or response (e.g. Content-Type).
higher-order function Module 3
A function that takes or returns a function (map, filter, reduce).
HTTP Module 1
HyperText Transfer Protocol — the request/response text protocol browsers and servers speak.
hydration Module 4
Loading saved state back into your app on startup.
index Module 6
A structure that makes lookups fast on a column.
INSERT Module 6
Add a new row.
JOIN Module 6
Combine rows from related tables.
JSON Module 4
JavaScript Object Notation — a text format for data: objects, arrays, strings, numbers, booleans, null.
key Module 4
The name you store a value under.
let / const Module 3
Block-scoped variable declarations; const can’t be reassigned. Prefer const.
LLM Module 7
Large Language Model — the AI you call via an API (e.g. Claude, GPT).
localStorage Module 4
Browser key/value storage that survives reloads; strings only.
main axis / cross axis Module 2
Flex direction axis and the perpendicular one; justify vs align.
map / filter / reduce Module 3
Transform each item / keep some items / collapse to one value.
media query Module 2
A CSS rule that applies only at certain screen sizes.
method Module 1
The verb of a request: GET (read), POST (create), PUT/PATCH (update), DELETE (remove).
middleware Module 5
Functions that run on every request (logging, auth, parsing).
migration Module 6
A versioned change to the schema, tracked in code.
mobile-first Module 2
Writing base styles for small screens, then layering on larger ones.
node Module 1
Any point in the DOM tree: an element, a text node, etc.
object Module 3
A collection of key/value pairs: { id: 1, name: "Ada" }.
optimistic update Module 5
Updating the UI before the server confirms, for speed.
origin Module 5
Scheme + host + port; requests across origins are restricted by browsers.
ORM Module 6
Object-Relational Mapper — lets you query via code objects instead of raw SQL (Prisma, Sequelize).
parent / child Module 1
Relationships in the tree; an element contains children and has one parent.
parse Module 4
Turn text back into objects (JSON.parse).
payload / body Module 1
The actual data sent with a request or returned in a response.
prefers-color-scheme Module 2
A media feature to detect the user’s light/dark preference.
primary key Module 6
A column that uniquely identifies each row (usually id).
primitive Module 3
A basic value type: string, number, boolean, null, undefined, symbol, bigint.
promise Module 4
An object representing a future value: pending → fulfilled/rejected.
prompt Module 7
The instruction/context you send the model.
querySelector Module 3
Selects the first element matching a CSS selector.
RAG Module 7
Retrieval-Augmented Generation — fetch your data, feed it in, then ask.
reference vs value Module 4
Objects/arrays are copied by reference; primitives by value.
reflow / repaint Module 1
Recalculating layout (reflow) or redrawing (repaint) when the DOM or styles change.
relational DB Module 6
Data in tables with defined columns and relationships (Postgres, MySQL, SQLite).
rem / em Module 2
Relative units; rem is relative to the root font size.
render tree Module 1
The DOM combined with CSS, used to actually paint pixels.
REST Module 5
A convention for URLs/verbs mapping to resources and CRUD.
retainer Module 7
A recurring fee for ongoing maintenance/updates.
schema Module 4
The agreed shape of your data (fields and types).
schema Module 6
The defined shape: tables, columns, types, constraints.
scope Module 3
Where a variable is visible; block scope is created by { }.
scope Module 7
The written list of what a project will and won’t include.
SELECT Module 6
Read rows, optionally filtered and joined.
selector Module 2
A pattern that targets elements (.class, #id, tag, [attr]).
semantic HTML Module 1
Using elements for their meaning (header, nav, main, article) rather than generic
everywhere.
serialize Module 4
Turn an in-memory object into text (JSON.stringify).
server Module 5
A program that listens for requests and returns responses.
specificity Module 2
The weight that decides which conflicting rule wins (inline > id > class > tag).
statement of work Module 7
A short contract defining scope, price, timeline, ownership.
static host Module 7
Serves frontend files over a CDN (Netlify, Vercel, GitHub Pages).
status code Module 1
A 3-digit number in a response: 2xx success, 3xx redirect, 4xx client error, 5xx server error.
streaming Module 7
Receiving the response incrementally for responsiveness.
synchronous Module 4
Runs top to bottom, blocking until each line finishes.
textContent / value Module 3
Read/write an element’s text, or a form field’s current value.
token Module 7
A chunk of text the model bills and reasons in; cost scales with tokens.
token / JWT Module 5
A signed credential the client sends to prove it is logged in.
transaction Module 6
A group of statements that succeed or fail together.
truthy / falsy Module 3
Values that act as true/false in conditions (0, "", null, undefined are falsy).
try/catch Module 4
Error handling so a failure (e.g. storage blocked) doesn’t crash the app.
WHERE Module 6
Filter condition.
Module 1 of 5 · Overview

Chart & Candle Basics

What you’ll be able to do
  • Read the four prices inside any candlestick: open, high, low, close.
  • Tell a bullish candle from a bearish one at a glance.
  • Understand timeframes and why the same stock looks different on each.

2 lessons and a self-check quiz. Tap Next to begin.

Module 1 · Lesson 1 of 2

The anatomy of a candlestick

Read this firstThis course is educational only and is not financial advice. Day trading is high-risk and most day traders lose money. Learn to read charts to understand markets — not as a promise of profit.

A price chart is just a picture of what buyers and sellers agreed on over time. The most popular style is the candlestick chart, because a single candle packs four facts into one shape.

Each candle covers one slice of time (one minute, five minutes, one day…). It shows the open (price at the start), the close (price at the end), and the high and low reached in between.

One candle, four prices
13.012.011.010.09.0High 12.6Low 9.4Open 10.0Close 12.0

The thick part is the body (open–to–close). The thin lines are wicks (or shadows) reaching to the high and low.

Explore the parts — tap each
Body
The thick rectangle between the open and close. A long body means one side (buyers or sellers) clearly won the period.
Wicks / shadows
The thin lines above and below. They show prices that were reached but rejected — where the period travelled but didn’t settle.
Colour
Green (or hollow) = close above open (buyers won). Red (or filled) = close below open (sellers won).
✎ Knowledge check

On a green candlestick, which is true?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (6)
candlestick
A bar showing four prices for one time period: open, high, low, close.
open
The price at the start of the period.
close
The price at the end of the period.
high / low
The highest and lowest prices reached in the period.
body
The thick part of a candle, spanning open to close.
wick / shadow
The thin lines to the high and low; show rejected prices.
Further reading & references (3)
  • Investopedia: "Candlestick" — Clear reference on candle anatomy and colors.
  • Babypips School: "What is a Candlestick" — Free, beginner-friendly lesson.
  • Nison, "Japanese Candlestick Charting Techniques" — The classic book that popularized candles in the West.
Module 1 · Lesson 2 of 2

Bullish vs bearish, and timeframes

Put candles side by side and the story appears. A bullish candle (green, close > open) says buyers pushed price up; a bearish candle (red, close < open) says sellers pushed it down.

Bullish push then bearish rejection
11.711.210.710.19.6Strong buyersSellers take over

Two green candles (buyers) then two red (sellers) — momentum shifting within a few periods.

Timeframes change the story

The same stock looks different on a 1-minute chart versus a daily chart. Day traders often watch fast timeframes (1m, 5m, 15m) for entries, while checking a slower one (daily) for the bigger trend. A move that looks huge on the 1-minute can be a tiny blip on the daily.

RationaleZooming out first is a habit of disciplined traders: it stops you from reacting to noise. The higher timeframe sets the context; the lower one just times the entry.
✎ Knowledge check

Why do many day traders check a higher timeframe (like the daily) before trading a 1-minute chart?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (4)
bullish
Price closing higher than it opened; buyers in control.
bearish
Price closing lower than it opened; sellers in control.
timeframe
The period each candle represents (1m, 5m, daily…).
momentum
The strength/persistence of a price move.
Further reading & references (2)
  • Babypips: "Timeframes" — How multi-timeframe analysis works.
  • Investopedia: "Bullish vs Bearish" — Definitions with examples.
Module 1 · Quiz

Module 1 quiz

Tap an answer to check it instantly. Graded scoring, the 80% gate, and saving are in the browser app.

✎ Knowledge check

1. A candlestick’s "body" represents the distance between…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. A red (bearish) candle means…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. The thin lines above and below the body are called…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. Why glance at a higher timeframe before trading a fast one?

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. A long green body with tiny wicks suggests…

Tap an answer to check it — instant feedback, nothing graded.

Module 2 of 5 · Overview

Trends, Support & Resistance

What you’ll be able to do
  • Identify uptrends, downtrends, and ranges from price structure.
  • Read higher highs / lower lows to define trend direction.
  • Spot support and resistance and understand why they matter.

2 lessons and a self-check quiz. Tap Next to begin.

Module 2 · Lesson 1 of 2

Trend: the market’s direction

Price mostly does one of three things: trends up, trends down, or ranges sideways. Naming which one you’re in is the first decision a trader makes, because strategies differ for each.

An uptrend is a stair-step of higher highs and higher lows — each pullback stops above the last. A downtrend is the mirror: lower highs and lower lows.

Uptrend — higher highs, higher lows
14.413.111.810.49.1rising supporthigher high

Each dip bottoms higher than the last — buyers stepping in earlier each time. That rising line is dynamic support.

Downtrend — lower highs, lower lows
20.919.317.816.214.6falling resistancelower low

Each bounce peaks lower — sellers getting more aggressive. Trading against this without a reason is fighting the tape.

✎ Knowledge check

A series of higher highs and higher lows defines a…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (4)
trend
The general direction of price: up, down, or sideways.
uptrend
Higher highs and higher lows.
downtrend
Lower highs and lower lows.
higher high / lower low
Swing points that define trend direction.
Further reading & references (2)
  • Babypips: "Trend" — Identifying and trading with the trend.
  • Investopedia: "Trend" — Trend definitions and dangers of counter-trend trading.
Module 2 · Lesson 2 of 2

Support, resistance & ranges

Support is a price area where buyers have repeatedly stepped in and stopped a fall. Resistance is where sellers have repeatedly capped a rise. They’re zones, not exact lines.

A range between support and resistance
51.250.650.049.548.9ResistanceSupport

Price bounces between the floor (support) and ceiling (resistance). Range traders buy near support and sell near resistance — until price breaks out.

Why these levels matterLevels work partly because so many traders watch them. Orders cluster there, which makes them more likely to react — a self-fulfilling focus point. That’s the rationale, not magic.
They breakSupport and resistance are tendencies, not walls. When a level breaks decisively (often on rising volume), old resistance can become new support — and a trade based on the old level can go wrong fast. Always plan for the break.
✎ Knowledge check

Price keeps bouncing down off $50.90 without passing it. That level is acting as…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
support
A price floor where buyers repeatedly step in.
resistance
A price ceiling where sellers repeatedly cap rises.
range
Sideways price bouncing between support and resistance.
breakout
Price decisively leaving a level or range.
level
A price zone many traders watch.
Further reading & references (2)
  • Babypips: "Support and Resistance" — The foundational free lesson.
  • Investopedia: "Support and Resistance Basics" — With chart examples.
Module 2 · Quiz

Module 2 quiz

Tap an answer to check it instantly. Graded scoring, the 80% gate, and saving are in the browser app.

✎ Knowledge check

1. An uptrend is defined by…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. Support is best described as…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. When price moves sideways between a floor and a ceiling, that’s a…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. A common reason levels "work" is that…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. After resistance breaks decisively, it often…

Tap an answer to check it — instant feedback, nothing graded.

Module 3 of 5 · Overview

Candlestick Patterns

What you’ll be able to do
  • Recognise the doji, hammer, and engulfing patterns.
  • Explain the buyer/seller psychology each one reflects.
  • Understand why patterns need context, not blind trust.

2 lessons and a self-check quiz. Tap Next to begin.

Module 3 · Lesson 1 of 2

Indecision & reversal candles

Some single candles hint that momentum may be shifting. They aren’t crystal balls — they’re clues that only mean something in the right context (at a support level, after a trend, on decent volume).

The doji — indecision

A doji opens and closes at almost the same price, leaving a tiny body with wicks on both sides. It says buyers and sellers fought to a draw. After a long trend, that stalemate can warn the trend is tiring.

Doji after an up-move
11.911.410.810.29.7Doji — stalemate

After three green candles, a doji shows momentum stalling. Rationale: buyers could no longer close the candle higher.

The hammer — rejection of lower prices

A hammer has a small body up top and a long lower wick. Price fell hard, then buyers dragged it back up by the close. At support, that long wick is a footprint of buyers defending the level.

Hammer at support
12.411.711.010.39.6Supportlong wick = buyers defended

The long lower wick shows sellers pushed price to ~9.9 but buyers reclaimed it by the close — a rejection of lower prices.

✎ Knowledge check

A hammer’s long lower wick tells you that during the period…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (4)
doji
A candle with almost no body — indecision.
hammer
Small body, long lower wick — buyers rejected lower prices.
reversal
A potential change of trend direction.
rejection
A sharp move that is pushed back, leaving a long wick.
Further reading & references (2)
  • Investopedia: "Doji" and "Hammer" — Definitions and the psychology behind each.
  • Nison, "Japanese Candlestick Charting Techniques" — Deep treatment of single-candle signals.
Module 3 · Lesson 2 of 2

Engulfing patterns & using context

A bullish engulfing is two candles: a small red one, then a big green one whose body completely covers it. It says sellers were firmly overpowered by buyers — a potential turn, especially after a downtrend into support.

Bullish engulfing
15.414.914.414.013.5green body engulfs the red

The final green candle opens near the prior close and closes above the prior open — buyers overwhelmed sellers.

Context is everythingThe exact same candle shape means little in the middle of nowhere. Traders weight a pattern far more when it appears at a tested level, aligns with the higher-timeframe trend, and comes with above-average volume. A pattern alone is a weak signal.
How a trader actually uses a pattern
1
LocationIs it at a meaningful level (support/resistance)? If not, ignore it.
2
Trend fitDoes it agree with the higher-timeframe direction?
3
ConfirmationWait for the next candle / volume to confirm rather than guessing.
4
Risk planDefine the stop (where the idea is wrong) and target before entering.
✎ Knowledge check

Why is a bullish engulfing at support more meaningful than one in open space?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (4)
engulfing
A candle whose body fully covers the prior candle’s body.
confluence
Several independent signals agreeing.
confirmation
Waiting for a following candle/volume to validate a signal.
context
The surrounding level, trend, and volume that give a pattern meaning.
Further reading & references (2)
  • Investopedia: "Engulfing Pattern" — Bullish/bearish engulfing explained.
  • CMT Association resources — Professional technical-analysis education.
Module 3 · Quiz

Module 3 quiz

Tap an answer to check it instantly. Graded scoring, the 80% gate, and saving are in the browser app.

✎ Knowledge check

1. A doji mainly signals…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. A hammer is characterised by…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. A bullish engulfing candle…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. The single biggest factor that makes a pattern trustworthy is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. Before acting on a reversal candle, a disciplined trader first…

Tap an answer to check it — instant feedback, nothing graded.

Module 4 of 5 · Overview

Indicators & Volume

What you’ll be able to do
  • Read a moving average and what crossovers suggest.
  • Understand VWAP and why intraday traders watch it.
  • Use volume to judge whether a move has conviction.

2 lessons and a self-check quiz. Tap Next to begin.

Module 4 · Lesson 1 of 2

Moving averages & VWAP

An indicator is math drawn on top of price to summarise it. They lag (they’re built from past prices), so they add context — they don’t predict. Two are enough to start.

Moving average (MA)

A moving average plots the average price over the last N periods as a smooth line. Price above a rising MA is a simple shorthand for "trend is up." When a fast MA crosses above a slow MA, some traders read momentum turning up.

Price riding above a rising moving average
14.413.111.810.49.1MA(3)

The blue line is a 3-period average. Price holding above a rising average is a quick read that buyers are in control.

VWAP

VWAP (volume-weighted average price) is the average price weighted by volume, reset each day. Intraday traders treat it as a fair-value line: above VWAP is often seen as bullish for the day, below as bearish. Big institutions benchmark fills against it, which is why it draws attention.

✎ Knowledge check

Why do indicators "lag" price?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
indicator
Math drawn on price to summarize it; lags price.
moving average
The average price over N periods, drawn as a line.
VWAP
Volume-weighted average price; an intraday fair-value line, resets daily.
crossover
When a faster average crosses a slower one.
lag
Indicators trail price because they use past data.
Further reading & references (2)
  • Investopedia: "Moving Average" & "VWAP" — Definitions and formulas.
  • Babypips: "Moving Averages" — Free lessons with visuals.
Module 4 · Lesson 2 of 2

Volume — the conviction gauge

Volume is how many shares changed hands in a period, drawn as bars under the chart. It’s the closest thing to a lie-detector for a move: price up on high volume shows real participation; price up on thin volume can be fragile.

Breakout confirmed by a volume surge
32.531.730.930.229.4Resistancebreakout on big volumeVol

Price chops under resistance on low volume, then breaks out as volume spikes — the surge suggests real conviction behind the move.

RationaleA breakout on rising volume is more trustworthy because it shows many participants agreeing, not one thin push. A breakout on weak volume more often fails and snaps back (a "fakeout").
No single tool is enoughIndicators and volume add context to price — they don’t replace it, and stacking many contradictory indicators ("analysis paralysis") tends to hurt, not help. Keep it simple.
✎ Knowledge check

A breakout above resistance on unusually high volume is generally seen as…

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (4)
volume
Shares traded in a period; a gauge of participation.
conviction
How much real buying/selling backs a move.
fakeout
A breakout that fails and reverses.
participation
How many market players are involved in a move.
Further reading & references (2)
  • Investopedia: "Volume" — Why volume confirms or questions a move.
  • Babypips: "Volume" — Reading volume on charts.
Module 4 · Quiz

Module 4 quiz

Tap an answer to check it instantly. Graded scoring, the 80% gate, and saving are in the browser app.

✎ Knowledge check

1. A moving average is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. VWAP is reset…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. Indicators lag because…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. Rising volume on a breakout suggests…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. A sensible approach to indicators is to…

Tap an answer to check it — instant feedback, nothing graded.

Module 5 of 5 · Overview

A Setup & Risk Management

What you’ll be able to do
  • Walk through a simple setup combining level, pattern, and volume.
  • Define entry, stop-loss, target, and risk/reward before entering.
  • Apply position sizing and respect why most day traders lose.

2 lessons and a self-check quiz. Tap Next to begin.

Module 5 · Lesson 1 of 2

A sample setup, step by step

Not a recommendationThis is a teaching example of how the pieces fit — not a trade to copy. Real markets are messier, and no setup wins every time.

Good setups are about confluence: several clues pointing the same way. Here a support level, a hammer (rejection), and a volume pickup line up.

Confluence: support + hammer + volume
20.820.219.618.918.3SupportTarget (prior resistance)Stop (below support)hammer defends supportVol

Buyers defend $19 with a hammer on rising volume; a trader might enter as the next candle confirms, stop just below support, and target the prior resistance.

The plan, before entering
1
EntryAs the confirming green candle closes back above support (~$19.9).
2
Stop-lossJust below support (~$18.9) — the price that proves the idea wrong.
3
TargetThe prior resistance (~$20.6), where sellers may return.
4
Risk / rewardRisking ~$1.0 to make ~$0.7 here is poor (0.7:1). A disciplined trader might skip it or wait for a better entry.
✎ Knowledge check

What is the stop-loss really marking?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (5)
setup
A repeatable pattern of conditions a trader waits for.
entry
The price/point at which a position is opened.
stop-loss
A preset exit that caps the loss if wrong.
target
A planned profit-taking price.
confluence
Multiple aligning signals strengthening a setup.
Further reading & references (2)
  • Babypips: "Trade Plan" — Building entries, stops, and targets.
  • Investopedia: "Stop-Loss Order" — Mechanics and rationale.
Module 5 · Lesson 2 of 2

Risk management — the real edge

You cannot control whether a trade wins. You can control how much you lose when it doesn’t. That’s why professionals obsess over risk, not entries.

Position sizing

A common rule: risk only a small fixed fraction (say 1%) of your account per trade. If your stop is $1 away and 1% of your account is $50, you buy 50 shares. Size is set by the stop, not by excitement.

ConceptWhy it matters
Risk/rewardAim for targets bigger than your risk (e.g. 2:1) so you can be right less than half the time and still come out ahead.
Position sizingCaps the damage of any single loss so no one trade can sink you.
Stop-lossPre-decides your exit when wrong, removing emotion in the moment.
ConsistencyAn edge only shows up over many trades — one trade proves nothing.
The honest truthStudies repeatedly find the large majority of active day traders lose money over time, and consistent profitability is rare and hard. Leverage magnifies losses as much as gains. Treat this as a skill to study carefully and risk small — never money you need.
✎ Knowledge check

Why do professionals focus more on risk than on entries?

Tap an answer to check it — instant feedback, nothing graded.

Key vocabulary (4)
risk management
Controlling loss size so no trade can sink you.
position sizing
Choosing how much to trade based on stop distance and % risk.
risk/reward
The ratio of potential loss to potential gain.
drawdown
A peak-to-trough decline in account value.
Further reading & references (3)
  • SEC investor.gov: "Day Trading" — Regulator’s plain warnings on day-trading risk.
  • Investopedia: "Risk/Reward Ratio" & "Position Sizing" — Core money-management math.
  • Study: Barber & Odean on day-trader performance — Evidence that most active day traders lose over time.
Module 5 · Quiz

Module 5 quiz

Tap an answer to check it instantly. Graded scoring, the 80% gate, and saving are in the browser app.

✎ Knowledge check

1. "Confluence" in a setup means…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. A stop-loss marks…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. Position size should be determined mainly by…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. A 2:1 reward-to-risk lets you…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. A realistic view of day trading is that…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

6. The main thing a trader can actually control is…

Tap an answer to check it — instant feedback, nothing graded.

Final Certification Exam

Final exam

Tap an answer to check it. The graded exam and certificate are in the browser app.

✎ Knowledge check

1. The body of a candlestick spans…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

2. A green candle means the close is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

3. Higher highs and higher lows define…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

4. A floor where buyers repeatedly step in is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

5. A doji represents…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

6. A hammer shows…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

7. A bullish engulfing candle is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

8. What makes a pattern trustworthy is mostly…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

9. VWAP resets…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

10. A breakout on high volume is…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

11. A stop-loss is placed…

Tap an answer to check it — instant feedback, nothing graded.

✎ Knowledge check

12. The most realistic statement about day trading is…

Tap an answer to check it — instant feedback, nothing graded.

Reference

Glossary & key vocabulary

bearish Module 1
Price closing lower than it opened; sellers in control.
body Module 1
The thick part of a candle, spanning open to close.
breakout Module 2
Price decisively leaving a level or range.
bullish Module 1
Price closing higher than it opened; buyers in control.
candlestick Module 1
A bar showing four prices for one time period: open, high, low, close.
close Module 1
The price at the end of the period.
confirmation Module 3
Waiting for a following candle/volume to validate a signal.
confluence Module 3
Several independent signals agreeing.
confluence Module 5
Multiple aligning signals strengthening a setup.
context Module 3
The surrounding level, trend, and volume that give a pattern meaning.
conviction Module 4
How much real buying/selling backs a move.
crossover Module 4
When a faster average crosses a slower one.
doji Module 3
A candle with almost no body — indecision.
downtrend Module 2
Lower highs and lower lows.
drawdown Module 5
A peak-to-trough decline in account value.
engulfing Module 3
A candle whose body fully covers the prior candle’s body.
entry Module 5
The price/point at which a position is opened.
fakeout Module 4
A breakout that fails and reverses.
hammer Module 3
Small body, long lower wick — buyers rejected lower prices.
high / low Module 1
The highest and lowest prices reached in the period.
higher high / lower low Module 2
Swing points that define trend direction.
indicator Module 4
Math drawn on price to summarize it; lags price.
lag Module 4
Indicators trail price because they use past data.
level Module 2
A price zone many traders watch.
momentum Module 1
The strength/persistence of a price move.
moving average Module 4
The average price over N periods, drawn as a line.
open Module 1
The price at the start of the period.
participation Module 4
How many market players are involved in a move.
position sizing Module 5
Choosing how much to trade based on stop distance and % risk.
range Module 2
Sideways price bouncing between support and resistance.
rejection Module 3
A sharp move that is pushed back, leaving a long wick.
resistance Module 2
A price ceiling where sellers repeatedly cap rises.
reversal Module 3
A potential change of trend direction.
risk management Module 5
Controlling loss size so no trade can sink you.
risk/reward Module 5
The ratio of potential loss to potential gain.
setup Module 5
A repeatable pattern of conditions a trader waits for.
stop-loss Module 5
A preset exit that caps the loss if wrong.
support Module 2
A price floor where buyers repeatedly step in.
target Module 5
A planned profit-taking price.
timeframe Module 1
The period each candle represents (1m, 5m, daily…).
trend Module 2
The general direction of price: up, down, or sideways.
uptrend Module 2
Higher highs and higher lows.
volume Module 4
Shares traded in a period; a gauge of participation.
VWAP Module 4
Volume-weighted average price; an intraday fair-value line, resets daily.
wick / shadow Module 1
The thin lines to the high and low; show rejected prices.
Oboros

Keep building.

The reading view — read every lesson, code sample, chart, glossary, and self-check quiz right here. Open in a browser for the live dashboard, saved progress, graded quizzes, settings, and importing.

2
Courses
12
Modules
31
Lessons
80%
Pass mark
Reading view. To track progress, use the 80% gate, take graded quizzes, change appearance/text size in Settings, and import courses, open this file in a web browser (tap download, then open it).
Your courses
Freelance App Builder
7 modules · 20-question final
About this course
A codebase-level path: write real HTML/CSS/JS, call APIs, model data, use a database, add AI, and deploy.
Reading Stock Charts for Day Trading
5 modules · 12-question final
About this course
Candlesticks, support & resistance, patterns, indicators, and risk management — with annotated chart examples.