From 769b4b6d09caf8cfc2196df60eb4c4518452d96e Mon Sep 17 00:00:00 2001 From: Cho Young-Hwi Date: Tue, 17 Mar 2026 14:32:33 +0000 Subject: [PATCH 1/3] [#255] Display Farcaster identity everywhere: nav, comments, story cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add FarcasterAvatar component: reusable address → avatar + @username - Add useConnectedIdentity hook: resolves connected wallet's FC identity - ConnectWallet: show FC avatar + @username in nav bar - CommentSection: show FC identity for commenters - StoryCard: show FC identity for story writers - Falls back to truncated address when no FC account is linked Co-Authored-By: Claude Opus 4.6 (1M context) --- src/components/CommentSection.tsx | 4 +- src/components/ConnectWallet.tsx | 16 +++++++- src/components/FarcasterAvatar.tsx | 63 ++++++++++++++++++++++++++++++ src/components/StoryCard.tsx | 4 +- src/hooks/useConnectedIdentity.ts | 37 ++++++++++++++++++ 5 files changed, 118 insertions(+), 6 deletions(-) create mode 100644 src/components/FarcasterAvatar.tsx create mode 100644 src/hooks/useConnectedIdentity.ts diff --git a/src/components/CommentSection.tsx b/src/components/CommentSection.tsx index d5fd1ebe..67ce62b9 100644 --- a/src/components/CommentSection.tsx +++ b/src/components/CommentSection.tsx @@ -3,8 +3,8 @@ import { useState, useCallback } from "react"; import { useAccount, useSignMessage } from "wagmi"; import { useQuery, useQueryClient } from "@tanstack/react-query"; -import { truncateAddress } from "../../lib/utils"; import { ConnectWallet } from "./ConnectWallet"; +import { FarcasterAvatar } from "./FarcasterAvatar"; interface Comment { id: number; @@ -182,7 +182,7 @@ export function CommentSection({
- {truncateAddress(c.commenter_address)} + {relativeTime(c.created_at)} diff --git a/src/components/ConnectWallet.tsx b/src/components/ConnectWallet.tsx index d234777e..2cf3e891 100644 --- a/src/components/ConnectWallet.tsx +++ b/src/components/ConnectWallet.tsx @@ -4,6 +4,7 @@ import { useEffect, useRef, useState } from "react"; import { useAccount, useConnect, useDisconnect } from "wagmi"; import { isFarcasterMiniApp } from "../../lib/farcaster-connector"; import { truncateAddress } from "../../lib/utils"; +import { useConnectedIdentity } from "../hooks/useConnectedIdentity"; export function ConnectWallet() { const { address, isConnected } = useAccount(); @@ -11,6 +12,7 @@ export function ConnectWallet() { const { disconnect } = useDisconnect(); const autoConnectAttempted = useRef(false); const [inMiniApp, setInMiniApp] = useState(false); + const { profile } = useConnectedIdentity(); // Detect Farcaster mini app context once on mount useEffect(() => { @@ -36,8 +38,18 @@ export function ConnectWallet() { if (isConnected && address) { return (
- - {truncateAddress(address)} + + {profile?.pfpUrl && ( + // eslint-disable-next-line @next/next/no-img-element + + )} + {profile ? `@${profile.username}` : truncateAddress(address)}