Environment page: 17 layouts, logs panel or logs tabs

Static mockups for review. Each variant page has a scenario switcher at the top with five cases: a primary env on its own cluster, an ephemeral env with a template and cost tracking, a PR env in a GitHub stacked PR with a long auto-generated name, a Bunnyshell-hosted region, and a failed deploy with a long user-typed name. Use it to check how each layout handles different envs. The scenario carries over when you move between variants.

Round 5: all tabs mocked, component URLs, logs as tabs

Logs, pipeline logs and configuration (round 4)

Every variant now has a working right-side inspector. It's pinned under the sticky top, so the env header stays visible while you read logs. Drag its left edge to resize it, use ⤢ to maximise it, and press Esc or × to close it. All data is fake, and runtime logs stream live.

WhatTodayIn the mockups
Component runtime logsClick the small expand arrow on a row, pick a K8s resource, and the "K8s Logs" tab appears (ComponentsRow → KubernetesResourcesRow → ComponentDetailsHead). Selecting a component shows Pipeline Logs by default.Click any row, or use the always-visible Logs button on each row. Runtime logs are the default tab. ↑/↓ switch component and keep the panel open. The pod and container pickers, the "Previous container" option, Filter, Live/Pause, Wrap and Download are all in the panel.
All components at onceNot availableA header Logs button, or "All components" in the panel's picker, opens one merged stream with each line tagged by component.
Build logsThe component "Pipeline Logs" tabThe Build logs tab. Clicking the red Build failed status on a row jumps straight to the compiler error.
Env pipeline logsA separate route (/pipelines/:id) reached from "Last Pipeline Logs" / "View Pipeline"The same panel: a list of steps, with the failed step open and a link from each failed component to its build log. The full Pipelines tab still holds history.
ConfigurationThe header button goes to a separate page; the component "Configuration" tab shows that component's YAMLThe header button opens the env bunnyshell.yaml in the panel, with an out-of-sync banner when the template has changed. A component's Configuration tab shows its part of the file.
Table while the panel is openThe list is fixed at 640px and the right column always shows (a skeleton until you pick a component)The table is full width until you open something. While the panel is open, the repo, branch and commit stack under each component name, so nothing is lost.

A short pinned header pays off here: 12 (103px) and 11 (135px) leave far more height for logs than 05 (317–416px). The amber readout makes the difference visible. The panel stays open when you move between variants, so you can compare them side by side.

Goals (round 3)

Pinned height when scrolled (1440px wide, px)

Variant1-cluster primaryPR + template + costStacked PRHosted, stoppedFailed
00 today (only breadcrumbs pinned)5656565656
12 Condenses on scroll103103103103103
11 Breadcrumb row is the header135160135135176
09 Compact bar162162162162190
13 Facts beside breadcrumbs165165165165207
04 About sidebar (sidebar also pinned)201183183183256
02 One-line meta234280257234298
08 Connect panel235259239234296
06 Fact chips247319255219293
10 Attention + Overview256307287203289
01 / 03 / 07 / 05295–416: too tall to pin. These suit a header that scrolls away, or need to condense on scroll like 12.

Heights include the breadcrumb bar (56px) and tabs (about 45px).

The problem

Current environment header

Long names and PR stacks (applied to every variant)

PR envs get auto-generated names like online-boutique / demo/summer-sale:main / PR-7 / stack #10 1/3. Today the full string is the title and wraps at about 60 characters. The stack part is an underlined link that opens a dialog (ND-7700, GithubStackEnvironmentName). Every variant except 00 now uses one shared title treatment:

Open question: should the stack suffix come from the name at all? githubStack is on the entity already. If users rename the env, the regex finds nothing and only the field-based chip would still work.

What each field is for

FieldShown today whenWho needs it / how oftenProposal
Status + last pipelinealwayseveryone, every visitKeep, most prominent
Kubernetes cluster / Regionown cluster / hosted regioneveryone, oftenKeep
Last updatealwaysoftenKeep, with Created in the tooltip
Source (ephemeral of)ephemeral envoften, for PR envsOnly for ephemeral envs
Templatecreated from a templatesometimes; important when out of syncShow it, highlight when out of sync
MTD Costown cluster (even when not enabled)admins, financeOnly when tracking is on; otherwise an admin CTA
Remote Developmentnot a workspacedevelopersOnly when On
Labelsalways (incl. "No labels" row)filtering, organisingInline; empty state is just "+ Label"
Public IDalwaysCLI/API users, supportCopy action (⋯ menu, IDs popover, or Connect)
Namespacealwayskubectl users, supportCopy action or Connect panel
URL handlenot a workspacerarely; it is a settingURLs button and Settings
CreatedalwaysrarelyTooltip or details

Variants

00Current (baseline)

Today's header rebuilt with the real visibility rules, for comparison.

01Contextual strip

Same layout. It hides fields that say nothing, puts labels inline and moves the IDs to the right.

small effort~210px
02One-line meta

GitHub-style: the facts become one muted sentence under the name, and the strip is removed. IDs move to the ⋯ menu.

small effort~100px
03Key facts + details drawer

3–4 key facts in a row. "All details" opens a grouped drawer (Lifecycle / Runtime / Access), and the open state is remembered.

medium~170px
04About sidebar

A slim identity header. The facts move to a right-hand "About" column, so they cost no height.

large~80px
05Grouped cards

Cards for Status, Runtime, Origin and Cost, each with one large value. Cards without content don't appear.

medium~200px
06Fact chips

Icon chips coloured by meaning (amber for out of sync, green for remote dev on). All IDs sit in one "IDs" popover.

small–medium~120px
07Status-first hero

A coloured banner says in one sentence whether the env is OK, with the action that fits the state. Metadata becomes a small muted line.

medium~170px
08Connect panel

The IDs show up where they're used: copyable bns, kubectl and remote dev commands behind a "Connect" button.

medium~100px
09Compact sticky bar

A single 56px row that stays pinned with the tabs. Full details sit behind an ⓘ popover.

medium~56px
10Attention + Overview tab

The header shows only exceptions (failed, out of sync, remote dev on, cost off). Everything else moves to a new default Overview tab.

large~90px healthy
11 · newBreadcrumb row is the header

The env name is already the last crumb, so status, stack and actions move into the empty space to its right. One facts line, then tabs. No title block.

medium135–176px pinned
12 · newCondenses on scroll

A roomy header at the top. Once you scroll, the name, status and actions fold into the breadcrumb row. Only about 103px stays pinned.

medium103px pinned
13 · newFacts beside breadcrumbs

Key facts sit as grey chips in the empty breadcrumb space. Below is a single row with the name and actions. Chips drop off by priority when space runs out.

medium165px pinned
14 · logs as tabsLogs/Config tabs, column stays

Logs and Configuration are tabs next to Pipelines. Switching keeps the component column exactly where it is; status, repo, branch and commit become the log viewer or the YAML.

mediumyour idea
15 · logs as tabsView switch in Components

No new tabs. The Components tab gets a Details / Logs / Configuration switch; the column stays and the rest of the table changes.

small–medium
16 · logs as tabsLog tiles + config editor

The Logs tab shows up to 4 live tiles side by side. The Configuration tab is a file tree plus an editor with Validate and Diff vs template.

large
17 · logs as tabsMerged stream + filters

The Logs tab is one colour-tagged stream with component and level filters. The Configuration tab is the full YAML with an outline that jumps to and highlights each block.

medium

Can be combined

Heights are rough estimates at 1440px. Data is mock data. Field visibility follows neo-frontend/src/modules/environments/sharedComponents/details/headSummary.tsx. Workspaces (Image OS, size) are not mocked.