The organisation website for MathStruct, built with Quartz 4 from an Obsidian vault.
Live site: https://mathstruct.github.io/
.
├── content/ # the site — this is what you edit
│ ├── index.md # landing page
│ ├── about.md
│ ├── people.md # headings here are the targets of blog bylines
│ ├── blog/ # dated, signed posts (YYYY-MM-DD-slug.md)
│ ├── notes/ # undated reference notes
│ ├── projects/ # one page per project
│ ├── guides/ # authoring guide
│ └── templates/ # Obsidian templates (not published)
├── site/ # vendored Quartz + our plugins
└── .github/workflows/ # build and deploy to GitHub Pages
The repository root is the Obsidian vault — open it in Obsidian and write in
content/. The vault ships with Inline TikZ, Wypst and Markdown
Tabs, all of which have matching build-time support.
See the authoring guide. The short version:
---
title: Post title
authors: [Your Name] # byline; add yourself to content/people.md
created: 2026-09-13 # publication date; blog is sorted by it, newest first
description: One sentence.
math: typst # optional; omit for LaTeX/KaTeX
----
TikZ — a
```tikzfence holding\usepackagelines plus a full\begin{document} … \end{document}. Compiled to SVG at build time bynode-tikzjaxand cached by content hash insite/.tikz-cache(committed, so CI does not recompile everything). -
Maths — notes may mix Typst and LaTeX freely; each formula is routed on its own. A backslash command (
\frac,\beta) means LaTeX and goes to KaTeX; everything else is offered to Typst first and falls through to KaTeX if Typst rejects it. Pin a page withmath: typstormath: latexto forbid the other syntax. A```typstfence is always Typst and never falls back.The build prints
Mixed math in <file>: N with Typst, M with katexfor every note that used both, which is the list to work through if you want to make the vault pure.
cd site
npm ci # first time only
npx quartz build --serve -d ../contentThen open http://localhost:8080. Run npm run check for typechecking and
formatting.
Pushing to master triggers .github/workflows/deploy.yml, which builds with
Quartz and publishes to GitHub Pages. For the site to live at
https://mathstruct.github.io/, the repository must be named
MathStruct.github.io and Pages must be set to deploy from GitHub Actions
(the workflow enables that automatically on first run). If you host it under a
different repository name, update baseUrl in site/quartz.config.ts to
match — for example mathstruct.github.io/website.
site/ is a vendored copy of Quartz 4.5.2 with:
quartz/plugins/transformers/tikz.ts— build-time TikZ → SVG with caching.quartz/plugins/transformers/tabs.ts— Obsidian Markdown Tabs blocks.quartz/plugins/transformers/latex.ts— per-formula engine selection with fallback, so one note can mix Typst and LaTeX;```typstfences; and a report of which notes are mixed.quartz/components/Authors.tsx— bylines fromauthors:frontmatter, linked tocontent/people.md; used byContentMeta,PageListandRecentNotes.
To pull in upstream Quartz changes, merge them into site/ and keep those four
files.