Skip to content

Nothing stops a rounded corner from landing in the design #16

Description

@davidvornholt

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    deferred-findingDeferred review finding filed by a review-fix cycle

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions