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}