Skip to content Fixed
- Tooltips on mobile rendered outside the viewport near screen edges. Horizontal position now clamps with 8px padding; arrow shifts to track the trigger.
- Tooltips stayed visible while scrolling on touch devices. Dismisses when the trigger moves 50px from its open position or leaves the viewport.
- Tapping a tooltip after scroll-dismiss had no effect. Trigger now blurs on scroll-dismiss so the next tap re-focuses.
- Tooltips near the top of the page overlapped Starlight’s fixed header and “On this page” dropdown. Flips to bottom when space above is insufficient (100px header safe zone).
Fixed
- H1/H2 now use Noto Serif (
--nu-font-display), H3–H6 use Poppins (--nu-font-heading). Sizes, weights, and colors match the Department 4.0 stylesheet.
- Poppins 400 loaded the Light file instead of Regular. Poppins 500 (Medium) added from v4 CDN.
- Table headers now use
--nu-purple-100 with white text.
- Table striping moved to odd rows (
#f9f6ff); dark mode uses rgb(78 42 132 / 10%).
--nu-purple-surface corrected to #f9f6ff, --nu-purple-surface-subtle to #f3f0f7.
- Blockquote background uses
#f9f6ff instead of translucent purple.
- Horizontal rules use 3px
--nu-purple-10 instead of 1px gray.
- List markers use
--nu-purple-100 instead of --nu-purple-40.
Added
- Open Graph image generation: builds a branded 1200x630 PNG per docs page. Favicon logo, page title, and description on Northwestern purple with a light purple accent border. Slack, Teams, and social media link previews use these images.
- Enabled by default. Set
site in your Astro config. pnpm users: run pnpm add canvaskit-wasm to enable (build skips OG gracefully without it).
- Disable with
ogImage: false.
- Adds
og:image, og:image:type, og:image:width, og:image:height, og:image:alt, og:logo, twitter:image, and twitter:image:alt meta tags to every page. Overrides twitter:card to summary_large_image.
- New dependency:
astro-og-canvas.
Added
defineNorthwesternConfig config helper. Single function that returns a complete Astro config with integration ordering (mermaid → starlight), plugin registration, and Expressive Code. Replaces the manual defineConfig + starlight() + northwesternMermaid() wiring. New ./config package export.
- Automatic Expressive Code line numbers.
defineNorthwesternConfig injects pluginLineNumbers() and GitHub syntax themes (github-dark / github-light). No ec.config.mjs file needed. A Vite plugin separates serializable config from plugin instances so the <Code> Astro component continues to work.
- Type declarations (
.d.ts) shipped for all public exports.
- OG images for changelog version pages with multi-line titles (e.g., “Changelog / 1.4.0”).
- JSON-LD structured data on each page.
- Unit test suite (Vitest) covering
config.ts, expressive-code.ts, mermaid.ts, and rehype-table-scroll.ts. E2E tests moved to tests/e2e/. CI runs unit tests in a dedicated job.
Fixed
- Replaced
astro-og-canvas + canvaskit-wasm with satori + @resvg/resvg-wasm. pnpm users no longer need canvaskit-wasm as a direct dependency.
- OG image generation logs a warning and disables when Starlight
title is empty or site is not set, instead of crashing or producing broken URLs.
- OG font buffer uses correct
Uint8Array offset slicing instead of casting the full backing ArrayBuffer.
- Larger OG text: title 48→56px, description 28→32px, logo 60→80px. Separate vertical (60px) and horizontal (220px) padding to avoid clipping.
- Runtime config validation now catches invalid theme, Mermaid, and config-helper options with friendly errors at the public API boundary instead of failing later with cryptic behavior.
- Rehype table scroll skips tables already inside
.nu-table-scroll, preventing double-wrapping on incremental rebuilds.
- Aside borders use solid brand colors (
#5091cd, #008656, #ffc520, #ef553f) and a 3px left accent stripe instead of a translucent 1px box border. Dark mode borders match the text accent for each variant.
Changed
h1 keeps Noto Serif; h2–h6 switched to Poppins.
- Package
exports map includes types fields pointing to dist/*.d.ts for all entry points.
Added
- Legacy
.html redirects. Sites migrated from VuePress had every page served at <slug>.html; external bookmarks and inbound links still point there. A new legacyHtmlRedirects option on defineNorthwesternConfig (default true) scans src/content/docs and emits a redirect from <slug>.html to the canonical <slug>/ URL for every page, with the URL hash preserved on forward so deep links like #schedule-management still land on the right anchor.