Contributions Feed
Lets a contributor submit an AttributedContribution (a card, summary,
highlight, annotation, original argument, or refutation), then renders
every persisted contribution ranked by blended helpfulness score, with
Like/Save/Endorse actions per entry.
- Route:
/research/team?section=contributions, the Team Research page's tab (the old/research/cards/contributionsredirects there) - Package:
debate-card-search
What it shows
A submission form followed by the ranked feed. Each entry shows its kind badge, contributor, helpfulness score, likes/saves/endorsement counts, and Like/Save/Endorse buttons. A "Flagged for review" moderator toggle narrows the feed to popularity-driven outliers.
A "Comments" toggle on each entry mounts debate-comments'
<CommentSection resourceType="contribution" resourceId={entry.id} /> — the
same threaded, likeable, account-only discussion UI already used on video
watch pages and forum threads. Collapsed by default and mounted only once
expanded, since the feed can list many entries at once and each mount fetches
its own thread.
Data flow
state/contributions.ts (localStorage: "contributions")
→ saveContribution() / recordPersistedLike() / recordPersistedSave() /
recordPersistedEndorsementFromReviewer()
→ buildPersistedContributionFeed()
→ panels/ContributionsFeedPanel.tsxEndorsing is locked to the signed-in identity, and self-endorsement throws
SelfEndorsementNotAllowedError.
Known gaps
- A submitted contribution starts with a neutral quality-signal placeholder.
- The reviewer-identity lock only stops a signed-in visitor from spoofing.
