Postlude's design has no rounded corners anywhere. Nothing floats, so there is no raised edge for a radius to soften — that rule is written down in DESIGN.md, and every surface in the app follows it today. The rule is currently held by nobody but the person typing.
That is worth fixing because the neighbouring rule is held mechanically, and the contrast shows what the gap costs. Postlude switches the default Tailwind colour palette off entirely, so a stray bg-blue-500 does not resolve to anything and the page renders wrong immediately — a mistake cannot survive to review. A stray rounded-lg resolves perfectly, renders a soft corner that looks unremarkable in isolation, and passes every gate. The design erodes one plausible-looking utility at a time, and the only thing catching it is a reviewer noticing a corner.
Evidence
DESIGN.md states the rule under "The rules that hold it together": square corners, because there is no raised edge for a radius to soften.
- The palette rule is enforced structurally in
packages/ui/src/theme.css via --color-*: initial, which removes the default palette.
packages/ui/src/theme-contract.test.ts mechanically enforces the no-shadow rule, recomputing it from the token values.
- No check of any kind covers
rounded-*. Grepping the repository for it returns nothing today, which is exactly the state worth locking in.
Failure scenario
A future UI task — the writing page, the archive, a dialog — reaches for a component idiom that carries rounded-md or rounded-full out of habit. It renders, it looks fine on its own, lint passes, types pass, the accessibility scan passes. The design acquires a soft corner that contradicts its own stated rule, and the next component copies it.
Suggested verification
Check whether Biome can express "no class matching `rounded-*` in JSX class attributes" natively — its nursery rules around Tailwind classes are the first place to look, since native mechanisms beat a custom plugin. If none fits, a small grit plugin or a colocated test that scans source for the pattern would do it. Whatever the mechanism, verify it by adding `rounded-lg` to a real component and confirming the gate goes red, then removing it.
One judgement call belongs to whoever picks this up: the rule should cover app and package source, and it should be able to be waived in one place with a stated reason, the way the repository's other overrides work.
Deferred from the review-fix cycle on #15 (premise lens), where it was real but outside that PR's intent.
Postlude's design has no rounded corners anywhere. Nothing floats, so there is no raised edge for a radius to soften — that rule is written down in
DESIGN.md, and every surface in the app follows it today. The rule is currently held by nobody but the person typing.That is worth fixing because the neighbouring rule is held mechanically, and the contrast shows what the gap costs. Postlude switches the default Tailwind colour palette off entirely, so a stray
bg-blue-500does not resolve to anything and the page renders wrong immediately — a mistake cannot survive to review. A strayrounded-lgresolves perfectly, renders a soft corner that looks unremarkable in isolation, and passes every gate. The design erodes one plausible-looking utility at a time, and the only thing catching it is a reviewer noticing a corner.Evidence
DESIGN.mdstates the rule under "The rules that hold it together": square corners, because there is no raised edge for a radius to soften.packages/ui/src/theme.cssvia--color-*: initial, which removes the default palette.packages/ui/src/theme-contract.test.tsmechanically enforces the no-shadow rule, recomputing it from the token values.rounded-*. Grepping the repository for it returns nothing today, which is exactly the state worth locking in.Failure scenario
A future UI task — the writing page, the archive, a dialog — reaches for a component idiom that carries
rounded-mdorrounded-fullout of habit. It renders, it looks fine on its own, lint passes, types pass, the accessibility scan passes. The design acquires a soft corner that contradicts its own stated rule, and the next component copies it.Suggested verification
Check whether Biome can express "no class matching `rounded-*` in JSX class attributes" natively — its nursery rules around Tailwind classes are the first place to look, since native mechanisms beat a custom plugin. If none fits, a small grit plugin or a colocated test that scans source for the pattern would do it. Whatever the mechanism, verify it by adding `rounded-lg` to a real component and confirming the gate goes red, then removing it.
One judgement call belongs to whoever picks this up: the rule should cover app and package source, and it should be able to be waived in one place with a stated reason, the way the repository's other overrides work.
Deferred from the review-fix cycle on #15 (
premiselens), where it was real but outside that PR's intent.