Skip to content

feat(claims): lay the claim page out like the Explore claim card, with a Topics tab - #2526

Closed
o-p-o-p-o wants to merge 4 commits into
masterfrom
claim-page-hero
Closed

o-p-o-p-o wants to merge 4 commits into
masterfrom
claim-page-hero

Conversation

@o-p-o-p-o

@o-p-o-p-o o-p-o-p-o commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

The claim page's hero now uses the Explore claim card's layout at page scale, so a claim looks the same wherever you meet it. Topics move to their own tab. Most of the change is to the claim page; the shared components that gain options are listed under Outside the claim page.

Hero

  • Layout: the Explore claim card's two zones. On the left are the claim, its description and the Agree/Disagree pills (capped at 360px, as on Explore), with the debate offer under the pills. On the right is Explore's own 220px verdict column (share, bar and the two sides) behind a full-height rule.
  • Alignment: the verdict column starts on the title's row, so the share lines up with the claim's first line.
  • Narrow widths: under a 520px container (claim-card-narrow, the card's own breakpoint) it stacks the way the card does, with the verdict below the pills and no rule. The hero is its own @container, so the switch follows the hero's width, not the window's. That's what matters in the side panel.
  • Unanswered claims: a claim with no responses has no verdict column and takes the full width, as on Explore. The page's "No responses yet" invitation goes with it.
  • Chips: the type and tag chips are gone. Controversial, when it applies, is a red chip above the title, in the chips' size and type.
  • Title: unchanged from master (24px, 28px from a 560px column).
  • Spacing: 48px from the hero to the tabs at every width. Below 560px that used to be the page's 24px gap.
  • Width: the column is 840px, for 800px of content. The cover header shares the constant and widens with it.

Topics

  • Topics tab: a new tab at /topics, after Related claims. It lists every topic, uncapped, and only appears when the claim has topics, the same way Sources does. It uses the shared ClaimRecordPage like the other record routes.
  • Overview: no longer repeats Topics. It holds Activity and Comments.
  • Hero topics row: a row of up to five topics above the claim, with "See all" leading to the tab, is built but switched off (SHOW_HERO_TOPICS = false) while we decide on it. In the side panel, "See all" switches the panel's tab rather than navigating the page behind.

Responder list (the popover under "6 agree")

  • Title: "6 people agree" above the rows, replacing the "6 people · Agree" footer. The verb agrees with the count ("1 person agrees").
  • Order: people with a profile picture first. The order within each group is unchanged.
  • Hover: rows highlight like the browse sidebar's, with rounded-lg and hover:bg-grey-01 inside a 4px inset.

Debates tab

  • Width: a debate fills the content column rather than the card's viewport-fitted cap of up to 560px. The two stacked videos make the card tall, so it no longer fits one screen at shorter window heights.

Activity section

Outside the claim page

  • ClaimVerdictColumn: now exported from claim-explore-feed-card.tsx for the hero. Nothing else in that file changes.
  • ClaimVerdict removed: claim-verdict.tsx and its tests are deleted. The claim page was its only caller.
  • RelationChipSection: gains cap, defaulting to the existing 8. The Topics tab passes Infinity.
  • ClaimSideResponders: the title, sort and hover changes apply everywhere the list opens, so the Explore claim cards get them too.
  • MemberRow: gains an optional className. The space members and editors lists don't pass one and are unchanged.
  • DebateExploreFeedCard: gains fullWidth, passed through ExploreFeedCard (fullWidthDebate) and PersonRecordFeed (fullWidthDebates). All off by default; only the claim page's Debates tab turns it on.
  • button.tsx and debate-feed-player.tsx: these changes come with the feat(profile): restyle the personal space profile #2514 Activity header.

Checks

  • tsc --noEmit is clean.
  • ESLint and Prettier are clean on every changed file.
  • The full web suite passes: 589 files, 6,959 tests. The claim page tests cover the hero order (claim, pills, verdict, tabs), no verdict column on an unanswered claim, the Topics tab (uncapped, only topic relations, offered only when there are topics) and the Overview no longer showing topics.
  • Checked in a desktop browser at 1440px against testnet data. The share and the title's first line both measure y=144, and the hero is 800px. Not yet checked at phone widths or in the entity side panel, where the stacked arrangement takes over.

🤖 Generated with Claude Code

- The title (entityTitle), type/tag chips and the verdict form one block
  above the tabs, with Agree/Disagree inside the verdict and no card
  border or padding. 48px between the chips, the verdict and the tabs.
- The percentage uses mainPage in the text colour; 12px above the bar,
  8px below it, and no swatch dots on the sides row.
- Controversial is a red chip beside the type and tag chips, in the
  chips' own size and type.
- The responder list is titled "6 people agree" above the rows, puts
  people with a profile picture first, and highlights rows on hover like
  the browse sidebar.
- The Debates tab lets a debate fill the content column.
- Brings in the Activity section header from #2514 (pills, View all,
  header arrows, 12px compact player corners).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
geogenesis Ready Ready Preview Sep 22, 2026 4:19pm UTC

Request Review

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
o-p-o-p-o and others added 2 commits September 22, 2026 17:15
… add a Topics tab

- The hero is the Explore claim card at page scale: the claim and its
  Agree/Disagree pills on the left, Explore's own 220px verdict column on
  the right behind a full-height rule, starting level with the title.
  Under a 520px container it stacks, as the card does. A claim nobody has
  answered takes the full width.
- ClaimVerdictColumn is exported from the Explore card for this; the
  page's own ClaimVerdict is removed, since nothing else used it.
- The title and the verdict's type go back to their original sizes; the
  type and tag chips are gone, and Controversial sits above the title.
- Topics move to a Topics tab (/topics), listed uncapped. The hero's
  capped topic row is built but off (SHOW_HERO_TOPICS), and the Overview
  no longer repeats them.
- The page column is 840px, for 800px of content.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…e the verdict moved to Explore's column

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@o-p-o-p-o o-p-o-p-o changed the title feat(claims): lead the claim page with its verdict and position controls feat(claims): lay the claim page out like the Explore claim card, with a Topics tab Sep 22, 2026
@jwalkingjew

Copy link
Copy Markdown
Collaborator

Closing this as superseded by #2530, which carries this work forward rather than replacing it.

#2530 started as a branch on top of claim-page-hero — it takes the Topics tab this PR added and turns it into an explore feed of topic cards, so it depends on the route, the tab registration and the ClaimTabPanel branch from here. Rather than keep the two stacked, we've folded this in. All four commits are preserved with their original authorship, rebased onto current master.

Two things changed in the move, both worth knowing about:

The Activity-header conflict is resolved in favour of what merged. This PR took the Activity header from #2514's branch, noting that "whichever of the two PRs merges second will have nothing to do in these files". #2514 merged on master a few hours ago, and the copy here had drifted from what actually landed — flex where master now has flex-wrap, the arrow guard on navigation where master uses selected.rows.length, and a scroll fade that #2514 dropped before merging. Following the intent above, profile-activity-section.tsx and its test are now byte-identical to master on #2530, so those files leave the diff entirely.

Three findings from a review of the combined branch are fixed on #2530, all in code from this PR:

  • The hero derived its grid template from hasVerdict, which cannot be true until the response counts answer — so every claim painted one-column and then reflowed to 1fr 220px, re-wrapping the title at the top of the page on every load. The template now reserves both tracks while the counts are out and gives the second back only on a settled zero.
  • The hero pins its parts to explicit rows so the verdict can start on the title's, but row 1 belongs to the controversial/topics strip, which draws for almost nothing while SHOW_HERO_TOPICS is off. With it empty the rows still started at 2, leaving claim-card-narrow:gap-y-4 — 16px — above the claim in the side panel and at phone widths. Measured 16px → 0px at 420px.
  • fullWidth on DebateExploreFeedCard dropped the max-w and the clamp(320px, calc(83dvh - 178px), 560px) viewport-height budget. On the claim page's 840px column that made a debate ~1140px tall (two aspect-480/289 tiles at ~800px), so on a 900px viewport the second debater and the interaction bar couldn't be seen together. It now raises the ceiling to the container instead of removing it — 800px at a 1300px viewport, 569px at 900px — so it still fills the wider column when there's room for it.

The hero, the responder-list changes, the ClaimVerdict deletion and the Topics tab are otherwise unchanged. Please do review #2530 — the hero is your design and the calls above are ones you may want to take differently.

jwalkingjew added a commit that referenced this pull request Sep 22, 2026
… make Topics a ranked explore feed (#2530)

Supersedes #2526, whose commits this carries; the claim hero is o-p-o-p-o's work and design.

## The claim hero

The Explore claim card's layout at page scale: the claim, its description and the Agree/Disagree
pills on the left, Explore's 220px verdict column on the right behind a full-height rule, with the
verdict starting on the title's row. Under a 520px container it stacks the way the card does, keyed
on the hero's own width so the side panel behaves. A claim nobody has answered takes the full
width. Type and tag chips are gone; Controversial is a red chip above the title. `ClaimVerdict` is
deleted — the claim page was its only caller.

## The Topics tab

Topics move to their own tab, and that tab is an explore feed rather than a row of chips: a chip
carries a name and nothing else, so a tab of them is a list with no way to tell which entry is
worth opening.

Each topic gets a card — the generic explore card plus one line of metadata naming the debates,
claims and news stories attached to it — and the list is ordered by those numbers, largest first,
ties breaking on claims then name. Nothing paints until every count is in, so the list cannot
resequence under the reader, and a partial or failed count falls back to the claim's own order
rather than ranking what it could not measure as zero.

The counts are asked of `entitiesConnection` rather than `relationsConnection`, which counts links
rather than things — the same claim carrying `Topics` in two spaces is two relations, 552 against
505 claims on `AI governance`. Debates are two hops, debate to claim to topic, which is what
"debates connected to the attached claims" means. Batched at ten topics per request; across 3,000
claims sampled from testnet the largest carries 10 topics, so this is one request in practice.

## Shared card chrome

The card frame, default body and actions row move out of `explore-feed-card` into
`explore-card-chrome`, so the topic card is the generic card with a `meta` slot rather than a third
copy of that layout — the first two copies drifted. `META_SEGMENT_CLASS` and
`ExploreFeedCommentLink` are shared for the same reason. `PersonRecordFeed` gained a `renderCard`
override and draws the tab, as the Sources tab already does for the same shape of question.

## Also

A full-width debate raises its column ceiling to the container rather than dropping the
viewport-height budget, so the whole card still fits the screen it is watched on. The hero reserves
its verdict track while the counts are unknown and releases it only on a measured zero, so the
title does not re-wrap on load or on a failed count. `ClaimSideResponders` gains a "6 people agree"
title, profile-picture-first ordering and browse-sidebar hover, wherever that popover opens.

Reviewed across three Copilot passes; five findings fixed, two declined with reasons on the PR.
Every behavioural fix has a test that was checked against the old behaviour.

Not verified: the full-width debate card's two-video layout, which needs an authenticated session —
a logged-out card falls back to the generic one.

This branch was successfully deployed

1 active deployment
Preview — 175549b0 Deployed Sep 22, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants