7.1 KiB
TASK-154 - Current match killfeed overlay layout
Status: in-progress
Goal
Redesign the current-match kill feed frontend so it behaves like a compact live killfeed overlay.
Background
The current-match page already renders a kill feed using:
GET /api/current-match/kills?server=...
The feed currently appears as a vertical list of large historical-style cards. This is not the desired UX.
Desired UX
The kill feed should look like a compact live FPS-style overlay:
- A rectangular live panel.
- Events rendered as compact rows/chips.
- Each event should show:
- killer name
- weapon icon or weapon label fallback
- victim name
- Events should be arranged in three visual columns inside the panel.
- New events should appear progressively.
- Older events should move left and eventually disappear.
- The feed should feel like a real-time combat screen, not a historical list.
The user explicitly wants:
- "una especie de pantalla en tiempo real"
- "simplemente se muestre el texto, el que mata, el arma y alguien mata"
- "iconos del arma que se utiliza"
- "una pequeña pantalla rectangular"
- "se irá poniendo de arriba abajo en tres columnas"
- "se irá desplazando hacia la izquierda e irán desapareciendo las más antiguas"
Scope
Replace the current large-card kill feed with a compact live overlay on the current-match page.
Allowed changes:
frontend/assets/js/partida-actual.jsfrontend/partida-actual.htmlif neededfrontend/assets/css/historico.cssor the relevant CSS used bypartida-actual.htmlfrontend/assets/css/styles.cssonly if the current-match page depends on itfrontend/assets/img/weapons/*if local weapon icons/placeholders are added- backend only if a small weapon normalization field is needed, but prefer frontend-side mapping first
- focused tests or node validation
Constraints - DO NOT BREAK
- Do not break
/api/current-match/kills. - Do not expose raw AdminLog lines.
- Do not fabricate kill events.
- Do not show stale kills as live kills.
- Do not break the current-match scoreboard/header.
- Do not break historical match detail pages.
- Do not query RCON directly from the frontend.
- Do not depend on server #03.
- Do not require external/CDN assets at runtime.
- If weapon icons are added, they must be local/static assets or generated lightweight inline/SVG placeholders.
- Keep the UI responsive.
Files to inspect first
Read:
frontend/partida-actual.htmlfrontend/assets/js/partida-actual.js- the CSS currently used by
frontend/partida-actual.html - focused current-match kill feed tests or validation scripts if present
Inspect the current kill feed rendering, event_id handling, scope copy, and current polling behavior before changing code.
Implementation requirements
1. Compact live panel
Replace the current large-card feed rendering with a compact live killfeed panel.
The panel must be visually rectangular and compact. It should look like a live combat overlay, not a list of historical cards.
2. Layout
- Use a three-column visual layout on desktop.
- Events should fill vertically within a column, then continue through the next visual position.
- Newer events should be visually prioritized.
- Older events should shift left and disappear once the maximum number of visible events is exceeded.
- On narrow/mobile widths, fall back to one or two columns without overflow.
3. Event content
Each kill event must show:
- killer name
- weapon icon or weapon label
- victim name
- optional timestamp only if it does not make the UI noisy
- teamkill indicator if
is_teamkillis true
4. Weapon icons
Add a safe mapping for common weapons currently seen in AdminLog examples:
M1 GARANDMP40M1A1 THOMPSONUNKNOWN
Prefer local SVG/icon placeholders if real weapon assets are not available.
- Do not hotlink external images.
- Unknown weapons must show a generic weapon icon/label fallback.
- The icon mapping should be easy to extend later.
5. Motion and transition
- Use CSS transitions/animations only if they are subtle.
- Avoid layout jumps.
- Respect users with reduced motion if possible.
- The feed should not flicker every poll.
6. Deduplication
- Preserve existing
event_iddeduplication. - Re-rendering must not duplicate rows.
- Repeated polling must keep already visible events stable.
7. Maximum visible events
- Limit visible events to a reasonable number, for example 12 or 15.
- Older events should be dropped from the visual panel.
- Do not render an infinitely growing list.
8. Copy
Use these messages:
- If there are no events: "Todavía no se han detectado bajas en esta partida."
- If scope is open match window: "Bajas detectadas en la partida actual."
- If scope is
recent-admin-log-window: "Cobertura parcial desde AdminLog reciente." - If stale/no current events: "Sin bajas recientes asociadas a la partida actual."
9. Accessibility
- Keep
aria-livepolite or equivalent. - Event text must remain readable even if icons fail.
Validation
Run:
node --check frontend/assets/js/partida-actual.js- any existing frontend validation if available
Manual verification checklist
- Open
http://localhost:8080/partida-actual.html?server=comunidad-hispana-01. - Open
http://localhost:8080/partida-actual.html?server=comunidad-hispana-02. - Verify kill feed appears as a compact rectangular live overlay.
- Verify events render as killer -> weapon/icon -> victim.
- Verify it uses three columns on desktop.
- Verify old events disappear instead of growing endlessly.
- Verify repeated polling does not duplicate events.
- Verify teamkills are visually distinguishable.
- Verify unknown weapons use a clean fallback.
- Verify no raw AdminLog line is shown.
- Verify no external image URLs are required.
Expected outcome
The current-match kill feed looks and behaves like a compact live FPS-style killfeed overlay with local/fallback weapon icon support.
AI Platform lifecycle
After implementation and validation:
- Move this task according to the lifecycle defined in
AGENTS.md. - Do not mark unrelated tasks as done automatically.
Outcome
- Replaced the historical-style kill cards with a capped 15-event rectangular overlay in
partida-actual. - Kept
event_iddeduplication and avoided poll flicker by only re-rendering when the visible event-id set changes. - Rendered older visible events first so they occupy the left side of the three-column desktop panel while newer events remain visually prioritized on the right.
- Added local text-glyph weapon placeholders for
M1 GARAND,MP40,M1A1 THOMPSONand unknown/other weapons without external assets. - Validation run:
node --check frontend/assets/js/partida-actual.jsscripts/run-historical-ui-regression-tests.ps1git diff --checkgit diff --name-only
- Scope review: changed product files are
frontend/assets/js/partida-actual.jsandfrontend/assets/css/historico.css. - Manual/rendered Browser QA remains to be repeated when the Browser automation entry point is exposed; the local frontend and backend current-match endpoints were reachable during validation.