fix(ui): restore the top nav on the enterprise pages (#1636)#1648
Merged
Conversation
/enterprise and /enterprise/audit rendered no NavBar, stranding the user with
no way back to the platform but the browser's back button.
Trinity has no global chrome — App.vue renders only <router-view>, so every
authenticated view mounts NavBar itself. The enterprise views never did, so the
chrome silently vanished on those routes.
Both views now wrap their existing centred container in the house layout
(min-h-screen shell -> NavBar -> content), matching Settings.vue/Templates.vue.
The original `p-6 max-w-*` containers are untouched, so spacing is unchanged and
there is no double padding. NavBar's Enterprise link already keys its active
state off `$route.path.startsWith('/enterprise')`, so the highlight is correct
on both routes with no change needed.
/enterprise/client-portal deliberately keeps NO NavBar, and the route comment now
says so instead of leaving it ambiguous: it is a client-facing surface, not an
operator page — platform nav would offer a client links they cannot use. It sits
with /portal and /m as a standalone surface.
Scope: the issue floats hoisting NavBar into App.vue behind a `meta.standalone`
opt-out, but only if that were the cheaper fix. It isn't — 7 views render NavBar
today, so hoisting means touching ~12 files and risking double-nav on every
authenticated page. Left as the follow-up the issue describes.
Verified: production vite build succeeds; the built enterprise chunks
(Index/Audit) reference NavBar and the wrapper, while the Portal, ClientPortal,
and MobileAdmin chunks still contain no NavBar — the standalone surfaces are
unregressed.
Closes #1636
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
Author
vybe
approved these changes
Jul 16, 2026
vybe
left a comment
Contributor
There was a problem hiding this comment.
Validated via /validate-pr: mechanical NavBar mount on the two operator-facing enterprise pages (Audit, Index) — the diff is a wrap+re-indent, verified no template content changed; the client-portal route's standalone status is documented as deliberate. Security battery clean. Approving.
vybe
pushed a commit
that referenced
this pull request
Jul 16, 2026
Conflict: src/frontend/src/router/index.js — #1648 added a standalone-status comment inside the /enterprise/client-portal route block that this branch deletes. Resolved by keeping the deletion (the comment documented a route that no longer exists). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
/enterpriseand/enterprise/auditrendered no top nav — the user landed with no way back to the platform except the browser's back button.Root cause is as the issue describes: Trinity has no global chrome.
App.vuerenders only<router-view>, so every authenticated view mountsNavBaritself. The enterprise views never did, so the chrome silently vanished on those routes.Changes
views/enterprise/Index.vue,views/enterprise/Audit.vue— wrap the existing centred container in the house layout (min-h-screenshell →NavBar→ content), matchingSettings.vue/Templates.vue. The originalp-6 max-w-*containers are untouched, so spacing is unchanged and there's no double padding.router/index.js— document the/enterprise/client-portalintent (see below).Active highlight needed no change. NavBar's Enterprise link already keys off
$route.path.startsWith('/enterprise'), so it highlights correctly on both routes once NavBar renders./enterprise/client-portaldeliberately keeps NO NavBar, and the route comment now says so rather than leaving it ambiguous: it's a client-facing surface, not an operator page — platform nav would offer a client links they can't use. It sits alongside/portaland/m. (Ambiguity was the actual bug here: the missing comment is why a reader couldn't tell "standalone by design" from "same defect as its siblings".)Scope
The issue floats hoisting NavBar into
App.vuebehind ameta.standaloneopt-out — "unless it's the cheaper fix". It isn't: 7 views render NavBar today, so hoisting means touching ~12 files, addingmeta.standaloneto every standalone route, and risking double-nav on every authenticated page. Left as the follow-up the issue describes.Verification
Production
vite buildsucceeds, and the built output confirms the wiring rather than just the intent:Index-*.js(containsenterprise-landing) → referencesNavBar✅Audit-*.js(containsaudit-dashboard) → referencesNavBar✅Portal-*.js,ClientPortal-*.js,MobileAdmin-*.js→ noNavBar✅ (standalone surfaces unregressed, AC Setup improvements #5)Both wrappers use the same
min-h-screen bg-gray-100 dark:bg-gray-900shell as the rest of the platform, so dark mode inherits the existing behaviour (AC #7).Not visually confirmed in a browser — worth stating plainly. This repo's
docker-compose.override.ymldeliberately repoints the frontend dev server at thetrinity-portal-cleanupworktree ("so Vite serves the old-client-portal cleanup at localhost:8001"), so localhost:8001 doesn't serve this branch, and I didn't want to disturb that setup. Verification here is build + bundle-level. A reviewer with the override reverted (docker compose up -d frontend) can eyeball/enterpriseand/enterprise/auditin a few seconds.Interaction with #1637
PR #1637 removes
/enterprise/client-portalentirely. If it lands first, the route comment added here disappears with the route — no conflict in substance, and theIndex.vue/Audit.vuefixes are independent of it.Test Plan
vite buildsucceeds (production config)p-6 max-w-*containers unchanged — no double padding/enterprise+/enterprise/auditlight/dark with the frontend mount pointed at this branchCloses #1636