T y p o g r a p h y
The letters, and what each is for.
A page has four jobs: a label has to be found in a glance, a title seen before it is read, a paragraph survive ten minutes of reading, and a command line up character by character. This site answers all four with two monoline faces, a machine layer: Mona Sans, a variable grotesk, for the interface, the titles and the prose; Martian Mono for labels, the terminal and code. Quotes are a second layer, set apart on purpose. Every quoted line, in every script, is set in a face drawn for its own script — Instrument Serif, Anek Devanagari, Gulzar, M PLUS 1 — so a line from Ghalib or Bashō reads as an artifact placed inside the machine, not more of its output.
Everything here is self-hosted. No request leaves your browser for a font, and the site looks the same offline. Mona Sans is variable in weight and in width, so a title is the body face run wide and tight rather than a different drawing. Move both axes below.
the four jobs
01 · interface
Research · Projects · Writing
~/kathmandu $ whoami · 27.7°N 85.3°E · press ⌘K
Mona Sans at normal width. A grotesk with clean, engineered spacing, for anything that has to be scanned rather than read: navigation, buttons, small print.
02 · display
Aa
The same voice, with more weight.
Mona Sans at 112% width, 560 to 600 weight and very tight tracking. A title is not a separate typeface; it is the body face run wide, which is what reads as fast.
03 · reading
A model is a bet about which differences will matter. It is not a smaller world; it is a decision, made in advance, about what can be forgotten. That decision is the whole of the art.
Mona Sans again, at 400, 1.125rem on a 1.72 line and a 68-character measure. The calm is in the spacing. An emphasis set inside it borrows the quote face, a small artifact in the prose.
04 · measured
// collections day 176 night 49 air 39 self 40 model 49 total 353 distinct lines if (loss != 0) -> step();
Martian Mono at 87.5% width: rigid, square-shouldered, with unambiguous 0/O and 1/l/I and columns that line up. No ligatures — != stays the two characters you typed. Dates, labels, code and the terminal; the Latin name in the hero is its narrowest cut.
the artifacts: every script a quote arrives in
the name
सौरभ बास्तोला
Anek Devanagari. A variable Devanagari built like Mona Sans, with a width axis; the name and every Nepali, Hindi and Sanskrit line, with room above the headstroke for the matras.
the signature
सौरभ
Kalam. Handwriting, drawn stroke by stroke in the footer.
the sher
ہزاروں خواہشیں ایسی کہ ہر خواہش پہ دم نکلے
Gulzar, a Nastaliq. Ghalib in the hand Urdu and Persian poetry are written in, given a 2.2 line so the diagonal joins and low dots never clip. Arabic proper gets Amiri's Naskh.
the haiku
古池や
蛙飛び込む
水の音
M PLUS 1 at a light weight, widely spaced, for Bashō's pond and the classical Chinese lines.
the verse
नेति नेति
Not this, not this. The oldest description of a model.
the fragment
ἦθος ἀνθρώπῳ δαίμων
Heraclitus, in Greek. English lines are set in Instrument Serif, condensed and sharp; Greek falls through to Eczar, which has the polytonic accents Instrument lacks.
the scale
--text-display
The world is charged with the grandeur of it.
the one line you see first
--text-h1
The world is charged with the grandeur of it.
a page's name
--text-h2
The world is charged with the grandeur of it.
a section
--text-body
The world is charged with the grandeur of it.
long writing
--text-small
The world is charged with the grandeur of it.
a note, a caption
--text-micro
The world is charged with the grandeur of it.
labels and dates
move the axes
the variable face
The map is not the territory.
But a map that leaves nothing out is no use to anyone. The same letters, drawn with a different weight.
font-weight: 400; font-stretch: 100%;
Titles on the rest of the site sit at 560–600 and 112%; prose at 400 and 100%.
The rule throughout: one Latin voice, many weights. Consistency is not sameness — it is knowing which axis to move, and when to leave it alone. The colophon says why.