Beginner tier

  • gentle

    CLI Quiz or Habit Log

    Build a small command-line program in Node โ€” either a quiz that scores a player, or a habit log that records daily entries โ€” that remembers state across runs.

    Practices: Values, variables, and operators, Control flow, Functions and scope, Arrays and objects

  • moderate

    Accessible Task Tracker

    Build a browser-based task list โ€” add, complete, filter, and persist tasks โ€” that's fully usable by keyboard and screen reader, not just by mouse.

    Practices: The browser and the DOM, Forms and events, Arrays and objects, localStorage

  • challenge

    API Explorer

    Build a browser app that fetches data from a public or local mock API, handles loading/empty/error states, and lets a user search and filter what comes back.

    Practices: Async basics and fetching, Arrays and objects, The browser and the DOM

Intermediate tier

  • moderate

    Modular Data Dashboard

    Build a dashboard pulling from multiple APIs, with cancellation, cached state, URL-backed controls, and an accessible chart-or-table alternative.

    Practices: Async JavaScript in depth, Browser application architecture, Testing and maintainability

  • moderate

    Offline-First Reading List

    Build a reading list that works offline, backed by IndexedDB and a service worker with a documented caching strategy.

    Practices: Networking, storage, and workers, Browser application architecture

  • challenge

    Node Data-Processing CLI

    Build a tested command-line tool that transforms a data file, with a streaming option for large inputs and documented package structure.

    Practices: Node.js and cross-runtime JavaScript, Testing and maintainability, Types, documentation, and package design

Advanced tier

  • challenge

    Cross-Runtime Library

    Design and ship a small library with a stable public API, conditional exports for browser/Node, a compatibility matrix, benchmarks, a threat model, and a documented release process.

    Practices: Modules, packages, and supply-chain design, Engine behavior and performance engineering

  • challenge

    Concurrent Processing System

    Build a worker-based processing pipeline with bounded queues, cancellation, observability, and evidence from load and failure testing.

    Practices: Concurrency, scheduling, and distributed effects, Architecture for large systems

  • challenge

    Static Analysis or Codemod Tool

    Build a small source-analysis tool or codemod with a real AST pipeline, actionable diagnostics, fixture-based tests, and documented limitations.

    Practices: Advanced testing and verification, API and language-tool design

  • challenge

    Legacy Modernization Dossier

    Produce a complete modernization dossier for a coupled, hard-to-change codebase โ€” an architecture map, profiling evidence, a risk register, ADRs, and a staged, reversible migration plan.

    Practices: Architecture for large systems, Security and isolation