"use client"; import { useState, useEffect } from "react"; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "./ui/card"; import { Button } from "./ui/button"; import { Input } from "./ui/input"; import { Badge } from "./ui/badge"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, DialogTrigger } from "./ui/dialog"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "./ui/select"; import { Separator } from "./ui/separator"; type Campaign = { id: string; name: string; gridSize: number; status: string; createdAt: string; }; export function AdminDashboard() { const [campaigns, setCampaigns] = useState([]); const [loading, setLoading] = useState(true); const [newName, setNewName] = useState(""); const [newGridSize, setNewGridSize] = useState("5"); const [creating, setCreating] = useState(false); const [dialogOpen, setDialogOpen] = useState(false); const fetchCampaigns = async () => { const res = await fetch("/api/campaigns"); const data = await res.json(); setCampaigns(data); setLoading(false); }; useEffect(() => { fetchCampaigns(); }, []); const createCampaign = async () => { if (!newName) return; setCreating(true); await fetch("/api/campaigns", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name: newName, gridSize: parseInt(newGridSize) }), }); setNewName(""); setDialogOpen(false); await fetchCampaigns(); setCreating(false); }; const deleteCampaign = async (id: string) => { await fetch(`/api/campaigns/${id}`, { method: "DELETE" }); await fetchCampaigns(); }; const statusColors: Record = { active: "success", completed: "warning", archived: "secondary", }; return (

⚙ Command Center

Admin terminal — v1.0

New Campaign Deploy a new bingo operation
setNewName(e.target.value)} className="font-mono" />
{loading ? (
Loading submarine manifests...
) : campaigns.length === 0 ? (
🗺️💀

No campaigns deployed

Click “New Campaign” to start the chaos

) : (
{campaigns.map(c => (
{c.name} {c.status}
{c.gridSize}×{c.gridSize} {new Date(c.createdAt).toLocaleDateString()}
))}
)}
); }