Skip to content

fix(frontend): dashboard audit polish — inspector defaults, empty states, OSS theme toggle - #5678

Merged
jog1t merged 1 commit into
mainfrom
nk/dashboard-audit-fixes
Sep 8, 2026
Merged

fix(frontend): dashboard audit polish — inspector defaults, empty states, OSS theme toggle#5678
jog1t merged 1 commit into
mainfrom
nk/dashboard-audit-fixes

Conversation

@NicholasKissel

Copy link
Copy Markdown
Member

Description

Follow-ups from a design/flow audit of the OSS dashboard and actor Inspector. Small, self-contained polish; no API or schema changes. Product-constant and brand SVG changes were deliberately left out to avoid conflicting with #5633 and #5672.

Inspector

  • State is the default tab (Workflow for workflow actors). Every actor has a SQLite DB, so Database always won before. The dashboard now canonicalizes the tab order advertised by the runner's inspector bundle (orderInspectorTabs), so older runners get the same order without a rebuild; custom tabs keep their advertised order after the built-ins.
  • Database tab: user tables first, _rivet_* tables grouped under an "Internal" label, first user table selected by default.
  • Connections tab: table (ID, type, hibernatable, params, state) with a proper empty state instead of a raw object tree.
  • Queue tab: empty state matches Schedules (icon + heading + hint).
  • Metadata: Key rendered as copyable mono text instead of a JSON tree; "Connectable since" / "Sleeping since" labels.

Dashboard shell

  • OSS top bar gets a light/dark toggle (cloud keeps it in the user dropdown).
  • ?n=counter (plain string instead of the serialized array) renders instead of a Zod error page. Normalized in validateSearch because the search schema is an intersection with z.record, which rejects a per-field transform.
  • Provider/runner copy no longer references "Rivet Cloud" in OSS; no-providers alert uses a plug icon and "Add Provider"; settings drawer description is flavor-aware; empty-row text is consistent between the Providers and Runners tables.
  • Live badge dot uses primary instead of destructive.
  • "No more Actors to load." only shows once more than one page has been loaded.

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How Has This Been Tested?

  • tsc --noEmit in frontend/: same 42 pre-existing error lines before and after (none in touched files).
  • biome check on all touched files: formatting clean; remaining lint findings are on untouched lines.
  • Visual verification against a local engine (rivetkit 2.3.15) with seeded actors, OSS flavor. Tab reorder verified on the real iframe path; the in-iframe tab components (Database/Queue/Connections) are compiled into the rivetkit NAPI bundle, so they were verified by temporarily forcing the dashboard's legacy inline path (not committed).
  • Cloud flavor compiles; not rendered (no cloud login available).

Before / after

Default tab + list footer
default

Database tab
database

Connections tab (the 2 vs 1 count is from re-running the seed client between shots, not a UI difference)
connections

Queue empty state
queue

Metadata
metadata

Namespace settings (empty namespace) + theme toggle
settings

?n=counter
n-string

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes

…tes, OSS theme toggle

- Default actor tab is State (Workflow for workflows); Database only leads for
  raw-SQLite actors. The dashboard now canonicalizes the tab order advertised
  by the runner's inspector bundle so older runners get the same order.
- Database tab: user tables first, _rivet_* tables grouped under "Internal",
  and the first user table is selected by default.
- Connections tab: table (ID, type, hibernatable, params, state) with a proper
  empty state instead of a raw object tree; Queue empty state matches Schedules.
- Metadata: Key rendered as copyable mono text instead of a JSON tree.
- OSS top bar gets a light/dark toggle (cloud keeps it in the user menu).
- ?n=counter (plain string) no longer renders a Zod error page.
- Provider/runner copy no longer references Rivet Cloud in OSS; settings drawer
  description is flavor-aware; Live badge uses primary instead of destructive.
- "No more Actors to load." only shows after more than one page.

Amp-Thread-ID: https://ampcode.com/threads/T-01a072ad-3c9e-744e-b4b9-a8997aae8809
Co-authored-by: Nicholas Kissel <nicholas@rivet.gg>
@railway-app

railway-app Bot commented Sep 8, 2026

Copy link
Copy Markdown

🚅 Deployed to the actors-pr-5678 environment in rivet-frontend

Service Status Web Updated
kitchen-sink 😴 Sleeping (View Logs) Web Sep 8, 2026 at 9:10 pm UTC
frontend-cloud 😴 Sleeping (View Logs) Web Sep 8, 2026 at 9:07 pm UTC
frontend-inspector 😴 Sleeping (View Logs) Web Sep 8, 2026 at 9:07 pm UTC
ladle ✅ Success (View Logs) Web Sep 8, 2026 at 9:02 pm UTC
mcp-hub ✅ Success (View Logs) Web Sep 8, 2026 at 9:00 pm UTC
website ❌ Build Failed (View Logs) Web Sep 8, 2026 at 8:59 pm UTC

@railway-app
railway-app Bot temporarily deployed to rivet-frontend / actors-pr-5678 September 8, 2026 20:59 Destroyed
@jog1t
jog1t merged commit 33c420d into main Sep 8, 2026
14 of 17 checks passed
@jog1t
jog1t deleted the nk/dashboard-audit-fixes branch September 8, 2026 21:12
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.

3 participants