From cbb09ea524d385581e42e9fe418e68d3ea14dcff Mon Sep 17 00:00:00 2001 From: Mike Swanson Date: Sun, 28 Dec 2025 10:37:34 -0700 Subject: [PATCH] Add portal UX and dashboard specifications MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Portal (unauthenticated): - Code entry with browser-specific download instructions - Custom protocol handler (guruconnect://session/{code}) - One-time agent runs in userspace, no admin required Dashboard (authenticated): - Support tab: Active sessions by technician, support request queue - Access tab: Three-panel layout with groupings sidebar - Build tab: Installer builder form - Settings tab: Appearance, groupings, notifications, account Visual style matches GuruRMM dashboard design πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .cargo/config.toml | 8 +- REQUIREMENTS.md | 264 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 267 insertions(+), 5 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index d01c04f..9438e74 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,6 +1,6 @@ -# GuruConnect Cargo Configuration +# GuruConnect Cargo Configuration (Windows Development) -# Default to 64-bit Windows MSVC +# Default to 64-bit Windows MSVC for local dev [build] target = "x86_64-pc-windows-msvc" @@ -10,10 +10,8 @@ target = "x86_64-pc-windows-msvc" b64 = "build --release --target x86_64-pc-windows-msvc" # Build 32-bit release b32 = "build --release --target i686-pc-windows-msvc" -# Build both architectures -ball = ["b64", "b32"] -# Target-specific settings +# Target-specific settings - static CRT for standalone binaries [target.x86_64-pc-windows-msvc] rustflags = ["-C", "target-feature=+crt-static"] diff --git a/REQUIREMENTS.md b/REQUIREMENTS.md index b6b59b5..c28c711 100644 --- a/REQUIREMENTS.md +++ b/REQUIREMENTS.md @@ -8,6 +8,270 @@ --- +## End-User Portal (connect.azcomputerguru.com) + +### Unauthenticated View + +When a user visits the portal without being logged in: + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ β”‚ +β”‚ [Company Logo] β”‚ +β”‚ β”‚ +β”‚ Enter your support code: β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ 8 4 7 2 9 1 β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”‚ +β”‚ [ Connect ] β”‚ +β”‚ β”‚ +β”‚ ───────────────────────────────────────────────── β”‚ +β”‚ β”‚ +β”‚ Instructions will appear here after clicking β”‚ +β”‚ Connect, based on your browser. β”‚ +β”‚ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +### Connection Flow + +1. **User enters code** β†’ Click "Connect" +2. **Server validates code** β†’ Returns session info or error +3. **Attempt app launch** via custom protocol: + - `guruconnect://session/{code}` + - If app is installed, it launches and connects +4. **If app doesn't launch** (timeout ~3 seconds): + - Auto-download small EXE (`GuruConnect-{code}.exe`) + - Show browser-specific instructions + +### Browser-Specific Instructions + +Detect browser via User-Agent and show appropriate guidance: + +**Chrome:** +> "Click the download in the bottom-left corner of your screen, then click 'Open'" +> [Screenshot of Chrome download bar] + +**Firefox:** +> "Click 'Save File', then open your Downloads folder and double-click the file" +> [Screenshot of Firefox download dialog] + +**Edge:** +> "Click 'Open file' in the download notification at the top of your screen" +> [Screenshot of Edge download prompt] + +**Safari:** +> "Click the download icon in the toolbar, then double-click the file" +> [Screenshot of Safari downloads] + +**Generic/Unknown:** +> "Your download should start automatically. Look for the file in your Downloads folder and double-click to run it." + +### Custom Protocol Handler + +**Protocol:** `guruconnect://` + +**Format:** `guruconnect://session/{code}` + +**Registration:** +- Permanent agent registers protocol handler on install +- One-time agent does NOT register (to avoid clutter) + +**Behavior:** +- If registered: OS launches installed agent with session code +- If not registered: Browser shows "nothing happened" β†’ triggers download fallback + +### One-Time Session Agent (Temp/Support) + +**Key Requirements:** +- Runs in **user space** - NO admin elevation required +- Downloads as `GuruConnect-{code}.exe` (code baked in) +- ~3-5MB executable +- Self-contained (no installer, no dependencies) +- Connects directly to session on launch +- Self-deletes after session ends (or on next reboot) + +**Elevation Note:** +- Basic screen sharing works without admin +- Some features (input to elevated windows, UAC dialogs) need admin +- Show optional "Run as Administrator" button for full access + +--- + +## Technician Dashboard (Logged-In View) + +### Visual Style + +Follow GuruRMM dashboard design: +- HSL CSS variables for theming (dark/light mode support) +- Sidebar navigation with lucide-react icons +- Card-based content areas +- Responsive layout (mobile hamburger menu) +- Consistent component library (Button, Card, Input) + +### Navigation Structure + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚GuruConnectβ”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”‚ +β”‚ πŸ“‹ Support ← Active temp sessions β”‚ +β”‚ πŸ–₯️ Access ← Unattended/permanent sessions β”‚ +β”‚ πŸ”§ Build ← Installer builder β”‚ +β”‚ βš™οΈ Settings ← Preferences, groupings, appearance β”‚ +β”‚ β”‚ +β”‚ ───────────── β”‚ +β”‚ πŸ‘€ Mike S. β”‚ +β”‚ Admin β”‚ +β”‚ [Sign out] β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +### Support Tab (Active Temporary Sessions) + +**Layout:** +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Support Sessions [ + Generate Code ] β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ β”‚ +β”‚ β–Ό My Sessions (3) β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ 847291 β”‚ John's PC β”‚ Connected β”‚ 00:15:32 β”‚ [Join] [End] β”‚ β”‚ +β”‚ β”‚ 293847 β”‚ Waiting β”‚ Pending β”‚ - β”‚ [Cancel] β”‚ β”‚ +β”‚ β”‚ 182736 β”‚ Sarah-PC β”‚ Connected β”‚ 00:45:10 β”‚ [Join] [End] β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”‚ +β”‚ β–Ό Team Sessions (2) [Howard's sessions] β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ 928374 β”‚ DESKTOP-A β”‚ Connected β”‚ 00:05:22 β”‚ [View] [Join] β”‚ β”‚ +β”‚ β”‚ 746382 β”‚ Laptop-01 β”‚ Connected β”‚ 01:20:15 β”‚ [View] β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”‚ +β”‚ β–Ά Support Requests (1) [End-user initiated] β”‚ +β”‚ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +**Features:** +- Sessions grouped by technician (own first, then team) +- Real-time status updates (WebSocket) +- Duration timer for active sessions +- Quick actions: Join, View (spectate), End, Cancel +- Support request queue from end-user tray icon requests + +### Access Tab (Unattended/Permanent Sessions) + +**Layout:** +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Access πŸ” [Search...] [ + Build ] β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ β”‚ β”‚ +β”‚ β–Ό By Company β”‚ All Machines by Company 1083 machines β”‚ +β”‚ (empty) 120β”‚ ─────────────────────────────────────────────────── β”‚ +β”‚ 4 Paws 1β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ ACG 10β”‚ β”‚ ● PC-FRONT01 β”‚ Glaztech β”‚ Win 11 β”‚ Online β”‚ β”‚ +β”‚ Glaztech 224 β”‚ ● SERVER-DC01 β”‚ Glaztech β”‚ Svr 22 β”‚ Online β”‚ β”‚ +β”‚ AirPros 2β”‚ β”‚ β—‹ LAPTOP-SALES β”‚ Glaztech β”‚ Win 10 β”‚ 2h ago β”‚ β”‚ +β”‚ ... β”‚ β”‚ ● WORKSTATION-3 β”‚ ACG β”‚ Win 11 β”‚ Online β”‚ β”‚ +β”‚ β”‚ β”‚ ... β”‚ β”‚ +β”‚ β–Ά By Site β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β–Ά By OS β”‚ β”‚ +β”‚ β–Ά By Tag β”‚ ──────────────── Machine Detail ───────────────── β”‚ +β”‚ β”‚ Name: PC-FRONT01 β”‚ +β”‚ ──────────── β”‚ Company: Glaztech Industries β”‚ +β”‚ Smart Groups β”‚ Site: Phoenix Office β”‚ +β”‚ ──────────── β”‚ OS: Windows 11 Pro (23H2) β”‚ +β”‚ Attention 1β”‚ User: jsmith β”‚ +β”‚ Online 847 IP: 192.168.1.45 / 72.194.62.4 β”‚ +β”‚ Offline 30d 241 Serial: 8XKJF93 β”‚ +β”‚ Offline 1yr 238 Last Seen: Now β”‚ +β”‚ Outdated 516β”‚ β”‚ +β”‚ Recent 5β”‚ [ Connect ] [ Wake ] [ Tools β–Ό ] β”‚ +β”‚ β”‚ β”‚ +β”‚ β–Ά My Filters β”‚ β”‚ +β”‚ + New Filterβ”‚ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +**Left Sidebar - Groupings:** +- By Company (with counts, expandable) +- By Site +- By OS +- By Tag +- By Device Type +- Smart Groups (auto-generated) +- Custom Filters (user-created) + +**Main Panel:** +- Machine list with status indicators (● online, β—‹ offline) +- Quick info columns (configurable) +- Click to select β†’ shows detail panel + +**Right Panel - Machine Detail:** +- Full machine info (Session, Device, Network sections) +- Action buttons: Connect, Wake (if offline), Tools dropdown + +### Build Tab (Installer Builder) + +**Layout:** +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Build Installer β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ β”‚ +β”‚ Name: [ Use Machine Name β–Ό ] β”‚ +β”‚ Company: [ __________________________ ] (autocomplete) β”‚ +β”‚ Site: [ __________________________ ] (autocomplete) β”‚ +β”‚ Department: [ __________________________ ] β”‚ +β”‚ Device Type: [ Workstation β–Ό ] β”‚ +β”‚ Tag: [ __________________________ ] β”‚ +β”‚ β”‚ +β”‚ Platform: β—‹ Windows 64-bit (recommended) β”‚ +β”‚ β—‹ Windows 32-bit β”‚ +β”‚ β—‹ Linux (coming soon) β”‚ +β”‚ β”‚ +β”‚ ───────────────────────────────────────────────────────────────── β”‚ +β”‚ β”‚ +β”‚ [ Download EXE ] [ Download MSI ] [ Copy URL ] [ Send Link ] β”‚ +β”‚ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +### Settings Tab + +**Sections:** + +**Appearance:** +- Theme: Light / Dark / System +- Sidebar: Expanded / Collapsed by default +- Default landing tab: Support / Access + +**Groupings:** +- Default grouping for Access tab +- Show/hide specific smart groups +- Configure custom filter defaults + +**Notifications:** +- Browser notifications: On/Off +- Sound alerts: On/Off +- Email alerts for support requests: On/Off + +**Session Defaults:** +- Default session visibility: Private / Team / Company +- Auto-accept from specific companies + +**Account:** +- Change password +- Two-factor authentication +- API keys (for integrations) + +--- + ## Session Types ### 1. Support Sessions (Attended/One-Time)