import { cn } from '@/lib/utils' import { ExternalLink } from 'lucide-react' import { memo } from 'react' interface PostProps { tweetId: string url: string className?: string embedded?: boolean // kept for API compatibility, now ignored } /** * Privacy-preserving X/Twitter post link card. * * Does NOT load Twitter's widgets.js script. Shows a styled card * with the post URL and opens in a new tab when clicked. * * This eliminates all tracking that Twitter's embedded widget performs: * - No platform.twitter.com/widgets.js loading * - No cookies set * - No browser fingerprinting * - No behavioral tracking */ const Post = memo(({ tweetId, url, className }: PostProps) => { // Extract username from URL if possible const usernameMatch = url.match(/(?:twitter\.com|x\.com)\/([^/]+)\/status/i) const username = usernameMatch ? usernameMatch[1] : null return ( e.stopPropagation()} className={cn( 'block rounded-xl border overflow-hidden cursor-pointer group', 'bg-card hover:bg-accent/50 transition-colors', 'p-4 flex items-center gap-4', className )} style={{ maxWidth: '550px' }} > {/* X logo */}
{/* Post info */}
{username ? `@${username}` : 'X Post'}
Post ID: {tweetId}
{/* External link indicator */}
) }) Post.displayName = 'XPost' export default Post