Phase 2Days 13-28

JavaScript Essentials

Make things actually do things

Phase Goal

Read, write, and reason about modern JavaScript. End the phase with two interactive apps shipped to the web.

Progress
Notes

Open the written lectures for this course before checking off the phase topics.

Mini Projects
Trail-condition digest
Build an EquipmentPool class
Inspection queue triage
Live filter for public meeting records
Astronaut roster viewer
Ten shipped interface instruments
Projects
Community Pantry Dispatch Board
Public Art Walk Planner
Phase 2 Capstone — Two deployed civic tools

Day 13: JS Runtimes & The Mental Model

Day 14: Functions & Scope

Day 15: Control Flow

Day 16: Arrays & Their Key Methods

Mini Project
Trail-condition digest

Given a hardcoded array of trail reports with route, difficulty, status, and last inspection, filter open routes, sort by inspection age, and render a compact digest using array methods only. No loops written by hand.

Day 17: Objects, Destructuring, Spread

Day 18: Classes & OOP in JS

Mini Project
Build an EquipmentPool class

Model a lending pool with private #loans, checkout(item), returnItem(id), availableCount getter, and a static empty() factory. Throw a custom LoanError when returning an unknown loan. No frameworks — run it with Node.

Day 19: DOM Manipulation

Mini Project
Inspection queue triage

Render incoming inspection reports with resolve actions. Use one delegated click listener on the queue container and preserve the report ID through data attributes.

Day 20: Events

Mini Project
Live filter for public meeting records

Filter a meeting-record index by committee, topic, or speaker in real time. Debounce by 200ms and render a useful no-matches state.

Day 21: Async JS — The Event Loop

Day 22: Promises & fetch

Mini Project
Astronaut roster viewer

Fetch the current people-in-space roster from a public API and render mission-grouped results. Show explicit loading, empty, stale, and failure states.

Day 23: async / await & Error Handling

Day 24: Storage, Dates, Numbers, Regex

Day 25: Modules, Bundlers, Tooling

Day 26: Practice — Build 10 Tiny Products

Mini Project
Ten shipped interface instruments

Ten single-page instruments — tide clock, lap marshal, medication interval timer, evacuation drill quiz, recovery-code generator, volunteer intake validator, water-usage ledger, specimen label board, package-status lookup, and duty roster. Each has a detailed spec, observable acceptance criteria, hidden hints, and a solution that unlocks only after a real attempt.

Day 27: Project — Build the Community Pantry Dispatch Board

Project
Community Pantry Dispatch Board

Coordinate incoming food parcels through received, packed, assigned, and collected states. Support edits, deletion with undo, urgency and status filters, local persistence, keyboard operation, motion-safe feedback, and a high-contrast theme.

Day 28: Project — Public Art Walk Planner + Ship Both

Project
Public Art Walk Planner

Search a civic public-art dataset by artist, neighborhood, or medium; render accessible works, cancel stale searches, paginate results, and save an ordered walking shortlist locally. Include loading, empty, error, retry, image-fallback, and mobile route-summary states.

Capstone
Phase 2 Capstone — Two deployed civic tools

The Pantry Dispatch Board and Public Art Walk Planner are both live, polished, keyboard-operable, failure-aware, and documented with evidence of the state and async decisions you made.

Phase Complete!

After this phase, you'll be able to:

  • Modern JS: closures, async/await, modules, ES2023+ features
  • Comfortable with array methods + functional patterns
  • DOM manipulation + event delegation
  • Fetch API with proper loading/error/empty states
  • Vite + ESLint + Prettier project setup

Two interactive apps in production. You can build small frontend apps end-to-end without React.