{
  "date": "2026-09-29",
  "chapters": [
    {
      "id": "foundations",
      "number": "01",
      "title": "A request becomes a response.",
      "subtitle": "Week 1 \u00b7 HTTP, Node, Express, forms, and JSON",
      "source": "Week 1 course page, both local Express activities, and the Week 1 study plan.",
      "learn": true
    },
    {
      "id": "typescript",
      "number": "02",
      "title": "Types describe your assumptions.",
      "subtitle": "TypeScript basics \u00b7 the book catalog exercise",
      "source": "TypeScript README, src/index.ts, its study plan, and type usage in Weeks 2\u20134/HW1.",
      "learn": true
    },
    {
      "id": "middleware",
      "number": "03",
      "title": "Order is part of the behavior.",
      "subtitle": "Week 2 \u00b7 routers, middleware, services, and first tests",
      "source": "Week 2 course page, books-router.ts, books-service.ts, app/index, tests, and its study plan.",
      "learn": true
    },
    {
      "id": "homework",
      "number": "04",
      "title": "Put the pieces together: SliceDrop.",
      "subtitle": "Homework 1 \u00b7 menu, role checks, order validation, and errors",
      "source": "Local HW1 implementation, all four test files, README, and the complete TEACHING_GUIDE.",
      "learn": true
    },
    {
      "id": "mongo",
      "number": "05",
      "title": "Move state into a database.",
      "subtitle": "Week 3 \u00b7 MongoDB, BSON, CRUD, ids, and Express integration",
      "source": "Full supplied Week 3 notes; db-explore.ts, db.ts, product-router.ts, validate-id.ts, tests, and study plan.",
      "learn": true
    },
    {
      "id": "rest",
      "number": "06",
      "title": "Design the public contract.",
      "subtitle": "Week 4 \u00b7 REST, representations, and controller\u2013service layers",
      "source": "Full supplied Week 4 notes (including \u201cWrite the tests\u201d), local source/test refinements, and Week 4 study plan.",
      "learn": true
    },
    {
      "id": "tests",
      "number": "07",
      "title": "Make the evidence repeatable.",
      "subtitle": "Weeks 2\u20134 + HW1 \u00b7 Vitest, Supertest, database isolation, and matchers",
      "source": "Week 2/HW1 tests, full Week 3/4 testing sections, and both Mongo test setups.",
      "learn": true
    },
    {
      "id": "practice",
      "number": "08",
      "title": "Try it before revealing it.",
      "subtitle": "Practice lab \u00b7 trace, predict, write, and check",
      "source": "Practice adapted from the linked NYT tasks and the six existing guides.",
      "learn": false
    },
    {
      "id": "recall",
      "number": "09",
      "title": "Close the notes. Explain it.",
      "subtitle": "Active recall \u00b7 42 questions with answer reveals",
      "source": "Consolidated self-checks from every topic.",
      "learn": false
    },
    {
      "id": "reference",
      "number": "10",
      "title": "The desk reference.",
      "subtitle": "Commands, ports, status codes, troubleshooting, and vocabulary",
      "source": "Scripts and source in the current seven local projects, plus course notes.",
      "learn": false
    },
    {
      "id": "sources",
      "number": "11",
      "title": "Every topic has a trail.",
      "subtitle": "Coverage, original guides, and source library",
      "source": "Current course pages, local files, and retained guides. Original guide prose is preserved.",
      "learn": false
    }
  ],
  "original_guides": [
    "Classes/si-679-f-26-ts-basics-kelvintiger/STUDY_PLAN.md",
    "Classes/si-679-f-26-week1-nyt-kelvintiger/STUDY_PLAN.md",
    "Classes/si-679-f-26-week02-nyt-kelvintiger/STUDY_PLAN.md",
    "Homework/si-679-f-26-hw1-kelvintiger/TEACHING_GUIDE.md",
    "Classes/si-679-f-26-week03-nyt-kelvintiger/STUDY_PLAN.md",
    "Classes/si-679-f-26-week-04-nyt-kelvintiger/STUDY_PLAN.md"
  ],
  "course_urls": [
    "https://umich-mia.atlassian.net/wiki/external/MmNjZTg1NDkyNDQzNDM1MDg1OTI2NTRmZmE3MzEzMTA",
    "https://umich-mia.atlassian.net/wiki/external/YmI3NWJkMDkzOGJmNDMyZjkyYzdlZWYwYTQ4MDU4Y2U",
    "https://si679-public.github.io/weeks/week03-mongo-integration/week03-notes",
    "https://si679-public.github.io/weeks/week04-rest/week04-notes#write-the-tests"
  ],
  "coverage": [
    {
      "source": "Week 1 \u00b7 Getting started / first route / routes",
      "topics": "Node/npm/ESM/watch, Express app/listen, method+path, response APIs",
      "anchor": "foundations"
    },
    {
      "source": "Week 1 \u00b7 POST / forms / form middleware",
      "topics": "action/method/name, req.body, URL-encoded parser, ZIP text",
      "anchor": "request-inputs"
    },
    {
      "source": "Week 1 \u00b7 Query strings / route params / errors",
      "topics": "req.query/params, decoding, numeric guards, 400/default 200",
      "anchor": "request-inputs"
    },
    {
      "source": "Week 1 \u00b7 NYT #1",
      "topics": "catalog, play, getform/submitform, browse",
      "anchor": "week1-activities"
    },
    {
      "source": "Week 1 \u00b7 Postman / JSON / NYT #2",
      "topics": "postData, hithere, tracks/error/timestamp, products AND keywords",
      "anchor": "week1-activities"
    },
    {
      "source": "TypeScript basics \u00b7 all six tasks",
      "topics": "Interface, annotation, enum, signatures, union/narrowing, generic",
      "anchor": "typescript"
    },
    {
      "source": "Week 2 \u00b7 Setting up TS / routing / NYT #1",
      "topics": "NodeNext/build/dev/typecheck, Router/service, combined exact filters",
      "anchor": "week2-setup"
    },
    {
      "source": "Week 2 \u00b7 HTTP headers / middleware",
      "topics": "Header metadata/case/custom values, logger, auth, route order",
      "anchor": "middleware-order"
    },
    {
      "source": "Week 2 \u00b7 Errors / statuses / NYT #2",
      "topics": "Four-argument handler, badroute, 201, GET by id, PATCH body id",
      "anchor": "week2-routes"
    },
    {
      "source": "Week 2 \u00b7 Supertest / app split / state leaks / NYT #3",
      "topics": "Request chains, reset, body/text assertions, auth/filter/delete cases",
      "anchor": "week2-setup"
    },
    {
      "source": "HW1 \u00b7 complete local implementation and guide",
      "topics": "Menu/filter, two roles, exact parser, all order validation, state/errors/tests",
      "anchor": "homework"
    },
    {
      "source": "Week 3 \u00b7 What is Mongo / NoSQL / BSON",
      "topics": "SQL tradeoffs, collection/document/field, nesting/types, server vs driver",
      "anchor": "mongo-vocabulary"
    },
    {
      "source": "Week 3 \u00b7 Database / starter / connection",
      "topics": "Compass/mongosh, URI, client/db/collection/ping/disconnect, watch duplicates",
      "anchor": "mongo-connect"
    },
    {
      "source": "Week 3 \u00b7 Inserts / finds / queries / updates / deletes",
      "topics": "insertOne/Many, cursor/findOne, ObjectId, comparisons, $set/results/options",
      "anchor": "mongo-crud"
    },
    {
      "source": "Week 3 \u00b7 NYT #1 + stretch",
      "topics": "Pricier products, Scotch price, Masking deletion, onSale many update",
      "anchor": "mongo-activities"
    },
    {
      "source": "Week 3 \u00b7 Express / DB / router / app / server / Postman",
      "topics": "All CRUD routes, connection before listen, type shapes and statuses",
      "anchor": "mongo-api"
    },
    {
      "source": "Week 3 \u00b7 Live DB tests / temporary Mongo / matchers",
      "topics": "Cross-run and cross-test contamination, hooks, matchers/rejections",
      "anchor": "tests"
    },
    {
      "source": "Week 3 \u00b7 NYT #2 + stretch",
      "topics": "PATCH preserved fields/404, DELETE 200/404, malformed-id middleware tests",
      "anchor": "practice-mongo"
    },
    {
      "source": "Week 4 \u00b7 REST / principles / scenario",
      "topics": "Six constraints, representation, entities/fields/endpoints/policy boundaries",
      "anchor": "rest-design"
    },
    {
      "source": "Week 4 \u00b7 Architecture / build GET / all layers",
      "topics": "Layer responsibilities, imports, converters, map, glue/errors/startup",
      "anchor": "controller-service"
    },
    {
      "source": "Week 4 \u00b7 Build POST / DB/model/service/controller/router / Postman",
      "topics": "Partial, ??, insertedId, 201/id, readback/Compass, troubleshooting",
      "anchor": "rest-post-delete"
    },
    {
      "source": "Week 4 \u00b7 NYT #1 + DELETE stretch",
      "topics": "GET single/404/public id, delete count/readback, controller HTTP decision",
      "anchor": "week4-activities"
    },
    {
      "source": "Week 4 \u00b7 Supertest / temporary DB / init / hooks / seed / assertions",
      "topics": "App vs startup boundary, direct DB fixtures, matcher examples",
      "anchor": "test-lifecycle"
    },
    {
      "source": "Week 4 \u00b7 NYT #2 / Write the tests / DELETE stretch tests",
      "topics": "Exact requested-object/404 tests; successful/absent deletion and list state",
      "anchor": "worked-tests"
    }
  ]
}
