'use client'; import { useState, useEffect, useMemo } from 'react'; import { Search, Zap, Globe, Clock, RefreshCw, ExternalLink } from 'lucide-react'; interface Worker { id: string; modified_on: string; } interface WorkersData { workers: Worker[]; total: number; error?: string; } export default function WorkersPage() { const [data, setData] = useState(null); const [search, setSearch] = useState(''); const [loading, setLoading] = useState(true); const [lastChecked, setLastChecked] = useState(''); const load = async () => { setLoading(true); try { const r = await fetch('/api/workers'); if (r.ok) { const d = await r.json(); setData(d); setLastChecked(new Date().toLocaleTimeString()); } } catch {} setLoading(false); }; useEffect(() => { load(); }, []); const filtered = useMemo(() => { if (!data?.workers) return []; if (!search) return data.workers; const q = search.toLowerCase(); return data.workers.filter(w => w.id.toLowerCase().includes(q)); }, [data, search]); const formatDate = (d: string) => { try { return new Date(d).toLocaleDateString('en-US', { month: 'short', day: 'numeric' }); } catch { return d; } }; return (
{/* Header */}

CF Workers

Cloudflare Workers — {data?.total ?? '...'} deployed

{/* Stats */}
{[ { label: 'Total Workers', value: data?.total ?? '...', color: '#FF1D6C', icon: Zap }, { label: 'Showing', value: filtered.length, color: '#2979FF', icon: Globe }, { label: 'Last Sync', value: lastChecked || '—', color: '#F5A623', icon: Clock }, ].map(s => (

{s.label}

{s.value}

))}
{/* Search */}
setSearch(e.target.value)} placeholder="Search workers..." className="w-full bg-white/5 border border-white/10 rounded-xl pl-11 pr-4 py-3 text-sm text-white placeholder-gray-600 focus:outline-none focus:border-[#FF1D6C]/50 focus:bg-white/8 transition-all" /> {search && ( )}
{/* Workers grid */} {loading && !data ? (
Loading workers...
) : data?.error ? (

{data.error}

Configure CLOUDFLARE_API_TOKEN in Vercel env vars

) : (
{filtered.map(w => (

{w.id}

{formatDate(w.modified_on)}

))} {filtered.length === 0 && search && (
No workers match "{search}"
)}
)}
); }