Implementation: src/MimironsGoldOMatic.Desktop — UI-301–308 (MVP-4). WinAPI / process discovery: Desktop component guide.
Normative behavior source: lifecycle, endpoint, and state semantics are defined in docs/overview/SPEC.md. This document defines WPF presentation and operator interaction shape.
| Area | Link |
|---|---|
| Main UI hub + tokens | UI_SPEC.md |
| Twitch Extension UI | MimironsGoldOMatic.TwitchExtension/UI_SPEC.md |
| WoW addon UI | MimironsGoldOMatic.WoWAddon/UI_SPEC.md |
MVP Stage: MVP-4 Scope note: this spec describes the operator-facing desktop flow from API setup through queue handling and delivery logging.
Component: Desktop Actor: Streamer Trigger: First launch or when opening settings. MVP Stage: MVP-4
| ID | Element Type | Label/Placeholder | State variants | Action on interact |
|---|---|---|---|---|
| EL-301-01 | Input | [ API base URL____ ] | save local settings | |
| EL-301-02 | Password box | [ X-MGM-ApiKey____ ] | secure storage DECISION | |
| EL-301-03 | Button | [ Test connection ] | loading | GET /api/payouts/pending |
| EL-301-04 | Button | [ Save ] | persist |
403 forbidden_apikey style message with remediation hint.╔════════════════════════════════════════════╗
║ Mimiron's Desktop — API Setup [✕] ║
║ ┌──────────────────────────────────────┐ ║
║ │ API Base URL │ ║
║ │ [https://api.example.com_____] │ ║
║ │ X-MGM-ApiKey │ ║
║ │ [••••••••••••••••••••] │ ║
║ └──────────────────────────────────────┘ ║
║ [ Test connection ] [ Save ] ║
╚════════════════════════════════════════════╝
Component: Desktop
Actor: Streamer
Trigger: No eligible foreground WoW.exe target is detected.
MVP Stage: MVP-4
| ID | Element Type | Label/Placeholder | State variants | Action on interact |
|---|---|---|---|---|
| EL-302-01 | Status bar | “Searching for WoW…” | idle / error | |
| EL-302-02 | Button | [ Refresh detection ] | rescan process | |
| EL-302-03 | Menu | File / Settings / View log | opens UI-306, UI-308 |
╔══════════════════════════════════════════════════════╗
║ Mimiron's Gold-o-Matic v0.1.0 [_] [□] [✕] ║
╠══════════════════════════════════════════════════════╣
║ Status: Searching for WoW (foreground)… EL-302-01 ║
║ ┌────────────────────────────────────────────────┐║
║ │ ( illustration: sleeping gnome / no WoW ) │║
║ └────────────────────────────────────────────────┘║
║ [ Refresh detection ] ║
╠══════════════════════════════════════════════════════╣
║ File Settings View log UI-302-03 ║
╚══════════════════════════════════════════════════════╝
Component: Desktop
Actor: Streamer
Trigger: Foreground WoW.exe is detected and ready for injection flow.
MVP Stage: MVP-4
| ID | Element Type | Label/Placeholder | State variants | Action on interact |
|---|---|---|---|---|
| EL-303-01 | Status | Process name + PID | ||
| EL-303-02 | Button | [ Sync / Inject ] | disabled until Ready | flow § Desktop ReadME |
| EL-303-03 | Indicator | Mailbox / Ready | per state machine |
╔══════════════════════════════════════════════════════╗
║ Mimiron's Gold-o-Matic v0.1.0 [_] [□] [✕] ║
╠══════════════════════════════════════════════════════╣
║ WoW: HIGH PID:12345 ✓ Ready to Inject EL-303 ║
║ ┌─ Queue (summary) ───────────────────────────────┐ ║
║ │ 3 Pending 0 In progress │ ║
║ └────────────────────────────────────────────────┘ ║
║ [ Sync / Inject ] ← EL-303-02 ║
╠══════════════════════════════════════════════════════╣
║ Last log: ACK Norinn !twgold @ 04:14:02 ║
╚══════════════════════════════════════════════════════╝
Sync/Inject → PATCH InProgress + WinAPI inject.PostMessage is primary and SendInput is fallback; current strategy should be visible in status UI.Component: Desktop Actor: Streamer Trigger: Visible as embedded main section or side panel. MVP Stage: MVP-4
| ID | Element Type | Label/Placeholder | State variants | Action on interact |
|---|---|---|---|---|
| EL-304-01 | DataGrid | Columns: Id, Toon, Gold, Status, Accepted? | sort | |
| EL-304-02 | Button row | Mark Failed / Cancel / Mark Sent | per row rules | PATCH |
| EL-304-03 | Filter | ▼ All / Pending / In progress |
┌─ Payout queue ─────────────────────────────────────┐
│ Filter: [ All ▼ ] EL-304-03│
│ ┌─────┬────────┬──────┬─────────┬─────────────────┐ │
│ │ ID │ Toon │ Gold │ Status │ Actions │ │
│ ├─────┼────────┼──────┼─────────┼─────────────────┤ │
│ │ a1..│ Norinn │1000g │Pending │[Fail][Cancel] │ │
│ │ b2..│ Kael │1000g │InProg │[Fail][Mk Sent] │ │
│ └─────┴────────┴──────┴─────────┴─────────────────┘ │
└────────────────────────────────────────────────────┘
WoWChatLog.txt watcher events (MGM_ACCEPT / MGM_CONFIRM).Component: Desktop Actor: System Trigger: Always visible (footer or header area). MVP Stage: MVP-4
| ID | Element Type | Label/Placeholder | State variants | Action on interact |
|---|---|---|---|---|
| EL-305-01 | Pill | Process | found / missing | |
| EL-305-02 | Pill | Mailbox | open / closed | |
| EL-305-03 | Pill | API | online / degraded |
╠══════════════════════════════════════════════════════╣
║ WoW ● Mailbox ○ API ● Last inject: 04:14:01 ║
╚══════════════════════════════════════════════════════╝
Component: Desktop Actor: Streamer Trigger: Menu → Settings. MVP Stage: MVP-4
| ID | Element Type | Label/Placeholder | State variants | Action on interact |
|---|---|---|---|---|
| EL-306-01 | Input | Polling interval (sec) | default 15 DECISION | |
| EL-306-02 | Dropdown | Injection: PostMessage / SendInput | ||
| EL-306-03 | Input | Polly retry count | ||
| EL-306-04 | File picker | WoW Logs path override |
optional DECISION |
╔══════════════════════════════╗
║ Settings [✕] ║
║ Poll interval: [ 15 ] sec ║
║ Input strategy: [PostMsg▼] ║
║ Retries: [ 3 ] ║
║ WoW log dir: [ Browse… ] ║
║ [ OK ] [ Cancel ] ║
╚══════════════════════════════╝
Component: Desktop Actor: System Trigger: API unavailable, WoW target missing, or injection failure. MVP Stage: MVP-4
| ID | Element Type | Label/Placeholder | State variants | Action on interact |
|---|---|---|---|---|
| EL-307-01 | Text | Title / body | ||
| EL-307-02 | Button | [ Retry ] [ Exit ] |
┌────────────────────────┐
│ ⚠ API unreachable │
│ Polly retries failed. │
│ [ Retry ] [ Exit ] │
└────────────────────────┘
Component: Desktop Actor: Streamer Trigger: Menu action: View log. MVP Stage: MVP-4
| ID | Element Type | Label/Placeholder | State variants | Action on interact |
|---|---|---|---|---|
| EL-308-01 | ListBox | Timestamped lines | scroll | copy line |
| EL-308-02 | Button | [ Clear ] | ||
| EL-308-03 | Button | [ Export ] |
╔════════════════════════════════════════════════════╗
║ Event log [ Clear ] ║
║ ┌──────────────────────────────────────────────┐ ║
║ │ 04:14:01 MGM_CONFIRM match a1b2c3d… │ ║
║ │ 04:13:40 MGM_ACCEPT match → confirm-accept │ ║
║ │ 04:13:05 PostMessage inject OK │ ║
║ └──────────────────────────────────────────────┘ ║
╚════════════════════════════════════════════════════╝
UI-301 (API setup) ──→ UI-302 (idle) ──[WoW found]──→ UI-303 (active)
│ │
│ ├── UI-304 queue
│ ├── UI-305 status bar
│ └── UI-307 errors
└── settings ──→ UI-306
└── log ───────→ UI-308
Full cross-component diagram: Main UI spec — Navigation Flow.