Skip to content

feat(ui): redesign log viewer with structured request rows#65

Merged
roziscoding merged 4 commits into
mainfrom
feat/log-viewer-redesign
Jul 4, 2026
Merged

feat(ui): redesign log viewer with structured request rows#65
roziscoding merged 4 commits into
mainfrom
feat/log-viewer-redesign

Conversation

@roziscoding

@roziscoding roziscoding commented Jul 4, 2026

Copy link
Copy Markdown
Owner

Why

The log viewer rendered every line identically — time · TRACE · "Request completed" · ⌄ — with all the useful detail (method, path, status, latency) hidden behind the chevron. A flood of identical TRACE request lines drowned the one line that mattered, and nothing was scannable.

What changed (logs viewer only)

  • Structured request rows — for HTTP logs, the buried http.* / durationMs fields are pulled inline as aligned monospace columns: verb-colored method, path, status (colored by 2xx/3xx/4xx/5xx), and latency. The redundant "Request completed" message is dropped.
  • Latency lane — a log-scaled, threshold-colored micro-bar on the right edge. Read down the column it becomes a latency profile, so a slow request is instantly findable.
  • Severity rail — warn/error/fatal light a colored left rail and level word, surfacing real problems out of the quiet TRACE flood. Since request logs are all TRACE, the status/latency columns carry their signal instead.
  • Folded repeats — consecutive identical lines collapse into one row with a ×N counter (avg/max latency shown on expand). Toggleable via "Collapse repeats".
  • Filter — free-text filter across path, method, status, and message.
  • Better detail — expansion shows a flattened key→value table with copy and raw-JSON toggle instead of a bare dump.

Files

  • apps/ui/app/pages/logs.vue — rewrote the view; streaming/reconnect logic preserved
  • apps/ui/app/components/LogRow.vue — new; row + detail panel
  • apps/ui/app/utils/logFormat.ts — new; level/method/status/latency/grouping helpers
  • apps/ui/app/assets/css/main.css — one added line: --font-mono (JetBrains Mono, self-hosted by @nuxt/fonts, system-mono fallback)
  • apps/ui/.env.example — ridealong: documents the UI BFF env vars

No other page is touched. font-mono is only used by the log stream; every other view stays on Inter.

Verification

nuxt typecheck and eslint both clean.

Greptile Summary

This PR redesigns the UI log viewer to make request logs easier to scan.

  • Structured HTTP rows with method, path, status, and latency columns.
  • Latency micro-bars and severity rails for faster visual scanning.
  • Repeat collapsing, text filtering, and richer expanded details.
  • A monospace log font token and UI environment example file.

Confidence Score: 5/5

This looks safe to merge.

  • No blocking issues found in the changed code.

Reviews (3): Last reviewed commit: "fix(ui): surface unrecognised log severi..." | Re-trigger Greptile

Turn the uniform "Request completed" TRACE wall into a scannable stream:
pull HTTP method/path/status/latency inline as aligned monospace columns,
add a log-scaled latency lane and a severity rail so slow or failed lines
surface out of the trace flood, fold consecutive identical lines into a
single row with a repeat counter, and add a path/status/message filter.
Row expansion now shows a key-value field table with copy and raw-JSON
instead of a bare JSON dump.
Comment thread apps/ui/app/utils/logFormat.ts Outdated
An unrecognised severity string was cast straight to LevelKey, missing
LEVEL_STYLES and mis-rendering as INFO — a high-priority line could lose
its label and rail. Only trust severity when it's a known label; otherwise
fall through to the numeric pino level.
Comment thread apps/ui/app/utils/logFormat.ts
When a record carries a custom severity string with no numeric level, show
its own uppercased label with a lit rail (and index it for filtering) rather
than collapsing it to INFO — so a high-priority line can't pass as normal.
@roziscoding roziscoding merged commit 64816cc into main Jul 4, 2026
10 checks passed
@roziscoding roziscoding deleted the feat/log-viewer-redesign branch July 4, 2026 16:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant