Repository navigation
Console: three-pane layout (app rail, app sidebar, view), Noite patterns - #37
Conversation
rail (app picker w/ monogram tiles, status dots, + popover), app sidebar (App views + Soon data items, collapsible, mobile drawer), main panel (overview/metrics/actions/deploys/logs/ errors/secrets/settings) on ?app=&t=&r= with pushState nav and 10s polling of the visible view. Monochrome SVG charts, inline SVG icon set, no style attributes, strict CSP preserved. Backend: GET /api/console/apps/:slug/secrets (names + updated_at only; 401/403/404 guards, owner-scoped). Tests: session + same-origin required, foreign==missing 404, names only ordered by name. Verified: bun build + validate clean; cargo fmt/clippy/test green; Playwright vs real router + seeded DB: 8 desktop + mobile shots in /tmp/outer-console-v2-*.png, zero CSP/ console/request failures, SPA nav without reload.
…rate precision, single-letter tiles
|
Caution Review failedThe pull request is closed. Walkthrough
Merge Risk:
|
|
CodeRabbit is out of free reviews (pending). Merging on green CI plus own checks: no auth changes beyond one read-only endpoint with the existing guards and 401/403/404 tests; live on |
* Re-adopt daisyUI 5 (Tailwind v4 plugin, console-only scope, @source '.'): custom 'outer' (default) + 'outer-dark' (prefersdark) themes matching the reference (soft gray canvas, white panels, near-black primary/neutral, radius-box 1.25rem, muted status colors). Components used: menu (sidebar, dropdown popovers), card, stats/stat, badge (badge-soft pills), table + table-fixed w/ colgroup, join (range picker), tabs-box (mobile view tabs), btn, drawer + drawer-toggle/content/side/overlay (mobile sidebar, md:drawer-open on desktop), dropdown, tooltip, skeleton, alert, collapse (deploy rows), kbd (Esc hints), loading, divider, indicator (rail status dots, error count), avatar (rail tiles, account). Deleted the custom CSS daisyUI replaces; kept layout glue, charts, log list, app-tile tints. * Lucide via the 'lucide' package's IconNode exports ([tag, attrs][] nodes rendered through a tiny Ilha component using ilha's h(); pinned 1.61.0): no CDN, no createIcons DOM scanning, CSP-safe. OuterMark stays custom. * Overflow impossible: truncate + min-w-0 on every flex/grid text child, table-fixed with column widths, break-words only for logs/deploy message (break-all for unbroken error runs), title on everything truncated. Main panel and grids fill available width (drawer-content min-w-0, stats stack below xl). * CSP unchanged, zero style= attributes. Verified: bun build + validate clean; Playwright Chromium vs real router with seeded absurd data (500-char summaries, 300-char paths, 63-char slugs, long errors/secrets): Overview/Actions/Errors/Deploys (expanded)/ Secrets at 1440 and 1024, mobile 390 drawer open in /tmp/outer-console-v3-*; no horizontal document scroll, no element box outside its panel, zero CSP violations and console errors. cargo fmt/clippy -D warnings/test green (438 passed). Harness test deleted after verification.
…41) * Console: daisyUI 5 components, Lucide icons, overflow armor (#37) * Re-adopt daisyUI 5 (Tailwind v4 plugin, console-only scope, @source '.'): custom 'outer' (default) + 'outer-dark' (prefersdark) themes matching the reference (soft gray canvas, white panels, near-black primary/neutral, radius-box 1.25rem, muted status colors). Components used: menu (sidebar, dropdown popovers), card, stats/stat, badge (badge-soft pills), table + table-fixed w/ colgroup, join (range picker), tabs-box (mobile view tabs), btn, drawer + drawer-toggle/content/side/overlay (mobile sidebar, md:drawer-open on desktop), dropdown, tooltip, skeleton, alert, collapse (deploy rows), kbd (Esc hints), loading, divider, indicator (rail status dots, error count), avatar (rail tiles, account). Deleted the custom CSS daisyUI replaces; kept layout glue, charts, log list, app-tile tints. * Lucide via the 'lucide' package's IconNode exports ([tag, attrs][] nodes rendered through a tiny Ilha component using ilha's h(); pinned 1.61.0): no CDN, no createIcons DOM scanning, CSP-safe. OuterMark stays custom. * Overflow impossible: truncate + min-w-0 on every flex/grid text child, table-fixed with column widths, break-words only for logs/deploy message (break-all for unbroken error runs), title on everything truncated. Main panel and grids fill available width (drawer-content min-w-0, stats stack below xl). * CSP unchanged, zero style= attributes. Verified: bun build + validate clean; Playwright Chromium vs real router with seeded absurd data (500-char summaries, 300-char paths, 63-char slugs, long errors/secrets): Overview/Actions/Errors/Deploys (expanded)/ Secrets at 1440 and 1024, mobile 390 drawer open in /tmp/outer-console-v3-*; no horizontal document scroll, no element box outside its panel, zero CSP violations and console errors. cargo fmt/clippy -D warnings/test green (438 passed). Harness test deleted after verification. * Console: dark brand tile and soft-gray selected row, as in the reference
Owner: the console follows a three-pane aesthetic (reference image: soft gray canvas, white rounded panels, thin outline icons, monochrome charts) and reuses Noite's console UX patterns.
Layout
title= slug · status); a+tile explaining that apps are created by your agent (with the MCP URL); Docs and the account menu at the bottom.From Noite (
apps/[id].tsx,lib/app-detail/{shell,panel,metrics,deploys,errors,events}.tsx): URL state?app=&t=&r=, client-side navigation withpushState/popstate(no reloads), keyed remount per app, expandable deploy rows with log, grouped errors with counts and first/last seen, an actions feed with Load more, copy buttons, skeletons and empty states, relative times with absolute on hover. SSE is not ported: the visible view polls every 10 s.Backend:
GET /api/console/apps/:slug/secrets→ names +updated_at, same guards as every console endpoint (session only, same-origin, owner-scoped 404); tests for 401/403/404 and names-only.daisyUI is dropped for a small console stylesheet of CSS variables (light, with a
prefers-color-schemedark variant); inline SVG icons; nostyle=attributes, so the hashed CSP is unchanged. Mobile: the rail stays, the app sidebar becomes a drawer.Live (
outer:1ae21db, Chromium, incognito, a 1-hour test session removed afterwards):/console/app?app=pwa-checkrenders with real data (79 requests, 3 visitors, 11.4 % error rate from the earlier malformed-POST test, p95 2.5 s); switching Metrics → Agent actions → Deploys → Secrets → Overview changes the URL without a reload; zero CSP violations. 438 tests pass; Blume build and validate pass.Not done: a previous-period comparison line (needs
metricsto accept a wider window).Summary by CodeRabbit