Skip to content

fix: centralize the font stack and adopt Todoist's typography defaults - #1119

Merged
frankieyan merged 3 commits into
mainfrom
frankie/font-stack-centralization
Jul 29, 2026
Merged

fix: centralize the font stack and adopt Todoist's typography defaults#1119
frankieyan merged 3 commits into
mainfrom
frankie/font-stack-centralization

Conversation

@frankieyan

@frankieyan frankieyan commented Jul 28, 2026

Copy link
Copy Markdown
Member

Short description

This PR updates Reactist's font stacks and the base field's line heights with the values we're using in Todoist.

Size/spacing changes

  • Prose: Default font size is reduced from 15px to 14px, which also affects its vertical spacing (via margins and padding), since they are derived from the font size
  • TextField, SelectField, etc. now specifies a 21px line-height for their labels. In Comms using the inherit default, this resolves to 17px, so this will render more spacing around them.

Font stack changes

  • --reactist-font-family: the main change is placing Segoe UI ahead of system-ui, which makes latin text more consistent on (non macOS) systems with CJK-locales
  • --reactist-font-family-monospace: this is better aligned with the stack Todoist/GitHub uses, and should have no visible impact on most systems

Demo

Before After
prose-00-baseline-light prose-01-after-light

PR Checklist

  • Added tests for bugs / new features
  • Updated docs (storybooks, readme)
  • Reviewed and approved Chromatic visual regression tests in CI

frankieyan and others added 3 commits July 27, 2026 21:58
On Windows, `system-ui` resolves to the locale's UI font. Under CJK
locales that is Microsoft YaHei UI, Yu Gothic UI or Malgun Gothic, so
Latin text renders in a CJK UI font instead of Segoe UI. Naming
'Segoe UI' ahead of `system-ui` keeps Latin text consistent across
locales while CJK characters still fall through further down the stack.

Also adds BlinkMacSystemFont (Chrome on macOS), 'Noto Sans' (uncommon
scripts) and 'Noto Color Emoji' (Linux/ChromeOS), and drops the
Roboto/Noto/Oxygen-Sans/Ubuntu/Cantrell/'Helvetica Neue' tail that
`sans-serif` already covers.

This adopts todoist-web's stack, which has carried this ordering and
its rationale for years, as the Reactist default.

Co-Authored-By: Claude <noreply@anthropic.com>
Drops Monaco, 'Cascadia Mono' and 'Courier New', matching todoist-web's
stack. Verified as a no-op for every consumer: todoist-web overrides
mono globally, comms-web overrides it inside .markdown (which both of
its Prose instances carry, and it has no <Box as="pre"> sites), and
Automations lands on Consolas on Windows — exactly where it is today.

Co-Authored-By: Claude <noreply@anthropic.com>
Both values are byte-identical overrides in todoist-web and Automations,
the same duplication signal that motivated centralizing the font stack.
--reactist-prose-content-font-size is additionally marked as not public
API, yet two products override it — fixing the default removes the need
to reach into an internal rather than blessing the practice.

Note the prose change is not only text size: the variable is the base
for Prose's whole vertical rhythm, so all markdown spacing rescales by
6.67%. comms-web overrides neither value and is the one consumer that
moves.

Co-Authored-By: Claude <noreply@anthropic.com>
@frankieyan
frankieyan force-pushed the frankie/font-stack-centralization branch from 72bd382 to 997e0d5 Compare July 28, 2026 05:00
@frankieyan
frankieyan marked this pull request as ready for review July 28, 2026 05:06

@doistbot doistbot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR centralizes Reactist's font stacks and aligns Prose font size and field label line heights with Todoist's typography defaults — all clean, well-scoped token changes.

Few things worth tightening:

  • In src/prose/prose.module.css, consider referencing var(--reactist-font-size-body) instead of hardcoding 14px, so Prose stays in sync if the body font-size token changes again.

I also included a few optional follow-up notes in the details below.

Optional follow-up note (1)
  • P3 src/prose/prose.module.css:26: Reuse var(--reactist-font-size-body) here instead of duplicating its current 14px value. The shared token already defines the body font size, and using it keeps Prose aligned if typography tokens are updated again.

Share FeedbackReview Logs

@frankieyan
frankieyan requested review from a team and nats12 and removed request for a team July 28, 2026 05:10
@frankieyan

Copy link
Copy Markdown
Member Author

FYI @pawelgrimm @benbreckler, as this will affect the size and spacing of Comms' contents, aligning them with Todoist's task descriptions/comments.

@nats12 nats12 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@frankieyan
frankieyan merged commit a399aaa into main Jul 29, 2026
15 checks passed
@frankieyan
frankieyan deleted the frankie/font-stack-centralization branch July 29, 2026 21:03
doist-release-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
## [35.0.6](v35.0.5...v35.0.6) (2026-07-29)

### Bug Fixes

* centralize the font stack and adopt Todoist's typography defaults ([#1119](#1119)) ([a399aaa](a399aaa))
@doist-release-bot

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 35.0.6 🎉

The release is available on:

Your semantic-release bot 📦🚀

@doist-release-bot doist-release-bot Bot added the Released PRs that have been merged and released label Jul 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Released PRs that have been merged and released

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants