import { getSessionUser } from "@/lib/session"; import { getTranslations, getFormatter } from "next-intl/server"; import { redirect } from "next/navigation"; import { listTenants } from "@/lib/k8s"; import { getTenantRequestByOrgId } from "@/lib/db"; import { Card, CardHeader } from "@/components/ui/card"; import { StatusBadge } from "@/components/ui/status-badge"; import { UsageDisplay } from "@/components/dashboard/usage-display"; import { OnboardingFlow } from "@/components/onboarding/onboarding-flow"; import { formatDateTime } from "@/lib/format"; import Link from "next/link"; export default async function DashboardPage() { const user = await getSessionUser(); if (!user) redirect("/login"); const t = await getTranslations("dashboard"); const tAdmin = await getTranslations("admin"); const f = await getFormatter(); const allTenants = await listTenants(); // Platform users see overview of all tenants if (user.isPlatform) { const phaseCount = allTenants.reduce>((acc, t) => { const phase = t.status?.phase ?? "Pending"; acc[phase] = (acc[phase] || 0) + 1; return acc; }, {}); return (

{t("title")}

{t("welcome", { name: user.name || user.email })}

{tAdmin("title")} {/* Summary cards */}
{tAdmin("allTenants")} {allTenants.length} {Object.entries(phaseCount).map(([phase, count]) => ( {phase}
{count}
))}
{/* Tenant table */} {allTenants.length > 0 && (
{allTenants.map((tenant) => ( ))}
{tAdmin("name")} {tAdmin("phase")} {tAdmin("packages")} {tAdmin("created")}
{tenant.metadata.name}
{tenant.spec.displayName && (
{tenant.spec.displayName}
)}
{tenant.spec.packages?.join(", ") || "—"} {formatDateTime(tenant.metadata.creationTimestamp, f)} {t("manage")} →
)}
); } // Regular user: find their tenant const myTenant = allTenants.find( (t) => t.metadata.labels?.["pieced.ch/zitadel-org-id"] === user.orgId ); // No tenant → check for existing request, show onboarding flow if (!myTenant) { const existingRequest = await getTenantRequestByOrgId(user.orgId); // Treat "deleted" as no request — customer can re-onboard const initialState = !existingRequest || existingRequest.status === "deleted" ? "no_request" : existingRequest.status; return (

{t("title")}

{t("welcome", { name: user.name || user.email })}

); } const tenantName = myTenant.metadata.name; return (

{t("title")}

{t("welcome", { name: user.name || user.email })}

{/* Instance status card */}
{t("instanceStatus")}
{myTenant.spec.agentName && ( {myTenant.spec.agentName} )}
{myTenant.spec.packages && myTenant.spec.packages.length > 0 && (
{myTenant.spec.packages.map((pkg) => ( {pkg} ))}
)}
{/* Usage — no teamId passed, backend resolves from session */}

{t("usage")}

{/* Link to tenant detail */} {t("manage")}
); }