Cybersecurity-Projects/PROJECTS/advanced/monitor-the-situation-dashb.../frontend/src
CarterPerez-dev 9d391434e0 feat(monitor/frontend): ransomware panel (victim feed + 600ms data-changed flash)
RansomwareStore (zustand) accumulates RansomwareVictim items dedup-by
composite key (post_title|group_name|discovered) — the JSON payload has
no id field (the backend computes one via Row.ID() but doesn't include
it in the WS payload), so the composite key is what we have. Capped 200.

6-row tight table — victim mono primary, group sans --fg-2, country
sans --fg-3, ago mono muted right-aligned. table-layout fixed +
ellipsis. Hover --bg-row-hover.

Flash on new arrival: a useRef<Set> tracks seen composite keys; new
items not in the set get added to a flashKeys state for 600ms, which
applies a row-flash keyframe animation that fades from --fg-4
background to transparent. Per ethos motion=meaning rule — the only
panel motion allowed because new ransomware victims literally are
"data changed." Initial seed (when seenKeys is empty) does NOT trigger
a flash — the first batch is "what's there now," not "new arrivals."

No skull / lock / "RANSOMWARE!!" iconography (per Plan 5 Task 17 Design
QA). No colored severity. After flash, row visually identical to others.

Real shape verified against live snapshot.ransomware_victim: snake_case
post_title/group_name/discovered/country/activity/website/description.
TS interface matches.
2026-05-03 09:32:20 -04:00
..
api feat(monitor/frontend): dashboard WS client with reconnect + init handshake (TDD, 6 tests) 2026-05-02 05:35:18 -04:00
core chore(monitor/frontend): demolish template shell + landing for clean dashboard canvas 2026-05-03 02:04:26 -04:00
lib feat(monitor/frontend): ethos design tokens (colors, type, density) 2026-05-02 05:32:26 -04:00
pages feat(monitor/frontend): ransomware panel (victim feed + 600ms data-changed flash) 2026-05-03 09:32:20 -04:00
stores feat(monitor/frontend): ransomware panel (victim feed + 600ms data-changed flash) 2026-05-03 09:32:20 -04:00
styles feat(monitor/frontend): alert banner (one-amber-fill overlay, 30s auto-dismiss) 2026-05-03 06:58:37 -04:00
App.tsx chore(monitor/frontend): demolish template shell + landing for clean dashboard canvas 2026-05-03 02:04:26 -04:00
config.ts feat(monitor/frontend): F-key presentation mode + localStorage persistence 2026-05-03 07:02:56 -04:00
main.tsx feat(monitor): infra scaffold — Dockerfiles, conf/ tree, .gitignore 2026-05-01 06:12:25 -04:00
styles.scss feat(monitor/frontend): ethos-aligned base styles (zero rounding, density, tabular nums) 2026-05-02 05:33:12 -04:00