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
More findings
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
UX
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>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>Typography
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 freeSpacing
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
Color
Components
Motion
Craft
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.