Skip to content

Frontend: Station Bot administration shell with guild selector, feature overview, and health status #233

@GitAddRemote

Description

@GitAddRemote

User Story

As a Station administrator, I need a dedicated Station Bot administration area in the Station UI so that I can choose a Discord guild, see which bot features are enabled for it, and navigate quickly to the correct configuration screen without hunting through unrelated app pages.

Definition of Done

  • A new Station frontend route exists for Station-Bot administration with authenticated, permission-gated access
  • The Station-Bot nav entry, route, and dashboard entry surfaces are hidden when the current user lacks the required Station-Bot admin permissions; direct navigation still fails closed with a clear unauthorized state
  • The shell reflects the initial role model for this milestone: station_super_admin, guild_owner, guild_admin, and guild_member
  • The page includes guild selection for multi-guild bot deployments and does not assume a single-server install
  • The shell shows an overview of all currently implemented bot administration domains verified in code: verification, nominations, manufacturing, automation, exec hangar, station timer, runtime controls, and delegated guild-access/support state
  • The shell shows current health/availability signals: read-only mode, last successful sync/read, downstream Station-Bot availability, and per-domain validation/drift warnings returned by the Station backend
  • The shell supports entry from the dashboard portlet expand/fullscreen affordance with the relevant guild context preselected
  • The shell routes into child screens without full-page reload or duplicate data bootstrap code
  • Frontend tests cover auth gating, hidden navigation, guild switching, loading states, empty-state handling, support-mode rendering, and degraded downstream-health rendering
  • pnpm typecheck passes

Acceptance Criteria

  • A user without the required Station permission for bot administration cannot access the Station Bot administration route and does not see a nav link to it
  • When the bot is connected to multiple guilds, switching guild context updates the visible guild-scoped settings without losing operator/global settings context
  • The overview clearly distinguishes guild-scoped domains from operator/global domains
  • If Station-Bot is unavailable, the shell still renders with a prominent degraded-state banner rather than crashing or spinning indefinitely
  • If Station-Bot is in read-only mode, the shell shows that state clearly before the admin attempts any mutation
  • If the user has only guild-scoped access, operator-only tabs and sections are hidden rather than rendered as faux-editable controls
  • If the current user is in super-admin support mode, the shell shows a persistent visible banner identifying the target guild and impersonated context
  • If the shell is opened from the dashboard portlet, the relevant guild is already selected rather than forcing the user to re-pick context

Technical Elaboration

This issue is the frontend frame for the epic, not the per-domain forms themselves.

Recommended route shape:

  • /admin/station-bot
  • Child routes or tabs for:
    • overview
    • verification
    • nominations
    • manufacturing
    • automation
    • exec-hangar
    • station-timer
    • runtime
    • guild-access

Recommended page structure:

  • Header with selected guild, bot connectivity state, read-only badge, last sync timestamp, and current effective admin context
  • Summary cards for each domain with status indicators such as Configured, Missing required IDs, Globally disabled, Drift detected, Runtime only, or Support Mode
  • Left-nav or tabbed navigation into the detailed administration pages from the child stories
  • Shared data loader + context provider so child pages do not each re-implement bootstrap fetch logic

The shell should consume the normalized backend contract created in the foundation issue and the permission model defined in #242, rendering product-facing groupings rather than raw bot DTOs.

Because the current Station architecture treats Station-Bot as a separate service, the shell must handle these states explicitly:

  • Bot reachable and synced
  • Bot reachable but returned validation errors for one or more domains
  • Bot unreachable / timed out
  • Bot reachable but Station lacks permission for mutation
  • Bot in read-only mode
  • Station user session expired or downstream Station-Bot auth unhealthy
  • Super-admin support impersonation active

Design Elaboration

This should feel like an administration console, not a generic CRUD page.

The overview exists to answer four questions immediately:

  • Am I allowed to be here?
  • Which guild am I editing?
  • Which bot features are configured vs incomplete?
  • Is the bot healthy enough to accept changes right now?

When support mode is active, there is a fifth question: Am I acting as support inside a customer guild right now? The shell should answer that unmistakably.


Parent Epic: #231
Depends on: #232, #241, #242
Blocks: #234, #235, #236, #237, #238, #239, #240, #243, #244, #245

Metadata

Metadata

Assignees

Labels

configConfiguration and feature flagsenhancementNew feature or requestfrontendFrontend app and dashboardui-uxUser interface and experienceuser-storyEnd-user facing feature story

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions