Skip to content

feat(hub): align hub UI with e-INFRA design system and UI/UX mocks - #132

Merged
Fidasek009 merged 8 commits into
masterfrom
hub-ui-design-system-improvements
Aug 13, 2026
Merged

feat(hub): align hub UI with e-INFRA design system and UI/UX mocks#132
Fidasek009 merged 8 commits into
masterfrom
hub-ui-design-system-improvements

Conversation

@Fidasek009

Copy link
Copy Markdown
Collaborator

Summary

Redesigns the JupyterHub user-facing pages (hub/ui/) around the e-INFRA design system and the UI/UX team's mocks:

  • Server start/home: /hub/home is the single stopped-server page; not_running client-side redirects to it and only renders failed spawns and implicit-spawn countdowns. Four-state hero (stopped/starting/stopping/running).
  • Pending pages: spawn_pending and stop_pending share one hero visual language — status icon circle, H1, progress/clock hint, separator, collapsed event log. Both transitions route through the canonical /hub/spawn-pending/:user (the hub picks the template); never to the dying user-server proxy URL.
  • Spawn-failure states: both failure surfaces (hub-rendered not_running, EventSource-driven spawn_pending) follow the mock — reassuring body copy, lg primary Try again, "Contact support" → https://github.com/CERIT-SC/mddash/issues, raw failure detail in a collapsed log. The failure transition is aria-live-announced.
  • Shared hero chrome: components/Hero.tsx (PageHero, StatusIcon, HeroHeading, WaitHint, DetailsLog, LogEntry, SupportNote) — zero duplicated markup across the four pages.
  • Header now uses DS NavigationMenu primitives; AuthedLayout wraps pages in DS Content.
  • Bumps @e-infra/design-system to ^0.1.9 in hub/ui and landing.

Verification: make fix, make type-check (ty across Python services, tsc across all three UIs), hub/ui production build with entry validation, make test — all green.

Known upstream dependency: DS typography components (Muted, Lead, Small) currently render in full-foreground color despite their docs; fixed in CERIT-SC/design-system#107. No local overrides were added — the next DS release just picks up the fix.

Co-authored-by: Kimi K3

Fidasek009 and others added 3 commits August 12, 2026 13:30
…gation

- home.tsx: stopped state renders hero-lite (icon circle, H1, Start my
  server, helper caption); not_running.tsx redirects there unless the
  spawn failed or implicit spawn is pending
- HubHeader: NavigationMenu primitives, "Tokens" renamed to "Get Token"
- Layouts: page body wrapped in DS Content instead of ad-hoc <main>
- Bump @e-infra/design-system to 0.1.9 in hub/ui and landing

Co-Authored-By: kimi-k3 <noreply@moonshot.ai>
- home.tsx: one hero composition for stopped/starting/stopping/running
  (success circle when up, dominant Open my server, small error Stop);
  card and status badges removed
- transitions redirect to spawn-pending for any pending event — the hub
  picks spawn_pending or stop_pending there; never navigate to the user
  server URL while stopping (dying proxy would serve errors)
- spawn_pending.tsx: mock-aligned hero with real stream percentage,
  clock hint, collapsed event log, failure variant with retry
- stop_pending.tsx: same layout, indeterminate, polling untouched

Co-Authored-By: kimi-k3 <noreply@moonshot.ai>
…ero chrome

Both failed states (hub-rendered not_running, EventSource-driven
spawn_pending) render the mock layout: status icon, H1 + reassuring Lead
copy, lg primary Try again, support link to GitHub issues, and a
collapsed event log holding the raw failure detail. Shared hero chrome
lives in components/Hero.tsx with zero duplicated markup.

Co-Authored-By: kimi-k3 <noreply@moonshot.ai>
@Fidasek009 Fidasek009 self-assigned this Aug 12, 2026
Fidasek009 and others added 5 commits August 12, 2026 19:22
No-mock audit of the remaining hub pages: spawn shows the failed state
instead of silently auto-retrying when the hub renders it with a spawn
error; token revokes confirm via AlertDialog; admin uses DS Link/Skeleton
and aligns its Stop button with home; shared PageBody for token/admin;
failure copy constant consumed by all three failed states.

Co-Authored-By: kimi-k3 <noreply@moonshot.ai>
… revoke

The spawn.html Jinja variable was error_html_message, which JupyterHub
never passes (handlers use html_error_message) — rich failure detail was
a dead branch. Server-token revokes now use the same confirmed
RevokeButton as the other token tables.

Co-Authored-By: kimi-k3 <noreply@moonshot.ai>
admin_access is only injected by the admin page handler in JupyterHub
stock context, so the Admin nav link vanished everywhere else; templates
now fall back to user.admin from the default context. The icon-bearing
card header pattern (six pages, drifting variants) is one
IconCardHeader component.

Co-Authored-By: kimi-k3 <noreply@moonshot.ai>
AlertDialogAction for revoke and delete-user confirmations now carries
the DS error button style instead of the default primary look.

Co-Authored-By: kimi-k3 <noreply@moonshot.ai>
Co-Authored-By: kimi-k3 <noreply@moonshot.ai>
@Fidasek009
Fidasek009 merged commit 9c51497 into master Aug 13, 2026
12 checks passed
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