import { Avatar, AvatarFallback, AvatarImage } from '@thedaviddias/design-system/avatar' import { Badge } from '@thedaviddias/design-system/badge' import { Calendar } from 'lucide-react' import Link from 'next/link' import { Card, CardContent } from '@/components/ui/card' import { getMemberBadgeSync } from '@/lib/member-client-utils' import type { Member } from '@/lib/member-server-utils' interface MemberCardProps { member: Member userSlug: string displayName: string } /** * Individual member card component * Displays member information in a card format */ export function MemberCard({ member, userSlug, displayName }: MemberCardProps) { const username = member.username || member.publicMetadata?.github_username const badge = getMemberBadgeSync(member.hasContributions) // Parse the date - it might be a timestamp number as string or ISO string let joinDate = 'Member' if (member.createdAt) { // Try parsing as number first (timestamp) const timestamp = Number(member.createdAt) const date = !Number.isNaN(timestamp) ? new Date(timestamp) : new Date(member.createdAt) if (!Number.isNaN(date.getTime())) { joinDate = date.toLocaleDateString('en-US', { month: 'short', year: 'numeric' }) } } return ( {member.imageUrl ? ( ) : ( {displayName.charAt(0).toUpperCase()} )}

{displayName}

{username &&

@{username}

}
{badge.label}
{joinDate}
) }