diff --git a/assets/logo.png b/assets/logo.png index 04c66b71..fecb6e78 100644 Binary files a/assets/logo.png and b/assets/logo.png differ diff --git a/assets/nyx-logo-text.png b/assets/nyx-logo-text.png deleted file mode 100644 index e0fc04e2..00000000 Binary files a/assets/nyx-logo-text.png and /dev/null differ diff --git a/assets/nyx-logo.png b/assets/nyx-logo.png deleted file mode 100644 index e261bf28..00000000 Binary files a/assets/nyx-logo.png and /dev/null differ diff --git a/assets/screenshots/cli-scan.gif b/assets/screenshots/cli-scan.gif index 83b370b7..c9e4a2ea 100644 Binary files a/assets/screenshots/cli-scan.gif and b/assets/screenshots/cli-scan.gif differ diff --git a/assets/screenshots/cli-scan.png b/assets/screenshots/cli-scan.png index dc108a63..91e43979 100644 Binary files a/assets/screenshots/cli-scan.png and b/assets/screenshots/cli-scan.png differ diff --git a/assets/screenshots/cli-scan_raw.gif b/assets/screenshots/cli-scan_raw.gif index abbc9a96..6da5432e 100644 Binary files a/assets/screenshots/cli-scan_raw.gif and b/assets/screenshots/cli-scan_raw.gif differ diff --git a/assets/screenshots/cli-scan_raw.png b/assets/screenshots/cli-scan_raw.png index 6917c7f1..ef68b052 100644 Binary files a/assets/screenshots/cli-scan_raw.png and b/assets/screenshots/cli-scan_raw.png differ diff --git a/assets/screenshots/demo-combo.gif b/assets/screenshots/demo-combo.gif new file mode 100644 index 00000000..1504e522 Binary files /dev/null and b/assets/screenshots/demo-combo.gif differ diff --git a/assets/screenshots/demo.gif b/assets/screenshots/demo.gif index 035e61f8..7d8a2a90 100644 Binary files a/assets/screenshots/demo.gif and b/assets/screenshots/demo.gif differ diff --git a/assets/screenshots/demo_raw.gif b/assets/screenshots/demo_raw.gif index 497bde35..e905b66f 100644 Binary files a/assets/screenshots/demo_raw.gif and b/assets/screenshots/demo_raw.gif differ diff --git a/assets/screenshots/docs/cli-failon.png b/assets/screenshots/docs/cli-failon.png index dc108a63..91e43979 100644 Binary files a/assets/screenshots/docs/cli-failon.png and b/assets/screenshots/docs/cli-failon.png differ diff --git a/assets/screenshots/docs/cli-failon_raw.png b/assets/screenshots/docs/cli-failon_raw.png index 6917c7f1..ef68b052 100644 Binary files a/assets/screenshots/docs/cli-failon_raw.png and b/assets/screenshots/docs/cli-failon_raw.png differ diff --git a/assets/screenshots/docs/cli-idxstatus.png b/assets/screenshots/docs/cli-idxstatus.png index 87e7ef17..a9e38c68 100644 Binary files a/assets/screenshots/docs/cli-idxstatus.png and b/assets/screenshots/docs/cli-idxstatus.png differ diff --git a/assets/screenshots/docs/cli-idxstatus_raw.png b/assets/screenshots/docs/cli-idxstatus_raw.png index 25f09ccf..3e7440c6 100644 Binary files a/assets/screenshots/docs/cli-idxstatus_raw.png and b/assets/screenshots/docs/cli-idxstatus_raw.png differ diff --git a/assets/screenshots/docs/serve-config.png b/assets/screenshots/docs/serve-config.png index 04c405c9..d51804cb 100644 Binary files a/assets/screenshots/docs/serve-config.png and b/assets/screenshots/docs/serve-config.png differ diff --git a/assets/screenshots/docs/serve-config_raw.png b/assets/screenshots/docs/serve-config_raw.png index 64bdceed..12217040 100644 Binary files a/assets/screenshots/docs/serve-config_raw.png and b/assets/screenshots/docs/serve-config_raw.png differ diff --git a/assets/screenshots/docs/serve-explorer.png b/assets/screenshots/docs/serve-explorer.png index 4b4c725b..3285662c 100644 Binary files a/assets/screenshots/docs/serve-explorer.png and b/assets/screenshots/docs/serve-explorer.png differ diff --git a/assets/screenshots/docs/serve-explorer_raw.png b/assets/screenshots/docs/serve-explorer_raw.png index 3bbffd41..353cdc14 100644 Binary files a/assets/screenshots/docs/serve-explorer_raw.png and b/assets/screenshots/docs/serve-explorer_raw.png differ diff --git a/assets/screenshots/docs/serve-finding-detail.png b/assets/screenshots/docs/serve-finding-detail.png index 067b7081..0905e5e9 100644 Binary files a/assets/screenshots/docs/serve-finding-detail.png and b/assets/screenshots/docs/serve-finding-detail.png differ diff --git a/assets/screenshots/docs/serve-finding-detail_raw.png b/assets/screenshots/docs/serve-finding-detail_raw.png index 46d81650..de9980df 100644 Binary files a/assets/screenshots/docs/serve-finding-detail_raw.png and b/assets/screenshots/docs/serve-finding-detail_raw.png differ diff --git a/assets/screenshots/docs/serve-findings-list.png b/assets/screenshots/docs/serve-findings-list.png index ebe6e80f..47b9ca49 100644 Binary files a/assets/screenshots/docs/serve-findings-list.png and b/assets/screenshots/docs/serve-findings-list.png differ diff --git a/assets/screenshots/docs/serve-findings-list_raw.png b/assets/screenshots/docs/serve-findings-list_raw.png index c2106df9..047822fa 100644 Binary files a/assets/screenshots/docs/serve-findings-list_raw.png and b/assets/screenshots/docs/serve-findings-list_raw.png differ diff --git a/assets/screenshots/docs/serve-overview.png b/assets/screenshots/docs/serve-overview.png index a7496753..ed269d2b 100644 Binary files a/assets/screenshots/docs/serve-overview.png and b/assets/screenshots/docs/serve-overview.png differ diff --git a/assets/screenshots/docs/serve-overview_raw.png b/assets/screenshots/docs/serve-overview_raw.png index 1f3a2e6b..ff9443f2 100644 Binary files a/assets/screenshots/docs/serve-overview_raw.png and b/assets/screenshots/docs/serve-overview_raw.png differ diff --git a/assets/screenshots/docs/serve-rules.png b/assets/screenshots/docs/serve-rules.png index f0dadd14..42315f1c 100644 Binary files a/assets/screenshots/docs/serve-rules.png and b/assets/screenshots/docs/serve-rules.png differ diff --git a/assets/screenshots/docs/serve-rules_raw.png b/assets/screenshots/docs/serve-rules_raw.png index 5a41e1cc..2843768e 100644 Binary files a/assets/screenshots/docs/serve-rules_raw.png and b/assets/screenshots/docs/serve-rules_raw.png differ diff --git a/assets/screenshots/docs/serve-scan-detail.png b/assets/screenshots/docs/serve-scan-detail.png index a520d5bc..66bc8093 100644 Binary files a/assets/screenshots/docs/serve-scan-detail.png and b/assets/screenshots/docs/serve-scan-detail.png differ diff --git a/assets/screenshots/docs/serve-scan-detail_raw.png b/assets/screenshots/docs/serve-scan-detail_raw.png index acb0e013..8529c95d 100644 Binary files a/assets/screenshots/docs/serve-scan-detail_raw.png and b/assets/screenshots/docs/serve-scan-detail_raw.png differ diff --git a/assets/screenshots/docs/serve-scans.png b/assets/screenshots/docs/serve-scans.png index 710a7dbc..92558857 100644 Binary files a/assets/screenshots/docs/serve-scans.png and b/assets/screenshots/docs/serve-scans.png differ diff --git a/assets/screenshots/docs/serve-scans_raw.png b/assets/screenshots/docs/serve-scans_raw.png index 72a14aab..de27de74 100644 Binary files a/assets/screenshots/docs/serve-scans_raw.png and b/assets/screenshots/docs/serve-scans_raw.png differ diff --git a/assets/screenshots/docs/serve-triage.png b/assets/screenshots/docs/serve-triage.png index d5502934..8781ad88 100644 Binary files a/assets/screenshots/docs/serve-triage.png and b/assets/screenshots/docs/serve-triage.png differ diff --git a/assets/screenshots/docs/serve-triage_raw.png b/assets/screenshots/docs/serve-triage_raw.png index a60aeef2..ae5d91f5 100644 Binary files a/assets/screenshots/docs/serve-triage_raw.png and b/assets/screenshots/docs/serve-triage_raw.png differ diff --git a/assets/screenshots/overview.png b/assets/screenshots/overview.png index a7496753..ed269d2b 100644 Binary files a/assets/screenshots/overview.png and b/assets/screenshots/overview.png differ diff --git a/frontend/index.html b/frontend/index.html index 56c058b4..e9f900e4 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -3,8 +3,16 @@ - Nyx Scanner - + Nyx + + + + + +
diff --git a/frontend/public/favicon-180.png b/frontend/public/favicon-180.png new file mode 100644 index 00000000..ab8d9031 Binary files /dev/null and b/frontend/public/favicon-180.png differ diff --git a/frontend/public/favicon-32.png b/frontend/public/favicon-32.png new file mode 100644 index 00000000..b66ce1e8 Binary files /dev/null and b/frontend/public/favicon-32.png differ diff --git a/frontend/public/favicon-64.png b/frontend/public/favicon-64.png new file mode 100644 index 00000000..73fcc196 Binary files /dev/null and b/frontend/public/favicon-64.png differ diff --git a/frontend/public/logo.png b/frontend/public/logo.png new file mode 100644 index 00000000..fecb6e78 Binary files /dev/null and b/frontend/public/logo.png differ diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index df5ebe83..57fa48dc 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -5,7 +5,7 @@ let csrfTokenPromise: Promise | null = null; export class ApiError extends Error { /** * Stable machine-readable code (matches backend `ApiError`'s `code` field). - * Falls back to a synthetic value when the response wasn't structured — + * Falls back to a synthetic value when the response was not structured, * `network` for fetch failures, `http_` for plain-text responses. */ public code: string; @@ -49,7 +49,7 @@ async function errorFromResponse(res: Response): Promise { const code = typeof parsed.code === 'string' ? parsed.code : undefined; return new ApiError(res.status, msg, code, parsed.detail); } catch { - // Plain-text body — use as-is. + // Plain-text body, use as-is. return new ApiError(res.status, text); } } diff --git a/frontend/src/components/charts/HorizontalBarChart.tsx b/frontend/src/components/charts/HorizontalBarChart.tsx index 73a5d5a5..b0976ef1 100644 --- a/frontend/src/components/charts/HorizontalBarChart.tsx +++ b/frontend/src/components/charts/HorizontalBarChart.tsx @@ -23,10 +23,10 @@ export function HorizontalBarChart({ ); } - const barH = 22; - const gap = 4; - const labelW = 110; - const valueW = 45; + const barH = 32; + const gap = 12; + const labelW = 120; + const valueW = 48; const barAreaW = width - labelW - valueW - 16; const totalH = items.length * (barH + gap); const maxVal = maxValue ?? Math.max(...items.map((i) => i.value), 1); @@ -49,7 +49,7 @@ export function HorizontalBarChart({ x={labelW - 8} y={y + barH / 2 + 4} textAnchor="end" - fontSize={11} + fontSize={13} fontFamily="var(--font)" fill="var(--text-secondary)" > @@ -68,7 +68,7 @@ export function HorizontalBarChart({ x={labelW + barAreaW + 8} y={y + barH / 2 + 4} textAnchor="start" - fontSize={11} + fontSize={13} fontFamily="var(--font-mono)" fontWeight={600} fill="var(--text)" diff --git a/frontend/src/components/charts/LineChart.tsx b/frontend/src/components/charts/LineChart.tsx index a79ef472..ef19c6a6 100644 --- a/frontend/src/components/charts/LineChart.tsx +++ b/frontend/src/components/charts/LineChart.tsx @@ -16,7 +16,7 @@ export function LineChart({ points, color = 'var(--accent)', width = 400, - height = 160, + height = 240, }: LineChartProps) { if (!points || points.length < 2) { return ( diff --git a/frontend/src/components/layout/HeaderBar.tsx b/frontend/src/components/layout/HeaderBar.tsx index cf6f5390..653566df 100644 --- a/frontend/src/components/layout/HeaderBar.tsx +++ b/frontend/src/components/layout/HeaderBar.tsx @@ -111,7 +111,7 @@ export function HeaderBar({ onStartScan, onOpenPalette }: HeaderBarProps) { className="btn btn-primary btn-sm" onClick={onStartScan} > - Start Scan + Start scan )} diff --git a/frontend/src/components/layout/Sidebar.tsx b/frontend/src/components/layout/Sidebar.tsx index 31b3d060..b78a2196 100644 --- a/frontend/src/components/layout/Sidebar.tsx +++ b/frontend/src/components/layout/Sidebar.tsx @@ -14,6 +14,7 @@ import { import type { FC } from 'react'; import type { IconProps } from '../icons/Icons'; import { useHealth } from '../../api/queries/health'; +import { useOverview } from '../../api/queries/overview'; import { useSSE } from '../../contexts/SSEContext'; interface NavItem { @@ -89,17 +90,19 @@ function navLinkClass({ isActive }: { isActive: boolean }) { export function Sidebar() { const { data: health } = useHealth(); + const { data: overview } = useOverview(); const { isScanRunning } = useSSE(); const primary = NAV_SECTIONS.filter((n) => n.group === 'primary'); const secondary = NAV_SECTIONS.filter((n) => n.group === 'secondary'); const footer = NAV_SECTIONS.filter((n) => n.group === 'footer'); + const findingsCount = + overview && overview.state !== 'empty' ? overview.total_findings : null; return (