feat: Infrastructure section with 6 sub-sections (Builds, Databases, Services, Environment, Domains, Logs)

- Sidebar Infrastructure replaced with 6 named rows linking to /infrastructure?tab=
- New /infrastructure page with left sub-nav and per-tab content panels:
  Builds — lists deployed Coolify apps with live status
  Databases — coming soon placeholder
  Services — coming soon placeholder
  Environment — variable table with masked values (scaffold)
  Domains — lists configured domains with SSL status
  Logs — dark terminal panel, ready to stream
- Dim state on rows reflects whether data exists (e.g. no domains = dim)

Made-with: Cursor
This commit is contained in:
2026-03-06 14:18:03 -08:00
parent 39167dbe45
commit 3770ba1853
2 changed files with 395 additions and 15 deletions

View File

@@ -350,21 +350,48 @@ export function VIBNSidebar({ workspace }: VIBNSidebarProps) {
{/* ── Infrastructure ── */}
<SectionHeading label="Infrastructure" collapsed={collapsed} />
{infraApps.length > 0 ? (
infraApps.map(app => (
<SectionRow
key={app.name}
icon="◈"
label={app.domain ?? app.name}
href={app.domain ? `https://${app.domain}` : undefined}
collapsed={collapsed}
/>
))
) : project?.giteaRepo ? (
<SectionRow icon="◈" label="Gitea connected" href={project.giteaRepoUrl} collapsed={collapsed} />
) : (
<SectionRow icon="◈" label="Not deployed" dim collapsed={collapsed} />
)}
<SectionRow
icon="⬡"
label="Builds"
href={`${base}/infrastructure?tab=builds`}
dim={infraApps.length === 0}
collapsed={collapsed}
/>
<SectionRow
icon="◫"
label="Databases"
href={`${base}/infrastructure?tab=databases`}
dim
collapsed={collapsed}
/>
<SectionRow
icon="◎"
label="Services"
href={`${base}/infrastructure?tab=services`}
dim
collapsed={collapsed}
/>
<SectionRow
icon="≡"
label="Environment"
href={`${base}/infrastructure?tab=environment`}
dim
collapsed={collapsed}
/>
<SectionRow
icon="◬"
label="Domains"
href={`${base}/infrastructure?tab=domains`}
dim={!infraApps.some(a => a.domain)}
collapsed={collapsed}
/>
<SectionRow
icon="≈"
label="Logs"
href={`${base}/infrastructure?tab=logs`}
dim={infraApps.length === 0}
collapsed={collapsed}
/>
<SectionDivider />