Commit Graph

120 Commits

Author SHA1 Message Date
dependabot[bot]
3d2d9c92a5 deps(kits-ext): bump @types/vscode in /kits/vscode-ext (#1646)
Bumps [@types/vscode](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/vscode) from 1.116.0 to 1.118.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/vscode)

---
updated-dependencies:
- dependency-name: "@types/vscode"
  dependency-version: 1.118.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-04 07:18:53 -04:00
Vijay Janapa Reddi
5e7e2c24a2 Merge remote-tracking branch 'origin/dev' into dev 2026-05-03 12:25:21 -04:00
Vijay Janapa Reddi
4ad0beb306 fix(quarto-sites): match instructors look across labs/kits/book/tinytorch
The original hardening got the structural selectors right, but the
labs/kits/book sidebar still had two divergences from the instructors
reference: (a) section headers and leaf links rendered with the same
muted color (no hierarchy) because the section-header rule only matched
the chevron `<a class="sidebar-item-toggle">` and missed the section
text `<a class="sidebar-link text-start">`, and (b) the active-state
rule colored the text in the accent color rather than white on a subtle
accent tint, so active links read as loud accent fills instead of the
clean instructors look.

Changes per file:

* labs/, kits/: extend section-header selector list to include
  `a.sidebar-link.text-start`; drop `font-weight: 400 !important` from
  the leaf rule so the section-header weight (600) wins on elements
  matching both; move active-state color/background/weight into the
  high-specificity `#quarto-sidebar` guard block to beat Bootstrap's
  default `.sidebar-link.active { color: var(--bs-primary) }`.
* book/quarto/: same treatment, plus include `.part-divider` in the
  section-header selector list to keep the part-divider hierarchy.
* tinytorch/quarto/: same active-state hardening, plus rename
  `$accent` → `$accent-dark` throughout (the theme partial
  shared/styles/themes/_theme-tinytorch.scss declares both variables;
  since Quarto auto-`!default`s every scss:defaults declaration, the
  reassignment of `$accent` here was silently ignored and rgba calls
  resolved with the light #D4740C value). Drop the unused
  `$link-color-dark` definition that referenced `$accent-dark` from
  scss:defaults — Quarto hoists user defaults above shared partial
  defaults, so `$accent-dark` isn't yet defined when that line runs.
  Rules in scss:rules resolve `$accent-dark` correctly because rules
  are processed after all defaults are merged.

Verified with Playwright probes on /vol1.html (slides), /index.html
(labs, kits), /big-picture.html (tinytorch), /api-stability.html
(mlsysim), /foundations-syllabus.html (instructors): all six now show
white active text on rgba(accent, 0.15) tint, weight 500, with bright
section headers (#e6e6e6) at weight 600 and muted leaf links (#888888
or #cbd5e1).
2026-05-03 10:07:34 -04:00
Vijay Janapa Reddi
1471546113 fix(quarto-sites): harden dark-mode sidebar across 7 sites
Extends PR #1633's instructors fix to the rest of the Quarto ecosystem.
Quarto renders floating sidebars with `<a class="sidebar-link">` and
`<a class="sidebar-item-toggle">` directly (not nested inside an
`.sidebar-item a` wrapper), so the legacy selector missed all real DOM
nodes.

Sites updated:
* slides, interviews, tinytorch/quarto, mlsysim/docs: full hardening
  (toggle, leaf-link, active-state, search input, TOC rail).
* labs, kits, book/quarto: added missing search-input theming
  (core sidebar and TOC fix already present from earlier work).

Each site's accent color is preserved: indigo for instructors and
interviews, pink for slides, amber for tinytorch, cyan for mlsysim,
teal for kits and labs, crimson for book.
2026-05-03 08:29:15 -04:00
Vijay Janapa Reddi
6c6bd5d6e3 fix(kits): correct typo resourses_temp.png -> resources_temp.png
Update the figure reference in raspi/llm/llm.qmd.
2026-05-02 09:57:46 -04:00
Farhan Asghar
415487748f fix(kits): make code blocks readable in dark mode (#1624)
Quarto re-loads the light syntax-highlighting CSS via a "quarto-color-scheme-extra" link that the color-toggle JS never disables, so it overrode the dark theme's code-block background and token colors. Force the github-dark palette and dark `#2c2c2c` background on `div.sourceCode pre.sourceCode` with !important, and split highlight-style into a light/dark pair so Quarto emits the dark syntax bundle.
2026-05-02 09:00:18 -04:00
Farhan Asghar
08a663cf03 fix(kits): improve dark mode dropdown menu contrast (#1623) 2026-05-02 09:00:12 -04:00
github-actions[bot]
d7084682e0 docs: add @Shashank-Tripathi-07 as contributor for bug (kits) 2026-04-30 12:39:22 +00:00
github-actions[bot]
1cf2562528 docs: add @farhan523 as contributor for bug, code (kits) 2026-04-30 12:38:48 +00:00
Farhan Asghar
90948ff8dc fix(kits/raspi/llm): wrap context-token array to prevent page overflow (#1606)
The 26-token `context` array was authored as inline code under a list
item, so it rendered as a single non-wrapping line and forced
horizontal scroll on the whole page. Move it into a fenced `text` code
block with the array broken across three lines — the block scrolls
within its own width and the page no longer overflows.
2026-04-30 08:26:40 -04:00
Rocky
0e47f63b25 fix(kits): fix TFLite size typo and broken pth command in raspi image-classification lab (#1609)
Two bugs in contents/raspi/image_classification/image_classification.qmd:

1. Size unit typo: cifar10.tflite was described as "674MB" but the
   original .keras model is 2.0MB and 1/3 of that is ~674KB. 674MB
   would be larger than the entire ImageNet training set -- clearly
   a unit typo that misleads students about model compression ratios.

2. Broken bash command for picamera2 venv path setup: the redirect
   target path was split across two lines with a stray newline after
   "python3.11/", turning it into two invalid shell commands:
   - redirecting stdout to a directory (error)
   - trying to execute "site-packages/system_site_packages.pth" (error)
   Merged the path onto one continuation line.
2026-04-30 08:26:23 -04:00
Vijay Janapa Reddi
6921b80c88 feat(kits|labs|instructors): tier-B versioning batch
Adds the Tier B (lite) versioning pattern to all three Quarto-only
sites in one commit — they have identical shape, so fragmenting would
add review burden without isolation benefit.

For each project:
  - workflow_dispatch inputs: release_type/description/site_only/
    explicit_version/confirm. Same shape as Tier A workflows so
    operators see one consistent UI across the monorepo.
  - New `prepare:` job calls _release-prepare.yml with tier=B and the
    project's previous_tag_pattern.
  - New manifest emit step before deploy: hashes the project's content
    directory (excluding _build, .quarto, etc.) and writes
    release-manifest.json into the build output. URL convention
    matches the deploy path: /kits/, /labs/, /instructors/.
  - New create-tag job: tags <project>-v<release_id> on success.
    Tier B intentionally skips AI-generated release notes — the
    description plus auto-generated commit list (where available) is
    sufficient given the rapid iteration cadence and lower citation
    stakes than book/staffml/tinytorch/mlsysim.
  - Quarto _quarto.yml: <meta name="release-manifest"> in
    include-in-header and shared/release/release-pill.html in
    include-after-body.

No changes to Marimo notebook structure (labs), Quarto build commands,
PDF builds, or any project's content files.
2026-04-28 18:19:53 -04:00
Vijay Janapa Reddi
aa75852a80 polish(404): bigger SVG font, smaller joke text, tighter joke pool
Iterates on the post-merge 404 redesign across all 8 sub-sites:

- SVG roofline-plot fonts bumped for readability without changing
  layout: axis labels 9.5pt to 14pt, region labels 9.5pt to 14pt,
  title and "your page (404)" annotation 11pt to 16pt.

- Random-joke font shrunk from 1.6rem to 1.3rem (1.1rem on mobile)
  so the joke no longer dominates the SVG above it.

- Removed the static "Looks like this page slipped past our load
  balancer" subline from 6 sub-sites — it read as a competing static
  joke alongside the random rotation. Slides and instructors keep
  their informational sublines.

- Joke pool tightened 97 to 79 via a strict ML-systems-centric test:
  if you could swap "page" for any generic web/ops resource and the
  joke still works, cut. Cuts removed the H&P canonical material
  (Amdahl's Law, TLB miss, Dennard scaling, false sharing, fat-tree
  topology) that is general computer architecture rather than ML
  systems specifically. 19 borderline jokes were rewritten to anchor
  punchlines in concepts only ML practitioners decode (KV cache,
  gradient AllReduce, prefill, ZeRO, speculative-decode acceptance,
  1F1B schedule, ridge point, BPE merges).
2026-04-26 08:04:57 -04:00
Vijay Janapa Reddi
8135dda4c8 feat(site): redesign 404 pages with curated ML systems jokes
Replace the inline-game 404 across all 8 sub-sites with a unified
design: roofline-plot illustration, random pick from a 97-joke
editorial-curated pool, dual CTA (home + playground), and a
GitHub-issue-backed contribute link for community submissions.

The joke pool was curated through a multi-agent editorial process:
4 generators (each with a different ML systems lens) produced 240
candidates; 5 reviewer personas (architect, NLP researcher, production
engineer, undergrad, copy editor) scored each; the synthesizer kept 92
surviving jokes plus 5 new canonical-architecture additions (Amdahl,
TLB, Dennard, false sharing, fat-tree topology) the architect flagged
as missing from the H&P-tradition canon.

Self-contained CSS with prefers-color-scheme: dark adapts to host
themes without coupling to each sub-site's bespoke styling. SVG
follows the book's semantic palette (blue memory-bound slope, green
compute roof, MIT red error annotation). Per-site navigation
preserved across all sub-sites.

Adds .github/ISSUE_TEMPLATE/404_joke.yml so contributions arrive
structured (joke text, theme dropdown, license checkbox) and
auto-tagged (site, 404-joke, good-first-issue) for triage.
2026-04-25 19:34:40 -04:00
Vijay Janapa Reddi
6117777c1d Merge branch 'feat/fun-404' into dev 2026-04-25 15:41:29 -04:00
Vijay Janapa Reddi
12d4aeaa7d feat(playground): complete 14-game MLSysBook arcade gallery
- Added 'KV Cache Packer' to teach PagedAttention and KV fragmentation
- Added 'Cluster Commander' to teach Slurm scheduling and fleet fragmentation
- Registered all 14 games in the runtime registry
- Fixed WebGL rendering loops to avoid performance overhead and crashes
- Updated 404 pages across all workspaces to route to the new games Playground
- Overrode default Quarto 'S' search shortcut to Shift+? to free up typing controls
2026-04-25 15:40:23 -04:00
Vijay Janapa Reddi
400f0e3027 docs: clarify MLSysBook ecosystem paths
Align public README and site messaging around the curriculum components, adoption paths, and current early-release status so newcomers can move from reading to building, deployment, practice, and teaching.
2026-04-25 08:48:38 -04:00
Vijay Janapa Reddi
4c33d66200 refactor(sidebar): consolidate to single source of truth
Before: four Quarto sites each shipped their own copy of the
`.sidebar-navigation .sidebar-item a` rule block, each hard-wired to a
different accent variable ($accent, $kits-accent, $colabs-accent,
$mlsysim-accent). Plus one 1350-line orphan file
(book/quarto/assets/styles/style.scss) that was referenced nowhere and
carried yet another copy of the same rules.

After: every site imports shared/styles/partials/_sidebar.scss once.
Each site aliases $accent to its own site-accent (book does it via
themes/_theme-harvard which sets `$accent: $brand-crimson`; kits/labs/
mlsysim already had `$accent: $site-accent` at the top of their
style.scss), so the partial's accent-keyed hover/active states resolve
to the right color per site without needing a per-site rule copy.

Files:
  - shared/styles/partials/_sidebar.scss
      (unchanged in this PR — already is the canonical form after #1514)
  - book/quarto/assets/styles/_base-styles.scss
      replace ~40 lines of local sidebar rules + .part-divider with
      `@import '.../partials/sidebar'`
  - book/quarto/assets/styles/style.scss
      DELETE (1350 lines, zero build references — confirmed by grep
      across _quarto*.yml, Makefile, .sh, .py, .js)
  - kits/assets/styles/style.scss
      replace local sidebar rules with partial import; keep the
      site-specific `.sidebar-title` rule (not part of the shared shape)
  - labs/assets/styles/style.scss
      replace local sidebar rules with partial import
  - mlsysim/docs/styles/style.scss
      replace local sidebar rules with partial import; the
      .sidebar-navigation > .sidebar-menu-container dividers below
      are site-specific and stay

Net: +23 / -1531 lines. Behavior is identical (the partial was already
tightened to these same values in PR #1514, so this is a
refactor-not-redesign). slides and instructors already had no sidebar
overrides and are not touched.

TinyTorch was already importing the partial directly and is unchanged.
The ecosystem now has one sidebar rule block, in one file, controlling
every Quarto site.
2026-04-24 12:33:20 -04:00
Vijay Janapa Reddi
ad98437b4c docs(announcements): unify announcement bars across nine Quarto sites
Every site's announcement bar now follows one template:

  Line 1  — identity + primary CTA (what is THIS site)
  Line 2  — the book (or, on book sites, the other volume)
  Line 3  — "Alongside the book:" sibling row (3 most-relevant verbs)
  Line 4  — newsletter

The book is the anchor of the curriculum; every other site is a verb
applied to it — TinyTorch (build), Hardware Kits (deploy), MLSys·im
(simulate), Labs (explore), Slides + Instructors (teach). Making that
shape visible in every bar turns nine independent sites into chapters
of one curriculum.

Removed stale copy: "Happy New Year!" on kits + labs, "coming in 2026"
on labs (we are in 2026; replaced with "Coming Summer 2026"), TinyTorch
v0.1.10 single-line release notice (belonged in a release changelog,
not the always-visible nav bar).

Normalized outbound links: /book -> /vol1/ and /vol2/, consistent
trailing-slash hygiene on every URL. Newsletter link points to
https://mlsysbook.ai/newsletter/ (the actual Quarto page) instead of
#subscribe (which only resolves on the landing page).

The landing site (mlsysbook.ai) uses a 5-line variant that covers all
four learner verbs + the teacher-tools row; every other site uses the
4-line form.

StaffML is a Next.js app, not a Quarto site, so its banner is out of
scope for this PR and will ship as a separate React component change.
2026-04-23 16:35:57 -04:00
Vijay Janapa Reddi
2760fbe09a deps: bump TypeScript 5→6, @types/node 20→25, ipykernel 6→7 (#1499)
* polish(tinytorch/diagrams): align 23 Lab Guide SVGs with book style guide

The hand-authored diagrams under tinytorch/quarto/assets/images/diagrams/
were drifting from the ML Systems SVG style guide — they used Tailwind
CSS greys and custom oranges instead of the book palette. This made them
visually clash with the canonical big-picture-module-flow.svg (under
assets/images/svg/) and with every other diagram in the textbook.

Normalize to book style:
- Fills: #f4f5f7, #f8f9fa, #e5e7eb → #f7f7f7 / #bbb (book neutrals)
- Text: #1f2937, #6b7280 → #333 / #999 (book text hierarchy)
- Arrows: #9ca3af → #555 (book neutral stroke)
- Accent orange: #fff1e8 / #ff8246 → #fdebd0 / #c87b2a (book routing)
- Corner radius: rx="2" → rx="4" per style-guide standard
- Stroke width: flat "1" → "1.2" (secondary tier per style guide)
- Section titles: font-size="11" (bold) → "12" per style-guide headers

No content, layout, or positional changes — only style-token swaps.
All 23 SVGs re-validated as well-formed XML.

Side effect: the orphan diagrams/00_big-picture-module-flow.svg is also
normalized. The canonical big-picture is under assets/images/svg/ and
was already book-styled (not touched by this pass).

* polish(tinytorch/01_tensor): port Cache Tiling systems callout from ABOUT.md

The stashed work from the tinytorch-updates branch included a Cache
Tiling "Systems Implication" callout for Module 01, but it lived in
tinytorch/src/01_tensor/ABOUT.md — a path that was retired when the
module docs consolidated into tinytorch/quarto/modules/. The companion
"Contiguous Memory & Strides" callout from the same stash already made
it over during the consolidation; this one got left behind.

Insert the callout right after the matmul O(n³) explanation (the
natural bridge into "why does the naive loop lose to BLAS?"), and
before the Shape Manipulation section. Progressive-disclosure check:
every concept the callout introduces (cache misses, BLAS, O(n³) vs
O(n²)) is already on the page or introduced inline in the callout
itself (Memory-Bound / Compute-Bound are defined parenthetically).
The pattern matches the existing book-style sidebar on line 587.

* deps: bump TypeScript 5→6, @types/node 20→25, ipykernel 6→7

Resolves 9 stale Dependabot PRs (#1494, #1497, #1490, #1491, #1479,
#1477, #1475, #1467, #1454) whose package-lock conflicts blocked
auto-rebase.

VSCode extensions: bump TypeScript devDep to ^6.0.3 and @types/node to
^25.6.0 across book-ext, mlsysim-ext, labs-ext, kits-ext, tinytorch-ext.
Regenerate lockfiles.

TypeScript 6.0 no longer auto-includes ambient @types packages; add
explicit "types": ["node", "vscode"] to each tsconfig so
child_process / fs / Buffer / vscode API types continue to resolve.
All 5 extensions now compile clean with TS 6.0.3 + @types/node 25.6.0.

TinyTorch: bump ipykernel floor to >=7.2.0 in pyproject.toml,
requirements.txt, and binder/requirements.txt.
2026-04-22 18:49:50 -04:00
dependabot[bot]
4273b64277 deps(kits-ext): bump @types/node in /kits/vscode-ext (#1484)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.19.37 to 25.6.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.6.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 18:37:36 -04:00
dependabot[bot]
ce1bb753c5 deps(kits-ext): bump @types/vscode in /kits/vscode-ext (#1483)
Bumps [@types/vscode](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/vscode) from 1.110.0 to 1.116.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/vscode)

---
updated-dependencies:
- dependency-name: "@types/vscode"
  dependency-version: 1.116.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 18:32:14 -04:00
Vijay Janapa Reddi
9f20e7f20d docs(readmes): add language hints to bare code fences (markdownlint MD040)
Add `text` language tag to 25 unlabeled fenced code blocks across the
public-facing READMEs. Mostly directory-tree listings, all-contributors
bot instructions, and pseudo-output ASCII blocks — none were getting
syntax highlighting anyway, but the explicit tag silences markdownlint
MD040 and signals intent ("this is plain text, not a forgotten lang").
2026-04-22 16:56:08 -04:00
Vijay Janapa Reddi
434417d69f docs(readmes): force table width via inline style (override GitHub CSS)
GitHub's github-markdown-css applies:
  .markdown-body table { display: block; width: max-content; max-width: 100%; }

The HTML width="100%" attribute is a presentational hint with lower
specificity than the class selector, so tables with short cell content
were sizing to max-content and not stretching to fill the column.
Tables with long sentences per cell stretched fine, masking the bug.

Add inline style="width:100%" (specificity 1,0,0,0) which overrides
the class-selector rule. Keep width="100%" attribute as a fallback for
non-GitHub renderers (VSCode preview, GitLab, plain HTML viewers).

54 tables updated across 10 READMEs + the two contributor-sync scripts
that regenerate auto-managed tables.
2026-04-22 16:20:38 -04:00
Vijay Janapa Reddi
eb27858591 docs(readmes): replace HTML card pattern with native GitHub callouts
The sub-project READMEs used an old-school nested-table card design
with hardcoded bgcolor="#ffffff", "#cfd6dd", "#eef2f7" plus deprecated
HTML4 attributes (cellpadding, cellspacing, border). It looked good in
light mode but produced harsh white islands in GitHub's dark theme,
which is what most readers see today.

Across 11 sub-READMEs:

- Strip the card wrapper so data tables are just clean
  <table width="100%"> with semantic <thead>/<tbody>. Headers keep
  their column widths; bgcolor/valign/zebra-stripe cruft is removed
  (GitHub provides its own theme-aware striping).
- Convert the early-release callouts (and mlperf-edu's two-tier
  status block + "source of truth" note + interviews' two info boxes)
  to GitHub-native > [!NOTE] / > [!WARNING] / > [!TIP] callouts.
  These are theme-aware, get proper icons, and render correctly in
  light AND dark mode.

Net result: 528 lines of HTML cruft removed, 230 lines of clean
markdown added. Visual identity is preserved (callouts still stand
out, tables still stretch full-width) while becoming dark-mode safe
and consistent with the main README.
2026-04-22 16:12:20 -04:00
Vijay Janapa Reddi
b9ee88ca70 docs(readmes): stretch HTML tables to full width
Add `width="100%"` to every HTML content and contributor table across all
project READMEs so they render full-width on GitHub instead of collapsing
to natural content width. Cell-level `width="X%"` percentages were already
in place but only take effect once the table itself has an explicit width.

Also update the contributor-sync scripts so the auto-generated tables stay
consistent on the next bot run:
  - .github/workflows/contributors/generate_main_readme.py
  - .github/workflows/contributors/generate_readme_tables.py

Scope: 27 files, 85 tables. Sub-project READMEs that already use the
"card" pattern (labs/, kits/ content sections with <table width="98%">
wrappers) are intentionally untouched.
2026-04-22 16:01:54 -04:00
Vijay Janapa Reddi
edbea966bf refactor(tinytorch): rename site-quarto/ to quarto/
Brings the TinyTorch lab guide's Quarto project in line with
book/quarto/, the only other in-tree Quarto publication that builds
both web and PDF outputs from a single source. The previous name had
three redundancies:

  - already under tinytorch/, so "site-" prefix wasn't disambiguating
  - also produces the PDF lab guide, so "site-" was misleading
  - the top-level site/ dir made "site-quarto" read as "the site's
    quarto config" rather than "the tinytorch site, in quarto"

After this rename the convention is straightforward:

  book/quarto/        -> the textbook (web + PDF)
  tinytorch/quarto/   -> the TinyTorch lab guide (web + PDF)
  mlsysim/docs/       -> mlsysim API reference (kept as docs/, since it
                        really is API reference, not a publication)

Touches 7 GitHub workflows, both .gitignore files, the rename target's
own self-references (Makefile, _quarto.yml configs, STYLE.md,
measure-pdf-images.py), and 6 copies of subscribe-modal.js plus a few
shared scripts/configs whose comments documented the old path.

Verified: rebuilt pdf/TinyTorch-Guide.pdf (2.1M) cleanly from the new
location with 'make pdf' from tinytorch/quarto/.
2026-04-22 14:38:18 -04:00
Vijay Janapa Reddi
59ecd34f51 docs(readme): standardize wide HTML tables across product READMEs
- Add wrap_readme_data_tables.py to frame <table>+<thead>/<tbody> blocks in a
  98% width panel (#cfd6dd border, #eef2f7 headers, zebra body rows where
  applied manually in converted tables).
- Apply wraps to book, kits, labs, slides, tinytorch; tbody wraps for kits
  docs/related and instructors overview.
- Convert remaining Markdown tables in mlsysim, mlperf-edu, and interviews to
  the same HTML pattern; replace StaffML markdown callouts with HTML panels.
- Add thead rows to kits/instructors body-only tables for clearer hierarchy.
2026-04-21 08:51:04 -04:00
Vijay Janapa Reddi
1bb6ac9780 docs(readme): add early-release HTML callouts to book, kits, mlperf-edu, site
Align contributor-facing trees with the same centered table banner used
elsewhere. Add site/README.md describing the unified landing Quarto project.
2026-04-21 08:27:22 -04:00
Vijay Janapa Reddi
2190968942 refactor: deduplicate subscribe-modal + socratiQ via mirror sync script
Quarto's resource-copy step preserves symlinks rather than dereferencing
them, which breaks both local builds (AlreadyExists on the second pass)
and gh-pages deploys (relative symlink targets fall outside _build/).
And Sass resolves @import relative to the importing file's physical
location, not the symlink target. So symlinks inside the resource path
are not a viable dedup mechanism.

Instead, keep real file copies in each consumer subsite and enforce
dedup at edit time with shared/scripts/sync-mirrors.sh:

  - bash shared/scripts/sync-mirrors.sh           # propagate canonicals
  - bash shared/scripts/sync-mirrors.sh --check   # CI: fail on drift

Mirror map (source | mirrors):
  shared/scripts/subscribe-modal.js -> {site, book/quarto, labs, kits,
                                        mlsysim/docs}/.../subscribe-modal.js

Intentional non-mirrors (left untouched, customized variants):
  tinytorch/site-quarto/assets/scripts/subscribe-modal.js  (TinyTorch-branded)
  tinytorch/site/_static/subscribe-modal.js                (legacy Sphinx)

Also dedupe the SocratiQ widget bundle via a symlink (safe here because
book/tools/ sits outside any Quarto project, so the resource walker
never touches it):

  book/tools/scripts/socratiQ/bundle.js -> ../../../quarto/tools/scripts/socratiQ/bundle.js

The shared canonical (book/quarto/tools/scripts/socratiQ/bundle.js) is
the version actually referenced and served in production.
2026-04-19 10:31:41 -04:00
Vijay Janapa Reddi
69f330b2db fix(shared): centralize font loading via site-head.html + fix carousel
- Replace inline Google Fonts <link> tags in all 8 site configs with
  a single `- file: shared/config/site-head.html` reference, so fonts
  (Inter 400-800, JetBrains Mono) and Font Awesome are inherited from
  one shared file instead of duplicated across every _quarto.yml
- Add missing Inter weight 800 (was only in site-head.html, not configs)
- Add carousel CSS + JS for MLSys·im landing page (arrows, dots, slides,
  auto-rotation, keyboard nav) — fixes non-functional < > buttons
2026-04-18 16:26:39 -04:00
Vijay Janapa Reddi
eec7e47929 refactor(styles): unify mobile responsive rules via shared/_mobile.scss
Replace duplicated navbar/mobile responsive rules in satellite sites
(instructors, kits, labs, mlsysim, slides) with a single import of
shared/styles/partials/_mobile.scss. Removes ~169 lines of copy-pasted
CSS that would drift out of sync when the shared partial is updated.

- instructors: remove rogue desktop padding, add _mobile import
- kits: remove ~50 lines of duplicated mobile rules, add _mobile import
- labs: remove ~55 lines of duplicated mobile rules, add _mobile import
- mlsysim: remove ~55 lines of duplicated mobile rules, add _mobile import
- slides: add _mobile import (had no mobile rules before)
2026-04-17 16:19:18 -04:00
Vijay Janapa Reddi
dbb146240a refactor(styles): unify all subsite navbars via shared/_navbar.scss
Every subsite now sets $accent to its brand color and imports
shared/styles/partials/_navbar.scss instead of duplicating the
~40-line navbar block locally. Single source of truth for link
color, hover/active states, brand image height, icon-collapse
media query, and color-scheme toggle.

Drift fix: before this, instructors had font-size: 0.9rem +
weight 500 (making navbar look smaller than peer sites) and
slides had no navbar CSS at all (fell back to Bootstrap defaults).
Both now match the ecosystem.

Also renames $accent in labs/style.scss (previously hot pink
#e94560, used only by .coming-badge) to $coming-badge-pink to
free $accent for the ecosystem convention.

Net: -168 lines of duplicated SCSS across 6 files.
2026-04-17 10:14:06 -04:00
Vijay Janapa Reddi
7b3e6d87e7 feat(kits): add pointer to Companion Books on Instructor Hub
Adds a one-line pointer inside the existing Laboratory Development
callout, routing readers from the kits landing page to the Companion
Books section on the Instructor Hub. Keeps the kits site focused on
hardware and lab content; the curated book listing stays canonical
on the instructor hub.
2026-04-15 16:30:20 -04:00
Vijay Janapa Reddi
c4177a7e16 docs: update CI badge URLs and refresh READMEs
- Sync translated READMEs (ja, ko, zh) with renamed workflow files and
  add Slides, Instructors, StaffML badges
- Fix Docker Windows README paths and workflow reference
- Rewrite book/tools/scripts README to point to Binder CLI first
- Update kits badge from kits-publish to kits-validate

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 13:09:56 -04:00
Vijay Janapa Reddi
bb0504f2e3 fix(site): replace cropped cover images and fix card transparency
Site covers were 867×1031 (cropped) vs the book's canonical 867×1110.
Replaced with full-resolution copies so author name is visible.
Made card background fully opaque to prevent neural background bleed-through.
2026-04-03 10:41:28 -04:00
Vijay Janapa Reddi
a3160d83e5 refactor(monorepo): remove redundant navbar props — shared config handles it
Tested: Quarto metadata-files merge DOES inherit responsive properties
(background, pinned, collapse, collapse-below) from navbar-common.yml.
Local configs only need logo, search, title, and site-specific left: items.

Removed 4 redundant lines from each of: mlsysim, labs, kits, instructors, site.
Single source of truth: shared/config/navbar-common.yml
2026-04-03 08:49:41 -04:00
Vijay Janapa Reddi
035ac5d00f fix: navbar responsive props in labs/kits actual config files (symlink targets) 2026-04-03 08:49:41 -04:00
Vijay Janapa Reddi
3b5b4fe4e7 feat(covers): update hardcover mockups, standardize naming, fix references
Update vol1/vol2 hardcover mockup images with boosted colors. Rename
cover_image_title files to hyphenated cover-image-title for consistency.
Remove old non-vol-suffixed duplicates. Update all config and index
references to use vol-specific filenames.
2026-04-03 08:49:20 -04:00
Vijay Janapa Reddi
26e0ab3856 restructure interviews/ with vault separation and per-directory licenses
- Move corpus, taxonomy, chains, scripts into interviews/vault/
- Rename interviews/staffml/ (was interviews/staffml/) as the branded app
- Add CC BY-NC-SA 4.0 LICENSE to: book, kits, labs, slides, instructors, interviews
- Add AGPL-3.0 LICENSE to interviews/staffml/ (the app)
- Add vault LICENSE for pipeline scripts
- Update all GitHub Actions workflows for new paths
- Update README links and vault.yaml export paths
- Fix regex patterns in site/book deploy workflows

License structure:
  interviews/LICENSE      — CC BY-NC-SA 4.0 (corpus + data)
  interviews/staffml/LICENSE — AGPL-3.0 (app code)
  interviews/vault/LICENSE   — pipeline copyright
  book|kits|labs|slides|instructors/LICENSE — CC BY-NC-SA 4.0
  tinytorch/LICENSE       — Apache 2.0 (unchanged)
2026-03-25 15:18:14 -04:00
Vijay Janapa Reddi
c002bc7840 add per-directory LICENSE files for clear IP boundaries
- interviews/staffml/LICENSE — MIT (app code, fork freely)
- interviews/LICENSE — All Rights Reserved (corpus, taxonomy, pipeline)
- book/LICENSE — CC BY-NC-ND 4.0 (educational content)
- kits/LICENSE — CC BY-NC-ND 4.0 (educational content)
- labs/LICENSE — CC BY-NC-ND 4.0 (educational content)
- slides/LICENSE — CC BY-NC-ND 4.0 (educational content)
- instructors/LICENSE — CC BY-NC-ND 4.0 (educational content)

The moat is the vault data, not the viewer. MIT for the app encourages
adoption and contributions. Proprietary for the corpus protects the IP.
2026-03-25 14:27:32 -04:00
Vijay Janapa Reddi
396506d29d refactor(site): unify 4 site subsites into single Quarto project
Architecture:
- Merge landing, about, community, newsletter into one site/ project
- Move navbar-common.yml to shared/config/ (used by 12 configs)
- Create shared/config/footer-site.yml for centralized footer
- Create shared/scripts/subscribe-modal.js as canonical copy
- Single _quarto.yml replaces 4 independent configs
- One site_libs/ copy replaces four

Features gained:
- Google Analytics on ALL hub pages (was only on book volumes)
- Subscribe modal on landing page (was missing)
- Centralized footer with consistent links

Workflows updated:
- site-preview-dev.yml: matrix strategy → single build job
- site-publish-live.yml: loop over subsites → single build + deploy
- sync-newsletter.yml: builds from unified site project
- publish-all-live.yml: removed stale subsite input
- rewrite-dev-urls.sh: added --shallow flag for unified builds

All 12 navbar-common.yml references updated:
  book vol1/vol2, site (unified), slides, instructors, interviews,
  kits, labs, mlsysim
2026-03-21 13:30:24 -04:00
Vijay Janapa Reddi
1f27602897 fix(kits): replace broken local arxiv ref with proper URL 2026-03-21 09:41:58 -04:00
Vijay Janapa Reddi
f9630c9ae2 cleanup: remove junk files, binaries, and one-off scripts from tracking
Remove tracked files that shouldn't be in the repo:
- 10 root-level one-off scripts (find_*, generate_*, check_*, etc.)
- Junk screenshot (CleanShot 2025-12-13...@2x.png, 10MB)
- Extensionless PDF (arXiv 2304.13712, 2.3MB)
- Adobe Illustrator source files (*.ai, 2.6MB)
- paper.zip archive (5MB)
- Duplicate image (distr_line.png, kept distr-line.png)

Update .gitignore with patterns for *.ai and root-level script globs.
2026-03-21 08:54:52 -04:00
Vijay Janapa Reddi
d3a6c96d60 feat(subsites): add navbar dropdown for kits and sidebar for slides
Kits gets a Hardware Kits dropdown with links to all platforms.
Slides gets a floating sidebar with Overview, Vol I, and Vol II sections.
2026-03-20 07:32:26 -04:00
Vijay Janapa Reddi
db6f06752a style(landing): lighten stamp background, add spacing to interview domain tags 2026-03-19 16:53:08 -04:00
Vijay Janapa Reddi
665af60f85 refactor(site): use native Quarto metadata-files for shared navbar
Replace the generate-navbar.py script approach with direct metadata-files
references to navbar-common.yml. Quarto natively merges navbar arrays,
so site-local dropdowns defined inline in each _quarto.yml get appended
to the shared navbar automatically.

- Delete generate-navbar.py script (no longer needed)
- Delete all _navbar-generated.yml and _navbar-local.yml files
- Each subsite now references ../book/quarto/config/shared/html/navbar-common.yml
  directly via metadata-files
- Sites with local dropdowns (slides, instructors, mlsysim) define them inline
  in their _quarto.yml navbar.left — Quarto merges with the shared left items
- Zero tooling, zero generated files, zero maintenance scripts
2026-03-19 10:48:41 -04:00
Vijay Janapa Reddi
5790e2706c feat(site): centralize navbar across all subsites
Single source of truth for the navigation bar in navbar-common.yml.
New 5-dropdown structure: Read | Build | Teach | Community | About.

- Add generate-navbar.py script to merge shared + site-local dropdowns
- Add _navbar-local.yml for slides, instructors, mlsysim (site-specific menus)
- Generate _navbar-generated.yml for all 6 subsites (committed, no CI changes needed)
- Strip hardcoded navbars from all _quarto.yml configs (landing, vol1, vol2, slides,
  instructors, mlsysim, kits, labs, newsletter)
- Add community/ and about/ paths to rewrite-dev-urls.sh for dev preview

To update navbar: edit navbar-common.yml, run generate-navbar.py --all, commit.
2026-03-19 10:41:25 -04:00
Vijay Janapa Reddi
bfb9aecbeb chore: update CI workflows, Quarto configs, and landing site
Update labs preview/publish workflows. Add config entries across all
Quarto sub-sites. Update landing site index and codespell ignore list.
2026-03-18 14:53:03 -04:00
Vijay Janapa Reddi
ba13101e89 docs: polish README, SVGs, and component docs across curriculum
Refresh top-level README with clearer volume naming, HTML branch
table, and consolidated support section. Replace ASCII art with
SVG diagrams in tinytorch milestones and labs. Streamline slides
and kits READMEs. Remove retired challenges/ directory.
2026-03-17 05:42:41 -04:00