Guten Tag, Mock Nutzer
Überblick über deine Credits und laufende Generierungen.
Bei fehlgeschlagenen Jobs werden reservierte Credits automatisch freigegeben.
Produktfotos — Variante 3/4
Step 2 von 4 —{" "} flux-schnell
{run.updated}
"use client"; import Image from "next/image"; import { Activity, ArrowUpRight, ChevronDown, Coins, LayoutTemplate, Search, Sparkles, } from "lucide-react"; import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Input } from "@/components/ui/input"; import { Progress } from "@/components/ui/progress"; import { cn } from "@/lib/utils"; const formatEurFromCents = (cents: number) => new Intl.NumberFormat("de-DE", { style: "currency", currency: "EUR", }).format(cents / 100); const mockRuns = [ { id: "run-8841", workspace: "Sommer-Kampagne", node: "KI-Bild", model: "flux-pro", status: "done" as const, credits: 42, updated: "vor 12 Min.", }, { id: "run-8839", workspace: "Produktfotos", node: "KI-Bild", model: "flux-schnell", status: "executing" as const, credits: 18, updated: "gerade eben", }, { id: "run-8832", workspace: "Social Variants", node: "Compare", model: "—", status: "idle" as const, credits: 0, updated: "vor 1 Std.", }, { id: "run-8828", workspace: "Sommer-Kampagne", node: "KI-Bild", model: "flux-pro", status: "error" as const, credits: 0, updated: "vor 2 Std.", }, ]; const mockWorkspaces = [ { name: "Sommer-Kampagne", nodes: 24, frames: 3, initial: "S" }, { name: "Produktfotos", nodes: 11, frames: 2, initial: "P" }, { name: "Social Variants", nodes: 8, frames: 1, initial: "V" }, ]; function StatusDot({ status }: { status: (typeof mockRuns)[0]["status"] }) { const base = "inline-block size-2 rounded-full"; switch (status) { case "done": return ; case "executing": return ( ); case "idle": return ; case "error": return ; } } function statusLabel(status: (typeof mockRuns)[0]["status"]) { switch (status) { case "done": return "Fertig"; case "executing": return "Läuft"; case "idle": return "Bereit"; case "error": return "Fehler"; } } export default function DashboardPage() { const balanceCents = 4320; const reservedCents = 180; const monthlyPoolCents = 5000; const usagePercent = Math.round( ((monthlyPoolCents - balanceCents) / monthlyPoolCents) * 100, ); return (
Überblick über deine Credits und laufende Generierungen.
Bei fehlgeschlagenen Jobs werden reservierte Credits automatisch freigegeben.
Step 2 von 4 —{" "} flux-schnell
{run.updated}