"use client"; import { useEffect, useState } from "react"; import { api } from "@/lib/api"; import { getMeetupStartUtc } from "@/lib/meetupEventTime"; import { Navbar } from "@/components/public/Navbar"; import { Footer } from "@/components/public/Footer"; import { MeetupCard } from "@/components/public/MeetupCard"; import { AddToCalendarButton } from "@/components/public/AddToCalendarDialog"; function CardSkeleton() { return (
); } export default function EventsPage() { const [meetups, setMeetups] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { api .getMeetups() .then((data: any) => { const list = Array.isArray(data) ? data : []; setMeetups(list); }) .catch((err) => setError(err.message)) .finally(() => setLoading(false)); }, []); const now = new Date(); const upcoming = meetups.filter((m) => { const start = getMeetupStartUtc(m.date, m.time || "00:00"); if (Number.isNaN(start.getTime())) return false; return start >= now; }); const past = meetups .filter((m) => { const start = getMeetupStartUtc(m.date, m.time || "00:00"); if (Number.isNaN(start.getTime())) return false; return start < now; }) .reverse(); return ( <>

Belgian Bitcoin Embassy

All Events

Past and upcoming Bitcoin meetups in Belgium.

{error && (
Failed to load events: {error}
)}

Upcoming {!loading && upcoming.length > 0 && ( {upcoming.length} )}

{loading ? (
{[0, 1, 2].map((i) => )}
) : upcoming.length === 0 ? (

No upcoming events scheduled. Check back soon.

) : (
{upcoming.map((m) => )}
)}
{(loading || past.length > 0) && (

Past Events

{loading ? (
{[0, 1, 2].map((i) => )}
) : (
{past.map((m) => )}
)}
)}