Pipeline redesign: self-host Geist and Geist Mono #1194

Open
opened 2026-11-01 14:17:37 +00:00 by tiagoagueda · 0 comments
Owner

Part of #1191. Design: the redesign canvas, https://claude.ai/artifact/CTfX5t4BQiVq9cH97XFvcZ (private to the maintainer until shared). Each screen has three artboards: today, polished and bold; this milestone builds bold.

Bold sets the interface in Geist, with figures, dates and times in Geist Mono. This reverses #74, which chose the system stack so the CSP needed no font-src, once the maintainer agrees (spec issue).

What

  • Ship the fonts: Geist and Geist Mono as woff2 under static/, with their OFL licence beside them. The CSP stays font-src 'self'.
  • --font-sans: Geist first, then today's system stack.
  • --font-mono: Geist Mono, then ui-monospace.
  • Scripts Geist lacks (Arabic and Urdu, including Nastaliq, Devanagari, Bengali, CJK) fall through to the system stack. The per-script rules in app.css (for example the Nastaliq line height) stay.
  • A .figures utility (mono plus tabular numbers) for dates, times, counts and money.
  • Uppercase mono labels ("MON 05 OCT") come from locale date formatting. They never use CSS text-transform on translated text, which breaks scripts without case.
  • Docs: update manage.py check_fonts and its docs if they assume no interface webfont.

Acceptance

  • No request leaves the instance for a font, so the CSP is unchanged.
  • The reflow walk and the language tests pass in every selected language.
  • The page weight added is stated in the PR.

Depends on #1192.

🤖 Generated with Claude Code

Part of #1191. Design: the redesign canvas, https://claude.ai/artifact/CTfX5t4BQiVq9cH97XFvcZ (private to the maintainer until shared). Each screen has three artboards: *today*, *polished* and *bold*; this milestone builds **bold**. Bold sets the interface in **Geist**, with figures, dates and times in **Geist Mono**. This reverses #74, which chose the system stack so the CSP needed no `font-src`, once the maintainer agrees (spec issue). ## What - **Ship the fonts:** Geist and Geist Mono as `woff2` under `static/`, with their OFL licence beside them. The CSP stays `font-src 'self'`. - **`--font-sans`:** Geist first, then today's system stack. - **`--font-mono`:** Geist Mono, then `ui-monospace`. - **Scripts Geist lacks** (Arabic and Urdu, including Nastaliq, Devanagari, Bengali, CJK) fall through to the system stack. The per-script rules in `app.css` (for example the Nastaliq line height) stay. - **A `.figures` utility** (mono plus tabular numbers) for dates, times, counts and money. - **Uppercase mono labels** ("MON 05 OCT") come from locale date formatting. They never use CSS `text-transform` on translated text, which breaks scripts without case. - **Docs:** update `manage.py check_fonts` and its docs if they assume no interface webfont. ## Acceptance - No request leaves the instance for a font, so the CSP is unchanged. - The reflow walk and the language tests pass in every selected language. - The page weight added is stated in the PR. Depends on #1192. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
tiagoagueda added this to the 0.7.0 milestone 2026-11-01 14:17:37 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Postulo/postulo#1194
No description provided.