Skip to content

Bug fixes 130126#1731

Merged
simo6529 merged 6 commits intomainfrom
bug-fixes-130126
Jan 13, 2026
Merged

Bug fixes 130126#1731
simo6529 merged 6 commits intomainfrom
bug-fixes-130126

Conversation

@simo6529
Copy link
Copy Markdown
Collaborator

@simo6529 simo6529 commented Jan 13, 2026

Summary by CodeRabbit

  • Performance

    • Improved profile picture rendering for faster, more reliable display
  • New Features

    • Added click support for leaderboard drops with optional location tracking
  • Improvements

    • More accurate user profile info and level/metrics sourcing
    • Refined navigation to follow URL parameters for consistent views
    • More robust leaderboard voter link generation and display handling

✏️ Tip: You can customize this high-level summary in your review settings.

Signed-off-by: Simo <simo@6529.io>
Signed-off-by: Simo <simo@6529.io>
Signed-off-by: Simo <simo@6529.io>
Signed-off-by: Simo <simo@6529.io>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jan 13, 2026

📝 Walkthrough

Walkthrough

Updated .gitignore; refactored sidebar user info to resolve IPFS profile images and centralize data sourcing; expanded MemesLeaderboardDrop API with an onDropClick callback and location prop while tightening metadata access; refactored ViewContext to derive active view from URL params and use refs to avoid re-renders.

Changes

Cohort / File(s) Summary
Configuration
\.gitignore
Added .coderabbit.yml to gitignore under Hooks section
User Profile UI
components/header/AppSidebarUserInfo.tsx
Resolve IPFS pfp via resolveIpfsUrlSync, render with Next.js Image, unify data source to activeProfileProxy?.created_by ?? profile, and adjust handle/wallet fallback logic
Memes / Drops
components/memes/drops/MemesLeaderboardDrop.tsx
Expanded MemesLeaderboardDropProps to include onDropClick and optional location; removed optional chaining when reading drop.metadata and drop.top_raters; improved voter link key/href to fall back to primary_address
Navigation / View State
components/navigation/ViewContext.tsx
Switched active view from internal state to URL-derived useMemo; introduced useRef for last fetched wave id; centralized wave/view param handling and adjusted navigation to rely on URL params rather than direct state mutations

Sequence Diagram(s)

(omitted — changes do not meet criteria for diagram generation)

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • ragnep

Poem

🐇 I hopped through code with nimble paws,

IPFS pics and fewer flaws,
Views now listen to the URL's hum,
Drops can hear the clicks — come, come! 🥕✨

🚥 Pre-merge checks | ✅ 1 | ❌ 2
❌ Failed checks (1 warning, 1 inconclusive)
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.
Title check ❓ Inconclusive The title 'Bug fixes 130126' is vague and generic, using non-descriptive terms that don't convey meaningful information about the specific changes in the changeset. Replace with a descriptive title summarizing the main change, such as 'Fix profile proxy handling and IPFS URL resolution' or 'Refactor view context and update meme leaderboard props'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

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

✨ Finishing touches
  • 📝 Generate docstrings

📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cb989f1 and 3305be6.

📒 Files selected for processing (1)
  • components/header/AppSidebarUserInfo.tsx
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{ts,tsx,js,jsx}: Do not include any comments in the code; it should be self-explanatory
Write correct, up-to-date, bug-free, fully componentized, secure, and efficient code
Include all required imports and ensure proper naming of key components
Use NextJS features that match the current version

**/*.{ts,tsx,js,jsx}: Remove unnecessary Effects. If the Effect's only job is to derive or sync internal state, calculate during render or use useMemo instead.
Use useEffectEvent for non-reactive logic inside Effects to read the latest props/state without turning them into dependencies or causing unnecessary re-runs.
Use explicit caching with "use cache" directive at the top of Server Components, routes, or functions. Configure cacheComponents: true in next.config.ts as needed.

**/*.{ts,tsx,js,jsx}: Remove unnecessary Effects; if the Effect only derives state, compute during render instead
Use useEffectEvent when listening to external events but needing the latest props/state without re-running the Effect
Move data fetching from client Effects to Server Components; mutations go through Server Actions ('use server')

Files:

  • components/header/AppSidebarUserInfo.tsx
**/*.{tsx,jsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{tsx,jsx}: Use FontAwesome for icons in React components
Use TailwindCSS for styling in React components
Use react-query for data fetching
Always add readonly before props in React components

**/*.{tsx,jsx}: Use internal links via <Link> component from Next.js instead of <a> tags
Replace <img> elements with <Image /> from next/image

Files:

  • components/header/AppSidebarUserInfo.tsx
**/*.{js,ts,jsx,tsx}

📄 CodeRabbit inference engine (GEMINI.md)

Run npm run lint to ensure code satisfies ESLint (Next's Core Web Vitals + React Hooks). Code must pass linting before completing any task.

**/*.{js,ts,jsx,tsx}: Code must satisfy ESLint with Next's Core Web Vitals and React Hooks rules by running npm run lint
Do not add eslint-disable comments unless explicitly instructed; prefer refactors aligned with React 19.2, React Compiler, and Next.js 16 conventions

Files:

  • components/header/AppSidebarUserInfo.tsx
**/*.{jsx,tsx}

📄 CodeRabbit inference engine (GEMINI.md)

**/*.{jsx,tsx}: Replace <img> elements with <Image /> from next/image to comply with Next.js ESLint rule @next/next/no-img-element.
Use <Link href="/path"> from Next.js for internal navigation instead of raw <a> tags to comply with @next/next/no-html-link-for-pages.

Files:

  • components/header/AppSidebarUserInfo.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (GEMINI.md)

Use TypeScript with React functional components and hooks. Follow existing code style and naming conventions.

Files:

  • components/header/AppSidebarUserInfo.tsx
**/*.{tsx,ts}

📄 CodeRabbit inference engine (AGENTS.md)

Use TypeScript with React functional components and hooks

Files:

  • components/header/AppSidebarUserInfo.tsx
**/*.{tsx,ts,jsx,js}

📄 CodeRabbit inference engine (AGENTS.md)

Prefer direct named imports from React (useMemo, useRef, FC) over React. namespace usage

Files:

  • components/header/AppSidebarUserInfo.tsx
🧬 Code graph analysis (1)
components/header/AppSidebarUserInfo.tsx (3)
components/ipfs/IPFSContext.tsx (1)
  • resolveIpfsUrlSync (77-89)
components/user/utils/level/UserLevel.tsx (1)
  • UserLevel (9-57)
components/header/AppSidebarUserStats.tsx (1)
  • AppSidebarUserStats (7-53)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (5)
components/header/AppSidebarUserInfo.tsx (5)

1-7: LGTM!

Imports are correctly structured. Using next/image and resolveIpfsUrlSync aligns with coding guidelines and the IPFS resolution pattern.


40-50: Good refactor centralizing the data source.

Using source to derive fields from either activeProfileProxy.created_by or profile improves maintainability and ensures consistent data resolution. Default values are appropriate.


67-72: LGTM!

The flex column layout with truncation for long labels is well-structured. UserLevel props align with its API.


73-82: Props correctly derived from centralized source.

The stats props are properly passed. Note that handle={handleOrWallet} depends on the fix suggested earlier for the handleOrWallet IIFE to ensure it never returns undefined (the AppSidebarUserStats component expects handle: string).


54-66: IPFS gateway domain configuration is properly whitelisted.

The Image component implementation in AppSidebarUserInfo.tsx is correct. The IPFS gateway domains (ipfs.6529.io and ipfs.io) are already configured in next.config.ts under images.remotePatterns, allowing remote IPFS images to load correctly. The component correctly uses the fill layout with a relative parent container and appropriate sizing.


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: 1

🤖 Fix all issues with AI agents
In @components/header/AppSidebarUserInfo.tsx:
- Line 42: The variable name "soure" is a typo; rename it to "source" where it
is declared (replace const soure = activeProfileProxy?.created_by ?? profile;)
and update all subsequent references to use "source" (including any usage in the
JSX or logic that currently reads "soure" on lines following the declaration),
keeping the same expression activeProfileProxy?.created_by ?? profile and
preserving any TypeScript typings or null checks.
🧹 Nitpick comments (2)
components/navigation/ViewContext.tsx (1)

177-189: State setters don't need to be in dependency array.

setLastVisitedDm and setLastVisitedWave are stable references from useState and don't need to be included in the dependency array. While not harmful, it's unnecessary.

♻️ Suggested cleanup
   const hardBack = useCallback(
     (v: ViewKey) => {
       if (v === "messages") {
         setLastVisitedDm(null);
         router.push(getMessagesBaseRoute(isApp));
       } else {
         setLastVisitedWave(null);
         router.push(getWavesBaseRoute(isApp));
       }
     },
-    [router, setLastVisitedDm, setLastVisitedWave, isApp]
+    [router, isApp]
   );
components/memes/drops/MemesLeaderboardDrop.tsx (1)

154-158: Consider using Next.js Image component.

Per coding guidelines, <img> elements should be replaced with <Image /> from next/image. While these are small profile thumbnails, using Image would provide optimization benefits.

♻️ Suggested change
-                            {voter.profile.pfp ? (
-                              <img
-                                className="tw-h-6 tw-w-6 tw-rounded-md tw-border-2 tw-border-solid tw-border-[#111] tw-bg-iron-800 tw-object-contain"
-                                src={voter.profile.pfp}
-                                alt="Recent voter"
-                              />
+                            {voter.profile.pfp ? (
+                              <Image
+                                className="tw-rounded-md tw-border-2 tw-border-solid tw-border-[#111] tw-bg-iron-800 tw-object-contain"
+                                src={voter.profile.pfp}
+                                alt="Recent voter"
+                                width={24}
+                                height={24}
+                              />

Note: Ensure the image domain is configured in next.config.js if using external URLs.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 87a23c6 and cb989f1.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (4)
  • .gitignore
  • components/header/AppSidebarUserInfo.tsx
  • components/memes/drops/MemesLeaderboardDrop.tsx
  • components/navigation/ViewContext.tsx
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{ts,tsx,js,jsx}: Do not include any comments in the code; it should be self-explanatory
Write correct, up-to-date, bug-free, fully componentized, secure, and efficient code
Include all required imports and ensure proper naming of key components
Use NextJS features that match the current version

**/*.{ts,tsx,js,jsx}: Remove unnecessary Effects. If the Effect's only job is to derive or sync internal state, calculate during render or use useMemo instead.
Use useEffectEvent for non-reactive logic inside Effects to read the latest props/state without turning them into dependencies or causing unnecessary re-runs.
Use explicit caching with "use cache" directive at the top of Server Components, routes, or functions. Configure cacheComponents: true in next.config.ts as needed.

**/*.{ts,tsx,js,jsx}: Remove unnecessary Effects; if the Effect only derives state, compute during render instead
Use useEffectEvent when listening to external events but needing the latest props/state without re-running the Effect
Move data fetching from client Effects to Server Components; mutations go through Server Actions ('use server')

Files:

  • components/navigation/ViewContext.tsx
  • components/memes/drops/MemesLeaderboardDrop.tsx
  • components/header/AppSidebarUserInfo.tsx
**/*.{tsx,jsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{tsx,jsx}: Use FontAwesome for icons in React components
Use TailwindCSS for styling in React components
Use react-query for data fetching
Always add readonly before props in React components

**/*.{tsx,jsx}: Use internal links via <Link> component from Next.js instead of <a> tags
Replace <img> elements with <Image /> from next/image

Files:

  • components/navigation/ViewContext.tsx
  • components/memes/drops/MemesLeaderboardDrop.tsx
  • components/header/AppSidebarUserInfo.tsx
**/*.{js,ts,jsx,tsx}

📄 CodeRabbit inference engine (GEMINI.md)

Run npm run lint to ensure code satisfies ESLint (Next's Core Web Vitals + React Hooks). Code must pass linting before completing any task.

**/*.{js,ts,jsx,tsx}: Code must satisfy ESLint with Next's Core Web Vitals and React Hooks rules by running npm run lint
Do not add eslint-disable comments unless explicitly instructed; prefer refactors aligned with React 19.2, React Compiler, and Next.js 16 conventions

Files:

  • components/navigation/ViewContext.tsx
  • components/memes/drops/MemesLeaderboardDrop.tsx
  • components/header/AppSidebarUserInfo.tsx
**/*.{jsx,tsx}

📄 CodeRabbit inference engine (GEMINI.md)

**/*.{jsx,tsx}: Replace <img> elements with <Image /> from next/image to comply with Next.js ESLint rule @next/next/no-img-element.
Use <Link href="/path"> from Next.js for internal navigation instead of raw <a> tags to comply with @next/next/no-html-link-for-pages.

Files:

  • components/navigation/ViewContext.tsx
  • components/memes/drops/MemesLeaderboardDrop.tsx
  • components/header/AppSidebarUserInfo.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (GEMINI.md)

Use TypeScript with React functional components and hooks. Follow existing code style and naming conventions.

Files:

  • components/navigation/ViewContext.tsx
  • components/memes/drops/MemesLeaderboardDrop.tsx
  • components/header/AppSidebarUserInfo.tsx
**/*.{tsx,ts}

📄 CodeRabbit inference engine (AGENTS.md)

Use TypeScript with React functional components and hooks

Files:

  • components/navigation/ViewContext.tsx
  • components/memes/drops/MemesLeaderboardDrop.tsx
  • components/header/AppSidebarUserInfo.tsx
**/*.{tsx,ts,jsx,js}

📄 CodeRabbit inference engine (AGENTS.md)

Prefer direct named imports from React (useMemo, useRef, FC) over React. namespace usage

Files:

  • components/navigation/ViewContext.tsx
  • components/memes/drops/MemesLeaderboardDrop.tsx
  • components/header/AppSidebarUserInfo.tsx
🧠 Learnings (4)
📚 Learning: 2025-12-30T14:32:19.360Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-30T14:32:19.360Z
Learning: Applies to **/*.{tsx,ts} : Use TypeScript with React functional components and hooks

Applied to files:

  • components/navigation/ViewContext.tsx
📚 Learning: 2025-12-30T14:32:19.360Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-30T14:32:19.360Z
Learning: Applies to **/*.{tsx,ts,jsx,js} : Prefer direct named imports from React (`useMemo`, `useRef`, `FC`) over `React.` namespace usage

Applied to files:

  • components/navigation/ViewContext.tsx
📚 Learning: 2025-11-25T08:35:58.729Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: .cursorrules:0-0
Timestamp: 2025-11-25T08:35:58.729Z
Learning: Applies to **/*.{tsx,jsx} : Use react-query for data fetching

Applied to files:

  • components/navigation/ViewContext.tsx
📚 Learning: 2025-12-30T14:32:19.360Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-30T14:32:19.360Z
Learning: Applies to **/*.{js,ts,jsx,tsx} : Code must satisfy ESLint with Next's Core Web Vitals and React Hooks rules by running `npm run lint`

Applied to files:

  • .gitignore
🧬 Code graph analysis (2)
components/navigation/ViewContext.tsx (2)
components/navigation/navTypes.ts (2)
  • ViewKey (3-3)
  • NavItem (25-25)
helpers/navigation.helpers.ts (4)
  • getHomeFeedRoute (11-11)
  • getHomeLatestRoute (9-9)
  • getWavesBaseRoute (13-13)
  • getMessagesBaseRoute (15-15)
components/header/AppSidebarUserInfo.tsx (3)
components/ipfs/IPFSContext.tsx (1)
  • resolveIpfsUrlSync (77-89)
components/user/utils/level/UserLevel.tsx (1)
  • UserLevel (9-57)
components/header/AppSidebarUserStats.tsx (1)
  • AppSidebarUserStats (7-53)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (11)
.gitignore (1)

102-102: Verify intent to ignore .coderabbit.yml.

Ignoring .coderabbit.yml means the CodeRabbit configuration won't be shared across the team via version control. Typically, this file is committed to ensure consistent code review settings for all contributors. If this is intentional (e.g., using org-level defaults), this is fine.

components/header/AppSidebarUserInfo.tsx (3)

1-7: LGTM!

Good refactoring to use Next.js Image component for optimized image loading and resolveIpfsUrlSync for proper IPFS URL resolution. Import organization is clean.


17-26: LGTM!

The updated handleOrWallet logic correctly prioritizes the proxy profile's handle/address when acting on behalf of another identity, with appropriate fallbacks.


54-66: LGTM!

Proper usage of Next.js Image component with fill layout, correct sizes attribute matching the container dimensions, and appropriate fallback for missing profile pictures. As per coding guidelines, this correctly replaces <img> elements.

components/navigation/ViewContext.tsx (3)

53-63: LGTM!

Good refactor to derive activeView from URL parameters instead of maintaining separate state. This aligns with React best practices of deriving state from props/URL when possible. As per coding guidelines, this removes an unnecessary Effect by computing during render via useMemo.


110-117: LGTM!

The ref-based tracking pattern effectively prevents duplicate API calls when the wave parameter hasn't changed, following React best practices for avoiding unnecessary side effects.


137-172: LGTM!

The navigation logic correctly uses URL parameters to determine current state and handles the toggle behavior appropriately: clicking waves/messages when already viewing one navigates back to the base route, while clicking when not viewing navigates to the last visited or base route.

components/memes/drops/MemesLeaderboardDrop.tsx (4)

30-40: LGTM!

Good addition of onDropClick handler and location prop with sensible default value. The props are properly marked as readonly per coding guidelines.


61-66: LGTM!

Metadata extraction correctly uses optional chaining on find() results with sensible default values.


146-150: LGTM!

Proper use of nullish coalescing for both the React key and navigation href, ensuring unique keys and correct routing when handle is not available.


72-72: No issue: top_raters is guaranteed to be defined.

The top_raters property on ApiDrop (which ExtendedDrop extends) is defined as a required property of type Array<ApiDropRater>, not optional. Removing the optional chaining is safe and correct.

Likely an incorrect or invalid review comment.

Comment thread components/header/AppSidebarUserInfo.tsx Outdated
Signed-off-by: Simo <simo@6529.io>
@sonarqubecloud
Copy link
Copy Markdown

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: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
components/header/AppSidebarUserInfo.tsx (1)

28-33: label may be null/undefined when activeProfileProxy exists but handle is nullish.

Unlike handleOrWallet which falls back to primary_address, label returns created_by.handle directly without a fallback. If handle is nullish, this could render incorrectly in the UI.

Suggested fix for consistent fallback
  const label = (() => {
-   if (activeProfileProxy) return activeProfileProxy.created_by.handle;
+   if (activeProfileProxy)
+     return (
+       activeProfileProxy.created_by.handle ??
+       activeProfileProxy.created_by.primary_address?.slice(0, 6)
+     );
    if (profile?.handle) return profile.handle;
    if (address) return address.slice(0, 6);
    return "";
  })();
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cb989f1 and 3305be6.

📒 Files selected for processing (1)
  • components/header/AppSidebarUserInfo.tsx
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{ts,tsx,js,jsx}: Do not include any comments in the code; it should be self-explanatory
Write correct, up-to-date, bug-free, fully componentized, secure, and efficient code
Include all required imports and ensure proper naming of key components
Use NextJS features that match the current version

**/*.{ts,tsx,js,jsx}: Remove unnecessary Effects. If the Effect's only job is to derive or sync internal state, calculate during render or use useMemo instead.
Use useEffectEvent for non-reactive logic inside Effects to read the latest props/state without turning them into dependencies or causing unnecessary re-runs.
Use explicit caching with "use cache" directive at the top of Server Components, routes, or functions. Configure cacheComponents: true in next.config.ts as needed.

**/*.{ts,tsx,js,jsx}: Remove unnecessary Effects; if the Effect only derives state, compute during render instead
Use useEffectEvent when listening to external events but needing the latest props/state without re-running the Effect
Move data fetching from client Effects to Server Components; mutations go through Server Actions ('use server')

Files:

  • components/header/AppSidebarUserInfo.tsx
**/*.{tsx,jsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{tsx,jsx}: Use FontAwesome for icons in React components
Use TailwindCSS for styling in React components
Use react-query for data fetching
Always add readonly before props in React components

**/*.{tsx,jsx}: Use internal links via <Link> component from Next.js instead of <a> tags
Replace <img> elements with <Image /> from next/image

Files:

  • components/header/AppSidebarUserInfo.tsx
**/*.{js,ts,jsx,tsx}

📄 CodeRabbit inference engine (GEMINI.md)

Run npm run lint to ensure code satisfies ESLint (Next's Core Web Vitals + React Hooks). Code must pass linting before completing any task.

**/*.{js,ts,jsx,tsx}: Code must satisfy ESLint with Next's Core Web Vitals and React Hooks rules by running npm run lint
Do not add eslint-disable comments unless explicitly instructed; prefer refactors aligned with React 19.2, React Compiler, and Next.js 16 conventions

Files:

  • components/header/AppSidebarUserInfo.tsx
**/*.{jsx,tsx}

📄 CodeRabbit inference engine (GEMINI.md)

**/*.{jsx,tsx}: Replace <img> elements with <Image /> from next/image to comply with Next.js ESLint rule @next/next/no-img-element.
Use <Link href="/path"> from Next.js for internal navigation instead of raw <a> tags to comply with @next/next/no-html-link-for-pages.

Files:

  • components/header/AppSidebarUserInfo.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (GEMINI.md)

Use TypeScript with React functional components and hooks. Follow existing code style and naming conventions.

Files:

  • components/header/AppSidebarUserInfo.tsx
**/*.{tsx,ts}

📄 CodeRabbit inference engine (AGENTS.md)

Use TypeScript with React functional components and hooks

Files:

  • components/header/AppSidebarUserInfo.tsx
**/*.{tsx,ts,jsx,js}

📄 CodeRabbit inference engine (AGENTS.md)

Prefer direct named imports from React (useMemo, useRef, FC) over React. namespace usage

Files:

  • components/header/AppSidebarUserInfo.tsx
🧬 Code graph analysis (1)
components/header/AppSidebarUserInfo.tsx (3)
components/ipfs/IPFSContext.tsx (1)
  • resolveIpfsUrlSync (77-89)
components/user/utils/level/UserLevel.tsx (1)
  • UserLevel (9-57)
components/header/AppSidebarUserStats.tsx (1)
  • AppSidebarUserStats (7-53)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (5)
components/header/AppSidebarUserInfo.tsx (5)

1-7: LGTM!

Imports are correctly structured. Using next/image and resolveIpfsUrlSync aligns with coding guidelines and the IPFS resolution pattern.


40-50: Good refactor centralizing the data source.

Using source to derive fields from either activeProfileProxy.created_by or profile improves maintainability and ensures consistent data resolution. Default values are appropriate.


67-72: LGTM!

The flex column layout with truncation for long labels is well-structured. UserLevel props align with its API.


73-82: Props correctly derived from centralized source.

The stats props are properly passed. Note that handle={handleOrWallet} depends on the fix suggested earlier for the handleOrWallet IIFE to ensure it never returns undefined (the AppSidebarUserStats component expects handle: string).


54-66: IPFS gateway domain configuration is properly whitelisted.

The Image component implementation in AppSidebarUserInfo.tsx is correct. The IPFS gateway domains (ipfs.6529.io and ipfs.io) are already configured in next.config.ts under images.remotePatterns, allowing remote IPFS images to load correctly. The component correctly uses the fill layout with a relative parent container and appropriate sizing.

@simo6529 simo6529 merged commit e69d0c1 into main Jan 13, 2026
9 checks passed
@simo6529 simo6529 deleted the bug-fixes-130126 branch January 13, 2026 13:21
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