All frameworks
TypeScript

TypeScript

Finish confident in building, structuring, and reasoning about JavaScript applications without relying on frameworks.

TypeScript 7.0TypeScript 7.0
Module 1

Dom Selection & Manipulation

Master the essentials of working directly with the DOM to build responsive, interactive interfaces without frameworks.

4

Product Card Renderer

easy1 / 3 solved

Notice Banner States

easy0 / 2 solved

Table Row Builder

easy0 / 1 solved

Dashboard Tile Grid

easy1 / 2 solved
Module 2 · Coming soon

Events & Event Handling

Master event handling to connect user actions with meaningful changes in your application.

4

Quantity Stepper

easy0 / 1 solved

Dismissible Dialog

easy0 / 1 solved

Live Character Counter

easy0 / 1 solved

Filter Toolbar

easy0 / 1 solved
Module 3

Rendering & DOM Construction

Learn to build DOM the way a maintainable frontend does — as pure render functions over typed data instead of ad-hoc jQuery-style mutation. Renderers take data and return fresh nodes, never reach into the document, and stay independently testable without a page. A single mount helper owns container mutation. The topic covers list rendering, exhaustive state rendering (loading / empty / error / list) over discriminated unions, safe text handling that resists XSS by using textContent and URL allow-listing, and template-driven filtered lists that re-render only what should change while the form retains user input. The recurring lesson: separate pure logic from DOM ownership, and every render leaves the container with exactly one child no matter what came before.

4

Job Listing Board

easyNo attempts yet

Notifications Feed

easyNo attempts yet

Course Review Comments

easyNo attempts yet

Recipe List Page

easy0 / 1 solved
Module 4

Forms & Input Handling

Build production-shaped form flows in Vanilla TypeScript. The topic covers pure validate functions that return typed error maps, per-field render helpers that manage aria-invalid and aria-describedby, touched-on-blur error surfacing, submit gating tied to live validity, dirty tracking against a baseline with beforeunload prompts, conditional field groups driven by a discriminant that also shape the outgoing payload, and async submission with confirmation and rejection paths. The recurring lesson: pure logic decides what's wrong, small render helpers put that decision on the page, and payloads leaving the form are trimmed, typed, and contain nothing from a hidden field group.

4

Insurance Quote Form

easy0 / 1 solved

Profile Settings Editor

easyNo attempts yet

Member Signup Form

easy0 / 1 solved

Studio Booking Submission

easyNo attempts yet
Module 5

Modules & Code Organisation

Structure a small TypeScript codebase across modules the way a real front end does. The topic covers splitting helpers into cohesive named-export packages with an acyclic import graph and no window writes, centralising configuration behind a single accessor module that hides a raw global from every consumer, dynamic import() for lazy code-splitting with deduped concurrent calls and success caching (but no cached failures), and shared bootstrap plus per-view entries whose init functions are idempotent — safe to call multiple times without duplicating listeners or work. The runtime tests enforce the seams: no side effects at import time, no global mutation, no duplicated registrations on repeat init.

4

Storefront Utilities Package

easyNo attempts yet

Storefront Config Module

easyNo attempts yet

Analytics Chart Loader

easyNo attempts yet

Shared Storefront Bootstrap

easyNo attempts yet
Module 6

Arrays & Data Transformation

4

Group Bookings By Day

easyNo attempts yet

Leaderboard Sorting

easyNo attempts yet

Order Totals

easyNo attempts yet

Inventory Summary Panel

easyNo attempts yet