Lines wider than 80 characters force excessive eye movement when returning to the next line start, increasing reading fatigue and error rate.
Fix: Constrain text container to max-width of ~500px (75 chars) or use a multi-column layout.
link is 558px wide at 13.3333px font size, yielding ~84 characters per line. Optimal: 45-75 chars.
Prompt-ready fix
Fix #9: Text measure too wide: ~84 chars/line (max 80) [MAJOR]
Constrain text container to max-width of ~500px (75 chars) or use a multi-column layout.
Text below 11px is illegible on most screens and impossible to read on mobile devices.
Fix: Increase font size to at least 12px (ideally 14px+). Use rem units so text scales with user preferences.
Metadata text ("47 points by ... | hide | 3 comments") renders at 9.33333px: below 11px minimum for readability.
Prompt-ready fix
Fix #10: Font too small (9.33333px): span "by | |" [MAJOR]
Increase font size to at least 12px (ideally 14px+). Use rem units so text scales with user preferences.
#4 MAJORFont too small (10.6667px): span "gowers.wordpress.com"
Nearly-centered elements that are slightly off look like alignment bugs and undermine perceived quality.
Fix: Use margin: 0 auto, flexbox justify-content: center, or grid place-items to center precisely.
Search input center X=748, parent center X=720. Offset: 28px.
Prompt-ready fix
Fix #15: Element off-center by 28px within parent [MAJOR]
Use margin: 0 auto, flexbox justify-content: center, or grid place-items to center precisely.
#6 MAJORInteractive elements only 5px apart: risk of mis-taps
Link has outline:none with no box-shadow replacement. Keyboard users cannot see focus.
Prompt-ready fix
Fix #8: Focus indicator suppressed on link "Hacker News" [MAJOR]
Add visible focus style: outline: 2px solid #4F46E5 or equivalent box-shadow.
#9 MAJORIcon-only link without accessible label
a11y · DET-ICON-ONLY-001 · 100% · needs dev
Icon-only buttons without text labels are invisible to screen readers.
Fix: Add aria-label describing the action.
Link has no visible text and no aria-label. Screen readers announce nothing useful.
Prompt-ready fix
Fix #12: Icon-only link without accessible label [MAJOR]
Add aria-label describing the action.
#10 MAJOR1 element(s) misaligned in row at Y~1118px
spacing · SPACE-GRID-001 · 100% · needs design
Elements in a visual row should be vertically aligned. Even 4-5px offsets look sloppy.
Fix: Use flexbox align-items: center or align to a shared baseline.
Y positions: [1118, 1128]. Max deviation: 10px.
Prompt-ready fix
Fix #13: 1 element(s) misaligned in row at Y~1118px [MAJOR]
Use flexbox align-items: center or align to a shared baseline.
#11 MAJORTouch target too small: upvote arrow is 14×10px (min 24px)
a11y · DET-TARGET-001 · 100% · needs dev
Very small touch targets cause mis-taps and accessibility issues for users with motor impairments.
Fix: Increase clickable area to at least 24×24px (desktop) or 44×44px (mobile) via padding.
Upvote arrow link measures 14×10px. Interactive elements need adequate click area.
Prompt-ready fix
Fix #4: Touch target too small: upvote arrow is 14×10px (min 24px) [MAJOR]
Increase clickable area to at least 24×24px (desktop) or 44×44px (mobile) via padding.
#12 MAJORTouch targets too close (0px gap): upvote arrow & headline link
Adjacent touch targets with insufficient spacing cause accidental taps on mobile devices.
Fix: Add at least 8px gap between interactive elements.
Interactive elements are only 0px apart. Minimum recommended spacing for touch is 8px.
Prompt-ready fix
Fix #5: Touch targets too close (0px gap): upvote arrow & headline link [MAJOR]
Add at least 8px gap between interactive elements.
Minor (5)
#1 MINORInconsistent heights among 37 sibling elements (11–1076px)
spacing · SPACE-PADDING-001 · 100% · needs design
Same-type elements with different heights indicate inconsistent padding, breaking visual rhythm.
Fix: Standardize padding/height across sibling elements. Use shared CSS classes or design tokens.
Selector group "td" has 37 elements with heights ranging 11–1076px (CV: 400%).
Prompt-ready fix
Fix #16: Inconsistent heights among 37 sibling elements (11–1076px) [MINOR]
Standardize padding/height across sibling elements. Use shared CSS classes or design tokens.
#2 MINORUnoptimized large image (1210px wide): td td · td
Using different labels for the same action creates cognitive overhead.
Fix: Pick one label and use it consistently where the action is genuinely the same.
Buttons use different words for a similar action: "submit" and "Apply to YC".
Prompt-ready fix
Fix #20: Mixed labels for same action: "submit" vs "Apply to YC" [MINOR]
Pick one label and use it consistently where the action is genuinely the same.
#5 MINORUneven horizontal gutters in row (17px, 3px, 11px, 11px)
spacing · SPACE-GUTTER-001 · 100% · needs design
Inconsistent horizontal gaps between aligned elements break visual balance and look unpolished.
Fix: Use consistent gap values (e.g., 8px, 16px, 24px) between row elements.
9 elements in row at Y~61px have gutters [17, 3, 11, 11]px (CV: 47%).
Prompt-ready fix
Fix #17: Uneven horizontal gutters in row (17px, 3px, 11px, 11px) [MINOR]
Use consistent gap values (e.g., 8px, 16px, 24px) between row elements.
Nit (1)
#1 NITInput zoom risk on iOS: search input uses 13.3333px font
responsive · MOB-006 · 100% · needs design
iOS auto-zooms the viewport when users tap inputs with font-size below 16px, disorienting the layout.
Fix: Set font-size to at least 16px on all form inputs to prevent iOS auto-zoom on focus.
Font size 13.3333px < 16px on the search input.
Prompt-ready fix
Fix #25: Input zoom risk on iOS: search input uses 13.3333px font [NIT]
Set font-size to at least 16px on all form inputs to prevent iOS auto-zoom on focus.
Content Issues (4)
#1 CONTENTRaw timestamp displayed in title attribute
copy · DET-TIMESTAMP-001
Users can't quickly parse ISO timestamps. Show relative ('2 hours ago') or localized time.
Fix: Format dates for humans in any visible/hover surface.
span.age title attribute shows an unformatted ISO/epoch date.
Prompt-ready fix
Fix #19: Raw timestamp displayed in title attribute [MINOR]
Format dates for humans in any visible/hover surface.
#2 CONTENTUnexplained abbreviation: "LLM"
copy · CONTENT-ABBREVIATION
Fix: This is user-submitted content, not product UI copy: no action needed on HN's side.
Post title uses "LLM" with no expansion.
Prompt-ready fix
Fix #24: Unexplained abbreviation: "LLM" [NIT]
This is user-submitted content, not product UI copy: no action needed on HN's side.
#3 CONTENTNon-descriptive link text: "More"
copy · DET-LINKTEXT-001
Users scanning by links hear ambiguous destinations. Link text must describe destination.
Fix: Replace with descriptive text: "More stories" or "Next page".
Suggested: More stories
Pagination link says "More" (screen readers announce this without context).
Prompt-ready fix
Fix #21: Non-descriptive link text: "More" [MINOR]
Replace link text "More" with descriptive text such as "More stories" or "Next page".
#4 CONTENTDuplicate text: "upvote" appears on every row
copy · CONTENT-DUPLICATE
Same title-attribute text repeated on every row's upvote arrow adds no distinguishing information.
Fix: Low priority: this is a conventional, low-stakes pattern; consider only if doing a broader copy pass.
"upvote" title attribute repeats identically on all 30 rows.
Prompt-ready fix
Fix #23: Duplicate text: "upvote" appears on every row [NIT]
Low priority: this is a conventional, low-stakes pattern; consider only if doing a broader copy pass.