"use client"; import { Layers, Lock, ScanFace, ShieldCheck } from "lucide-react"; // Static preview of the Environments concept. Not wired to storage yet — // this page is the contract we show clients before the runtime work // lands. When the storage / routing actually exists, replace the three // demo tiles with live env records from the API. const ENVS: { name: string; description: string; accent: string }[] = [ { name: "DEV", description: "Auto-deploy on every push, smoke evals only, no approval gates.", accent: "border-foreground/60", }, { name: "STAGING", description: "Full eval suite, optional approval, canary or progressive rollout.", accent: "border-amber-400/60", }, { name: "PROD", description: "Strict policy gates, human approval, audit log, SLO-backed rollback.", accent: "border-rose-400/60", }, ]; export default function EnvironmentsPage() { return (
Environments

Environments

Each environment owns its runtime target, credentials, secrets, scaling, and approval policy. Pipelines reference envs by name; promotion moves an artifact from one env’s pipeline to the next.

{/* Three env tiles */}
{ENVS.map((e) => (
{e.name} tier

{e.description}

))}
{/* Concept rows */}
{/* Footer */}
); } function ConceptRow({ icon: Icon, title, body, }: { icon: React.ComponentType<{ className?: string }>; title: string; body: string; }) { return (
{title}

{body}

); }