Skip to content

bio and rep tags for the identity card#2205

Merged
ragnep merged 7 commits intomainfrom
identity-card-info
Apr 6, 2026
Merged

bio and rep tags for the identity card#2205
ragnep merged 7 commits intomainfrom
identity-card-info

Conversation

@ragnep
Copy link
Copy Markdown
Contributor

@ragnep ragnep commented Apr 2, 2026

Summary by CodeRabbit

  • New Features

    • Added an identity profile supplement that shows a normalized bio and top reputation categories as chips.
  • Improvements

    • Updated identity and card layouts across participation, leaderboard, grid, podium, and small-leaderboard views.
    • Hide identity header when profile matches the author; added options to control header/supplement placement and width.
    • Enhanced grid interactions, keyboard behavior, overflow gradients, tooltip styling/placement, spacing/padding, avatar and label presentation.
    • Simplified outcome displays and compacted related UI.
  • Chores

    • Ignored and removed stale Playwright snapshot artifacts.

Signed-off-by: ragnep <ragneinfo@gmail.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 2, 2026

📝 Walkthrough

Walkthrough

Adds a new IdentityProfileSupplement component and integrates it into identity displays; updates profile-related types to ApiDropResolvedIdentityProfile; adds areSameProfileIdentity logic to hide headers for self-nominees; standardizes Tooltip usage; refactors leaderboard/grid/podium identity and interaction behaviors.

Changes

Cohort / File(s) Summary
New Identity Supplement
components/waves/drops/identity/IdentityProfileSupplement.tsx
New default-exported React component rendering trimmed bio and filtered "top rep categories" chips with signed, comma-formatted rep values and optional max items.
Identity Integration & Compact Layout
components/waves/drops/identity/WaveDropIdentity.tsx, components/waves/drops/participation/ParticipationIdentityProfileCard.tsx, components/waves/leaderboard/identity/WaveLeaderboardIdentity.tsx
Render IdentityProfileSupplement conditionally (variant-aware); added showIdentityHeader and supplementFullWidth props; compact layout adjusted to column + inner row; profile shape extended to include bio/top_rep_categories.
Profile Type / Helper Signatures
components/waves/drops/identityDisplay.helpers.ts, components/waves/drops/participation/participationIdentityProfile.helpers.ts
Changed return types from `ApiProfileMin
Identity Equality Helper
helpers/ProfileHelpers.ts
Added exported areSameProfileIdentity helper comparing id, handle, or primary_address (normalizing inputs) to detect same profile identity.
Self-nominee Header Logic
components/waves/drops/participation/EndedParticipationDrop.tsx, components/waves/drops/participation/OngoingParticipationDrop.tsx, components/waves/leaderboard/content/WaveLeaderboardDropContent.tsx
Compute isSelfNominee via areSameProfileIdentity and pass showIdentityHeader={!isSelfNominee} to identity cards; adjusted horizontal spacing on card wrappers.
Grid & Interaction Refactor
components/waves/leaderboard/grid/WaveLeaderboardGridItem.tsx
Extracted helpers (getVoteStyle, canOpenGridItemFromClick, isGridItemOpenKey, useOverflowGradient), added GridItemRankBadge, unified click/keyboard gating, and implemented overflow gradient handling for content and compact text.
Podium / Winner Identity Simplification
components/waves/winners/podium/WavePodiumItem.tsx, components/waves/winners/podium/WavePodiumItemContentOutcomes.tsx
Replaced external WaveWinnerIdentity with local identity derivation (label/pfp), added PodiumAvatar and identity-aware “nominated by” text, removed touch-open outcome behavior, and simplified outcome/tooltips.
Tooltip & Icon Cleanup
components/waves/leaderboard/drops/header/WaveleaderboardDropRaters.tsx, components/waves/small-leaderboard/WaveSmallLeaderboardItemOutcomes.tsx
Replaced inline Tooltip styles with TOOLTIP_STYLES, standardized tooltip props (place/offset/opacity/positionStrategy), removed FontAwesome icons and simplified markup.
Participation Card Restructure
components/waves/drops/participation/ParticipationIdentityProfileCard.tsx
Major layout/styling refactor, added "use client";, new props (showIdentityHeader, supplementFullWidth), useCompactMode() usage, conditional supplement placement and adjusted stats/divider logic.
Misc UI & Config
components/brain/my-stream/MyStreamWaveLeaderboard.tsx, .gitignore, .playwright-mcp/...
Added bottom safe-area inset padding; added /.playwright-mcp/ to .gitignore; removed Playwright snapshot YAML artifacts.

Sequence Diagram(s)

sequenceDiagram
    participant Drop as Drop Component
    participant Helpers as getDropIdentityProfile / areSameProfileIdentity
    participant Card as Identity Card (Participation / Leaderboard)
    participant Supplement as IdentityProfileSupplement

    Drop->>Helpers: resolve identity profile (wave, metadata)
    Helpers-->>Drop: ApiDropResolvedIdentityProfile | null
    Drop->>Helpers: areSameProfileIdentity(drop.author, profile)
    Helpers-->>Drop: boolean isSelfNominee
    Drop->>Card: render with showIdentityHeader = !isSelfNominee
    Card->>Supplement: request render when profile has bio or top_rep_categories and header rules allow
    Supplement-->>Card: rendered bio + rep category chips
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • simo6529
  • prxt6529

Poem

🐰 I trimmed a bio, hopped chips in a row,
I matched ids and handles to know who’s who,
If you’re your own nominee I hide the show,
Tooltips now wear the same tidy hue — woohoo!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'bio and rep tags for the identity card' directly and specifically describes the main changes: adding bio display and reputation category tags (chips) to identity card components throughout the codebase.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch identity-card-info

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
components/waves/drops/identity/IdentityProfileSupplement.tsx (1)

66-71: Defensively sanitize maxRepCategories before slicing.

Current slicing behavior can be surprising for negative/NaN/fractional values. Clamping to a finite non-negative integer makes this future-proof.

♻️ Suggested hardening
-  const visibleRepCategories =
-    maxRepCategories === undefined
-      ? repCategories
-      : repCategories.slice(0, maxRepCategories);
+  const safeMaxRepCategories =
+    typeof maxRepCategories === "number" && Number.isFinite(maxRepCategories)
+      ? Math.max(0, Math.floor(maxRepCategories))
+      : undefined;
+
+  const visibleRepCategories =
+    safeMaxRepCategories === undefined
+      ? repCategories
+      : repCategories.slice(0, safeMaxRepCategories);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@components/waves/drops/identity/IdentityProfileSupplement.tsx` around lines
66 - 71, Sanitize maxRepCategories before slicing: ensure maxRepCategories is
treated as a finite non-negative integer (e.g., if it's undefined keep current
behavior, otherwise clamp via Math.max(0, Math.floor(Number(maxRepCategories)))
or similar) and use that sanitized value when computing visibleRepCategories and
hiddenRepCategoryCount so negative, NaN, fractional, or infinite inputs do not
produce surprising slices; update the logic around visibleRepCategories,
maxRepCategories, repCategories, and hiddenRepCategoryCount to use the clamped
integer.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@components/waves/drops/participation/ParticipationIdentityProfileCard.tsx`:
- Around line 165-170: The extra top margin is always applied because the
wrapper div around IdentityProfileSupplement is rendered even when the
supplement is null; update the JSX to render the wrapper (and
IdentityProfileSupplement) only when the profile actually has content to show —
e.g. guard with a condition like profile?.bio || (profile?.categories &&
profile.categories.length > 0) before rendering the div so that
IdentityProfileSupplement (and its margin via className using isChat) only
appears when there is real supplement content.

In `@components/waves/leaderboard/identity/WaveLeaderboardIdentity.tsx`:
- Around line 134-142: The wrapper div with class "tw-mt-2" is rendered whenever
profile is non-null even if IdentityProfileSupplement returns null, leaving an
empty gap; change the rendering to first compute/check the supplement output (or
a predicate like hasSupplement) for the given profile and only render the
wrapper and IdentityProfileSupplement when that supplement is non-null/true
(i.e., replace the current profile-only guard with a guard that checks both
profile and that IdentityProfileSupplement would render content), referencing
IdentityProfileSupplement and the profile variable to locate the code to update.

In `@openapi.yaml`:
- Around line 10430-10432: The OpenAPI schema uses "type: number" with "format:
int64" (e.g., the rep field in ApiProfileRepCategorySummary) which causes
codegen to emit floats; update these fields to "type: integer" with "format:
int64" across openapi.yaml. Search for fields with "format: int64" (such as rep
in ApiProfileRepCategorySummary) and change their "type" from "number" to
"integer" so generators produce 64-bit integer types (Long/int64) consistently.

---

Nitpick comments:
In `@components/waves/drops/identity/IdentityProfileSupplement.tsx`:
- Around line 66-71: Sanitize maxRepCategories before slicing: ensure
maxRepCategories is treated as a finite non-negative integer (e.g., if it's
undefined keep current behavior, otherwise clamp via Math.max(0,
Math.floor(Number(maxRepCategories))) or similar) and use that sanitized value
when computing visibleRepCategories and hiddenRepCategoryCount so negative, NaN,
fractional, or infinite inputs do not produce surprising slices; update the
logic around visibleRepCategories, maxRepCategories, repCategories, and
hiddenRepCategoryCount to use the clamped integer.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 8f13400b-3fcb-40dd-b1b3-36446800d451

📥 Commits

Reviewing files that changed from the base of the PR and between 0745b99 and a783ed0.

⛔ Files ignored due to path filters (4)
  • generated/models/ApiDropMetadataResponse.ts is excluded by !**/generated/**
  • generated/models/ApiDropResolvedIdentityProfile.ts is excluded by !**/generated/**
  • generated/models/ApiProfileRepCategorySummary.ts is excluded by !**/generated/**
  • generated/models/ObjectSerializer.ts is excluded by !**/generated/**
📒 Files selected for processing (7)
  • components/waves/drops/identity/IdentityProfileSupplement.tsx
  • components/waves/drops/identity/WaveDropIdentity.tsx
  • components/waves/drops/identityDisplay.helpers.ts
  • components/waves/drops/participation/ParticipationIdentityProfileCard.tsx
  • components/waves/drops/participation/participationIdentityProfile.helpers.ts
  • components/waves/leaderboard/identity/WaveLeaderboardIdentity.tsx
  • openapi.yaml

Comment thread components/waves/drops/participation/ParticipationIdentityProfileCard.tsx Outdated
Comment thread components/waves/leaderboard/identity/WaveLeaderboardIdentity.tsx Outdated
Comment thread openapi.yaml
ragnep added 3 commits April 6, 2026 08:19
Signed-off-by: ragnep <ragneinfo@gmail.com>
Signed-off-by: ragnep <ragneinfo@gmail.com>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@components/waves/leaderboard/grid/WaveLeaderboardGridItem.tsx`:
- Around line 260-267: The keydown handler that opens the grid item must use the
same gating as the click handler: when handling Enter/Space in the container
(the handler near lines 273-279, e.g., the onKeyDown or keyboard-open logic),
call canOpenGridItemFromClick({ isMenuOpen: showMobileContentOnlyActions &&
isActive, target: event.target as HTMLElement }) and only proceed to
preventDefault() and open the grid item if that returns true; otherwise allow
the nested control (anchor/button) to handle the key event. Update the keyboard
branch to mirror the onCardClick flow (use the same function names
canOpenGridItemFromClick and onCardClick semantics) so author links and footer
action buttons do not get suppressed by preventDefault().

In `@components/waves/winners/podium/WavePodiumItem.tsx`:
- Around line 138-139: Replace the fallback for profile identity in
getAuthorProfileLabel so it uses the author's primary_address instead of id:
locate the getAuthorProfileLabel function and change the fallback expression
from drop.author.id to drop.author.primary_address (i.e., return
drop.author.handle ?? drop.author.primary_address) so profile links and tooltips
match the winners flow (see DefaultWaveWinnerDropSmall usage).

In `@helpers/ProfileHelpers.ts`:
- Around line 88-106: The equality helper currently falls through to
handle/address checks when both normalized ids exist but differ; change the
logic around normalizeProfileTarget(left.id)/right.id so that if both leftId and
rightId are present and equal you return true, but if both are present and NOT
equal you return false immediately (a hard mismatch) instead of checking
handle/primary_address; update the block in ProfileHelpers (the section using
normalizeProfileTarget for left.id/right.id) to enforce this early-false
behavior and leave the subsequent handle and primary_address comparisons
unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c20f3b1a-1eac-4350-bed3-d25e58eaa08f

📥 Commits

Reviewing files that changed from the base of the PR and between a783ed0 and a3dad8c.

⛔ Files ignored due to path filters (1)
  • .playwright-mcp/page-2026-03-31T06-28-02-990Z.png is excluded by !**/*.png
📒 Files selected for processing (16)
  • .gitignore
  • .playwright-mcp/page-2026-03-31T06-27-58-535Z.yml
  • .playwright-mcp/page-2026-03-31T13-04-45-965Z.yml
  • .playwright-mcp/page-2026-03-31T13-15-19-347Z.yml
  • components/brain/my-stream/MyStreamWaveLeaderboard.tsx
  • components/waves/drops/identity/IdentityProfileSupplement.tsx
  • components/waves/drops/participation/EndedParticipationDrop.tsx
  • components/waves/drops/participation/OngoingParticipationDrop.tsx
  • components/waves/drops/participation/ParticipationIdentityProfileCard.tsx
  • components/waves/leaderboard/content/WaveLeaderboardDropContent.tsx
  • components/waves/leaderboard/drops/header/WaveleaderboardDropRaters.tsx
  • components/waves/leaderboard/grid/WaveLeaderboardGridItem.tsx
  • components/waves/leaderboard/identity/WaveLeaderboardIdentity.tsx
  • components/waves/small-leaderboard/WaveSmallLeaderboardItemOutcomes.tsx
  • components/waves/winners/podium/WavePodiumItem.tsx
  • helpers/ProfileHelpers.ts
💤 Files with no reviewable changes (3)
  • .playwright-mcp/page-2026-03-31T13-15-19-347Z.yml
  • .playwright-mcp/page-2026-03-31T13-04-45-965Z.yml
  • .playwright-mcp/page-2026-03-31T06-27-58-535Z.yml
✅ Files skipped from review due to trivial changes (2)
  • .gitignore
  • components/brain/my-stream/MyStreamWaveLeaderboard.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • components/waves/drops/identity/IdentityProfileSupplement.tsx
  • components/waves/leaderboard/identity/WaveLeaderboardIdentity.tsx

Comment thread components/waves/leaderboard/grid/WaveLeaderboardGridItem.tsx
Comment thread components/waves/winners/podium/WavePodiumItem.tsx Outdated
Comment thread helpers/ProfileHelpers.ts
Signed-off-by: ragnep <ragneinfo@gmail.com>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
components/waves/drops/identity/IdentityProfileSupplement.tsx (1)

76-86: Consider using a more robust key for rep category chips.

The key ${category.category}-${category.rep} could produce duplicates if the same category name appears multiple times with identical rep values. While unlikely, you could use the array index as a fallback disambiguator.

🔧 Optional fix
-          {visibleRepCategories.map((category) => (
+          {visibleRepCategories.map((category, index) => (
             <span
-              key={`${category.category}-${category.rep}`}
+              key={`${category.category}-${category.rep}-${index}`}
               className="tw-inline-flex tw-items-center tw-gap-x-1 tw-rounded-lg tw-bg-black/50 tw-px-2 tw-py-1.5 tw-text-[10px] tw-font-medium tw-uppercase tw-leading-4 tw-tracking-widest tw-text-iron-200 tw-shadow-inner"
             >
-              <span> {category.category}</span>
+              <span>{category.category}</span>
               <span className="tw-text-iron-400">

Also, there's a leading space inside the category span at line 81 that appears unintentional.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@components/waves/drops/identity/IdentityProfileSupplement.tsx` around lines
76 - 86, The key for the chips in visibleRepCategories.map uses
`${category.category}-${category.rep}` which can collide; change the key in the
map (inside visibleRepCategories.map) to include the item index as a fallback
(e.g., `${category.category}-${category.rep}-${index}`) so keys are unique, and
also remove the unintended leading space inside the category span (the text node
before {category.category}) to avoid extra spacing; update references in the
same JSX block where formatSignedRep(category.rep) is used.
components/waves/drops/participation/ParticipationIdentityProfileCard.tsx (1)

83-84: Unused supplementFullWidth prop is acknowledged.

The underscore prefix convention signals intentional non-use. Consider adding a brief comment or TODO if this prop is planned for future implementation, otherwise it could be removed from the interface.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@components/waves/drops/participation/ParticipationIdentityProfileCard.tsx`
around lines 83 - 84, The prop _supplementFullWidth (originally
supplementFullWidth) in ParticipationIdentityProfileCard is currently unused —
either remove it from the component props/interface to avoid dead API surface,
or keep it and add a short inline comment/TODO explaining it's intentionally
unused for now and will be implemented later; update the prop list
(showIdentityHeader, supplementFullWidth/_supplementFullWidth) and any related
types accordingly so the intent is clear.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@components/waves/leaderboard/identity/WaveLeaderboardIdentity.tsx`:
- Around line 76-78: The wrapper <div className={className}> in
WaveLeaderboardIdentity still renders even when WaveLeaderboardIdentitySummary
returns null; change WaveLeaderboardIdentity to short-circuit and return null
when the summary would be empty by reusing the same condition (profile &&
!showIdentityHeader && !hasSupplementContent) or by computing a local boolean
(e.g., hasIdentityContent) before rendering; if hasIdentityContent is false,
return null from the WaveLeaderboardIdentity component so the styled wrapper
(className) is not rendered and layout-affecting classes are not applied
unnecessarily.

In `@components/waves/winners/podium/WavePodiumItemContentOutcomes.tsx`:
- Around line 75-112: The JSX lists nicOutcomes, repOutcomes, and manualOutcomes
use non-unique keys (key={`NIC-${nicOutcome.value}`},
key={`REP-${repOutcome.category}-${repOutcome.value}`},
key={`MANUAL-${outcome.description}`}) which can collide when duplicate values
exist; update the key generation to include the iteration index or a unique id
(e.g., map((item, idx) => ... key={`NIC-${nicOutcome.value}-${idx}`}) ) for each
map to guarantee uniqueness and avoid React reconciliation issues in the
components rendering these arrays (nicOutcomes, repOutcomes, manualOutcomes).

---

Nitpick comments:
In `@components/waves/drops/identity/IdentityProfileSupplement.tsx`:
- Around line 76-86: The key for the chips in visibleRepCategories.map uses
`${category.category}-${category.rep}` which can collide; change the key in the
map (inside visibleRepCategories.map) to include the item index as a fallback
(e.g., `${category.category}-${category.rep}-${index}`) so keys are unique, and
also remove the unintended leading space inside the category span (the text node
before {category.category}) to avoid extra spacing; update references in the
same JSX block where formatSignedRep(category.rep) is used.

In `@components/waves/drops/participation/ParticipationIdentityProfileCard.tsx`:
- Around line 83-84: The prop _supplementFullWidth (originally
supplementFullWidth) in ParticipationIdentityProfileCard is currently unused —
either remove it from the component props/interface to avoid dead API surface,
or keep it and add a short inline comment/TODO explaining it's intentionally
unused for now and will be implemented later; update the prop list
(showIdentityHeader, supplementFullWidth/_supplementFullWidth) and any related
types accordingly so the intent is clear.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f2cdb719-1fe4-4d35-816a-2ea9afac3988

📥 Commits

Reviewing files that changed from the base of the PR and between a3dad8c and cc6a6f8.

📒 Files selected for processing (6)
  • components/waves/drops/identity/IdentityProfileSupplement.tsx
  • components/waves/drops/participation/ParticipationIdentityProfileCard.tsx
  • components/waves/leaderboard/grid/WaveLeaderboardGridItem.tsx
  • components/waves/leaderboard/identity/WaveLeaderboardIdentity.tsx
  • components/waves/winners/podium/WavePodiumItem.tsx
  • components/waves/winners/podium/WavePodiumItemContentOutcomes.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • components/waves/winners/podium/WavePodiumItem.tsx

Comment thread components/waves/leaderboard/identity/WaveLeaderboardIdentity.tsx
Comment thread components/waves/winners/podium/WavePodiumItemContentOutcomes.tsx
ragnep added 2 commits April 6, 2026 12:18
Signed-off-by: ragnep <ragneinfo@gmail.com>
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented Apr 6, 2026

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@components/waves/winners/podium/WavePodiumItem.tsx`:
- Around line 254-256: The author profile URL is being built manually as
`/${authorProfileLabel}`, causing inconsistent casing/encoding; replace that
with the canonical helper used elsewhere by calling getIdentityHref(...) instead
of string interpolation (use getIdentityHref(authorProfileLabel) or the same
argument shape used elsewhere in this file) so authorProfileHref is generated
via getIdentityHref; keep authorProfileLabel and authorTooltipUser as-is but use
getIdentityHref to construct authorProfileHref.
- Around line 283-312: The avatar branch for identityDisplay/profileUser removes
the profile Link, causing inconsistent navigation and an unnamed control for
screen readers when pfp is missing; update the JSX so both branches wrap
PodiumAvatar with a Link to the profile when a profile href/label exists (use
authorProfileHref/authorProfileLabel or primary equivalents), and add an
explicit accessible name by setting aria-label on the Link (or ensuring
PodiumAvatar alt is present and not aria-hidden) so screen readers always get
the profile name; modify the identityDisplay/profileUser branch and the fallback
branch around PodiumAvatar/Link to keep behavior and a11y consistent.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1633a800-3e44-4fb0-867f-79a8e6d00936

📥 Commits

Reviewing files that changed from the base of the PR and between cc6a6f8 and 05a8212.

📒 Files selected for processing (1)
  • components/waves/winners/podium/WavePodiumItem.tsx

Comment thread components/waves/winners/podium/WavePodiumItem.tsx
Comment thread components/waves/winners/podium/WavePodiumItem.tsx
@ragnep ragnep merged commit 97d225e into main Apr 6, 2026
8 checks passed
@ragnep ragnep deleted the identity-card-info branch April 6, 2026 09:33
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