diff --git a/frontend/CLAUDE.md b/frontend/CLAUDE.md new file mode 100644 index 0000000..2d39e36 --- /dev/null +++ b/frontend/CLAUDE.md @@ -0,0 +1,43 @@ +# hiveops-aria frontend — CLAUDE.md + +## Before writing ANY new component + +Read an existing sibling component first. Mandatory. Use `IocManagement.svelte` or `DevicePosture.svelte` as the reference. + +## Canonical patterns (copy exactly, no variations) + +**Header** — text only, no buttons: +```svelte +
+
+

Page Title

+

Subtitle

+
+
+``` + +**Toolbar** — all buttons go here, never in the header: +```svelte +
+
+
N items
+
+ + +
+
+``` + +**Buttons** — always global classes, never custom button CSS: +- `btn btn-primary` / `btn btn-primary btn-sm` +- `btn btn-secondary` / `btn btn-secondary btn-sm` + +**Table** — inside `.table-wrapper > .table-container`: +- `thead` background: `#f9fafb`, sticky +- `th` color: `#374151`, uppercase, `font-size: 0.78rem` +- `td` color: `#1f2937` +- `tbody tr:hover` background: `#eff6ff` + +## Auto-poll +- Poll the STATUS endpoint only — never trigger a refresh from setInterval +- Use `onDestroy(() => clearInterval(interval))` always