import { motion } from "framer-motion"; import { Link } from "wouter"; import { ArrowLeft, Calendar, Clock, MapPin, Users, Loader2, Star } from "lucide-react"; import { useQuery } from "@tanstack/react-query"; import gridBg from '@assets/generated_images/dark_subtle_digital_grid_texture.png'; export default function Events() { const { data: events, isLoading } = useQuery({ queryKey: ["/api/events"], }); const formatDate = (dateStr: string) => { const date = new Date(dateStr); return date.toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric', year: 'numeric' }); }; const formatPrice = (price: string | number | null) => { if (!price || price === 0) return "Free"; return `$${Number(price).toFixed(2)}`; }; const getCategoryColor = (category?: string) => { switch (category?.toLowerCase()) { case 'workshop': return 'text-purple-400 border-purple-400/30 bg-purple-500/10'; case 'conference': return 'text-blue-400 border-blue-400/30 bg-blue-500/10'; case 'hackathon': return 'text-green-400 border-green-400/30 bg-green-500/10'; case 'meetup': return 'text-yellow-400 border-yellow-400/30 bg-yellow-500/10'; default: return 'text-cyan-400 border-cyan-400/30 bg-cyan-500/10'; } }; return (
{/* Background */}
{/* Header */}

Events

Connect. Learn. Build. ยท {events?.length || 0} Upcoming Events

{isLoading ? (
Loading events...
) : !events || events.length === 0 ? (

No events scheduled yet.

Check back soon for upcoming events!

) : (
{events.map((event: any, index: number) => ( {/* Event Image */} {event.image_url && (
{event.title} {event.featured && (
Featured
)}
)}

{event.title}

{event.category && ( {event.category} )}
{event.description && (

{event.description}

)}
{formatDate(event.date)}
{event.time && (
{event.time}
)} {event.location && (
{event.location}
)} {event.capacity && (
{event.capacity} spots available
)}
{formatPrice(event.price)}
))}
)}
); }