import { ExternalLink, Heart, MessageCircle, Repeat2, Eye, Twitter, Check, X } from 'lucide-react'; import { formatDistanceToNow } from 'date-fns'; import { useState, useEffect } from 'react'; import type { TwitterProject } from '@/lib/csv-loader'; import { markProjectAsSeen, markProjectAsUnseen, isProjectSeen } from '@/lib/seen-projects'; import { Button } from './ui/button'; interface ProjectCardProps { project: TwitterProject; onSeenStatusChange?: () => void; } export function ProjectCard({ project, onSeenStatusChange }: ProjectCardProps) { const formattedDate = project.created_at && !isNaN(new Date(project.created_at).getTime()) ? formatDistanceToNow(new Date(project.created_at), { addSuffix: true }) : 'N/A'; const [seen, setSeen] = useState(false); useEffect(() => { setSeen(isProjectSeen(project.id)); }, [project.id]); const toggleSeen = () => { if (seen) { markProjectAsUnseen(project.id); setSeen(false); } else { markProjectAsSeen(project.id); setSeen(true); } onSeenStatusChange?.(); }; return (
{/* Author Info */}
{project.author_name.charAt(0).toUpperCase()}

{project.author_name}

@{project.author_screen_name}

{formattedDate}
{/* Project Media */} {project.media_thumbnail && (
Project preview
)} {/* Project Description */}

{project.project_description}

{/* Seen Checkbox - moved here */}
{/* Project Actions */}
{/* Project URL */} {project.project_url && ( View Project )} {/* Tweet URL */} {project.original_tweet_url && ( View Tweet )}
{/* Engagement Stats */}
{project.favorite_count.toLocaleString()}
{project.retweet_count.toLocaleString()}
{project.reply_count.toLocaleString()}
{project.views_count.toLocaleString()}
{/* Category */} {project.category && (
{project.category}
)}
); }