Web UX Design

Web UX Design

Dashboard UX, page flows, and interaction patterns.

Sentinel AI — Industrial Surveillance Dashboard

Complete UX/UI Design Document

Version: 1.0
Date: June 2025
Target Platform: Desktop-optimized web application (React/Next.js + FastAPI)
Target User: Non-technical security operators and administrators
Camera System: CP PLUS DVR (8 cameras)


Table of Contents

  1. Design System Foundations
  2. Global Design Elements
  3. Page-by-Page UX Specifications
    • 3.1 Login Page
    • 3.2 Dashboard (Home)
    • 3.3 Live Camera View
    • 3.4 Alert Center
    • 3.5 Recent Detections
    • 3.6 Person Gallery
    • 3.7 Unknown Persons Review Queue
    • 3.8 Person Profile Page
    • 3.9 Suspicious Activity Timeline
    • 3.10 Search & Filter Page
    • 3.11 Watchlist Management
    • 3.12 AI Vibe Settings Page
    • 3.13 Training Review Page
    • 3.14 System Health Page
    • 3.15 Notification Settings
    • 3.16 Admin User Management
    • 3.17 Camera Management
    • 3.18 Retention & Storage Settings
  4. Component Specifications
  5. User Flows
  6. Interaction Patterns
  7. Responsive Behavior
  8. Implementation Notes

1. Design System Foundations

1.1 Color Palette

Core Colors (Dark Mode Default)

Token Hex Usage
--bg-primary #0B0E14 Main background, deepest layer
--bg-secondary #131821 Cards, panels, elevated surfaces
--bg-tertiary #1B2230 Input fields, hover states, nested panels
--bg-elevated #232D3F Modals, dropdowns, popover menus
--border-subtle #2A3447 Card borders, dividers
--border-active #3A4A63 Focused element borders
--text-primary #E8ECF1 Headings, primary labels
--text-secondary #9BA3B4 Body text, descriptions
--text-muted #5E6A7E Timestamps, placeholders, disabled text
--text-inverse #0B0E14 Text on accent-colored buttons

Accent Colors

Token Hex Usage
--accent-primary #3B82F6 Primary action buttons, active nav, links
--accent-primary-hover #2563EB Primary button hover
--accent-primary-glow rgba(59, 130, 246, 0.15) Glow effects, subtle highlights
--accent-secondary #0EA5E9 Secondary actions, info indicators
--accent-tertiary #6366F1 Tertiary accent, tags, badges

Semantic Status Colors

Token Hex Usage
--status-success #22C55E Online, OK, acknowledged, resolved
--status-success-bg rgba(34, 197, 94, 0.12) Success badge background
--status-warning #EAB308 Warning, pending, moderate severity
--status-warning-bg rgba(234, 179, 8, 0.12) Warning badge background
--status-danger #EF4444 Critical alert, offline, error, high severity
--status-danger-bg rgba(239, 68, 68, 0.12) Danger badge background
--status-info #3B82F6 Informational, blue alerts
--status-info-bg rgba(59, 130, 246, 0.12) Info badge background
--status-unknown #6B7280 Unknown state, not configured

Severity Gradient (Alerts)

Level Color Icon
Critical #EF4444 (red) AlertTriangle
High #F97316 (orange) AlertCircle
Medium #EAB308 (yellow) AlertTriangle
Low #3B82F6 (blue) Info
Info #6B7280 (gray) Info

Camera Status Colors

Status Color Indicator
Online + Recording #22C55E green Pulsing green dot
Online + Idle #3B82F6 blue Solid blue dot
Offline #EF4444 red Solid red dot with X
Reconnecting #EAB308 yellow Pulsing yellow dot
Disabled #6B7280 gray Gray dot

1.2 Typography

Element Font Size Weight Line Height Letter Spacing
Display (page titles) Inter 28px 600 1.2 -0.02em
H1 (section titles) Inter 22px 600 1.3 -0.01em
H2 (card titles) Inter 16px 600 1.4 0
H3 (sub-headings) Inter 14px 600 1.4 0
Body Inter 14px 400 1.5 0
Body Small Inter 13px 400 1.5 0
Caption Inter 12px 400 1.4 0.01em
Label Inter 11px 500 1.2 0.03em
Mono (timestamps, IDs) JetBrains Mono 12px 400 1.4 0

1.3 Spacing Scale

Token Value Usage
--space-1 4px Tight gaps, icon padding
--space-2 8px Small gaps, compact padding
--space-3 12px Card internal padding small
--space-4 16px Card padding, standard gaps
--space-5 20px Section gaps
--space-6 24px Large section spacing
--space-8 32px Page-level padding
--space-10 40px Major section dividers
--space-12 48px Layout-level spacing

1.4 Border Radius

Token Value Usage
--radius-sm 6px Buttons, badges, small tags
--radius-md 8px Input fields, small cards
--radius-lg 12px Cards, panels, modals
--radius-xl 16px Large cards, feature panels
--radius-full 9999px Pills, avatars, circular buttons

1.5 Shadows & Elevation

Token Value Usage
--shadow-sm 0 1px 2px rgba(0,0,0,0.3) Subtle lift
--shadow-md 0 4px 12px rgba(0,0,0,0.4) Cards, dropdowns
--shadow-lg 0 8px 24px rgba(0,0,0,0.5) Modals, popovers
--shadow-glow-green 0 0 12px rgba(34,197,94,0.3) Online status glow
--shadow-glow-red 0 0 12px rgba(239,68,68,0.3) Critical alert glow
--shadow-glow-blue 0 0 12px rgba(59,130,246,0.3) Active element glow

1.6 Z-Index Scale

Layer Z-Index Element
Background 0 Base layout
Content 10 Page content
Sticky headers 100 Fixed nav elements
Dropdowns 200 Select menus, tooltips
Modals 300 Dialog overlays
Toasts 400 Notification banners
Critical overlay 500 Full-screen alerts

2. Global Design Elements

2.1 Sidebar Navigation

Layout: Fixed left sidebar, collapsible, 260px expanded / 72px collapsed
Background: --bg-secondary with right border --border-subtle
Behavior:

  • Hovering the collapsed sidebar (64px) shows a tooltip with the label
  • Clicking the hamburger toggle expands/collapses with smooth 250ms ease transition
  • Collapsed state shows only icon (24x24px), centered in 72px width
  • Expanded state shows icon + label, with 12px spacing between icon and text

Navigation Items (top to bottom):

Icon Label Route Badge
LayoutDashboard Dashboard / None
Video Live View /live None
Bell Alert Center /alerts Alert count (red pill)
ScanEye Recent Detections /detections None
Users Person Gallery /gallery None
UserQuestion Unknown Review /unknowns Pending count (yellow pill)
ClockAlert Suspicious Activity /timeline None
Search Search & Filter /search None
ShieldAlert Watchlists /watchlists None
Sparkles AI Vibe Settings /ai-settings None
Brain Training Review /training Pending count
Activity System Health /health Status dot
Settings Settings /settings

Settings Submenu (expandable):

  • Notification Settings (BellRing)
  • Camera Management (Camera)
  • Retention & Storage (HardDrive)
  • Admin Users (UserCog) — only visible to admin role

Bottom Section:

  • Dark/Light toggle (small icon button)
  • User avatar + name (collapsed: just avatar)
  • Logout button (LogOut icon)

Active State:

  • Background: --accent-primary at 10% opacity
  • Left border: 3px solid --accent-primary
  • Icon color: --accent-primary
  • Text color: --text-primary
  • Font weight: 600

Hover State:

  • Background: --bg-tertiary
  • Transition: 150ms ease

2.2 Top Bar

Height: 56px
Background: --bg-secondary
Border: Bottom 1px --border-subtle
Layout: Flex row, space-between

Left Section:

  • Hamburger toggle (visible on tablet/mobile)
  • Page title (H1 style) — updates based on current route
  • Breadcrumb trail (on nested pages): Home > Section > Page

Center Section:

  • Live clock: HH:MM:SS format, mono font, --text-secondary
  • Date: DD MMM YYYY, caption style below the time

Right Section:

  • Search quick access (magnifying glass icon button)
  • Notification bell with red dot indicator for unread alerts
  • Critical alert indicator (pulsing red when any critical alert is unacknowledged)
  • User avatar (36px circle) with online status dot

2.3 Toast Notifications

Position: Top-right corner, 16px from edges
Max visible: 5 toasts, stack vertically with 8px gap
Auto-dismiss: 5 seconds for info/success, persistent for critical until acknowledged
Animation: Slide in from right (300ms), fade out (200ms)

Toast Types:

Type Background Border Icon
Success rgba(34,197,94,0.1) #22C55E CheckCircle green
Error rgba(239,68,68,0.1) #EF4444 XCircle red
Warning rgba(234,179,8,0.1) #EAB308 AlertTriangle yellow
Info rgba(59,130,246,0.1) #3B82F6 Info blue
Critical rgba(239,68,68,0.2) #EF4444 with glow AlertOctagon red pulsing

Toast Content:

  • Icon (left)
  • Title (bold, one line)
  • Description (optional, 2 lines max)
  • Timestamp (caption, right)
  • Close button (X, top right)
  • Action button (optional, e.g., "View Alert")

2.4 Modal/Dialog Pattern

Overlay: Black at 60% opacity, blur 4px backdrop
Modal container: --bg-elevated, border-radius --radius-lg, shadow --shadow-lg
Max width variants:

  • Small: 400px (confirmations, simple forms)
  • Medium: 560px (standard forms, detail views)
  • Large: 800px (complex forms, image viewers)
  • X-Large: 1100px (full data tables, comparison views)
  • Fullscreen: 95vw x 95vh (camera grid, video playback)

Modal Structure:

  1. Header: Title (H1) + close button (X)
  2. Body: Scrollable content area (max-height: 70vh)
  3. Footer: Action buttons (right-aligned)
    • Primary action: filled button
    • Secondary: outlined button
    • Destructive: red outlined/filled

2.5 Card Component Pattern

Standard Card:

  • Background: --bg-secondary
  • Border: 1px solid --border-subtle
  • Border-radius: --radius-lg (12px)
  • Padding: --space-4 (16px)
  • Hover: border transitions to --border-active, subtle lift
  • Optional: top colored accent border (4px) for status cards

Stat Card (Dashboard):

  • Standard card base
  • Top row: Icon (in colored circle, 40px) + value (large number, 28px bold)
  • Bottom row: Label (caption) + trend indicator (optional)
  • Background gradient subtle tint matching the icon color

Alert Card:

  • Left edge: 4px severity color strip
  • Top-right: Severity badge + timestamp
  • Thumbnail: Left side, 120x80px rounded
  • Content: Alert type, camera name, person name (if known)
  • Bottom: Action buttons (Acknowledge, View Details, Ignore)

2.6 Badge/Pill Component

Variant Background Text Border
Online --status-success-bg #22C55E none
Offline --status-danger-bg #EF4444 none
Warning --status-warning-bg #EAB308 none
Info --status-info-bg #3B82F6 none
Neutral --bg-tertiary --text-secondary none
Tag (selectable) transparent --text-secondary 1px --border-subtle
Tag (selected) --accent-primary-glow --accent-primary 1px --accent-primary

2.7 Button Variants

Variant Background Text Border Hover
Primary --accent-primary white none --accent-primary-hover
Secondary transparent --text-primary 1px --border-subtle --bg-tertiary
Ghost transparent --text-secondary none --bg-tertiary
Danger --status-danger white none darken 10%
Danger Ghost transparent --status-danger none --status-danger-bg
Icon Button --bg-tertiary --text-secondary none --bg-elevated

Sizes:

  • Small: 28px height, 8px horizontal padding, 12px font
  • Medium: 36px height, 16px horizontal padding, 14px font (default)
  • Large: 44px height, 24px horizontal padding, 14px font

2.8 Form Input Pattern

Text Input:

  • Height: 40px
  • Background: --bg-tertiary
  • Border: 1px solid --border-subtle
  • Border-radius: --radius-md
  • Text: --text-primary
  • Placeholder: --text-muted
  • Focus: border --accent-primary, subtle blue glow
  • Error state: border --status-danger, red glow
  • Label: above input, --text-secondary, 12px, 500 weight, 8px bottom margin
  • Helper text: below input, --text-muted, 12px

Select/Dropdown:

  • Same base as text input
  • Dropdown arrow icon on right
  • Dropdown list: --bg-elevated, shadow --shadow-md, max-height 240px

Toggle Switch:

  • Track: 44x24px, --bg-tertiary (off) / --accent-primary (on)
  • Thumb: 20x20px white circle
  • Transition: 150ms ease

Segmented Control (AI Settings):

  • Container: --bg-tertiary, border-radius --radius-full, padding 4px
  • Option: padding 8px 16px, border-radius --radius-full
  • Active: --accent-primary background, white text
  • Inactive: transparent, --text-secondary
  • Transition: 150ms ease

2.9 Tooltip Pattern

  • Background: --bg-elevated
  • Border: 1px --border-subtle
  • Text: --text-secondary, 12px
  • Padding: 8px 12px
  • Border-radius: --radius-md
  • Arrow: 6px triangle pointing to trigger
  • Delay: 400ms before appearing
  • Max width: 280px

2.10 Empty State Pattern

  • Centered in container
  • Icon: 64px, --text-muted
  • Title: H2, "Nothing here yet" or contextual message
  • Description: Body, --text-secondary, max 2 lines
  • Action: Optional CTA button to create/add

3. Page-by-Page UX Specifications

3.1 Login Page

Route: /login
Layout: Full-screen centered, single column
Background: Gradient from #0B0E14 to #131821, subtle radial glow from center (--accent-primary at 3% opacity)

Visual Structure:

+----------------------------------------------------------+
|  [Company Logo - centered, 80px wide]                     |
|  "Sentinel AI" - Display font, centered                   |
|  "Secure Surveillance Dashboard" - Body, muted           |
|                                                           |
|  +----------------------------------------------------+  |
|  | Login Card (400px max width, centered)              |  |
|  |                                                     |  |
|  |  "Welcome Back" - H1                                |  |
|  |  "Sign in to your account" - Body muted              |  |
|  |                                                     |  |
|  |  [Username Label]                                   |  |
|  |  [_________________________] [User icon]            |  |
|  |                                                     |  |
|  |  [Password Label]              [Show/Hide toggle]   |  |
|  |  [_________________________] [Lock icon]            |  |
|  |                                                     |  |
|  |  [x] Remember me         Forgot password?           |  |
|  |                                                     |  |
|  |  [========== Sign In ==========] Primary button     |  |
|  |                                                     |  |
|  |  ----------------- OR -----------------              |  |
|  |                                                     |  |
|  |  [======= Sign In with Company SSO =======]         |  |
|  |                                                     |  |
|  +----------------------------------------------------+  |
|                                                           |
|  "Secured by Sentinel AI v2.1" - Caption, muted          |
+----------------------------------------------------------+

Elements Detail:

  1. Company Branding Area:

    • Top-center: Company logo (configurable, default Sentinel AI logo)
    • Logo size: 80px width, auto height
    • Below logo: "Sentinel AI" in 24px weight 700
    • Tagline: "Intelligent Surveillance Platform" in 14px --text-muted
    • Below: version badge "v2.1" in pill format
  2. Login Card:

    • Background: --bg-secondary
    • Border: 1px --border-subtle
    • Border-radius: --radius-xl (16px)
    • Padding: 32px
    • Shadow: --shadow-md
    • Max-width: 400px
  3. Username Field:

    • Label: "Username or Email"
    • Placeholder: "Enter your username"
    • Left icon: User from lucide
    • Auto-focus on page load
    • Tab order: 1
  4. Password Field:

    • Label: "Password"
    • Placeholder: "Enter your password"
    • Left icon: Lock
    • Right: Eye/EyeOff toggle for show/hide
    • Tab order: 2
  5. Remember Me:

    • Checkbox, default unchecked
    • Label: "Keep me signed in for 7 days"
  6. Forgot Password:

    • Text link, --accent-primary
    • Click: opens modal with email input for reset link
  7. Sign In Button:

    • Full width, Primary variant, Large size
    • Loading state: spinner + "Signing in..."
    • Success: brief green flash, redirect to /
    • Error: shake animation + red error message below
  8. MFA Flow (Optional):

    • After successful credentials, if MFA enabled:
    • Card transitions to MFA view (fade animation)
    • Title: "Two-Factor Authentication"
    • Description: "Enter the 6-digit code from your authenticator app"
    • 6 individual digit input boxes (auto-tab between)
    • "Verify" button
    • "Back to login" link
  9. Footer:

    • "Don't have an account? Contact your administrator"
    • Copyright text, 12px muted

Error States:

  • Invalid credentials: "Invalid username or password. Please try again." in red below the form
  • Account locked: "Account temporarily locked. Contact administrator." with warning icon
  • Session expired (redirected from app): Yellow banner at top "Your session has expired. Please sign in again."

3.2 Dashboard (Home)

Route: /
Layout: Sidebar + Top Bar + Content Grid
Content Area: CSS Grid, auto-fill with gaps

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "Dashboard"        Clock    [Avatar]  |
|         |------------------------------------------------|
| [Nav]   | +----------+ +----------+ +----------+ +-----+|
|         | | Cameras  | |Detection | | Pending  | |Unkno+|
|         | | 8/8      | |   24     | |   3      | |   7  |
|         | | Online   | |  Today   | | Alerts   | |Today |
|         | +----------+ +----------+ +----------+ +-----+|
|         |                                                |
|         | +--------------------------------------------+|
|         | | Live Camera Grid (2x4)                      ||
|         | | +----------+ +----------+ +----------+ +--+||
|         | | | CAM-01   | | CAM-02   | | CAM-03   | |..||| 
|         | | | [LIVE]   | | [LIVE]   | | [LIVE]   | |..|||
|         | | | Lobby    | | Gate A   | | Warehouse| |..|||
|         | | | [Record] | | [Record] | | [Record] | |..|||
|         | | +----------+ +----------+ +----------+ +--+||
|         | | +----------+ +----------+ +----------+ +--+||
|         | | | CAM-05   | | CAM-06   | | CAM-07   | |..||| 
|         | | | Office   | | Parking  | | Hallway  | |..|||
|         | | | [Offline]| | [LIVE]   | | [LIVE]   | |..|||
|         | | +----------+ +----------+ +----------+ +--+||
|         | +--------------------------------------------+|
|         |                                                |
|         | +--------------------+ +--------------------+||
|         | | Recent Alerts       | | Quick Actions      |||
|         | | [Alert 1 - Critical]| | [Go to Live View]  |||
|         | | [Alert 2 - High]    | | [View All Alerts]  |||
|         | | [Alert 3 - Medium]  | | [Review Unknowns]  |||
|         | | [Alert 4 - Low]     | | [Open Settings]    |||
|         | | [Alert 5 - Info]    | |                    |||
|         | +--------------------+ +--------------------+||
+----------------------------------------------------------+

Section 1: Stats Row (Top)

4 stat cards in a horizontal row, each taking ~25% width on desktop.

Card Icon Color Value Label Trend
Cameras Online Video Green "8/8" "Online" None
Today's Detections ScanEye Blue e.g. "24" "Detections today" +12% vs yesterday
Pending Alerts Bell Orange e.g. "3" "Need attention" Pulsing if >0
Unknown Today UserQuestion Purple e.g. "7" "Unknown persons" None
  • Each card: Standard card component with left colored icon circle (40px, colored bg at 15% opacity)
  • Value: 28px bold --text-primary
  • Label: 12px --text-secondary
  • Trend: 11px green/red arrow with percentage

Section 2: Live Camera Grid

  • Container: Standard card spanning full width
  • Header: "Live Feeds" (H1) + layout toggle (2x4 / 1x8 / grid icons) + "View All" link
  • Grid: CSS Grid, grid-template-columns: repeat(4, 1fr), gap 12px
  • Each cell: Camera feed card (see below)

Camera Feed Card (in grid):

  • Aspect ratio: 16:9
  • Background: --bg-tertiary with "No Signal" placeholder if offline
  • Live feed: RTSP stream via WebRTC/HLS, fills container
  • Top bar overlay (gradient from top, semi-transparent):
    • Left: Recording indicator (red pulsing dot when recording)
    • Center: Camera name (e.g., "CAM-01 Lobby") in white 12px
    • Right: Status badge (Online/Offline/Reconnecting)
  • Bottom bar overlay (gradient from bottom):
    • Left: Timestamp overlay (mono font, 11px)
    • Right: Expand icon button (Maximize2, 24px white)
  • Hover state: Shows action bar with:
    • Snapshot button (Camera icon)
    • Mute/unmute audio (Volume2/VolumeX)
    • Fullscreen button
  • Border: 2px solid transparent, transitions to --accent-primary on hover
  • Offline state: Gray "No Signal" text with camera icon, solid red left border

Section 3: Bottom Row

Split 60/40:

Left: Recent Alerts Card (60%)

  • Header: "Recent Alerts" + badge count + "View All" link
  • List of 5 most recent alert mini-cards
  • Each mini-card:
    • 4px left border colored by severity
    • Icon: Alert type icon (person detected, unknown person, motion, etc.)
    • Text: Alert description (1 line)
    • Time: Relative ("2 min ago")
    • Hover: full row highlight, click opens alert detail modal
  • Footer: "View Alert Center" link

Right: Quick Actions Card (40%)

  • Header: "Quick Actions"
  • Vertical list of action buttons:
    • "Open Live View" (Video icon, primary)
    • "Review Alerts" (Bell icon, secondary)
    • "Check Unknown Persons" (UserQuestion icon, secondary)
    • "AI Settings" (Sparkles icon, secondary)
    • "System Health" (Activity icon, ghost)
  • Each button: full width, icon left + label, medium size

3.3 Live Camera View

Route: /live
Layout: Full-width content, optional hide sidebar for maximum space
Purpose: Dedicated page for viewing all camera feeds with full controls

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "Live Camera View"   [Layout] [Full]  |
|         |------------------------------------------------|
| [Nav]   | Layout Toggle: [2x4] [1x8] [3x3] [Customize]  |
|         |                                                |
|         | +----------+ +----------+ +----------+ +--+   |
|         | | CAM-01   | | CAM-02   | | CAM-03   | |CAM|  |
|         | | [LIVE]   | | [LIVE]   | | [OFFLINE]| |04 |  |
|         | | Lobby    | | Gate A   | | Warehouse| |   |  |
|         | | [Record] | | [Record] | |          | |   |  |
|         | +----------+ +----------+ +----------+ +--+   |
|         | +----------+ +----------+ +----------+ +--+   |
|         | | CAM-05   | | CAM-06   | | CAM-07   | |CAM|  |
|         | | Office   | | Parking  | | Hallway  | |08 |  |
|         | | [LIVE]   | | [LIVE]   | | [LIVE]   | |   |  |
|         | |          | |          | |          | |   |  |
|         | +----------+ +----------+ +----------+ +--+   |
|         |                                                |
|         | Bandwidth: 12.4 Mbps | CPU: 34% | Latency:45ms|
+----------------------------------------------------------+

Layout Options:

Layout Grid Best For
2x4 (default) 2 rows x 4 cols 8 cameras, balanced view
1x8 Single row, 8 cols Wide monitors, quick scanning
3x3 3x3 with center emphasized 8 cameras + 1 enlarged
Custom User-defined Personalized preference

Camera Feed (Enhanced from Dashboard):

Each camera cell is larger than on the dashboard, with more controls visible:

  • Size: Fills grid cell, 16:9 aspect ratio maintained
  • Top overlay bar (always visible):
    • Left: Recording indicator + "REC" text when recording (red, pulsing)
    • Center: Camera name in bold white text
    • Right: HD/SD quality badge + Online status dot
  • Bottom overlay bar (on hover):
    • Left: Timestamp
    • Center: Camera location
    • Right: Control buttons:
      • Camera — Take snapshot (saves to gallery, toast confirmation)
      • Volume2/X — Toggle audio
      • Maximize2 — Expand to modal fullscreen
      • Settings — Quick camera settings
  • Double-click: Expands to fullscreen modal view
  • Drag & drop: Reorder cameras (in custom layout mode)
  • Right-click context menu:
    • "Open in Fullscreen"
    • "Take Snapshot"
    • "View Camera Details"
    • "Copy Stream URL"
    • "Configure Zones"

Fullscreen Single Camera Modal:

  • Opens as fullscreen modal (95vw x 95vh)
  • Camera feed fills the modal
  • Floating control bar at bottom (auto-hide after 3s of mouse idle):
    • Play/Pause
    • Snapshot
    • Record toggle
    • Digital zoom (1x, 2x, 4x)
    • Pan controls (if PTZ supported)
    • Quality selector (Auto/HD/SD)
    • Close button
  • Camera info overlay (top-left):
    • Name, location, resolution, frame rate, bitrate
  • Alert history sidebar (collapsible, right side):
    • List of recent alerts for this camera
    • Click to jump to that timestamp

Bottom Status Bar:

  • Fixed at bottom of content area
  • Background: --bg-secondary with top border
  • Height: 36px
  • Left: Total bandwidth consumption (live updating, mono font)
  • Center: System CPU usage percentage
  • Right: Stream latency (ms), color-coded (<100ms green, <300ms yellow, >300ms red)

3.4 Alert Center

Route: /alerts
Layout: Sidebar + two-panel layout (filters left, alert list right)
Purpose: Central hub for all security alerts and notifications

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "Alert Center" [Filter] [Export] [..] |
|         |------------------------------------------------|
| [Nav]   | +----------+ +--------------------------------+|
|         | | FILTERS  | | Alert Cards List               ||
|         | |          | |                                ||
|         | | Severity:| | [CRITICAL] CAM-01 Lobby  2m ago||
|         | | [x]Critical | Unknown person detected        ||
|         | | [x] High   | [Ack] [View] [Ignore]          ||
|         | | [x] Medium |                                ||
|         | | [x] Low    | [HIGH] CAM-03 Warehouse 15m ago||
|         | |            | Motion detected in restricted    ||
|         | | Camera:    | [Ack] [View] [Ignore]          ||
|         | | [All v]    |                                ||
|         | |            | [MED] CAM-05 Office     1h ago ||
|         | | Type:      | Person: John Smith (Employee)   ||
|         | | [x] Unknown| [Ack] [View] [Ignore]          ||
|         | | [x] Motion |                                ||
|         | | [x] Face   +--------------------------------+|
|         | | [x] Night  | Page 1 [2] [3] ... [25]        |
|         | |            |                                |
|         | | Time Range:| +------+ +------+ +------+    |
|         | | [Today v]  | |Batch | |Clear | |Export|    |
|         | |            | |Ack   | |All   | |CSV   |    |
|         | | Status:    | +------+ +------+ +------+    |
|         | | [x]Pending |                                |
|         | | [x]Ack     |                                |
|         | | [x]Resolved|                                |
|         | +----------+                                |
+----------------------------------------------------------+

Left Panel: Filters (280px fixed width)

Filter sections with collapsible headers:

  1. Severity Filter:

    • Checkboxes for each severity level
    • Color-coded: Critical (red), High (orange), Medium (yellow), Low (blue), Info (gray)
    • "Select All" / "Clear All" links
    • Badge count per severity showing available alerts
  2. Camera Filter:

    • Multi-select dropdown: "All Cameras" or select individual
    • Each option shows camera name + online status dot
  3. Alert Type Filter:

    • Checkboxes: Unknown Person, Known Person Detected, Motion, Night Mode, Watchlist Match, System
    • Each with representative icon
  4. Time Range:

    • Preset buttons: "Last Hour", "Today", "Last 24h", "Last 7 Days", "Custom"
    • Custom: Date/time picker inputs
  5. Status Filter:

    • Checkboxes: Pending, Acknowledged, Resolved, Ignored
    • Default: Pending + Acknowledged checked

Right Panel: Alert List

  • Header: Total alerts count + sort dropdown (Newest First / Oldest First / Severity)
  • Alert cards: Vertical list with 12px gap

Alert Card Design:

+----------------------------------------------------------+
| || Alert Card                                            |
| || 4px left border (severity color)                      |
| |+-----------------------------------------------------+|
| || [THUMB] | Alert Title (bold)        [Severity Badge] ||
| || 120x80  | Description (1-2 lines)   [Time badge]    ||
| ||         | Camera: CAM-01 Lobby                      ||
| ||         | Person: Unknown #42  or  John Smith        ||
| |+-----------------------------------------------------+|
| || [Acknowledge] [View Details] [Ignore dropdown]       ||
| +-------------------------------------------------------+
  • Thumbnail: Left side, 120x80px, rounded --radius-md
    • Shows detected person face or event snapshot
    • Play icon overlay if video available
  • Severity Badge: Top-right, colored pill with icon + text
  • Actions: Bottom row of buttons
    • "Acknowledge" — Secondary button, marks as acknowledged
    • "View Details" — Opens detail modal
    • "Ignore" — Ghost button with dropdown for "Ignore Once" / "Ignore This Person" / "Ignore This Camera"

Alert Detail Modal (Medium-Large, 800px):

+----------------------------------------------------------+
| [Alert #1234]                          [X]               |
| Critical — Unknown Person Detected                       |
|----------------------------------------------------------|
| +------------------------+ +----------------------------+|
| |                        | | Details                    ||
| |  [Large Image/Video]   | |                            ||
| |                        | | Camera: CAM-01 Lobby       ||
| |                        | | Time: 2025-06-15 14:32:05  ||
| |                        | | Severity: CRITICAL         ||
| |                        | | Type: Unknown Person       ||
| |                        | | Confidence: 94.2%          ||
| |                        | |                            ||
| |                        | | Person Detected:           ||
| |                        | | [Face thumbnail] Unknown   ||
| |                        | |                            ||
| |                        | | Similar Matches:           ||
| |                        | | [Face 1] 87% [Face 2] 72%|||
| |                        | |                            ||
| |                        | | Actions:                   ||
| |                        | | [Name This Person]         ||
| |                        | | [Add to Watchlist]         ||
| |                        | | [Mark as False Positive]   ||
| +------------------------+ +----------------------------+|
|----------------------------------------------------------|
| [Acknowledge] [Resolve] [Escalate] [Ignore]              |
+----------------------------------------------------------+

Batch Actions:

  • Checkbox on each alert card for multi-select
  • Bottom bar appears when any selected: "Acknowledge All (N)", "Resolve All (N)", "Export Selected"

3.5 Recent Detections

Route: /detections
Layout: Sidebar + filter bar + detection grid
Purpose: Browse all recent person detections with face thumbnails

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "Recent Detections"         [Avatar]  |
|         |------------------------------------------------|
| [Nav]   | [All] [Known] [Unknown] [Today] [Custom...]   |
|         | Filter: [Camera v] [Person v] [Sort v]         |
|         |                                                |
|         | +--------+ +--------+ +--------+ +--------+    |
|         | | [Face] | | [Face] | | [Face] | | [Face] |    |
|         | | John   | |Unknown | | Jane   | |Unknown |    |
|         | | 14:32  | | #12    | | 14:28  | | #15    |    |
|         | | CAM-01 | | CAM-03 | | CAM-02 | | CAM-01 |    |
|         | +--------+ +--------+ +--------+ +--------+    |
|         | +--------+ +--------+ +--------+ +--------+    |
|         | | [Face] | | [Face] | | [Face] | | [Face] |    |
|         | | ...    | | ...    | | ...    | | ...    |    |
|         | +--------+ +--------+ +--------+ +--------+    |
|         |                                                |
|         | [Load More] or Infinite Scroll                 |
+----------------------------------------------------------+

Filter Bar (sticky top):

  • Tab pills: "All Detections" / "Known Persons" / "Unknown Persons" / "Watchlist Matches"
  • Camera filter dropdown
  • Person search (autocomplete for known persons)
  • Sort: "Newest First" / "Oldest First" / "Confidence High-Low"
  • Date range: quick buttons (Today / Yesterday / Last 7 Days / Custom)

Detection Card:

+------------------+
| [Face Image]      |
| Square aspect     |
| ratio, fills card |
|                   |
| [Watchlist badge] |
+------------------+
| Name: John Smith  |
| or "Unknown #12"  |
| 14:32:05          |
| CAM-01 Lobby      |
| [View] [Name]     |
+------------------+
  • Face image: Square, 1:1 aspect ratio, fills top portion
  • Border: 3px bottom border color-coded:
    • Green: Known employee
    • Blue: Known visitor
    • Orange: Unknown person
    • Red: Watchlist match
  • Name: 14px bold, green for known, orange for unknown
  • Time: Mono font, 12px, --text-muted
  • Camera: 12px, --text-secondary
  • Actions (bottom, on card hover):
    • "View Details" — Opens detection detail modal
    • "Name This Person" — Only for unknowns, opens naming modal
    • "Add to Gallery" — Quick add

Detection Detail Modal:

  • Large face image (left, ~50%)
  • Details panel (right):
    • Person name or "Unknown"
    • Detection time, camera, confidence
    • Full-frame image (the wider camera view showing context)
    • If known: link to person profile, last 5 sightings
    • If unknown: "Name This Person" prominent button + similar known persons suggestions

"Name This Person" Flow:

  1. Click "Name This Person" button (only shown for unknowns)
  2. Modal opens with:
    • Large face image on left
    • Form on right:
      • "Name" text input (required)
      • "Role" select (Employee / Visitor / Vendor / Contractor / Other)
      • "Department" text input (optional)
      • "Company" text input (optional)
      • "Notes" textarea (optional)
      • "Tags" multi-select (predefined: VIP, Contractor, Temporary, etc.)
    • "Similar existing persons" section below:
      • Shows top 5 face matches from gallery with confidence %
      • "This is [Name]" button for each — merges detection into existing person
    • Bottom: "Save & Create Profile" primary button + "Cancel"
  3. On save: Toast "Profile created for [Name]" + detection card updates in place

3.6 Person Gallery

Route: /gallery
Layout: Sidebar + search/filter bar + person grid
Purpose: Directory of all known persons with search and filtering

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "Person Gallery"                     |
|         |------------------------------------------------|
| [Nav]   | [Search by name...] [Role v] [Tag v] [Sort v] |
|         | [Employee] [Visitor] [Vendor] [Contractor] [+]| 
|         |                                                |
|         | +--------+ +--------+ +--------+ +--------+    |
|         | | [Face] | | [Face] | | [Face] | | [Face] |    |
|         | | John   | | Jane   | | Mike   | | Sarah  |    |
|         | | Smith  | | Doe    | | Johnson| | Lee    |    |
|         | |Employee| |Visitor | |Vendor  | |Employee|    |
|         | |IT Dept | |Sales   | |ABC Inc | |HR      |    |
|         | +--------+ +--------+ +--------+ +--------+    |
|         | +--------+ +--------+ ...                      |
|         |                                                |
|         | Showing 48 persons    [1] [2] [3] ...          |
+----------------------------------------------------------+

Search & Filter Bar:

  • Search input: "Search by name, role, or department..." with search icon
  • Role filter: All / Employee / Visitor / Vendor / Contractor / Other
  • Tag filter: Multi-select pills for tags (VIP, Temporary, Restricted, etc.)
  • Sort: Name A-Z / Name Z-A / Most Recent Sightings / Most Sightings / Date Added
  • View toggle: Grid (default) / List

Person Card (Grid View):

+------------------+
| [Face Image]      |
| 1:1 square,      |
| object-fit cover  |
+------------------+
| John Smith        |  <- Full name, 14px bold
| Employee          |  <- Role, 12px, colored pill
| IT Department     |  <- Department, 12px muted
| ABC Company       |  <- Company, 12px muted (optional)
| Last seen: 2h ago |  <- Timestamp, 11px muted
| [View Profile]    |  <- Button appears on hover
+------------------+
  • Card size: ~200px width, auto height
  • Face image: 1:1, --radius-lg on top corners only
  • Role badge: Colored pill below the image
    • Employee: Blue pill
    • Visitor: Green pill
    • Vendor: Purple pill
    • Contractor: Orange pill
  • Hover: Card lifts slightly, "View Profile" button appears at bottom
  • Click anywhere: Opens person profile page

Person Card (List View):

  • Compact horizontal row
  • Face thumbnail: 48x48 circle
  • Name, role, department, last seen, sightings count
  • Actions: View, Edit, Quick Actions dropdown

Add Person Button:

  • Floating action button (FAB) bottom-right on mobile, top-right "+ Add Person" on desktop
  • Opens modal: "Add New Person to Gallery"
    • Upload reference photo(s) — drag & drop zone or file picker, multiple allowed
    • Name, role, department, company, notes, tags
    • "Create Profile" button

3.7 Unknown Persons Review Queue

Route: /unknowns
Layout: Sidebar + filter bar + unknown cluster list
Purpose: Review and process unknown person clusters detected by the system

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "Unknown Persons Review"    [Badge:3] |
|         |------------------------------------------------|
| [Nav]   | 12 unknown clusters need review                |
|         | [Auto-Review] [Mark All Reviewed] [Settings]   |
|         |                                                |
|         | Sort: [Recent First v]  Filter: [Camera v]     |
|         |                                                |
|         | +------------------------------------------+   |
|         | | [Face] Unknown Cluster #12    [12 sightings]  |
|         | | First seen: 3 days ago                     |   |
|         | | Last seen: 2 hours ago    CAM-01, CAM-03   |   |
|         | | [Name This Person] [Mark Reviewed] [Ignore]|   |
|         | +------------------------------------------+   |
|         |                                                |
|         | +------------------------------------------+   |
|         | | [Face] Unknown Cluster #8     [45 sightings]  |
|         | | First seen: 2 weeks ago                    |   |
|         | | Last seen: 1 day ago      CAM-02, CAM-04   |   |
|         | | [Name This Person] [Merge] [Mark Reviewed] |   |
|         | +------------------------------------------+   |
|         |                                                |
|         | +------------------------------------------+   |
|         | | [Face] Unknown Cluster #3     [8 sightings]   |
|         | | ...                                        |   |
|         | | [Name] [Mark Reviewed] [Ignore] [Merge v]  |   |
|         | +------------------------------------------+   |
+----------------------------------------------------------+

Header Stats:

  • Large number: Total unknown clusters pending review
  • Subtext: "clusters need your attention"
  • Action buttons: "Auto-Review" (AI suggestions), "Mark All Reviewed" (with confirmation)

Unknown Cluster Card:

+----------------------------------------------------------+
| +----------+ Unknown Cluster #42                          |
| |          | 23 sightings over 5 days                     |
| | [Rep     | First: Jun 10, 14:32  |  Last: Jun 15, 09:15|
| |  Face]   | Cameras: CAM-01, CAM-03, CAM-05            |
| |          | Often seen: Weekdays, 9AM-6PM              |
+----------+------------------------------------------------
| [Name This Person]  [Mark Reviewed]  [Ignore]  [Merge v] |
+----------------------------------------------------------+
  • Representative face: 80x80px square, left side
  • Cluster ID: "Unknown Cluster #N" (auto-generated)
  • Sighting count: Badge with number
  • Time range: First seen / Last seen
  • Camera list: Which cameras this person was seen on
  • Pattern insight: AI-generated pattern (e.g., "Often seen: Weekdays, 9AM-6PM")

Actions per Cluster:

Action Button Effect
Name This Person Primary Opens the naming modal (same as in Recent Detections)
Mark Reviewed Secondary Moves to "Reviewed" state, removes from queue
Ignore Ghost Ignores this cluster, won't alert again, confirmation required
Merge Dropdown Merge with another unknown cluster or existing person

Merge Flow:

  1. Click "Merge" dropdown → "Merge with..."
  2. Modal opens showing:
    • Current cluster face (left)
    • "Select target" search/scroll list of all other unknown clusters + known persons
    • Each option shows face thumbnail + name/ID
    • "Merge" button (disabled until target selected)
  3. Confirmation dialog: "Merge Cluster #12 into John Smith? This cannot be undone."
  4. On confirm: Toast "Clusters merged successfully"

Auto-Review Feature:

  • "Auto-Review" button analyzes clusters and suggests:
    • "This cluster matches [Known Person] with 87% confidence"
    • "This cluster appears to be a false positive (lighting artifact)"
    • "This cluster has similar patterns to Cluster #8"
  • Shows suggestions inline with "Accept" / "Reject" buttons

3.8 Person Profile Page

Route: /gallery/:personId
Layout: Sidebar + two-column layout (info left, content right)
Purpose: Comprehensive view of a single person's profile and activity

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "Person Profile"     [Edit] [Actions] |
|         |------------------------------------------------|
| [Nav]   | Breadcrumb: Gallery > John Smith               |
|         |                                                |
|         | +----------+ +--------------------------------+|
|         | | [Large   | | John Smith                     ||
|         | |  Face    | | Role: Employee                 ||
|         | |  Image]  | | Department: Information Tech   ||
|         | |          | | Company: Sentinel Corp         ||
|         | |          | | Tags: [VIP] [IT] [Full-time]   ||
|         | |          | |                                ||
|         | | [Upload  | | Notes:                         ||
|         | |  Photo]  | | Regular employee. Access to    ||
|         | |          | | server room approved.          ||
|         | +----------+ | Added: Jun 1, 2025 by admin    ||
|         |              | Last seen: 2 hours ago         ||
|         |              +--------------------------------+|
|         |                                                |
|         | +----------------------------------------------+|
|         | | Sightings Timeline                           ||
|         | | [Timeline graph showing activity over time]  ||
|         | |                                              ||
|         | | Jun 15, 2025                                 ||
|         | | 14:32  [thumb] CAM-01 Lobby    [View]        ||
|         | | 12:15  [thumb] CAM-03 Warehouse [View]       ||
|         | | 09:00  [thumb] CAM-01 Lobby    [View]        ||
|         | |                                              ||
|         | | Jun 14, 2025                                 ||
|         | | 16:45  [thumb] CAM-05 Office     [View]      ||
|         | | ...                                          ||
|         | +----------------------------------------------+|
|         |                                                |
|         | +--------------------+ +---------------------+ |
|         | | Training Images    | | Watchlist Membership| |
|         | | [img] [img] [img]  | | [x] VIP Watchlist   | |
|         | | [img] [+] [Upload] | | [ ] Blacklist       | |
|         | | 4 reference photos | | [ ] After Hours     | |
|         | +--------------------+ +---------------------+ |
+----------------------------------------------------------+

Left Column (320px fixed):

  1. Large Face Image:

    • 280x280px, 1:1, rounded --radius-lg
    • Best quality reference image
    • Hover: "Change Photo" overlay
  2. Upload Photo Button:

    • Below the image
    • Opens file picker for new reference/training image
    • Supports drag & drop

Right Column (flex, remaining width):

  1. Identity Header:

    • Name: 22px bold
    • Role badge: Colored pill
    • Department, Company: 14px --text-secondary
    • Tags: Row of colored pills
    • Edit button (pencil icon) — opens edit modal
  2. Notes Section:

    • Text area, scrollable if long
    • Edit in place (click to edit, blur to save)
  3. Metadata:

    • "Added: [date] by [user]"
    • "Total sightings: [N]"
    • "Last seen: [relative time] at [camera]"
    • "First seen: [date] at [camera]"

Sightings Timeline:

  • Date-grouped list (sticky date headers)
  • Each sighting:
    • Time (mono font)
    • Face thumbnail (48x48)
    • Camera name + location
    • Confidence percentage (colored: >90% green, >70% yellow, <70% orange)
    • "View" button — opens detection detail modal
  • Scrollable container, lazy load older sightings

Training Images Section:

  • Grid of all reference/training images
  • Each image: 80x80px thumbnail, click to enlarge
  • "+" button to upload more
  • Hover on image: Delete button (with confirmation)

Watchlist Membership:

  • Checkbox list of all watchlists
  • Checked = person is on that watchlist
  • Changes apply immediately with toast confirmation

Alert Preference Override:

  • Override global alert settings for this person
  • "Use default settings" toggle
  • If off: Custom severity selector + notification preference

Edit Profile Modal:

  • All fields editable: Name, Role, Department, Company, Notes, Tags
  • "Save Changes" primary button
  • "Delete Profile" destructive button (with confirmation dialog)

3.9 Suspicious Activity Timeline

Route: /timeline
Layout: Sidebar + filter bar + timeline visualization
Purpose: Chronological view of suspicious/night-mode events for security review

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "Suspicious Activity Timeline"        |
|         |------------------------------------------------|
| [Nav]   | [Filter] [Export] [Date Range]                 |
|         |                                                |
|         | +----------------------------------------------+|
|         | |          TIMELINE VISUALIZATION              ||
|         | |                                              ||
|         | | 22:00 |                                      ||
|         | | 21:00 |    [orange] Motion CAM-03            ||
|         | | 20:00 |                                      ||
|         | | 19:00 | [red] Unknown person CAM-01          ||
|         | | 18:00 |    [orange] Motion CAM-05            ||
|         | | 17:00 |                                      ||
|         | |       +--------------------------------------||
|         | |         CAM-01 CAM-02 CAM-03 CAM-04 CAM-05  ||
|         | +----------------------------------------------+|
|         |                                                |
|         | Jun 15, 2025 — 5 events                        |
|         |                                                |
|         | +----------------------------------------------+|
|         | | [red dot] 19:32:15  Unknown Person Detected  ||
|         | |           CAM-01 Lobby | 94% confidence      ||
|         | |           [View Details] [Acknowledge]       ||
|         | +----------------------------------------------+|
|         | | [orange]  18:45:22  Motion Detected          ||
|         | |           CAM-05 Office | Restricted hours    ||
|         | |           [View Details] [Acknowledge]       ||
|         | +----------------------------------------------+|
|         | | [yellow]  14:20:00  Person Detected          ||
|         | |           CAM-02 Gate A | John Smith          ||
|         | |           [View Details]                     ||
|         | +----------------------------------------------+|
+----------------------------------------------------------+

Timeline Visualization (Top):

  • Horizontal bar chart showing events across cameras
  • X-axis: Cameras (CAM-01 through CAM-08)
  • Y-axis: Time (most recent at top)
  • Event dots: Colored by severity, sized by importance
  • Hover on dot: Tooltip with event summary
  • Click on dot: Scrolls to event detail below
  • Zoom controls: "1h" / "6h" / "24h" / "7d" / Custom

Event List (Bottom):

  • Chronological list, newest first
  • Date headers as sticky sections
  • Each event card:
    • Color-coded severity dot (left edge)
    • Time (mono font, bold)
    • Event title (bold)
    • Camera name + location
    • Additional info (confidence, person name, etc.)
    • Action buttons: View Details, Acknowledge
  • Click card: Opens event detail modal with full image/video evidence

Filters:

  • Event type: Motion / Unknown Person / Known Person / Watchlist Match / System
  • Severity: Critical / High / Medium / Low
  • Camera: Multi-select
  • Date range: Date picker

3.10 Search & Filter Page

Route: /search
Layout: Sidebar + search panel + results area
Purpose: Advanced search across all detections, alerts, and persons

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "Search & Filter"                     |
|         |------------------------------------------------|
| [Nav]   | +----------+ +--------------------------------+|
|         | | ADVANCED | | Search Results                 ||
|         | | SEARCH   | | "24 results for your criteria" ||
|         | |          | |                                ||
|         | | Date:    | | [Grid/List toggle] [Sort] [Exp]||
|         | | [From]   | |                                ||
|         | | [To]     | | +--------+ +--------+ +------+ ||
|         | |          | | | Result | | Result | | Res  | ||
|         | | Cameras: | | +--------+ +--------+ +------+ ||
|         | | [x]CAM-01| |                                ||
|         | | [x]CAM-02| | +--------+ +--------+ +------+ ||
|         | | ...      | | +--------+ +--------+ +------+ ||
|         | |          | |                                ||
|         | | Persons: | | [1] [2] [3] ... [5]           ||
|         | | [Search] | +--------------------------------+|
|         | |          |                                  |
|         | | Event    |  Saved Searches:                  |
|         | | Types:   |  [Daily Report] [Night Shift] [..]|
|         | | [x]Motion|                                  |
|         | | [x]Face  |                                  |
|         | | [x]Unkn  |                                  |
|         | |          |                                  |
|         | | Severity:|                                  |
|         | | [x]High  |                                  |
|         | | [x]Med   |                                  |
|         | |          |                                  |
|         | |[Search]  |                                  |
|         | |[Clear]   |                                  |
|         | |[Save]    |                                  |
|         | +----------+                                  |
+----------------------------------------------------------+

Advanced Search Panel (Left, 320px):

  • Date Range:

    • "From" date-time picker
    • "To" date-time picker
    • Quick buttons: "Today", "Yesterday", "Last 7 Days", "Last 30 Days"
  • Cameras:

    • Checkbox list of all 8 cameras with online status
    • "Select All" / "Clear" links
  • Persons:

    • Search input: "Search known persons..."
    • Autocomplete dropdown with face thumbnails
    • "Include unknown persons" checkbox
  • Event Types:

    • Checkboxes: Person Detection, Motion, Watchlist Match, Night Mode Event, System Event
  • Alert Severity:

    • Checkboxes: Critical, High, Medium, Low, Info
  • Watchlist:

    • "Any watchlist match" checkbox
    • Or select specific watchlists
  • Action Buttons (bottom, sticky):

    • "Search" — Primary, full width
    • "Clear All" — Secondary
    • "Save Search" — Ghost (saves current criteria for future use)

Results Area:

  • Results count: "Found 124 results for your search criteria"
  • View toggle: Grid / List
  • Sort: Relevance / Newest / Oldest
  • Export: CSV / JSON button

Result Card (Grid):

  • Thumbnail image (event snapshot or face)
  • Event type badge
  • Timestamp
  • Camera name
  • Person name (if applicable)
  • Confidence score

Saved Searches:

  • Below results or in collapsible section
  • List of saved searches with name + quick "Run" button
  • "Delete" option on hover
  • Default saved searches: "Daily Report" (last 24h), "Night Shift" (10PM-6AM), "Unknown Persons This Week"

3.11 Watchlist Management

Route: /watchlists
Layout: Sidebar + watchlist cards/panels
Purpose: Manage watchlists (VIP, Blacklist, Custom) and their members

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "Watchlist Management"  [+ New List]  |
|         |------------------------------------------------|
| [Nav]   |                                                |
|         | +-------------------+ +---------------------+  |
|         | | VIP Watchlist     | | Blacklist           |  |
|         | | [Shield icon]     | | [ShieldAlert icon]  |  |
|         | |                   | |                     |  |
|         | | 12 persons        | | 5 persons           |  |
|         | | Alert: Immediate  | | Alert: Immediate    |  |
|         | | Notify: Security  | | Notify: Manager+Sec |  |
|         | |                   | |                     |  |
|         | | [View] [Settings] | | [View] [Settings]   |  |
|         | +-------------------+ +---------------------+  |
|         |                                                |
|         | +-------------------+ +---------------------+  |
|         | | After Hours       | | [+ Create New       |  |
|         | | [Moon icon]       | |      Watchlist]     |  |
|         | |                   | |                     |  |
|         | | 8 persons         | |                     |  |
|         | | Alert: Delayed    | |                     |  |
|         | | Notify: Security  | |                     |  |
|         | |                   | |                     |  |
|         | | [View] [Settings] | |                     |  |
|         | +-------------------+ +---------------------+  |
+----------------------------------------------------------+

Watchlist Summary Card:

  • Header: Watchlist name + icon
  • Color-coded top border:
    • VIP: Gold #EAB308
    • Blacklist: Red #EF4444
    • After Hours: Indigo #6366F1
    • Custom: User-defined color
  • Stats: Person count, alert rule summary, notification target
  • Actions: "View Members" (primary), "Settings" (secondary)

Watchlist Detail View (click "View"):

+----------------------------------------------------------+
| VIP Watchlist                                    [Edit]  |
|----------------------------------------------------------|
| Alert Rule: Immediate notification on detection          |
| Notify: Security Team Telegram + WhatsApp                |
|                                                          |
| +------+ +------+ +------+ +------+ +------+            |
| | John | | Jane | | Mike | | +Add | |      |            |
| |Smith | | Doe  | |Brown | |Person| |      |            |
| |[Rem] | |[Rem] | |[Rem] | |      | |      |            |
| +------+ +------+ +------+ +------+ +------+            |
|                                                          |
| [Add from Gallery]  [Add by Detection]  [Import CSV]     |
+----------------------------------------------------------+
  • Members grid: Face thumbnail + name + remove button (X on hover)
  • "+ Add Person" card at end of grid — opens person search/selector
  • Add options:
    • "Add from Gallery" — Opens gallery search modal
    • "Add by Recent Detection" — Shows recent detections, click to add
    • "Import from CSV" — Upload CSV with names/roles

Watchlist Settings Modal:

  • Watchlist name
  • Icon selector (from preset icons)
  • Color picker
  • Alert rules:
    • Alert timing: Immediate / Delayed (specify minutes) / Digest (batch notifications)
    • Severity override: Use global / Force Critical / Force High
    • Notification channels: Telegram / WhatsApp / In-app / Email
    • Quiet hours override: Follow global / Custom per watchlist
  • "Delete Watchlist" destructive action (with confirmation)

Create New Watchlist:

  • Modal with: Name, Icon, Color, Description
  • Default alert rules inherited from global settings
  • "Create" button → redirects to new watchlist detail page

3.12 AI Vibe Settings Page

Route: /ai-settings
Layout: Sidebar + scrollable settings cards
Purpose: Simplified AI behavior tuning for non-technical operators

CRITICAL: This page MUST be extremely simple. Every control uses friendly language with plain-English explanations. No technical jargon exposed by default.

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "AI Vibe Settings"                    |
|         |------------------------------------------------|
| [Nav]   | These settings control how the AI behaves.     |
|         | Changes take effect immediately.               |
|         | [Restore Defaults]  [? Help]                   |
|         |                                                |
|         | +--------------------------------------------+ |
|         | | DETECTION SENSITIVITY                      | |
|         | | How carefully should the AI watch?         | |
|         | |                                            | |
|         | | [Low] [Balanced] [High]                    | |
|         | | Relaxed     |●|     Very Careful           | |
|         | |                                            | |
|         | | Low: Fewer alerts, might miss subtle things| |
|         | | Balanced: Good mix of accuracy and speed   | |
|         | | High: Catches everything, more alerts      | |
|         | +--------------------------------------------+ |
|         |                                                |
|         | +--------------------------------------------+ |
|         | | FACE MATCH STRICTNESS                      | |
|         | | How sure must the AI be before naming      | |
|         | | someone?                                   | |
|         | |                                            | |
|         | | [Relaxed] [Balanced] [Strict]              | |
|         | | Easy match  |●|     Very careful match     | |
|         | |                                            | |
|         | | Relaxed: Names people more freely          | |
|         | | Balanced: Good accuracy for most uses      | |
|         | | Strict: Only names when very confident     | |
|         | +--------------------------------------------+ |
|         |                                                |
|         | +--------------------------------------------+ |
|         | | NIGHT MODE SENSITIVITY                     | |
|         | | How alert should the AI be after hours?    | |
|         | |                                            | |
|         | | [Low] [Balanced] [High]                    | |
|         | | Normal watch|●|     Extra vigilant         | |
|         | |                                            | |
|         | | Low: Normal detection after hours          | |
|         | | Balanced: Slightly more sensitive at night | |
|         | | High: Maximum sensitivity after hours      | |
|         | +--------------------------------------------+ |
|         |                                                |
|         | +--------------------------------------------+ |
|         | | EVIDENCE CAPTURE                           | |
|         | | How much evidence should the AI save?      | |
|         | |                                            | |
|         | | [Minimal] [Normal] [Detailed]              | |
|         | | Save space  |●|     Save everything        | |
|         | |                                            | |
|         | | Minimal: Face snapshot only                | |
|         | | Normal: Face + 5 second clip               | |
|         | | Detailed: Face + 15 second clip + full frame| |
|         | +--------------------------------------------+ |
|         |                                                |
|         | +--------------------------------------------+ |
|         | | ALERT STYLE                                | |
|         | | How urgently should the AI alert you?      | |
|         | |                                            | |
|         | | [Quiet] [Normal] [Critical]                | |
|         | | Subtle     |●|     Very urgent              | |
|         | |                                            | |
|         | | Quiet: In-app notifications only           | |
|         | | Normal: In-app + Telegram                  | |
|         | | Critical: All channels + sound alerts      | |
|         | +--------------------------------------------+ |
|         |                                                |
|         | +--------------------------------------------+ |
|         | | LEARNING MODE                              | |
|         | | How should the AI learn new faces?         | |
|         | |                                            | |
|         | | [Manual Only] [Suggested] [Approved Auto]  | |
|         | | I teach it  |●|     It learns on its own   | |
|         | |                                            | |
|         | | Manual: You must approve every new person  | |
|         | | Suggested: AI suggests, you confirm        | |
|         | | Auto: AI learns automatically (review later)| |
|         | +--------------------------------------------+ |
|         |                                                |
|         | +--------------------------------------------+ |
|         | | PRIVACY MODE                               | |
|         | | How should face data be handled?           | |
|         | |                                            | |
|         | | [Standard] [Restricted] [High Privacy]     | |
|         | | Full features|●|     Maximum privacy       | |
|         | |                                            | |
|         | | Standard: Normal face recognition          | |
|         | | Restricted: No storage of raw face images  | |
|         | | High Privacy: Face data encrypted + limited| |
|         | +--------------------------------------------+ |
|         |                                                |
|         | +--------------------------------------------+ |
|         | | ADVANCED SETTINGS (expandable)             | |
|         | | Show internal configuration mapping        | |
|         | | [v] Expand                                  | |
|         | +--------------------------------------------+ |
+----------------------------------------------------------+

Each Settings Card Structure:

+--------------------------------------------------+
| SETTING NAME (uppercase, 13px, muted)            |
| Friendly question (16px, bold)                   |
|                                                  |
| [Option 1] [Option 2] [Option 3]                |
| Slider visual                                    |
|                                                  |
| Description text for selected option (14px,      |
| secondary color)                                 |
+--------------------------------------------------+

Control Component — Segmented Slider:

Each setting uses the same interactive pattern:

  • Three labeled options as a horizontal segmented control
  • Visual slider indicator shows current selection
  • Click any option to select
  • Smooth transition animation (200ms) when switching
Setting Option 1 Option 2 (default) Option 3
Detection Sensitivity Low (0.7) Balanced (0.5) High (0.3)
Face Match Strictness Relaxed (0.6) Balanced (0.75) Strict (0.9)
Night Mode Sensitivity Low (0.6) Balanced (0.5) High (0.35)
Evidence Capture Minimal (face only) Normal (face+5s) Detailed (face+15s+frame)
Alert Style Quiet (in-app) Normal (in-app+telegram) Critical (all+sound)
Learning Mode Manual (0) Suggested (1) Approved Auto (2)
Privacy Mode Standard (0) Restricted (1) High Privacy (2)

Dynamic Description:

  • When an option is selected, the description text below updates to explain that option
  • Descriptions are short (1 line) and use plain English
  • Tooltip on each option: More detailed explanation on hover (400ms delay)

Advanced Settings Section (Collapsed by Default):

Click "Expand" to reveal a table showing the internal mapping:

+------------------+---------------+----------------+----------------+
| Setting          | Internal Key  | Current Value  | Range          |
+------------------+---------------+----------------+----------------+
| Detection Sens.  | conf_threshold| 0.50           | 0.10 - 0.90    |
| Face Match       | match_threshold| 0.75          | 0.50 - 0.95    |
| Night Sens.      | night_threshold| 0.50          | 0.20 - 0.80    |
| Evidence Mode    | capture_mode  | "normal"       | enum           |
| Alert Channels   | alert_channels| ["app","tg"]   | array          |
| Learning Mode    | auto_learn    | 1              | 0, 1, 2        |
| Privacy Mode     | privacy_level | 0              | 0, 1, 2        |
+------------------+---------------+----------------+----------------+
  • Table is read-only for non-admin users
  • Admin users can directly edit numerical values
  • "Restore Defaults" button resets all to factory settings
  • Settings auto-save (no "Save" button needed)
  • Toast appears on change: "Detection Sensitivity updated to Balanced"

Help Button:

  • Opens a modal with simple explanations of each setting
  • Uses analogies: "Think of Detection Sensitivity like the volume knob on a radio — Low means you'll hear only loud sounds..."

3.13 Training Review Page

Route: /training
Layout: Sidebar + tabbed interface
Purpose: Review and manage AI training data and model performance

Tabs:

  1. Pending Review (default)
  2. Training Queue
  3. Model History
  4. Performance

Tab 1: Pending Review

+----------------------------------------------------------+
| 6 suggestions waiting for your review                      |
|                                                            |
| +------------------------------------------------------+  |
| | [Face] Is this "John Smith"?                           |  |
| |        Detected at CAM-01 on Jun 15, 14:32             |  |
| |        Current match confidence: 87%                   |  |
| |        Similar to: John Smith (82%), Mike Brown (45%)  |  |
| |        [Yes, that's John] [No, different person]       |  |
| |        [Not sure, skip]                                |  |
| +------------------------------------------------------+  |
|                                                            |
| +------------------------------------------------------+  |
| | [Face] Is this a new person or existing?               |  |
| |        Detected at CAM-03 on Jun 15, 13:20             |  |
| |        No good match found (best: 62%)                 |  |
| |        [New Person] [Matches existing...] [Skip]       |  |
| +------------------------------------------------------+  |
  • Each suggestion card shows:
    • Face image (left, 100x100)
    • AI's question (bold)
    • Context: where/when detected
    • Confidence details
    • Action buttons
  • "Approve All Similar" button (bulk action)
  • "Review Later" — defers suggestion

Tab 2: Training Queue

  • Shows images queued for training
  • Status: Pending / Processing / Completed / Failed
  • Progress bar for processing batch
  • "Add Images to Queue" button
  • "Process Queue Now" button (triggers training job)

Tab 3: Model History

  • Table of model versions:
    • Version number
    • Training date
    • Number of training images
    • Accuracy score
    • Status: Active / Rolled Back / Archived
    • Actions: View Details, Rollback (if not active)

Tab 4: Performance

  • Key metrics cards:
    • Face recognition accuracy: XX%
    • False positive rate: XX%
    • Processing speed: XX ms per frame
    • Total training images: XXX
  • Simple line chart: Accuracy over time (last 30 days)
  • "Trigger Retrain" button: Starts a new training cycle with confirmation dialog

3.14 System Health Page

Route: /health
Layout: Sidebar + status grid + detail panels
Purpose: Monitor system health, service status, and diagnostics

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "System Health"  [Run Self-Test] [?]  |
|         |------------------------------------------------|
| [Nav]   | Overall Status: [GREEN DOT] All Systems OK     |
|         | Last checked: 2 minutes ago                    |
|         |                                                |
|         | +----------+ +----------+ +----------+ +-----+|
|         | | Camera   | | AI Engine| | Storage  | |Net- | |
|         | | System   | | Pipeline | |          | |work | |
|         | |          | |          | |          | |     | |
|         | | 8 Online | | Running  | | 67% used | | OK  | |
|         | | 0 Offline| | 34ms/f   | | 234GB fr | |12ms | |
|         | | [View]   | | [View]   | | [View]   | |[V] | |
|         | +----------+ +----------+ +----------+ +-----+|
|         |                                                |
|         | +--------------------------------------------+|
|         | | Camera Connectivity Detail                  ||
|         | | CAM-01 [green] Online  12ms  1080p@25fps  ||
|         | | CAM-02 [green] Online  15ms  1080p@25fps  ||
|         | | CAM-03 [green] Online  11ms  1080p@25fps  ||
|         | | CAM-04 [red]   Offline --   --             ||
|         | | CAM-05 [green] Online  18ms  1080p@25fps  ||
|         | | CAM-06 [green] Online  14ms  1080p@25fps  ||
|         | | CAM-07 [yellow]Interm. 245ms 720p@15fps  ||
|         | | CAM-08 [green] Online  13ms  1080p@25fps  ||
|         | +--------------------------------------------+|
|         |                                                |
|         | +--------------------------------------------+|
|         | | AI Pipeline Status                          ||
|         | | Face Detection: Running  [green]            ||
|         | | Face Recognition: Running [green]           ||
|         | | Motion Detection: Running [green]           ||
|         | | Night Mode: Running [green]                 ||
|         | | Alert Engine: Running [green]               ||
|         | | Notification: Running [green]               ||
|         | | Model Version: v2.3.1 (trained Jun 10)    ||
|         | | Uptime: 14 days, 6 hours                    ||
|         | +--------------------------------------------+|
+----------------------------------------------------------+

Service Status Cards (Top Row):

4 cards, each representing a service group:

Card Icon Metrics Status Colors
Camera System Video Online count, offline count Green/Red
AI Pipeline Brain Status, processing speed Green/Yellow/Red
Storage HardDrive Used %, free space Green/Yellow/Red
Network Wifi Latency, packet loss Green/Yellow/Red
  • Each card: Status dot in top-right (pulsing green for healthy)
  • Click "View" to expand detail section below
  • Yellow warning at >80% storage, >100ms latency, <720p stream
  • Red critical at 100% storage, camera offline, AI pipeline down

Camera Connectivity Detail:

  • Table: Camera name, status dot, status text, latency, resolution/fps
  • Status: Online (green) / Offline (red) / Intermittent (yellow)
  • Click row: Opens camera detail modal
  • Reconnect button for offline cameras

AI Pipeline Status:

  • List of pipeline stages with status
  • Each: Stage name, status dot, status text
  • Processing speed: ms per frame
  • Model version info
  • System uptime

Storage Detail:

  • Donut chart: Used vs Free
  • Numbers: Total / Used / Free
  • Breakdown: Video recordings / Images / Logs / Other
  • Yellow warning at >80%, red at >95%

Recent Errors Section:

  • Collapsible section
  • Table: Timestamp, service, error message, severity
  • "View Logs" button links to log viewer

Self-Test Feature:

  • "Run Self-Test" button in header
  • Opens modal with progress:
    • "Testing camera connections..." → 8 checks
    • "Testing AI pipeline..." → 5 checks
    • "Testing storage..." → 1 check
    • "Testing notifications..." → 1 check
  • Results: Green checkmarks or red X for each test
  • "Last Self-Test Results" section shows historical test runs
  • "Download Report" button (JSON/CSV)

3.15 Notification Settings

Route: /settings/notifications
Layout: Sidebar + settings sections
Purpose: Configure how and where alerts are sent

Section 1: Telegram

+----------------------------------------------------------+
| Telegram Notifications                                   |
| Send alerts to your Telegram group or personal chat.     |
|                                                          |
| [x] Enable Telegram notifications                        |
|                                                          |
| Bot Token:                                               |
| [______________________________] [? How to get this]     |
|                                                          |
| Chat ID:                                                 |
| [______________________________] [? How to find this]    |
|                                                          |
| Message Format: [Standard v] [Preview]                   |
|                                                          |
| [Test Telegram]  Last test: Success (Jun 15, 14:32)      |
+----------------------------------------------------------+
  • Bot Token input: Password-masked, with show/hide toggle
  • Chat ID input: Plain text
  • Help tooltips: "How to create a Telegram bot" and "How to find your chat ID"
  • Test button: Sends a test message, shows result inline
  • Message format: Standard / Minimal / Detailed

Section 2: WhatsApp

+----------------------------------------------------------+
| WhatsApp Notifications                                   |
| Send alerts via WhatsApp Business API.                   |
|                                                          |
| [x] Enable WhatsApp notifications                        |
|                                                          |
| API Key:                                                 |
| [______________________________] [?]                     |
|                                                          |
| Recipients (one per line):                               |
| [______________________________]                         |
| [+ Add Recipient]                                        |
|                                                          |
| [Test WhatsApp]  Last test: Failed (check API key)       |
+----------------------------------------------------------+
  • Similar structure to Telegram
  • Recipients: Multi-line input for phone numbers
  • Add Recipient button for individual entry with validation

Section 3: Alert Routing Rules

+----------------------------------------------------------+
| Alert Routing Rules                                      |
| Decide which alerts go where.                            |
|                                                          |
| Rule 1: Critical alerts → Telegram + WhatsApp            |
|         [Edit] [Delete]                                  |
|                                                          |
| Rule 2: Unknown persons → Telegram only                  |
|         [Edit] [Delete]                                  |
|                                                          |
| [+ Add New Rule]                                         |
+----------------------------------------------------------+
  • Each rule: Condition (severity/type/camera) → Action (channels)
  • Add Rule modal:
    • When: [Severity is / Type is / Camera is / Person is] [value]
    • Then send to: [x] Telegram [x] WhatsApp [x] In-app [x] Email
    • "Save Rule" button

Section 4: Quiet Hours

+----------------------------------------------------------+
| Quiet Hours                                              |
| Suppress non-critical alerts during these hours.         |
|                                                          |
| [x] Enable Quiet Hours                                   |
|                                                          |
| From: [21:00 v]  To: [07:00 v]  [Every Day v]           |
|                                                          |
| During quiet hours:                                      |
|   (x) Only critical alerts                               |
|   ( ) All alerts in-app only (no external notifications) |
|   ( ) Completely silent                                  |
+----------------------------------------------------------+
  • Time pickers with 30-minute increments
  • Repeat: Every Day / Weekdays / Weekends / Custom days
  • During quiet hours: Radio button options

Section 5: Per-Camera Overrides

  • Table: Camera name, default behavior, override
  • Override dropdown: Default / Always notify / Quiet / Ignore

Section 6: Per-Person Overrides

  • Searchable list of known persons
  • Override dropdown per person: Default / Always notify / Quiet / Ignore

3.16 Admin User Management

Route: /settings/users
Layout: Sidebar + user list
Access: Admin role only
Purpose: Manage system users and their permissions

Visual Structure:

+----------------------------------------------------------+
| Sidebar | Top Bar: "User Management"      [+ Add User]   |
|         |------------------------------------------------|
| [Nav]   | Search: [________________]  Role: [All v]      |
|         |                                                |
|         | +------------------------------------------------
|         | | [Avatar] John Smith        [Admin]   [Edit]  |
|         | |          john@company.com  Last: 2h ago [..] |
|         | |          2FA: Enabled      Status: Active     |
|         | +------------------------------------------------
|         | | [Avatar] Jane Doe          [Operator] [Edit] |
|         | |          jane@company.com  Last: 1d ago [..] |
|         | |          2FA: Disabled     Status: Active     |
|         | +------------------------------------------------
|         | | [Avatar] Mike Brown        [Viewer]  [Edit]  |
|         | |          mike@company.com  Last: 5d ago [..] |
|         | |          2FA: Disabled     Status: Inactive   |
|         | +------------------------------------------------
+----------------------------------------------------------+

User List:

  • Each row: Avatar (40px circle), Name, Email, Role badge, 2FA status, Last login, Status, Actions
  • Sortable columns: Name, Role, Last Login, Status
  • Filter: Role dropdown, Status dropdown
  • Search: Name or email

Roles:

Role Badge Color Permissions
Admin Red Full access: users, cameras, AI settings, system
Operator Blue Alerts, detections, gallery, watchlists, review
Viewer Green View-only: live feeds, gallery, timeline

Add/Edit User Modal:

  • Name (required)
  • Email (required)
  • Role (select)
  • Password (required for new, optional for edit)
  • Force password change on first login (toggle)
  • 2FA: Enabled/Disabled
  • Status: Active / Inactive / Locked
  • "Save" / "Cancel" / "Delete User" (destructive)

User Detail View (click row):

  • Full profile info
  • Activity log: Login history (timestamp, IP, device)
  • Actions taken: Alerts acknowledged, persons named, settings changed
  • "Deactivate Account" / "Reset Password" / "Delete Account"

Activity Log:

  • Separate tab or section
  • Table: Timestamp, User, Action, Target, Details
  • Filter by user, action type, date range
  • Export to CSV

3.17 Camera Management

Route: /settings/cameras
Layout: Sidebar + camera cards
Purpose: Configure cameras, zones, and stream settings

Camera List:

+----------------------------------------------------------+
| 8 cameras configured                                     |
|                                                          |
| +-----------------------------------------------------+  |
| | [CAM-01] Lobby                    [Edit] [Zones] [..]|  |
| | [green] Online  |  192.168.1.101  |  H264 1080p@25   |  |
| | Stream: Active  |  Last seen: 2s ago                  |  |
| +-----------------------------------------------------+  |
|                                                          |
| +-----------------------------------------------------+  |
| | [CAM-02] Main Gate                [Edit] [Zones] [..]|  |
| | [green] Online  |  192.168.1.102  |  H264 1080p@25   |  |
| | Stream: Active  |  Night Mode: ON                     |  |
| +-----------------------------------------------------+  |
|                                                          |
| +-----------------------------------------------------+  |
| | [CAM-03] Warehouse                [Edit] [Zones] [..]|  |
| | [red]   Offline |  192.168.1.103  |  --              |  |
| | Last seen: 2h ago | [Reconnect Now]                   |  |
| +-----------------------------------------------------+  |
+----------------------------------------------------------+

Camera Card:

  • Camera name + custom label
  • Status: Online/Offline with colored dot
  • IP address / connection string
  • Stream info: Codec, resolution, framerate
  • Action buttons: Edit, Configure Zones, More (...)
  • Night mode toggle (if applicable)
  • Quick disable/enable toggle

Edit Camera Modal:

  • Camera Name (required)
  • Location description
  • Stream URL / IP address
  • RTSP port
  • Username / Password (for DVR authentication)
  • Channel number (for DVR: 1-8)
  • Stream settings:
    • Resolution: 1080p / 720p / 480p
    • Frame rate: 30 / 25 / 20 / 15 fps
    • Codec: H264 / H265 / MJPEG
  • Advanced: Bitrate, keyframe interval
  • "Save Changes" / "Test Connection" / "Delete Camera"

Zone Configuration:

+----------------------------------------------------------+
| Configure Zones — CAM-01 Lobby                           |
|                                                          |
| +----------------------------------------------------+   |
| |                                                    |   |
| |              [Camera Live Feed]                     |   |
| |                                                    |   |
| |         [Polygon drawing overlay]                  |   |
| |                                                    |   |
| |         Zone 1 (blue polygon)                      |   |
| |         Zone 2 (red polygon)                       |   |
| |                                                    |   |
| +----------------------------------------------------+   |
|                                                          |
| Zones:                                                   |
| Zone 1: Entrance Area [blue] [Edit] [Delete]            |
| Zone 2: Restricted Area [red] [Edit] [Delete]           |
|                                                          |
| [+ Add Zone]  Click on the image to draw a polygon.     |
+----------------------------------------------------------+
  • Live camera feed as background image
  • Click points on image to draw polygon zones
  • Each zone: Name, color picker, sensitivity slider
  • Zone types: Entrance / Restricted / Detection / Ignore
  • "Clear All Zones" / "Save Zones" buttons

Stream Settings Per Camera:

  • Enable/disable this camera (toggle)
  • Night mode: Enable / Disable / Follow global schedule
  • Recording: Always / On Detection / Never
  • Detection zones: Use global / Custom zones

3.18 Retention & Storage Settings

Route: /settings/storage
Layout: Sidebar + settings sections
Purpose: Manage data retention policies and storage

Visual Structure:

+----------------------------------------------------------+
| Storage Overview                                         |
|                                                          |
| [Donut Chart: 67% used]                                  |
|                                                          |
| Total: 1 TB    Used: 670 GB    Free: 330 GB              |
|                                                          |
| Breakdown:                                               |
| Video Recordings  [|||||||     ] 350 GB (52%)           |
| Detection Images  [|||         ] 150 GB (22%)           |
| Training Images   [||          ] 100 GB (15%)           |
| Logs              [|           ]  50 GB (7%)            |
| Other             [|           ]  20 GB (4%)            |
|                                                          |
+----------------------------------------------------------+

Retention Policies

Video Recordings:    [30 days v]  [? Keep recordings for]
Detection Images:    [90 days v]  [? Keep detection photos]
Training Images:     [1 year v]   [? Keep training data]
System Logs:         [30 days v]  [? Keep system logs]
Alert History:       [1 year v]   [? Keep alert records]

Auto-cleanup: [x] Enable automatic cleanup
              Run daily at [02:00 v]

[Save Settings]  [Run Cleanup Now]  [Export Storage Report]

Storage Overview:

  • Donut chart showing usage breakdown (4 categories)
  • Numerical values: Total / Used / Free
  • Color-coded by category
  • Warning at >80% usage (yellow), critical at >95% (red)

Retention Policy Controls:

  • Each policy: Label + Select dropdown (days/months/years)
  • Dropdown options: 7 days / 14 days / 30 days / 60 days / 90 days / 6 months / 1 year / 2 years / Forever
  • Tooltip explaining each

Auto-Cleanup:

  • Enable toggle
  • Schedule time picker
  • "Run Cleanup Now" — triggers immediate cleanup with confirmation
  • Progress modal showing cleanup status

Actions:

  • "Save Settings" — Primary button
  • "Run Cleanup Now" — Secondary button with confirmation
  • "Export Storage Report" — Downloads detailed breakdown

4. Component Specifications

4.1 Camera Feed Component

Props:

Prop Type Default Description
cameraId string required Unique camera identifier
name string required Display name
streamUrl string required HLS/WebRTC stream URL
status 'online' | 'offline' | 'reconnecting' | 'disabled' 'offline' Connection status
isRecording boolean false Recording state indicator
layout 'grid' | 'fullscreen' 'grid' Display mode
showControls boolean true Show overlay controls
onExpand () => void undefined Expand to fullscreen callback
onSnapshot () => void undefined Snapshot taken callback
quality 'auto' | 'hd' | 'sd' 'auto' Stream quality

States:

  • Loading: Spinner overlay while stream initializes
  • Playing: Live stream active
  • Paused: User paused
  • Error: Connection failed, retry button shown
  • Offline: Gray placeholder with camera icon

4.2 Alert Card Component

Props:

Prop Type Description
id string Alert unique ID
severity 'critical' | 'high' | 'medium' | 'low' | 'info' Alert severity
type string Alert type (unknown_person, motion, etc.)
cameraName string Source camera
timestamp Date When the alert occurred
thumbnail string Image URL for the event
personName string? Identified person name, if known
description string Alert description text
status 'pending' | 'acknowledged' | 'resolved' | 'ignored' Current status
onAcknowledge () => void Acknowledge handler
onResolve () => void Resolve handler
onIgnore () => void Ignore handler
onViewDetails () => void View details handler

4.3 Person Card Component

Props:

Prop Type Description
id string Person unique ID
name string Display name
faceImage string Face image URL
role 'employee' | 'visitor' | 'vendor' | 'contractor' | 'other' Role type
department string? Department name
company string? Company name
tags string[] Array of tag strings
lastSeen Date? Last detection timestamp
sightingsCount number Total number of sightings
isKnown boolean Whether person is identified
variant 'grid' | 'list' | 'compact' Display variant
onClick () => void Click handler

4.4 Stat Card Component

Props:

Prop Type Description
title string Card label
value string | number Main value to display
icon LucideIcon Icon component
color 'green' | 'blue' | 'orange' | 'red' | 'purple' Accent color
trend number? Percentage change (optional)
trendLabel string? Trend description
onClick () => void? Optional click handler

4.5 Segmented Control Component

Props:

Prop Type Description
options Array<{label: string, value: string, description: string}> Available options
value string Currently selected value
onChange (value: string) => void Selection change handler
size 'sm' | 'md' | 'lg' Control size

Behavior:

  • Click option to select
  • Visual slider animates to selected position (200ms ease)
  • Description text updates below based on selection

5. User Flows

5.1 Daily Operator Flow (Monitor & Respond)

Step 1: Login
  ↓ Enter credentials
  ↓ MFA if enabled
  ↓ Redirect to Dashboard

Step 2: Dashboard Review (30 seconds)
  ↓ Glance at stats (all cameras online? any pending alerts?)
  ↓ Scan recent alerts card (last 5 alerts)
  ↓ If critical alert visible → click to Alert Center
  ↓ If no urgent alerts → proceed to Live View

Step 3: Live Camera View (ongoing)
  ↓ View 2x4 grid of all cameras
  ↓ Observe feeds for any anomalies
  ↓ If alert toast appears → click toast to view details
  
Step 4: Alert Response (when alert occurs)
  ↓ Click alert toast or navigate to Alert Center
  ↓ Review alert card (thumbnail, camera, type, severity)
  ↓ Click "View Details" for full information
  ↓ Review full image/video evidence
  ↓ If false positive → "Mark as False Positive"
  ↓ If legitimate → "Acknowledge" or "Resolve"
  ↓ If unknown person needs identification → "Name This Person"
  ↓ Return to monitoring

Step 5: End of Shift
  ↓ Review any unacknowledged alerts
  ↓ Check System Health page
  ↓ Log out

5.2 New Person Onboarding Flow

Step 1: Detection occurs
  ↓ System detects unknown person
  ↓ Alert created (if alert settings allow)
  
Step 2: Review in Recent Detections
  ↓ Operator navigates to Recent Detections
  ↓ Filters by "Unknown"
  ↓ Clicks on detection card

Step 3: Name the Person
  ↓ Clicks "Name This Person" button
  ↓ Enters name, selects role (Employee)
  ↓ Fills department, adds notes
  ↓ Checks "Similar existing persons" — no match
  ↓ Clicks "Save & Create Profile"

Step 4: Profile Created
  ↓ Toast: "Profile created for John Smith"
  ↓ Detection card updates to show "John Smith"
  ↓ Person is now in Gallery
  
Step 5: Add Training Images (optional)
  ↓ Navigate to Person Profile
  ↓ Upload additional reference photos
  ↓ System queues for retraining

5.3 Unknown Person Review Flow

Step 1: Navigate to Unknown Review Queue
  ↓ Sidebar → "Unknown Persons Review"
  ↓ View list of unknown clusters

Step 2: Review Cluster
  ↓ Click on cluster card
  ↓ View representative face + sighting history
  ↓ Check AI pattern insight

Step 3: Decision
  ├─ If person is known → "Name This Person" → enter details → save
  ├─ If person matches existing cluster → "Merge" → select target → confirm
  ├─ If false detection → "Ignore" → confirm
  └─ If unsure → "Mark as Reviewed" → remains resolved, can revisit later

Step 4: Queue Updates
  ↓ Processed item removed from queue
  ↓ Toast confirms action
  ↓ Proceed to next cluster

5.4 AI Settings Adjustment Flow

Step 1: Navigate to AI Vibe Settings
  ↓ Sidebar → "AI Vibe Settings"
  ↓ View all 7 settings on one scrollable page

Step 2: Adjust Detection Sensitivity
  ↓ Read friendly question: "How carefully should the AI watch?"
  ↓ Current: "Balanced"
  ↓ Change to "High" (more alerts after recent incidents)
  ↓ Description updates: "High: Catches everything, more alerts"
  ↓ Toast: "Detection Sensitivity updated to High"

Step 3: Adjust Alert Style
  ↓ Change from "Normal" to "Critical"
  ↓ All channels will now be used for alerts

Step 4: Review Advanced (optional)
  ↓ Click "Expand" on Advanced Settings
  ↓ View internal numerical values
  ↓ (Admin only: directly edit values)

Step 5: Done
  ↓ No save button needed (auto-save)
  ↓ Return to monitoring
  ↓ Changes effective immediately

5.5 Watchlist Alert Configuration Flow

Step 1: Navigate to Watchlists
  ↓ Sidebar → "Watchlists"
  ↓ View existing watchlists

Step 2: Create New Watchlist (optional)
  ↓ Click "+ New Watchlist"
  ↓ Enter name: "Server Room Access"
  ↓ Select icon: Shield
  ↓ Choose color: Orange
  ↓ Click "Create"

Step 3: Add Members
  ↓ Click "Add from Gallery"
  ↓ Search and select authorized persons
  ↓ Click "Add to Watchlist"

Step 4: Configure Alerts
  ↓ Click "Settings" on the watchlist
  ↓ Alert timing: Immediate
  ↓ Severity: Force Critical
  ↓ Notify: Security Team
  ↓ Quiet hours: Follow global
  ↓ Save

Step 5: Test
  ↓ Click "Test Alert"
  ↓ Verify notification received on configured channels

6. Interaction Patterns

6.1 Real-Time Updates

  • WebSocket Connection: Persistent connection for live updates
  • Camera Feeds: HLS/WebRTC streams update continuously
  • Alerts: New alerts appear as toast notifications + update alert count badge
  • Status Changes: Camera online/offline updates in real-time (green/red dot transitions)
  • Stats: Dashboard stats refresh every 30 seconds (with subtle pulse animation on change)

6.2 Loading States

Scenario Pattern Duration Handling
Page load Skeleton screens matching content layout Remove on data fetch
Camera stream Spinner overlay → fade to stream Retry 3x, then show error
Search Inline spinner in search field Debounce 300ms
Form submit Button loading state (spinner + text) Until API response
Data fetch Skeleton cards Remove on data ready
AI processing Progress bar with step labels Until completion

6.3 Empty States

Page Empty Message CTA
Dashboard alerts "No alerts in the last 24 hours. All clear!" None
Alert Center (filtered) "No alerts match your filters." "Clear Filters"
Recent Detections "No detections yet. System may be initializing." None
Person Gallery "No persons in gallery yet." "Add First Person"
Unknown Queue "Great job! No unknown persons to review." None
Training Review "No pending training suggestions." None
Watchlists "No watchlists created yet." "Create Watchlist"

6.4 Confirmation Patterns

Action Confirmation Type Message
Delete person Modal dialog "Delete John Smith? This cannot be undone. All detection history will be lost."
Ignore alert Inline + undo "Alert ignored. [Undo]" (5s)
Mark all reviewed Modal dialog "Mark all 12 clusters as reviewed?"
Run cleanup Modal dialog "This will permanently delete 45GB of old data. Continue?"
Delete user Modal dialog "Delete user account? All activity history will be preserved."
Change AI settings None (auto-save with toast) "Setting updated"
Retrain model Modal dialog "Retraining will take 10-30 minutes. The system will use the last known model during training. Continue?"

6.5 Keyboard Shortcuts

Shortcut Action
Esc Close modal / exit fullscreen
F Toggle fullscreen on focused camera
S Take snapshot of focused camera
1-8 Focus camera 1-8 in live view
A Acknowledge selected alert
N Name unknown person (when viewing)
/ Focus global search
? Show keyboard shortcuts help

6.6 Animation Guidelines

Animation Duration Easing Usage
Page transition 200ms ease-out Route changes
Modal open 250ms cubic-bezier(0.16, 1, 0.3, 1) Dialog appearance
Modal close 150ms ease-in Dialog dismissal
Sidebar toggle 250ms ease-in-out Collapse/expand
Toast slide-in 300ms ease-out Notification appear
Toast fade-out 200ms ease-in Notification dismiss
Card hover lift 150ms ease Card hover effect
Segmented slider 200ms ease AI settings toggle
Pulse (status) 2s ease-in-out Recording indicator
Stats update 500ms ease Number count-up
Skeleton shimmer 1.5s linear infinite Loading state

7. Responsive Behavior

7.1 Desktop (1200px+ — Primary Target)

  • Sidebar: Expanded, 260px width
  • Camera Grid: 2x4 default, 4 columns for dashboard
  • Content: Full multi-column layouts
  • Stats Row: 4 cards horizontal
  • Person Gallery: 4-6 columns
  • All features available

7.2 Tablet (768px - 1199px)

  • Sidebar: Collapsed by default, tap hamburger to expand overlay
  • Camera Grid: 2x4 or adaptive grid
  • Stats Row: 2x2 grid
  • Person Gallery: 3-4 columns
  • Alert Center: Filters as collapsible drawer
  • Touch-friendly: Larger tap targets (min 44px)

7.3 Mobile (< 768px — Not Primary)

  • Sidebar: Hidden, hamburger menu opens full-screen overlay
  • Camera Grid: 1 column (scroll vertically), 2 columns optional
  • Stats Row: 2x2 grid or horizontal scroll
  • Person Gallery: 2 columns
  • Alert Center: Full-width cards, filters in bottom sheet
  • AI Settings: Full-width segmented controls (stacked if needed)
  • Simplified navigation: Bottom tab bar option for key pages

7.4 Breakpoints

Breakpoint Width Layout Changes
xl 1400px+ Max content width 1400px, centered
lg 1200px Full desktop layout
md 992px Collapsible sidebar, 3-col grids
sm 768px Mobile navigation, 2-col grids
xs 576px Single column, stacked layouts

8. Implementation Notes

8.1 Technology Stack Mapping

Layer Technology Notes
Frontend React + Next.js 14+ App Router, Server Components
Styling Tailwind CSS + CSS Variables Dark mode via dark class
UI Components shadcn/ui base Customized for dark theme
Icons Lucide React Consistent icon set
State Management Zustand Lightweight global state
Real-time Socket.IO client WebSocket for live updates
Video hls.js / native WebRTC HLS for camera streams
Charts Recharts Performance metrics, timelines
Maps (zones) SVG + native events Polygon drawing on camera feed
Backend API FastAPI RESTful + WebSocket endpoints

8.2 API Endpoint Conventions

Endpoint Pattern Purpose
GET /api/cameras List all cameras with status
GET /api/cameras/{id}/stream Get stream URL
GET /api/alerts List alerts (with filters)
POST /api/alerts/{id}/acknowledge Acknowledge alert
GET /api/detections List detections
GET /api/persons List known persons
POST /api/persons Create new person
GET /api/persons/{id} Get person profile
GET /api/unknowns List unknown clusters
POST /api/unknowns/{id}/name Name unknown cluster
GET /api/ai-settings Get AI settings
PUT /api/ai-settings Update AI settings
GET /api/health System health status
WS /api/ws WebSocket for real-time updates

8.3 Accessibility Considerations

  • All interactive elements: Minimum 44x44px tap target
  • Color is never the sole indicator — always paired with icon or text
  • All images have alt text
  • Keyboard navigation supported throughout
  • Focus indicators visible on all interactive elements
  • Screen reader labels for status indicators
  • Respect prefers-reduced-motion for animations
  • ARIA labels on icon-only buttons
  • Form validation with clear error messages

8.4 Performance Targets

Metric Target
First Contentful Paint < 1.5s
Time to Interactive < 3s
Camera stream latency < 500ms
Alert notification delay < 2s from event to toast
Page transition < 200ms
API response time < 200ms (p95)
Simultaneous streams 8 streams at 1080p

8.5 Security Considerations

  • All API calls require JWT authentication
  • Camera credentials encrypted at rest
  • Session timeout: 30 minutes inactivity
  • Role-based access control (RBAC) enforced on all routes
  • Audit log for all admin actions
  • HTTPS-only for all communications
  • Sensitive settings (API keys) masked in UI

Appendix A: Icon Reference

Usage Lucide Icon Size
Dashboard LayoutDashboard 20px
Live View Video 20px
Alerts Bell 20px
Detections ScanEye 20px
Person Gallery Users 20px
Unknown Review UserQuestion 20px
Timeline ClockAlert 20px
Search Search 20px
Watchlists ShieldAlert 20px
AI Settings Sparkles 20px
Training Brain 20px
System Health Activity 20px
Settings Settings 20px
Camera Camera 20px
Storage HardDrive 20px
Users Admin UserCog 20px
Online Status Circle (filled) 8px
Recording Circle (filled, pulsing) 8px
Expand Maximize2 16px
Snapshot Camera 16px
Close X 16px
Edit Pencil 16px
Delete Trash2 16px
Check Check 16px
Warning AlertTriangle 16px
Info Info 16px
Chevron ChevronDown/Right 16px
Trend Up TrendingUp 14px
Trend Down TrendingDown 14px
Play Play 20px
Pause Pause 20px
Volume On Volume2 16px
Volume Off VolumeX 16px
Refresh RefreshCw 16px
Export Download 16px
Filter Filter 16px
Sort ArrowUpDown 16px
More Actions MoreVertical 16px
Logout LogOut 16px

Appendix B: Glossary

Term Definition
CP PLUS DVR Digital Video Recorder from CP PLUS brand, supports 8 camera channels
HLS HTTP Live Streaming, protocol for video streaming
WebRTC Web Real-Time Communication, low-latency streaming
RTSP Real Time Streaming Protocol, used by DVRs
Face Cluster Group of face detections believed to be the same person
Confidence Score AI's certainty percentage for a face match (0-100%)
Watchlist Curated list of persons with special alert rules
Night Mode Enhanced detection sensitivity during configured off-hours
Zone User-defined polygonal area within a camera's field of view
Evidence Capture Saved media (image + video clip) associated with a detection event
Self-Test Automated diagnostic check of all system components
Training Image Reference photo used to improve face recognition accuracy
MFA Multi-Factor Authentication
RBAC Role-Based Access Control

End of Document — Sentinel AI Surveillance Dashboard UX/UI Design