Skip to content

The UI at a glance

Everything outside /login, /invite, and the full-screen operation console renders inside the shell — a tactical layout with four persistent zones.

The four zones

1. Top bar (.tac-topbar)

Pinned to the top, always visible.

  • Menu button — hamburger on mobile, chevron on desktop. Collapses the left nav.
  • Brand — ARGUS logo + wordmark. Click to return to /.
  • Page title — current route’s translated title (e.g. app.overview, app.operations), driven from route.data.title via ActivationEnd events.
  • System status chipONLINE / OFFLINE.
  • Theme toggle — light ↔ dark.
  • Notifications bell — unread-count badge, capped at 99+.
  • Avatar + name + callsign chip — opens the profile dropdown (org name, role badge, Profile, Settings, About, Help, Sign out).

2. Left navigation (.tac-sidebar)

Collapsible rail. Remembers its state in localStorage under sar.sidebar.collapsed. On mobile (≤768px) it becomes a swipe-to-close overlay drawer.

  • MAIN — Overview, Operations (with a live count badge), Mapping.
  • TOOLS — Profile, Settings, Teams, Joystick Debug (desktop-only, shown when WebHID / WebSerial / Gamepad is present).
  • ADMIN — admin-only. /admin/org, /admin/users, /admin/assets, /admin/venues, /admin/dji, /admin/webhooks, /admin/workflows, /admin/roles, /admin/subscription.
  • SYSTEM — About, Help.

Each item gates on PermissionService — if you can’t view Operations the link doesn’t render at all.

3. Right content area (.tac-content)

<router-outlet>. Everything under the shell route lands here. The Operation Console (/ops/:id/live) is a separate top-level route that replaces the shell with a full-viewport tile grid.

4. Floating overlays

  • Help FAB (<app-help-fab>) — bottom-right. Popover with help centre, shortcuts, FAQ.
  • Tour overlay (<app-tour-overlay>) — guided-tour spotlight.
  • Notification panel + profile dropdown mount near the top bar with backdrops.

Key routes

URLWhat it is
/Dashboard — your home
/operationsThe list of operations you can access
/operations/newCreate-operation wizard
/operations/:idMission detail
/operations/:id/editEdit (owner / admin only)
/ops/:id/liveOperation Console — full-screen live view
/teamsTeams you belong to
/mappingMapping — ODM photogrammetry
/profileYour profile
/settingsTheme, audio, input
/admin/orgOrganisation management (admin+)
/admin/usersUsers + invites (manager+)
/admin/assetsAsset inventory (admin+)
/admin/venuesVenues / indoor sites (admin / venue_creator)
/admin/djiDJI Docks (admin+)
/admin/webhooksWebhooks (admin+)
/admin/workflowsWorkflows (admin+)
/admin/rolesCustom roles (superadmin only)
/admin/subscriptionPlan + billing (superadmin only)
/helpIn-app help centre
/aboutBuild info

Legacy /missions redirects to /operations for compatibility.

Themes

Today: light and dark (theme-light / theme-dark on <html>, toggled by ThemeService, persisted under sar.theme). Default is dark. A third tactical variant for night command posts is aspirational — the service is currently a two-state toggle. Switch from the top-bar theme icon or Settings → Theme.

Keyboard shortcuts

Full list: Keyboard shortcuts. Shell essentials:

  • Esc — close profile dropdown / notification panel (wired in shell via @HostListener('document:keydown.escape')).
  • Alt+1 — Dashboard.
  • Alt+2 — Operations.
  • Alt+H — Help.
  • ? — shortcuts overlay.
  • / — focus global search.

/, ?, and Alt+N are documented in the shortcuts reference but rely on per-surface binding — aspirational at the shell level until a global shortcut service ships. Inside the Operation Console the full flight control set (Space hover, T takeoff, L land, M PTT) is live.

Language

English + Spanish. I18nService picks: saved preference (sar.lang) → browser → English. Switch from Settings → Profile or the avatar menu.

Offline behaviour

The status chip flips to OFFLINE on navigator.onLine + Firestore disconnect.

  • Reads continue from the Firestore local cache for anything already loaded.
  • Writes (mission edits, chat, flags) are queued by the Firestore SDK and flush on reconnect.
  • The Operation Console requires live TACLINK; on disconnect it shows a banner and auto-retries — see TACLINK connection.