---
date: '2024-12-10'
description: nobby designer word for "the design of the current site"
id: colophon
lang: en
modified: 2026-10-14 00:08:53 GMT-04:00
socials:
  twitter: https://x.com/aarnphm/status/1861550609834402129
tags:
  - evergreen
  - design
  - technical
title: colophon
created: '2024-12-10'
published: '2024-12-10'
pageLayout: default
slug: colophon
permalink: https://aarnphm.xyz/colophon.md
generator:
  quartz: v4.6.0
  hostedProvider: Cloudflare
  baseUrl: aarnphm.xyz
full: https://aarnphm.xyz/llms-full.txt
---
**<ref slug="tags/technical">** — a [heavily modified fork](https://en.wikipedia.org/wiki/Ship_of_Theseus) of [Quartz](https://quartz.jzhao.xyz/), hosted with Cloudflare Workers, with support for arXiv file pulling, [telescopic](https://github.com/jackyzha0/telescopic-text) [[/index|text]], [[/|custom homepage]], a [note view](https://notes.aarnphm.xyz/notes?stackedNotes=bm90ZXM), [[/singularity|JSON Canvas support]], [[cinematheque.base|Obsidian Bases support]] hierarchical grid layout, comment room support, reader view with custom [[/thoughts|folder]] and [[/tags|tags]] view, nested [[/index.xml|rss]] [[/posts/index.xml|feed]], [[queries|Jupyter]] [[thoughts/university/twenty-five-twenty-six/sfwr-4tb3/10 Generalized Parsing/00 Generalized Parsing|Notebooks]] support for client-side interaction, <ref slug="thoughts/Sets/flashcards">, [[triathlon|a bunch of triathlon/tracking/analytics/health stuff]], {{sidenotes[tufte]: This is a tiny sidenote, supporting dynamic view size. Very much along the lines of [Tufte CSS](https://edwardtufte.github.io/tufte-css/)}} sidenotes, sidepanels [^sidepanel], custom popover, modified [Flexoki](https://stephango.com/flexoki). I also host all of the LFS on Cloudflare R2, and have a middleware as a proxy client.

There are also [[courses/index|course workspaces]], a PDF reader with marks and notes, a saved-link reading queue, browser semantic search, pronunciation tools, and a little mascot wandering around the page edges. The [[/index|homepage]] has local weather and a shared walking trail. The <ref slug="404"> has acquired a whole landscape. More on those below.

[^sidepanel]: <kbd>Alt</kbd>, <kbd>Cmd</kbd>, or <kbd>Ctrl</kbd> + click an internal link to [popover](https://x.com/aarnphm/status/1884954569341272345) a side panel 😃

**typography** — [PP Neue Montreal](https://pangrampangram.com/products/neue-montreal), [<span style="font-family: 'Space Grotesk'">Space Grotesk</span>](https://fonts.google.com/specimen/Space+Grotesk?preview.script=Latn), [<span style="font-family: 'Parclo Serif'">Parclo Serif</span>](https://lettermatic.com/fonts/parclo-serif?plan=student), [<span style="font-family: 'ITCGaramondStdLtCond'">ITC Garamond</span>](https://www.typewolf.com/itc-garamond) and [`berkeley mono{:text}`](https://usgraphics.com/products/berkeley-mono)

**accessibility** — native buttons, dialogs and popovers, keyboard navigation, visible focus, and ARIA labels for the controls that need them. The mascot and 404 landscape respect the reduced-motion preference. Press <span style="text-transform: uppercase"><kbd>D</kbd></span> outside text fields to cycle through daylight, system, dark, and light themes. <kbd>Cmd/Ctrl+’</kbd> opens the shortcuts helper.

**components** — I added support for rendering [[thoughts/Vector calculus#gradient|tikz graph]], [[thoughts/Transformers#Feynman-Kac|pseudocode]] support, [dynalist](https://dynalist.io)-inspired [[thoughts/mechanistic interpretability#inference|collapsible header]], a few customised [[posts/new#^ending|signature]], tiny [transformers plugins](https://github.com/aarnphm/aarnphm.github.io/blob/main/quartz/plugins/transformers/aarnphm.ts), micromarks extensions for [wikilinks](https://github.com/aarnphm/aarnphm.github.io/tree/main/quartz/extensions/micromark-extension-ofm-wikilinks), [sidenotes](https://github.com/aarnphm/aarnphm.github.io/tree/main/quartz/extensions/micromark-extension-ofm-sidenotes), [[posts/25/n-bday|protected notes]], [distributed comments](https://github.com/aarnphm/aarnphm.github.io/blob/main/quartz/components/scripts/collaborative-comments.inline.ts), and additional supports of [`renderPage.tsx`](https://github.com/aarnphm/aarnphm.github.io/blob/main/quartz/components/renderPage.tsx#L1487)

**usage** — Some daily drivers that has found [[uses|its way]] into my life. But I use [Obsidian](https://obsidian.md/) for note-taking and Apple Notes while I’m on the go, in conjunction with [neovim](https://neovim.io/) for all my [[thoughts/craft|work-related shenanigans]].

**license** — All my notes are licensed under CC BY-NC-SA [^license], whilst the code is under [Apache 2.0](http://www.apache.org/licenses/). Original authors are referenced and linked, and their work retains its own licenses. The note footer renders the Creative Commons marks.

[^license]: This is not really a huge enforcer per-say, given that [not saying it](https://choosealicense.com/no-permission/) means “oh ALL RIGHTS RESERVED”. These are mostly for my own [[notes|consumption]], and if you find it helpful then feel free to use it, just a quick mention would be appreciated 🫶

    I’m pretty lenient towards LLMs, most of the sites are pretty LLM-friendly. For all URL, you can just append `.md` to just get the markdown source.

**plugins** — Most of additional items I wrote for this website follow [unified](https://unifiedjs.com/) ecosystem and can be exported as a standalone {{sidenotes[plugins.]: We are working on a few integrations separating out logics and improving general [Quartz ecosystem](https://github.com/quartz-community), stay tuned.}}

## a rather non-exhaustive lists

_of plugins that exists on this vault_

Also to run this with

```bash
pnpm exec tsx quartz/scripts/dev.ts --bg

tail -f .dev.log
```

For a more compact highlights, see [[thoughts/craft#^quartz|this list]]

### courses and lecture workspaces

I want to explore a [spaced repetition](https://notes.andymatuschak.org/zRBUabiBg7c2o9i2vqamMFW) interface for some of the [[courses/index|OCW course]]. This include the lecture notes, alongside problem sets, and decks.

There are some {{sidenotes[video lectures]: Video lecture pages also pair with captions for better accessibility. For folks that enjoy latex, those are also imported to the linked study notes.}} that paired with backlinks that allows better graph navigation. I explicitly did not enable graph given that it creates too much cognitive overload (or at least for me whenever I look at a graph).

### PDF reader

PDFs in the garden open in a reader with a document library, outline, page navigation, zoom, text selection, marks, and Markdown notes with math. It remembers reading position and can link directly to a page or mark. Course resource pages use the same reader, so their marks stay attached when opening the source beside a lecture. The original file remains available through the raw-file link.

### feed

A <ref slug="arena/feed"> combines links from [[are.na|are.na]] and [[curius|curius]], allowing me to go through all of the links backlog I have. There are also some custom parsing courtesy of [defuddle](https://defuddle.md/)

### search

Search expands based on Quartz’ default lexical search, with semantic enabled. I used [EmbeddingGemma 2](https://huggingface.co/google/embeddinggemma-2) through [Transformers.js](https://github.com/huggingface/transformers.js) and precompute the whole garden’s embeddings. Feel free to take a look at the RAG pipeline, pretty standard nowadays.

### training

I use both [Strava](https://www.strava.com/athletes/123158310) and TrainingPeaks, but [[triathlon|triathlon page]] brings together Strava, Garmin, Wahoo, Oura, Apple Health, and CORE records with logs. Of course it has to have our own styling and preferences. There are a bunch of stuff to explore in terms of data analytics and exploration, with also activities that contains wind data, cycling CdA.

There are also a bunch of maths and sports physiology in there for maximize human-performance 😸 (i’m just a sucker for data, but it is all fun and game)

### mascots

Very rudimentary hand-drawn mascot appears in the favicon, social cards, and page artwork. Its animated version perches on headings, code blocks, figures, and other page edges, then rides the scroll rail while the page moves. If you wish to turn the pets off, then press <kbd>Ctrl+p</kbd> (but Blob wouldn’t like that)

### kit de presse

Press <kbd>gs</kbd> to open the share-card editor. Think Strava sharing but customization per notes socials. Mostly for me lool but feel free to use it.

### pronunciation and source text

French notes and decks have pronunciation controls with playback-speed settings. <kbd>gv</kbd> opens those settings. Audio uses cached clips when available and an optional browser speech model for synthesis. We use a speech models to support French and English.

The metadata row can copy a note’s Markdown source to the clipboard and reports whether the copy succeeded. Appending `.md` to a note URL also serves the source. Notebook cells, mathematical diagrams, and slide views have their own interactive rendering, including numbered slide pages and an overview grid.

### vim bindings

- `f` to navigate the sites on keyboards.
- `gh` for navigating ToC (supports j/k/Ctrl-n/Ctrl-p scrolling)
- `Cmd/Ctrl+'` for shortcuts helpers
- `Cmd/Ctrl+P` for the command palette
- `gs` for the share-card editor, `gv` for pronunciation settings

### parser

some remark parsers for wikilinks, callouts, that supports general OFM compatibility

see [ofm-wikilinks](https://github.com/aarnphm/aarnphm.github.io/tree/main/quartz/extensions/micromark-extension-ofm-wikilinks/) and [ofm-sidenotes](https://github.com/aarnphm/aarnphm.github.io/tree/main/quartz/extensions/micromark-extension-ofm-sidenotes) for more information.

Supports [[cinematheque|Bases]] [API](https://help.obsidian.md/bases) and [[singularity.canvas|JSON]] [Canvas](https://help.obsidian.md/plugins/canvas)

Bases render tables, lists, image galleries, maps, and [Kanban columns](https://obsidian.md/help/bases/views/kanban). The [[cinematheque/analysis|film analysis view]] uses the first `studio` entry as the main production company and places each film in one column. This convention is saved as a Bases formula; notes keep their full list of production companies. Obsidian can show those lists as combined group labels. Search filters cards and updates column counts. The `.base` file controls filters, sorting, visible properties, image fit, and column width; note creation and property edits happen in Obsidian.

### [telescopic-text](https://github.com/jackyzha0/telescopic-text)

Support a small subsets of the features, with wikilinks parsing

```telescopic id="reading"
* I'm
* reading
  * reading a lot of
    * Nietzsche,
    * Wittgenstein,
		 * hosting functions,
	 * and, go on long walks,
	   * building [[thoughts/craft|open-source projects]],
	    * this [pan](https://example.com)
```

> \[!abstract\]- code
>
> ````
> ```telescopic id="reading"
> * I'm
> * reading
>   * reading a lot of
>     * Nietzsche,
>     * Wittgenstein,
> 		 * hosting functions,
> 	 * and, go on long walks,
> 	   * building [[thoughts/craft|open-source projects]],
> 	    * this [pan](https://example.com)
> ```
> ````

### TikZ support

to use in {{sidenotes[conjunction]: Currently, there is a few pgfplots bug upstream in node port, so to remove the graph from target rendering add `alt` as the URI svg (see examples below).}} with [obsidian-tikzjax](https://github.com/artisticat1/obsidian-tikzjax/)

<figure class="tikz" data-remark-tikz style=""><span class="tikz-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><annotation encoding="application/x-tex">"\\usepackage{tikz-cd}\n\\begin{document}\n\\begin{tikzcd}\n\\pi^{-1}(U) \\arrow[r, \"\\varphi\"] \\arrow[d, \"\\pi\"'] &#x26; U \\times F \\arrow[ld, \"proj_1\"] \\\\\nU &#x26;\n\\end{tikzcd}\n\\end{document}"</annotation></semantics></math></span><img src="data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIxMDEuNjcyNzlwdCIgaGVpZ2h0PSI1MC4xMTIyN3B0IiB2aWV3Qm94PSItNzIgLTcyIDEwMS42NzI3OSA1MC4xMTIyNyI+PGcgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjEuNDMzNjA5MDA4Nzg5MDYsLTQ3LjIxMzg2NzE4NzQ5OTk5KSBzY2FsZSgxLC0xKSI+PGcgc3Ryb2tlPSIjMDAwIiBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlLXdpZHRoPSIwLjQiPiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNTAuODM2NCwtMjEuMzk2NDEpIj4gPGcgc3Ryb2tlPSIjMDAwIiBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlPSJub25lIiB0cmFuc2Zvcm09InNjYWxlKC0xLDEpIHRyYW5zbGF0ZSgtMjEuNDMzNjA5MDA4Nzg5MDYsLTQ3LjIxMzg2NzE4NzQ5OTk5KSBzY2FsZSgtMSwtMSkiPjxnIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTAuODgyNTUzMTAwNTg1OTM3MywtODEuODY2NjgzOTU5OTYwOTIpIHNjYWxlKDEsLTEpIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYuMjQ1NTEsMC4wKSI+IDxnIHN0cm9rZT0iIzAwMCIgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSB0cmFuc2xhdGUoLTAuODgyNTUzMTAwNTg1OTM3MywtODEuODY2NjgzOTU5OTYwOTIpIHNjYWxlKC0xLC0xKSI+PGcgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSI+IDx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9Ii04MS44NjY2ODM5NTk5NjA5MiIgeD0iLTAuODgyNTUzMTAwNTg1OTM3MyIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjEwIiBmaWxsPSJibGFjayIgZm9udC1zdHlsZT0iaXRhbGljIj7PgDwvdGV4dD48dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSItODUuNDk1NjA1NDY4NzQ5OTkiIHg9IjUuMTc2NTAwMzIwNDM0NTY5IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iNyIgZmlsbD0iYmxhY2siPuKIkjwvdGV4dD48dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSItODUuNDk1NjA1NDY4NzQ5OTkiIHg9IjExLjQyNjUyOTg4NDMzODM3NyIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjciIGZpbGw9ImJsYWNrIj4xPC90ZXh0Pjx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9Ii04MS44NjY2ODM5NTk5NjA5MiIgeD0iMTUuOTEyNjQ1MzM5OTY1ODE3IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iMTAiIGZpbGw9ImJsYWNrIj4oPC90ZXh0Pjx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9Ii04MS44NjY2ODM5NTk5NjA5MiIgeD0iMTkuODAxNTQ4MDA0MTUwMzg3IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iMTAiIGZpbGw9ImJsYWNrIiBmb250LXN0eWxlPSJpdGFsaWMiPlU8L3RleHQ+PHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iLTgxLjg2NjY4Mzk1OTk2MDkyIiB4PSIyNy43MTk1Nzc3ODkzMDY2MzQiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSIxMCIgZmlsbD0iYmxhY2siPik8L3RleHQ+PC9nPiA8L2c+IDwvZz48L2c+IDwvZz4gPC9nPjxnIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjEuOTUzODI2OTA0Mjk2ODYsLTgxLjg2NjY4Mzk1OTk2MDkyKSBzY2FsZSgxLC0xKSI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEzLjk3OTgxLDAuMCkiPiA8ZyBzdHJva2U9IiMwMDAiIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2U9Im5vbmUiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkgdHJhbnNsYXRlKDYxLjk1MzgyNjkwNDI5Njg2LC04MS44NjY2ODM5NTk5NjA5Mikgc2NhbGUoLTEsLTEpIj48ZyBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlPSJub25lIj4gPHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iLTgxLjg2NjY4Mzk1OTk2MDkyIiB4PSI2MS45NTM4MjY5MDQyOTY4NiIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjEwIiBmaWxsPSJibGFjayIgZm9udC1zdHlsZT0iaXRhbGljIj5VPC90ZXh0Pjx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9Ii04MS44NjY2ODM5NTk5NjA5MiIgeD0iNzIuMDk0MDI0NjU4MjAzMTEiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSIxMCIgZmlsbD0iYmxhY2siPsOXPC90ZXh0Pjx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9Ii04MS44NjY2ODM5NTk5NjA5MiIgeD0iODIuMDkzOTk3OTU1MzIyMjUiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSIxMCIgZmlsbD0iYmxhY2siIGZvbnQtc3R5bGU9Iml0YWxpYyI+RjwvdGV4dD48L2c+IDwvZz4gPC9nPjwvZz4gPC9nPiA8L2c+PGcgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMC44ODI1NTMxMDA1ODU5MzczLC00Ny4yMTM4NjcxODc0OTk5OSkgc2NhbGUoMSwtMSkiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zLjk1OTAxLDAuMCkiPiA8ZyBzdHJva2U9IiMwMDAiIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2U9Im5vbmUiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkgdHJhbnNsYXRlKC0wLjg4MjU1MzEwMDU4NTkzNzMsLTQ3LjIxMzg2NzE4NzQ5OTk5KSBzY2FsZSgtMSwtMSkiPjxnIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2U9Im5vbmUiPiA8dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSItNDcuMjEzODY3MTg3NDk5OTkiIHg9Ii0wLjg4MjU1MzEwMDU4NTkzNzMiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSIxMCIgZmlsbD0iYmxhY2siIGZvbnQtc3R5bGU9Iml0YWxpYyI+VTwvdGV4dD48L2c+IDwvZz4gPC9nPjwvZz4gPC9nPiA8L2c+PGcgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MS45NTM4MjY5MDQyOTY4NiwtNDcuMjEzODY3MTg3NDk5OTkpIHNjYWxlKDEsLTEpIj48L2c+PC9nPjwvZz4gPC9nPiA8ZyBzdHJva2Utd2lkdGg9IjAuMzk5OTgiPiA8cGF0aCBkPSIgTSAtOS41MzQyOSAxNS43NTY0MSBMIDEzLjY2NTczIDE1Ljc1NjQxICAiIGZpbGw9Im5vbmUiPjwvcGF0aD4gPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuODY1NywxNS43NTY0MSkiPiA8ZyBzdHJva2UtZGFzaGFycmF5PSJub25lIiBzdHJva2UtZGFzaG9mZnNldD0iMC4wIj4gPGcgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4gPGcgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+IDxwYXRoIGQ9IiBNIC0yLjA3OTg4IDIuMzk5ODYgQyAtMS42OTk4OSAwLjk1OTkyIC0wLjg1MzEzIDAuMjc5OTggMC4wIDAuMCBDIC0wLjg1MzEzIC0wLjI3OTk4IC0xLjY5OTg5IC0wLjk1OTkyIC0yLjA3OTg4IC0yLjM5OTg2ICAiIGZpbGw9Im5vbmUiPjwvcGF0aD4gPC9nPiA8L2c+IDwvZz4gIDwvZz4gPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTAuMzY0MTcsMTkuNDcwMjUpIj4gPGcgc3Ryb2tlPSIjMDAwIiBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlPSJub25lIiB0cmFuc2Zvcm09InNjYWxlKC0xLDEpIHRyYW5zbGF0ZSgtMjEuNDMzNjA5MDA4Nzg5MDYsLTQ3LjIxMzg2NzE4NzQ5OTk5KSBzY2FsZSgtMSwtMSkiPjxnIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2U9Im5vbmUiPiA8dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSItNDcuMjEzODY3MTg3NDk5OTkiIHg9Ii0yMS40MzM2MDkwMDg3ODkwNiIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjciIGZpbGw9ImJsYWNrIiBmb250LXN0eWxlPSJpdGFsaWMiPs+GPC90ZXh0PjwvZz4gPC9nPiA8L2c+PC9nPiA8L2c+IDwvZz4gPGcgc3Ryb2tlLXdpZHRoPSIwLjM5OTk4Ij4gPHBhdGggZD0iIE0gLTMwLjI4NTM0IDYuODk2NjggTCAtMzAuMjg1MzQgLTEwLjMwMzQgICIgZmlsbD0ibm9uZSI+PC9wYXRoPiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjAsLTEuMCwxLjAsMC4wLC0zMC4yODUzNCwtMTAuNTAzMzkpIj4gPGcgc3Ryb2tlLWRhc2hhcnJheT0ibm9uZSIgc3Ryb2tlLWRhc2hvZmZzZXQ9IjAuMCI+IDxnIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+IDxnIHN0cm9rZS1saW5lam9pbj0icm91bmQiPiA8cGF0aCBkPSIgTSAtMi4wNzk4OCAyLjM5OTg2IEMgLTEuNjk5ODkgMC45NTk5MiAtMC44NTMxMyAwLjI3OTk4IDAuMCAwLjAgQyAtMC44NTMxMyAtMC4yNzk5OCAtMS42OTk4OSAtMC45NTk5MiAtMi4wNzk4OCAtMi4zOTk4NiAgIiBmaWxsPSJub25lIj48L3BhdGg+IDwvZz4gPC9nPiA8L2c+ICA8L2c+IDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zNy41NjU1NSwtMy40MTAyOCkiPiA8ZyBzdHJva2U9IiMwMDAiIGZpbGw9IiMwMDAiPiA8ZyBzdHJva2U9Im5vbmUiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkgdHJhbnNsYXRlKC0yMS40MzM2MDkwMDg3ODkwNiwtNDcuMjEzODY3MTg3NDk5OTkpIHNjYWxlKC0xLC0xKSI+PGcgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSI+IDx0ZXh0IGFsaWdubWVudC1iYXNlbGluZT0iYmFzZWxpbmUiIHk9Ii00Ny4yMTM4NjcxODc0OTk5OSIgeD0iLTIxLjQzMzYwOTAwODc4OTA2IiBmb250LWZhbWlseT0ic2VyaWYiIGZvbnQtc2l6ZT0iNyIgZmlsbD0iYmxhY2siIGZvbnQtc3R5bGU9Iml0YWxpYyI+z4A8L3RleHQ+PC9nPiA8L2c+IDwvZz48L2c+IDwvZz4gPC9nPiA8ZyBzdHJva2Utd2lkdGg9IjAuMzk5OTgiPiA8cGF0aCBkPSIgTSAxOS41MTE2OSA4LjU2MzM3IEwgLTIxLjQ3MDU4IC0xNC4wMzk2ICAiIGZpbGw9Im5vbmUiPjwvcGF0aD4gPGcgdHJhbnNmb3JtPSJtYXRyaXgoLTAuODc1NjMsLTAuNDgyOTMsMC40ODI5MywtMC44NzU2MywtMjEuNjQ1NjgsLTE0LjEzNjE3KSI+IDxnIHN0cm9rZS1kYXNoYXJyYXk9Im5vbmUiIHN0cm9rZS1kYXNob2Zmc2V0PSIwLjAiPiA8ZyBzdHJva2UtbGluZWNhcD0icm91bmQiPiA8ZyBzdHJva2UtbGluZWpvaW49InJvdW5kIj4gPHBhdGggZD0iIE0gLTIuMDc5ODggMi4zOTk4NiBDIC0xLjY5OTg5IDAuOTU5OTIgLTAuODUzMTMgMC4yNzk5OCAwLjAgMC4wIEMgLTAuODUzMTMgLTAuMjc5OTggLTEuNjk5ODkgLTAuOTU5OTIgLTIuMDc5ODggLTIuMzk5ODYgICIgZmlsbD0ibm9uZSI+PC9wYXRoPiA8L2c+IDwvZz4gPC9nPiAgPC9nPiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLjE5ODIxLC05LjgxOTM3KSI+IDxnIHN0cm9rZT0iIzAwMCIgZmlsbD0iIzAwMCI+IDxnIHN0cm9rZT0ibm9uZSIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSB0cmFuc2xhdGUoLTIxLjQzMzYwOTAwODc4OTA2LC00Ny4yMTM4NjcxODc0OTk5OSkgc2NhbGUoLTEsLTEpIj48ZyBmaWxsPSIjMDAwIj4gPGcgc3Ryb2tlPSJub25lIj4gPHRleHQgYWxpZ25tZW50LWJhc2VsaW5lPSJiYXNlbGluZSIgeT0iLTQ3LjIxMzg2NzE4NzQ5OTk5IiB4PSItMjEuNDMzNjA5MDA4Nzg5MDYiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSI3IiBmaWxsPSJibGFjayIgZm9udC1zdHlsZT0iaXRhbGljIj5wcjwvdGV4dD48dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSItNDcuMjEzODY3MTg3NDk5OTkiIHg9Ii0xMy4zODI5ODUxMTUwNTEyNjYiIGZvbnQtZmFtaWx5PSJzZXJpZiIgZm9udC1zaXplPSI3IiBmaWxsPSJibGFjayIgZm9udC1zdHlsZT0iaXRhbGljIj5vajwvdGV4dD48dGV4dCBhbGlnbm1lbnQtYmFzZWxpbmU9ImJhc2VsaW5lIiB5PSItNDYuMjEzODY3MTg3NDk5OTkiIHg9Ii02LjEyNjY4NDE4ODg0Mjc3MiIgZm9udC1mYW1pbHk9InNlcmlmIiBmb250LXNpemU9IjUiIGZpbGw9ImJsYWNrIj4xPC90ZXh0PjwvZz4gPC9nPiA8L2c+PC9nPiA8L2c+IDwvZz4gPC9nPiA8L2c+IDwvZz48L3N2Zz4=" alt="tikz diagram" loading="lazy" decoding="async"><figcaption><em>source code</em><button class="source-code-button" aria-label="copy source code for this tikz graph" title="copy source code for this tikz graph"><svg class="source-icon" xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 -4 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><use href="#code-icon"></use></svg><svg class="check-icon" xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 -4 16 16" fill="currentColor" stroke="none" stroke-width="0" stroke-linecap="round" stroke-linejoin="round"><use href="#github-check"></use></svg></button></figcaption></figure>

> \[!abstract\]- code
>
> ````
> ```tikz
> \usepackage{tikz-cd}
> \begin{document}
> \begin{tikzcd}
> \pi^{-1}(U) \arrow[r, "\varphi"] \arrow[d, "\pi"'] & U \times F \arrow[ld, "proj_1"] \\
> U &
> \end{tikzcd}
> \end{document}
> ```
>
> ```tikz alt="data:image/svg+xml..."
> ```
> ````

### pseudocode support

<div class="ps-root" data-inline-macros=""><span type="button" class="clipboard-button ps-clipboard" aria-label="Copy pseudocode to clipboard"><svg width="16" height="16" viewBox="0 0 16 16" class="copy-icon"><use href="#github-copy"></use></svg><svg width="16" height="16" viewBox="0 0 16 16" class="check-icon"><use href="#github-check" fill-rule="evenodd" fill="rgb(63, 185, 80)"></use></svg></span><span class="ps-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><annotation encoding="application/x-tex">"\\begin{algorithm}\n\\caption{LLM token sampling}\n\\begin{algorithmic}\n\\Function{sample}{$L$}\n\\State $s \\gets ()$\n\\For{$i \\gets 1, L$}\n\\State $\\alpha \\gets \\text{LM}(s, \\theta)$\n\\State Sample $w \\sim \\text{Categorical}(\\alpha)$\n\\If{$w = \\text{EOS}$}\n\\State \\textbf{break}\n\\EndIf\n\\State $s \\gets \\operatorname{append}(s, w)$\n\\EndFor\n\\State \\Return $s$\n\\EndFunction\n\\end{algorithmic}\n\\end{algorithm}"</annotation></semantics></math></span>
<div class="ps-algorithm with-caption">
<p class="ps-line" style="text-indent:-0.6em;padding-left:0.6em;">
<span class="ps-keyword">Algorithm 1 </span>LLM token sampling</p>
<div class="ps-algorithmic with-linenum">
<div class="ps-block" style="margin-left:1.2em;">
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:0em;">1:</span><span class="ps-keyword">function </span><span class="ps-funcname">sample</span>(<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>L</mi></mrow><annotation encoding="application/x-tex">L</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">L</span></span></span></span>)</p>
<div class="ps-block" style="margin-left:0.6em;">
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:-0.75em;">2:</span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo>←</mo><mo stretchy="false">(</mo><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">s \gets ()</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">←</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mclose">)</span></span></span></span></p>
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:-0.75em;">3:</span><span class="ps-keyword">for </span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo>←</mo><mn>1</mn><mo separator="true">,</mo><mi>L</mi></mrow><annotation encoding="application/x-tex">i \gets 1, L</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em;"></span><span class="mord mathnormal">i</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">←</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">L</span></span></span></span><span class="ps-keyword"> do</span></p>
<div class="ps-block" style="margin-left:0.6em;">
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:-1.5em;">4:</span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>α</mi><mo>←</mo><mtext>LM</mtext><mo stretchy="false">(</mo><mi>s</mi><mo separator="true">,</mo><mi>θ</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\alpha \gets \text{LM}(s, \theta)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">←</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">LM</span></span><span class="mopen">(</span><span class="mord mathnormal">s</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0278em;">θ</span><span class="mclose">)</span></span></span></span></p>
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:-1.5em;">5:</span>Sample <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi><mo>∼</mo><mtext>Categorical</mtext><mo stretchy="false">(</mo><mi>α</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">w \sim \text{Categorical}(\alpha)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.0269em;">w</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord text"><span class="mord">Categorical</span></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0037em;">α</span><span class="mclose">)</span></span></span></span></p>
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:-1.5em;">6:</span><span class="ps-keyword">if </span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi><mo>=</mo><mtext>EOS</mtext></mrow><annotation encoding="application/x-tex">w = \text{EOS}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.0269em;">w</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord text"><span class="mord">EOS</span></span></span></span></span><span class="ps-keyword"> then</span></p>
<div class="ps-block" style="margin-left:0.6em;">
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:-2.25em;">7:</span><span style="font-weight:bold;">break</span></p>
</div>
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:-1.5em;">8:</span><span class="ps-keyword">end if</span></p>
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:-1.5em;">9:</span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo>←</mo><mi mathvariant="normal">append</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>s</mi><mo separator="true">,</mo><mi>w</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">s \gets \operatorname{append}(s, w)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">←</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop"><span class="mord mathrm">append</span></span><span class="mopen">(</span><span class="mord mathnormal">s</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0269em;">w</span><span class="mclose">)</span></span></span></span></p>
</div>
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:-0.75em;">10:</span><span class="ps-keyword">end for</span></p>
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:-0.75em;">11:</span></p>
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:-0.75em;">12:</span><span class="ps-keyword">return </span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span></p>
</div>
<p class="ps-line ps-code">
<span class="ps-linenum" style="left:0em;">13:</span><span class="ps-keyword">end function</span></p>
</div>
</div>
</div>
</div>

> \[!abstract\]- code
>
> ````
> ```pseudo
> \begin{algorithm}
> \caption{LLM token sampling}
> \begin{algorithmic}
> \Function{sample}{$L$}
> \State $s \gets ()$
> \For{$i \gets 1, L$}
> \State $\alpha \gets \text{LM}(s, \theta)$
> \State Sample $w \sim \text{Categorical}(\alpha)$
> \If{$w = \text{EOS}$}
> \State \textbf{break}
> \EndIf
> \State $s \gets \operatorname{append}(s, w)$
> \EndFor
> \State \Return $s$
> \EndFunction
> \end{algorithmic}
> \end{algorithm}
> ```
> ````

### collapsible header

inspired by <https://dynalist.io/>

### Gaussian-scaling TOC

inspired by <https://press.stripe.com>

> \[!note\] browser compatibility
>
> Currently, this only works on Chrome and on Desktop.

### reader view

_press cmd/ctrl+shift+b_

### sidepanel view

_press alt/cmd/ctrl+click on any internal links_

### comments

_inspired by figma multiplayer comments_

I added the ability to leave comments on pages, simply by holding <kbd>Ctrl</kbd> or <kbd>Cmd</kbd> while dragging to add a comment.

### flashcards

credit to [eudoxia0/hashcards](https://github.com/eudoxia0/hashcards). Check out <ref slug="thoughts/Sets/flashcards">. Decks support question/answer and cloze cards, math, and stable card identities. The source note can sit beside the active card, and a course review combines due cards from its decks. Signed-in owner reviews use [FSRS](https://github.com/open-spaced-repetition/ts-fsrs), with saved review history and undo. Grading a cloze card defers its siblings until the next session.

