transitive-bullshit on GitHub

transitive-bullshit/doom-or-bloom

Reviewed against Rams quality heuristics: accessibility, color, typography, spacing, components, motion, UX, and craft.

30 files reviewed·September 23, 2026

View on GitHub

Top fix

Constrain prose container to max-w-xl for readable line lengths

See the fix

Verdict

Disciplined server-component architecture carries a clean editorial aesthetic almost all the way home, then stumbles on link hygiene and typographic finishing. The prose line-length fix is a single token and should ship first.

Files Rams reviewed

app/about/page.tsx

app/assessment/page.tsx

app/layout.tsx

app/privacy/page.tsx

app/users/[username]/page.tsx

app/corpus/page.tsx

app/page.tsx

app/personas/[id]/page.tsx

app/prototypes/landing/page.tsx

app/prototypes/landing/personas/[id]/page.tsx

app/prototypes/worldview-map/page.tsx

app/questions/page.tsx

app/user-journeys/page.tsx

app/api/share-card/route.tsx

app/globals.css

app/prototypes/landing/harness.tsx

app/prototypes/landing/people-first.tsx

app/prototypes/landing/picker.css

app/prototypes/worldview-map/harness.tsx

app/prototypes/worldview-map/picker.css

app/users/[username]/opengraph-image.tsx

components/assessment/answer-navigation.tsx

components/assessment/answer-result.tsx

components/assessment/conversation.tsx

components/assessment/experimental-results.tsx

components/assessment/fade-text.tsx

components/assessment/map-actions.tsx

components/assessment/paperclips.tsx

components/assessment/readiness-meter.tsx

components/assessment/reasoning-judgments.tsx

96/100

UX

2 serious
UXSerious

app/about/page.tsx:70

Link text 'Jev' loses destination context in screen reader link lists

The anchor at line 70 of app/about/page.tsx uses 'Jev' as its only label. A screen reader user pulling the page's links list sees 'Jev' with no indication it points to typesafe.ai. The surrounding heading 'Powered by TypeSafe's Jev' is not part of the accessible name.

Why it matters

Screen reader users navigating by links list cannot determine the destination, breaking the section's trust-building purpose.

Fix

Give external links an accessible name that includes the destination or purpose.

<a
  className='underline underline-offset-4'
  href='https://typesafe.ai'
  rel='noopener noreferrer'
  target='_blank'
>
  Jev
</a>
<a
  className='underline underline-offset-4'
  href='https://typesafe.ai'
  rel='noopener noreferrer'
  target='_blank'
  aria-label='Jev by TypeSafe (opens in new tab)'
>
  Jev
</a>
UXSerious

app/privacy/page.tsx:25

Privacy page external link missing security attributes and new-tab signal

The 'TypeSafe' anchor at line 25 of app/privacy/page.tsx has no rel attribute and no target='_blank'. On a privacy page explicitly directing users to consult TypeSafe's terms, silently replacing the privacy policy in the same tab is a UX and security gap.

Why it matters

Users lose their place in the privacy document, and the missing rel attributes leave the opener reference exposed.

Fix

Add target='_blank' and rel='noopener noreferrer' to every external link, plus an aria-label signalling the new tab.

<a className='underline' href='https://typesafe.ai'>
  TypeSafe
</a>
<a
  className='underline'
  href='https://typesafe.ai'
  rel='noopener noreferrer'
  target='_blank'
  aria-label='TypeSafe (opens in new tab)'
>
  TypeSafe
</a>
98/100

Typography

1 serious
TypographySerious

app/about/page.tsx:18

max-w-2xl at text-sm produces ~95-character lines, breaking prose readability

The article container in app/about/page.tsx line 18 combines max-w-2xl (672px) with text-sm (14px). At that size, a full-width line runs roughly 95 characters, well past the 75-character comfort ceiling for sustained reading.

Why it matters

Long line lengths increase reading fatigue and eye-tracking errors across a page with multiple long prose sections.

Fix

Cap prose containers at max-w-xl or use max-w-prose to keep line length at or below 75ch.

<article className='mx-auto w-full max-w-2xl space-y-10 px-6 py-14 text-sm leading-relaxed'>
<article className='mx-auto w-full max-w-xl space-y-10 px-6 py-14 text-sm leading-relaxed'>

Get this score on every PR.

Rams reviews each pull request on your repo and posts inline one-click fixes — about a minute per review.

Install Rams free
98/100

Spacing

1 serious
SpacingSerious

app/privacy/page.tsx:77

CTA margin mt-12 breaks established space-y-7 rhythm in privacy article

The WorldviewCta wrapper div at line 77 of app/privacy/page.tsx uses mt-12 (48px) while every other vertical gap in the article is governed by space-y-7 (28px). Two competing spacing values inside one content flow produce a visible rhythm break.

Why it matters

Inconsistent spacing signals a seam in the layout, pulling the CTA out of the document's visual cadence.

Fix

Use the article's established spacing token (space-y-7 / mt-7) for all block-level gaps inside the flow.

<div className='flex flex-wrap justify-center mt-12'>
<div className='flex flex-wrap justify-center mt-7'>

Accessibility

No issues found

Color

No issues found

Components

No issues found

Motion

No issues found

Craft

No issues found

Working well

  • The icon image uses alt='' correctly: it sits beside visible text inside the link so the empty alt prevents screen readers from announcing the SVG filename while the link text carries the full accessible name. This is exactly the right call and is easy to get wrong.
  • Both page files call notFound() on failed lookups before rendering, routing every guard state to a designed 404 rather than an empty shell or a crash. This is the pattern that prevents naked dead-ends and it is applied consistently.

Scored September 23, 2026 with Rams Engine v0.0.4 · Engine changelog

This page is an automated design review of transitive-bullshit/doom-or-bloom’s UI code: 30 files read against 348 versioned rules covering accessibility, color, typography, spacing, components, UX, motion, and craft. The score is out of 100; confirmed criticals cap it — one at 59, two at 49, three or more at 39.

More design scores

Score your own repo.

Free on public repos, no account. The same engine that scored this page reads your UI code and mints a score page like this one.

Public repos only. The full engine reviews the UI code and mints a public score page — we email you the link too. Already-scored repos open instantly.

Or get a design review on every pull requestInstall Rams