Add shared/config/footer-common.yml (mirrors navbar-common.yml) and point
slides, labs, kits, and instructors at it via metadata-files, replacing their
drifted inline footers. The release pill now lives in the footer right slot
(not dangling below the page) as a fixed muted-gray chip, pinned so it looks
identical regardless of each site's theme accent. mlsysim and the book keep
their own footers (dual license / build stamp) but carry the same pill span.
release-pill.html is now assets-only and populates every data-release-pill
span from each site's own release-manifest.
Every subsite's announcement bar Line 1 carried a 'Start reading →' / 'Start building →' / 'Get started →' link that pointed at the very subsite the reader was already on. Clicking it was a no-op self-navigation.
Strip the CTA from Line 1 across all 8 sites that have the regression:
- announcement-vol1.yml drop 'Start reading →'
- announcement-vol2.yml drop 'Start reading →'
- tinytorch drop 'Start building →'
- mlsysim drop 'Get started →'
- kits drop 'Get started →'
- labs drop 'Preview →'
- slides drop 'Browse decks →'
- instructors drop 'Start here →'
Line 1 keeps the bold identity statement, which is what readers came for. The other lines (Vol I / II links, sibling row, newsletter CTA) keep their navigations since they DO lead somewhere new.
announcement-book.yml is unchanged — its Line 1 already points at the ecosystem root (https://mlsysbook.ai/), not at /book/ where the reader is.
For the public launch, every site's "Alongside the book" (or "Build
with your students") row now lists StaffML alongside TinyTorch, Hardware
Kits, MLSys·im, and Labs. Two coupled changes:
• StaffML appended with verb "practice" — pairs cleanly with the
existing verbs (build / deploy / model / explore / practice).
• MLSys·im verb changed from "simulate" to "model" to match the
project's own self-description ("first-principles analytical
modeling for ML training and inference; model the physics before
you build"). MLSys·im is analytical, not Monte-Carlo simulation;
the new verb is more honest and the audience reads it cleanly.
Also restores tinytorch/quarto/config/announcement.yml to the canonical
4-line ecosystem template. That file had been silently rewritten to a
release-only banner ("🎉 v0.1.11 released — ...") by the
tinytorch-publish-live workflow, dropping the ecosystem cross-links
entirely. Restoration here; workflow fix is a separate commit.
Per-site row state after this commit (each site omits itself):
site, vol1, vol2: TinyTorch · Kits · MLSys·im · Labs · StaffML
instructors: TinyTorch · Kits · Slides · StaffML
kits: TinyTorch · MLSys·im · Labs · StaffML
labs: TinyTorch · Kits · MLSys·im · StaffML
mlsysim: TinyTorch · Kits · Labs · StaffML
tinytorch: Kits · MLSys·im · Labs · StaffML
slides: (teacher-focused row, unchanged)
The staffml site itself has its own Next.js ecosystem navbar
(EcosystemBar.tsx) which is out of scope for this Quarto-only sweep
and audited separately.
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.
Switch labs navbar from the M-badge SVG to the shared SEAS shield PNG
used by tinytorch / kits / mlsysim / instructors. Browser-tab favicon
keeps the M-badge SVG since favicons render at sizes where the shield
becomes illegible.
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.
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.
- 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
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
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.
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
Redesigned the labs landing page to lead with the experience:
- Hero shows a clickable macOS-style window mockup of Lab 01 with
the three-step flow (scenario, prediction lock, revealed chart)
- Removed card wall, featured labs, and how-it-works sections
- The mockup IS the pitch — sidebar handles the full catalog
- Added sidebar navigation with all 33 labs organized by volume/phase
- Landing page uses page-layout: custom with sidebar: false for
clean full-bleed hero
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
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.
- Landing site: Added "Slides" to quick links and navbar dropdown
- Instructors: Added "Lecture Slides" link in navbar Textbook menu
- Labs: Added "Lecture Slides" link in navbar menu
- Kits: Added "Lecture Slides" link in navbar menu
- Slides portal: Fixed teaching guide anchor links
All ecosystem sites now cross-link to the slides portal at mlsysbook.ai/slides/
- Add mlsysim-validate-dev, mlsysim-preview-dev, and mlsysim-publish-live workflows
- Move mlsysim docs config to config/ dir with symlink (matching kits/labs pattern)
- Add MLSYSIM to ecosystem navbar across all 7 site configs
- Add mlsysim/ URL rewrite to book-preview-dev for dev site
- Replace hardcoded paths with GitHub variables in kits and labs workflows
- New repo variables: MLSYSIM_ROOT, MLSYSIM_DOCS, DEV_MLSYSIM_PATH, KITS_ROOT,
KITS_DOCS, LABS_ROOT, LABS_DOCS
Refines book abstracts, table of contents, and diagram configurations for improved clarity and structure.
This commit enhances the descriptions of both Volume I and Volume II, emphasizing their respective focuses. It also introduces a framework decision tree to guide the selection of parallel training strategies and inference frameworks, and diagrams for visualizing hardware constraints.
- Book: New Year greeting + navbar, TinyTorch, Kits, Newsletter
- Kits: New Year greeting + navbar, Kits intro, Textbook link
- Labs: New Year greeting + navbar, Labs coming 2026, Textbook link
- Rename collabs/ directory to labs/
- Rename workflow files: collabs-publish-*.yml → labs-publish-*.yml
- Update all paths in workflows, Quarto configs, and navbars
- Update cross-references in book, kits, and dev-landing
- Update site-url to mlsysbook.ai/labs/
Note: GitHub repo variable DEV_COLLABS_PATH needs to be renamed
to DEV_LABS_PATH in repository settings.