diff --git a/kits/Makefile b/kits/Makefile
index 9de9459b9..8894f3acb 100644
--- a/kits/Makefile
+++ b/kits/Makefile
@@ -2,6 +2,7 @@
# Hardware Kits Build System
# =============================================================================
# Part of the MLSysBook ecosystem
+# Uses symlink switching between HTML and PDF configs (like the book)
# =============================================================================
.PHONY: all build html pdf preview clean help
@@ -13,18 +14,22 @@ all: html
html: build
build:
@echo "🔧 Building Hardware Kits HTML site..."
+ ln -sf config/_quarto-html.yml _quarto.yml
quarto render
@echo "✅ Build complete: _build/"
# Build PDF with cover page
pdf:
@echo "📄 Building Hardware Kits PDF..."
- quarto render --profile pdf
+ ln -sf config/_quarto-pdf.yml _quarto.yml
+ quarto render --to titlepage-pdf
+ ln -sf config/_quarto-html.yml _quarto.yml
@echo "✅ PDF build complete: _build/pdf/"
# Preview the site locally
preview:
@echo "👀 Starting preview server..."
+ ln -sf config/_quarto-html.yml _quarto.yml
quarto preview
# Clean build artifacts
diff --git a/kits/_quarto.yml b/kits/_quarto.yml
deleted file mode 100644
index 058a21190..000000000
--- a/kits/_quarto.yml
+++ /dev/null
@@ -1,186 +0,0 @@
-# =============================================================================
-# HARDWARE KITS WEBSITE CONFIGURATION
-# =============================================================================
-# Standalone Quarto project for hardware labs and kits
-# Part of the MLSysBook ecosystem: mlsysbook.ai/kits/
-# =============================================================================
-
-project:
- type: website
- output-dir: _build
-
-website:
- title: "Hardware Kits"
- page-navigation: true
- reader-mode: false
- back-to-top-navigation: true
- bread-crumbs: true
-
- search:
- keyboard-shortcut: ["/"]
-
- # Navbar matches Book exactly (same structure, same order)
- navbar:
- background: light
- logo: "assets/images/favicon.png"
- search: true
- pinned: true
- collapse: true
- collapse-below: "md"
- title: "Machine Learning Systems"
- left:
- - text: "Hardware Kits"
- menu:
- - icon: book-half
- text: "Textbook"
- href: https://mlsysbook.ai
- - icon: fire
- text: "TinyTorch"
- href: https://mlsysbook.ai/tinytorch
- - icon: cpu
- text: "Hardware Kits"
- href: https://mlsysbook.ai/kits
- - text: "---"
- - icon: lightbulb
- text: "Co-Labs (Coming 2026)"
- href: https://mlsysbook.ai
- right:
- - icon: download
- text: "Downloads"
- menu:
- - icon: file-pdf
- text: "Textbook PDF"
- href: https://mlsysbook.ai/assets/downloads/Machine-Learning-Systems.pdf
- target: _blank
- - icon: journal-text
- text: "Textbook EPUB"
- href: https://mlsysbook.ai/assets/downloads/Machine-Learning-Systems.epub
- target: _blank
- - icon: star
- text: "Star"
- href: https://github.com/harvard-edge/cs249r_book#support-this-work
- target: _blank
- - icon: heart
- text: "Support"
- href: https://opencollective.com/mlsysbook
- target: _blank
- - icon: envelope
- text: "Subscribe"
- href: https://mlsysbook.ai#subscribe
- - icon: github
- text: "GitHub"
- menu:
- - icon: pencil
- text: "Edit this page"
- href: https://github.com/harvard-edge/cs249r_book
- target: _blank
- - icon: bug
- text: "Report an issue"
- href: https://github.com/harvard-edge/cs249r_book/issues/new
- target: _blank
- - icon: chat
- text: "Discussions"
- href: https://github.com/harvard-edge/cs249r_book/discussions
- target: _blank
- - icon: code
- text: "View source"
- href: https://github.com/harvard-edge/cs249r_book
- target: _blank
-
- sidebar:
- - id: main
- style: "floating"
- background: light
- collapse-level: 2
- contents:
- - text: "Overview"
- href: index.qmd
- - text: "Getting Started"
- href: contents/getting-started.qmd
- - text: "Platforms"
- href: contents/platforms.qmd
- - text: "IDE Setup"
- href: contents/ide-setup.qmd
-
- - text: "---"
-
- - section: "Arduino Nicla Vision"
- id: arduino
- contents:
- - href: contents/arduino/nicla_vision/nicla_vision.qmd
- - href: contents/arduino/nicla_vision/setup/setup.qmd
- - href: contents/arduino/nicla_vision/image_classification/image_classification.qmd
- - href: contents/arduino/nicla_vision/object_detection/object_detection.qmd
- - href: contents/arduino/nicla_vision/kws/kws.qmd
- - href: contents/arduino/nicla_vision/motion_classification/motion_classification.qmd
-
- - section: "Seeed XIAO ESP32S3"
- id: seeed-xiao
- contents:
- - href: contents/seeed/xiao_esp32s3/xiao_esp32s3.qmd
- - href: contents/seeed/xiao_esp32s3/setup/setup.qmd
- - href: contents/seeed/xiao_esp32s3/image_classification/image_classification.qmd
- - href: contents/seeed/xiao_esp32s3/object_detection/object_detection.qmd
- - href: contents/seeed/xiao_esp32s3/kws/kws.qmd
- - href: contents/seeed/xiao_esp32s3/motion_classification/motion_classification.qmd
-
- - section: "Grove Vision AI V2"
- id: grove-vision
- contents:
- - href: contents/seeed/grove_vision_ai_v2/grove_vision_ai_v2.qmd
- - href: contents/seeed/grove_vision_ai_v2/setup_and_no_code_apps/setup_and_no_code_apps.qmd
- - href: contents/seeed/grove_vision_ai_v2/image_classification/image_classification.qmd
- - href: contents/seeed/grove_vision_ai_v2/object_detection/object_detection.qmd
-
- - section: "Raspberry Pi"
- id: raspberry-pi
- contents:
- - href: contents/raspi/raspi.qmd
- - href: contents/raspi/setup/setup.qmd
- - href: contents/raspi/image_classification/image_classification.qmd
- - href: contents/raspi/object_detection/object_detection.qmd
- - href: contents/raspi/llm/llm.qmd
- - href: contents/raspi/vlm/vlm.qmd
-
- - section: "Shared Resources"
- id: shared
- contents:
- - href: contents/shared/shared.qmd
- - href: contents/shared/kws_feature_eng/kws_feature_eng.qmd
- - href: contents/shared/dsp_spectral_features_block/dsp_spectral_features_block.qmd
-
- page-footer:
- left: |
- © 2024-2025 Harvard University. Licensed under CC-BY-NC-SA 4.0
- center: |
- Part of the Machine Learning Systems textbook
- right:
- - icon: github
- href: https://github.com/harvard-edge/cs249r_book
- aria-label: "View source on GitHub"
- - icon: star
- href: https://github.com/harvard-edge/cs249r_book
- aria-label: "Star this repository"
- background: light
- border: true
-
-format:
- html:
- theme:
- light:
- - default
- - assets/styles/style.scss
- dark:
- - default
- - assets/styles/style.scss
- - assets/styles/dark-mode.scss
- respect-user-color-scheme: true
- toc: true
- toc-depth: 3
- number-sections: false
- code-copy: true
- code-overflow: wrap
- highlight-style: github
- link-external-icon: false
- link-external-newwindow: true
- anchor-sections: true
diff --git a/kits/_quarto.yml b/kits/_quarto.yml
new file mode 120000
index 000000000..40e97aabe
--- /dev/null
+++ b/kits/_quarto.yml
@@ -0,0 +1 @@
+config/_quarto-pdf.yml
\ No newline at end of file
diff --git a/kits/config/_quarto-html.yml b/kits/config/_quarto-html.yml
new file mode 100644
index 000000000..058a21190
--- /dev/null
+++ b/kits/config/_quarto-html.yml
@@ -0,0 +1,186 @@
+# =============================================================================
+# HARDWARE KITS WEBSITE CONFIGURATION
+# =============================================================================
+# Standalone Quarto project for hardware labs and kits
+# Part of the MLSysBook ecosystem: mlsysbook.ai/kits/
+# =============================================================================
+
+project:
+ type: website
+ output-dir: _build
+
+website:
+ title: "Hardware Kits"
+ page-navigation: true
+ reader-mode: false
+ back-to-top-navigation: true
+ bread-crumbs: true
+
+ search:
+ keyboard-shortcut: ["/"]
+
+ # Navbar matches Book exactly (same structure, same order)
+ navbar:
+ background: light
+ logo: "assets/images/favicon.png"
+ search: true
+ pinned: true
+ collapse: true
+ collapse-below: "md"
+ title: "Machine Learning Systems"
+ left:
+ - text: "Hardware Kits"
+ menu:
+ - icon: book-half
+ text: "Textbook"
+ href: https://mlsysbook.ai
+ - icon: fire
+ text: "TinyTorch"
+ href: https://mlsysbook.ai/tinytorch
+ - icon: cpu
+ text: "Hardware Kits"
+ href: https://mlsysbook.ai/kits
+ - text: "---"
+ - icon: lightbulb
+ text: "Co-Labs (Coming 2026)"
+ href: https://mlsysbook.ai
+ right:
+ - icon: download
+ text: "Downloads"
+ menu:
+ - icon: file-pdf
+ text: "Textbook PDF"
+ href: https://mlsysbook.ai/assets/downloads/Machine-Learning-Systems.pdf
+ target: _blank
+ - icon: journal-text
+ text: "Textbook EPUB"
+ href: https://mlsysbook.ai/assets/downloads/Machine-Learning-Systems.epub
+ target: _blank
+ - icon: star
+ text: "Star"
+ href: https://github.com/harvard-edge/cs249r_book#support-this-work
+ target: _blank
+ - icon: heart
+ text: "Support"
+ href: https://opencollective.com/mlsysbook
+ target: _blank
+ - icon: envelope
+ text: "Subscribe"
+ href: https://mlsysbook.ai#subscribe
+ - icon: github
+ text: "GitHub"
+ menu:
+ - icon: pencil
+ text: "Edit this page"
+ href: https://github.com/harvard-edge/cs249r_book
+ target: _blank
+ - icon: bug
+ text: "Report an issue"
+ href: https://github.com/harvard-edge/cs249r_book/issues/new
+ target: _blank
+ - icon: chat
+ text: "Discussions"
+ href: https://github.com/harvard-edge/cs249r_book/discussions
+ target: _blank
+ - icon: code
+ text: "View source"
+ href: https://github.com/harvard-edge/cs249r_book
+ target: _blank
+
+ sidebar:
+ - id: main
+ style: "floating"
+ background: light
+ collapse-level: 2
+ contents:
+ - text: "Overview"
+ href: index.qmd
+ - text: "Getting Started"
+ href: contents/getting-started.qmd
+ - text: "Platforms"
+ href: contents/platforms.qmd
+ - text: "IDE Setup"
+ href: contents/ide-setup.qmd
+
+ - text: "---"
+
+ - section: "Arduino Nicla Vision"
+ id: arduino
+ contents:
+ - href: contents/arduino/nicla_vision/nicla_vision.qmd
+ - href: contents/arduino/nicla_vision/setup/setup.qmd
+ - href: contents/arduino/nicla_vision/image_classification/image_classification.qmd
+ - href: contents/arduino/nicla_vision/object_detection/object_detection.qmd
+ - href: contents/arduino/nicla_vision/kws/kws.qmd
+ - href: contents/arduino/nicla_vision/motion_classification/motion_classification.qmd
+
+ - section: "Seeed XIAO ESP32S3"
+ id: seeed-xiao
+ contents:
+ - href: contents/seeed/xiao_esp32s3/xiao_esp32s3.qmd
+ - href: contents/seeed/xiao_esp32s3/setup/setup.qmd
+ - href: contents/seeed/xiao_esp32s3/image_classification/image_classification.qmd
+ - href: contents/seeed/xiao_esp32s3/object_detection/object_detection.qmd
+ - href: contents/seeed/xiao_esp32s3/kws/kws.qmd
+ - href: contents/seeed/xiao_esp32s3/motion_classification/motion_classification.qmd
+
+ - section: "Grove Vision AI V2"
+ id: grove-vision
+ contents:
+ - href: contents/seeed/grove_vision_ai_v2/grove_vision_ai_v2.qmd
+ - href: contents/seeed/grove_vision_ai_v2/setup_and_no_code_apps/setup_and_no_code_apps.qmd
+ - href: contents/seeed/grove_vision_ai_v2/image_classification/image_classification.qmd
+ - href: contents/seeed/grove_vision_ai_v2/object_detection/object_detection.qmd
+
+ - section: "Raspberry Pi"
+ id: raspberry-pi
+ contents:
+ - href: contents/raspi/raspi.qmd
+ - href: contents/raspi/setup/setup.qmd
+ - href: contents/raspi/image_classification/image_classification.qmd
+ - href: contents/raspi/object_detection/object_detection.qmd
+ - href: contents/raspi/llm/llm.qmd
+ - href: contents/raspi/vlm/vlm.qmd
+
+ - section: "Shared Resources"
+ id: shared
+ contents:
+ - href: contents/shared/shared.qmd
+ - href: contents/shared/kws_feature_eng/kws_feature_eng.qmd
+ - href: contents/shared/dsp_spectral_features_block/dsp_spectral_features_block.qmd
+
+ page-footer:
+ left: |
+ © 2024-2025 Harvard University. Licensed under CC-BY-NC-SA 4.0
+ center: |
+ Part of the Machine Learning Systems textbook
+ right:
+ - icon: github
+ href: https://github.com/harvard-edge/cs249r_book
+ aria-label: "View source on GitHub"
+ - icon: star
+ href: https://github.com/harvard-edge/cs249r_book
+ aria-label: "Star this repository"
+ background: light
+ border: true
+
+format:
+ html:
+ theme:
+ light:
+ - default
+ - assets/styles/style.scss
+ dark:
+ - default
+ - assets/styles/style.scss
+ - assets/styles/dark-mode.scss
+ respect-user-color-scheme: true
+ toc: true
+ toc-depth: 3
+ number-sections: false
+ code-copy: true
+ code-overflow: wrap
+ highlight-style: github
+ link-external-icon: false
+ link-external-newwindow: true
+ anchor-sections: true
diff --git a/kits/_quarto/profiles/pdf/_quarto.yml b/kits/config/_quarto-pdf.yml
similarity index 95%
rename from kits/_quarto/profiles/pdf/_quarto.yml
rename to kits/config/_quarto-pdf.yml
index fd9d3434f..54aebdae5 100644
--- a/kits/_quarto/profiles/pdf/_quarto.yml
+++ b/kits/config/_quarto-pdf.yml
@@ -1,8 +1,9 @@
# =============================================================================
-# HARDWARE KITS PDF PROFILE
+# HARDWARE KITS PDF CONFIGURATION
# =============================================================================
-# This profile builds the Hardware Kits labs as a standalone PDF with cover.
-# Usage: quarto render --profile pdf
+# Standalone PDF book configuration with custom cover page.
+# Usage: ln -sf config/_quarto-pdf.yml _quarto.yml && quarto render --to titlepage-pdf
+# Or: make pdf
# =============================================================================
project:
@@ -68,7 +69,7 @@ book:
- contents/shared/dsp_spectral_features_block/dsp_spectral_features_block.qmd
format:
- pdf:
+ titlepage-pdf:
pdf-engine: lualatex
use-rsvg-convert: true
documentclass: scrbook