Skip to content

Ronald's dashboard — UX spec

Status: draft Author: Agent C (frontend bucket, round 1) Reviewers: Sophia Mann, Andrew Kent, Agent B (data contract), Agent E (privacy); round-2 critique agent Last updated: 2026-05-10

This is the single most important screen in the LBZF CV product. Ronald Gonzalez Suarez — LBZF’s head industrial engineer — is the daily heavy user. If he opens this dashboard at 7am on a Monday and it does not save him work relative to the current whiteboard + stopwatch + Excel loop, he abandons it. There is no fallback persona. Phase I succeeds when Ronald opens this dashboard every day for a month without us asking him to.

His current artifacts are:

  • The hourly whiteboard per module: hora / meta / real / % attainment.
  • INDICADORES ABRIL.xlsx — monthly KPI sheet with jornada, #operarios, OP, SAM, units, total minutos productivos, eficiencia, rendimiento modulo.
  • Ref22 Slim - Angela.xlsx — “Balanceo” tab: SAMs per operation, machine codes (MPP / MREV / MOJA / MBOT / PLCH), workstation assignments.
  • A stopwatch and the 22 lost-time codes (C001–C022).

The dashboard must look like a richer, live version of those — not a Silicon Valley reinvention.

Anchor artifacts:

  • docs/factory/current-state.md
  • docs/factory/operations.md
  • docs/factory/lbzf.md
  • docs/overview/people.md (Ronald entry)
  • This bucket’s user-personas.md §“Ronald”
  • At 7am Ronald opens the page and within 5 seconds knows (a) is Angela on pace for the hour, (b) is any workstation behind SAM, (c) is any camera offline.
  • The dashboard replaces the hourly whiteboard glance — does not add to it.
  • The Excel export produces a .xlsx byte-compatible with INDICADORES ABRIL.xlsx so Ronald’s existing month-end workflow is unchanged.
  • Every label, button, and value is in Spanish-CO, using Ronald’s vocabulary (puesto, meta, real, eficiencia, SAM, umbrales, jornada).
  • Spot-check capability: from any cycle-time line, Ronald can click and see the live camera feed for that workstation in two clicks or fewer.
  • Pretty animations.
  • Mobile-optimized layout in Phase I — Ronald is at the office desktop. Tablet responsive is a stretch goal; phone is not.
  • AI-generated narratives (“Angela is underperforming because…”). That’s Phase II. Phase I shows data, not narratives.
  • The detailed Excel export schema beyond “matches INDICADORES ABRIL.xlsx format”. Owned in Agent B’s spec.
  • Behavioral monitoring (phone use, eating). Phase II.

http://<jetson-tailscale-ip>:5000/ (per ../technical/frontend/information-architecture.md §“Option C”). Ronald’s authenticated entry from lbzfai.com is /app/ingeniero which redirects (or instructs) into the Jetson IP.

┌──────────────────────────────────────────────────────────────────────────────────┐
│ LBZF — Monitoreo de Producción Angela ▾ Ronald ⏻ │ ← Header
├──────────────────────────────────────────────────────────────────────────────────┤
│ Hora actual: 09:00–10:00 Meta: 49 Real: 41 84% ⚠ │ ← Hourly pace strip
│ Acumulado jornada: 312/360 Eficiencia: 86,7% Tendencia: ▼3pp │
├──────────────────────────────────────────────────────────────────────────────────┤
│ Puestos │
│ ┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐ │
│ │ 1 │ Dobladillar │ │ 2 │ Encarterar │ │ 3 │ Planchar │ … │
│ │ Operario A │ │ Operario B │ │ Operario C │ │
│ │ Ciclo 22s / 25s │ │ Ciclo 31s / 28s ⚠│ │ Ciclo 18s / 19s │ │
│ │ Últimos 10: ▂▃▂▂▃▃│ │ Últimos 10: ▅▄▆▇▅│ │ Últimos 10: ▂▂▂▂▂ │ │
│ │ ● Cámara OK │ │ ● Cámara OK │ │ ● Cámara OK │ │
│ └────────────────────┘ └────────────────────┘ └────────────────────┘ │
│ … (21 tiles total for Angela) │
├──────────────────────────────────────────────────────────────────────────────────┤
│ Acciones │
│ [ Codificar tiempo perdido (C001–C022) ] [ Exportar INDICADORES (.xlsx) ] │
│ [ Ajustar umbrales ] [ Ver cámaras ] [ Historial Angela ] │
└──────────────────────────────────────────────────────────────────────────────────┘
  • Left: product name in Spanish — “LBZF — Monitoreo de Producción”.
  • Center-left: module selector dropdown. Phase I shows only Angela; the dropdown still exists, with the other three modules visible but disabled and labeled “(próximamente)”.
  • Right: signed-in user name + sign-out icon.

2. Hourly pace strip (the most-important row on the most-important page)

Section titled “2. Hourly pace strip (the most-important row on the most-important page)”

This is the live equivalent of the whiteboard’s hora / meta / real / % row. Ronald’s hourly glance.

Fields:

FieldSpanish labelSourceSemantics
Current hour windowHora actual: 09:00–10:00server clock + shift definitionInclusive-exclusive.
Hour goalMeta: 49standard times × workstation paceThe 49 units/hr target for Angela.
Hour actualReal: 41sum of completed garments this hourLive, updates as cycles close.
% attainment84% + status iconReal / MetaGreen ≥ 95%, yellow 80–94%, red < 80% (thresholds editable in /admin).
Shift cumulativeAcumulado jornada: 312/360sum of completed units for the shift / sum of goals so farShift = jornada.
Shift efficiencyEficiencia: 86,7%total productive minutes / total scheduled minutes (or units × SAM / minutes elapsed; reuses INDICADORES math)Aligns with INDICADORES ABRIL.xlsx column eficiencia.
Trend vs same hour yesterdayTendencia: ▼3ppyesterday’s same-hour % attainment - today’s”pp” = percentage points.

Decimal separator: comma (es-CO standard). Time format: 24h, HH:MM. See ../technical/frontend/localization-es-co.md.

21 tiles for the Angela module. Default sort: workstation number (1–21) matching Ref22 Slim - Angela.xlsx “Balanceo” tab order. Alternative sort: by exception (most-behind first), via a small toggle.

Per tile:

┌────────────────────────────┐
│ 7 │ Pespuntar cuello │ ← workstation number + operation name (Spanish, exact spreadsheet label)
│ Operario D │ ← operator name (assigned from morning roster; greyed if not known)
│ Ciclo 34s / 30s ⚠ │ ← current cycle / SAM (last completed cycle's duration vs SAM in seconds)
│ Últimos 10: ▅▄▆▇▅▄▆▄▅▆ │ ← sparkline of last 10 cycle durations, scaled to ±50% of SAM
│ ● Cámara OK | 30s atrás │ ← camera status + seconds since last frame
└────────────────────────────┘

Tile color coding (rule of thumb):

  • Green border: last 5 cycles all within ±15% of SAM.
  • Yellow border: last 5 cycles average drifting > +15% over SAM.
  • Red border: > 2× SAM on the current cycle OR camera down > 60s.
  • Gray border: workstation empty / on pausa activa / enfermería (Ronald flags this manually via the lost-time entry).

Click on a tile → /modulo/angela/puesto/7 (per-station detail).

Operator name visibility is a privacy-sensitive default. Proposed default: show operator name to Ronald only (engineer role). Not to ITBA, not to Mariana’s executive view. See mariana-dashboard-ux.md and Agent E’s privacy spec. OPEN: Ronald + Mariana sign-off on operator-name visibility in engineering view.

Five primary buttons:

ButtonSpanishWhat it does
Code lost timeCodificar tiempo perdido (C001–C022)Opens modal listing the 22 codes; Ronald selects code, scope (module / workstation / interval), notes. Writes to event store.
Export INDICADORESExportar INDICADORES (.xlsx)Generates a .xlsx matching INDICADORES ABRIL.xlsx for the current shift, current day, or current month. Downloads to local.
Adjust thresholdsAjustar umbralesOpens /admin/umbrales. Per-module thresholds for green/yellow/red.
View camerasVer cámarasOpens /camaras — health page.
HistoryHistorial AngelaOpens /modulo/angela/historico — trend view.

Per-workstation page (/modulo/angela/puesto/7)

Section titled “Per-workstation page (/modulo/angela/puesto/7)”

When Ronald clicks a tile, he gets:

┌──────────────────────────────────────────────────────────┐
│ Puesto 7 — Pespuntar cuello (Operario D) ✕ │
├──────────────────────────────────────────────────────────┤
│ ┌──────────────────────────┐ Últimos ciclos │
│ │ │ 09:32:01 28s │
│ │ [Live video feed] │ 09:32:34 31s │
│ │ (640×480 sub-stream) │ 09:33:08 29s │
│ │ │ 09:33:39 34s ⚠ │
│ └──────────────────────────┘ 09:34:18 36s ⚠ │
│ Anonymizar caras ☐ 09:34:58 32s │
│ SAM: 30s Promedio últimos 10: 31,6s │
│ │
│ [ Marcar pausa activa ] [ Marcar mecánico esperando ] │
│ [ Asignar código C… ▾ ] │
└──────────────────────────────────────────────────────────┘

Key details:

  • Live video at sub-stream resolution (640×480) — matches the inference pipeline.
  • “Anonymizar caras” toggle: if Agent E’s privacy spec mandates faces-off-by-default, this is checked by default; uncheck requires admin role. OPEN: default state of anonymization toggle for engineer role.
  • Cycle table sorts newest-first.
  • Quick-action buttons map to common lost-time codes so Ronald doesn’t have to open the full C001–C022 modal for routine cases.

Lost-time coding modal (Codificar tiempo perdido)

Section titled “Lost-time coding modal (Codificar tiempo perdido)”

The 22 codes are presented in their INDICADORES ABRIL.xlsx order. Spanish labels exactly as they appear in the spreadsheet. Fields:

  1. Código — dropdown C001–C022, default to last-used.
  2. Alcance (scope) — radio: módulo / puesto / operario.
  3. Inicio / fin (start/end times) — defaults to last detected gap from the event store.
  4. Notas — free text.
  5. Guardar.

The modal must accept a half-hour-old gap “after the fact” (Ronald frequently codes things at end-of-day). The Phase II AI-suggested-code feature is not in Phase I; manual coding only.

Triggers Agent B’s export endpoint. Produces .xlsx:

  • Sheet name and column headers exactly match INDICADORES ABRIL.xlsx.
  • Numbers use Colombian decimal/thousand separators (comma decimal; period thousand).
  • Lost-time codes listed in C001–C022 order with their Spanish labels.
  • Date format dd/mm/yyyy.
  • Filename pattern: INDICADORES_<modulo>_<YYYY-MM>.xlsx (e.g., INDICADORES_Angela_2026-07.xlsx).

Open question (owner: Agent B + Sophia + Ronald): does the export keep Ronald’s exact macros / conditional formatting / hidden columns from INDICADORES ABRIL.xlsx? If yes, we need the source template (not just the structure) and an openpyxl writer that preserves formulas. If no, Ronald has to re-add his formulas every month — likely unacceptable.

(Engineer-accessible subset; admin-only items in italics.)

  • Umbrales por módulo (thresholds): green/yellow/red boundaries on % attainment. Default 95% / 80%.
  • Tiempos estándar (standard times): editable table of operation → SAM. Loaded from Ref22 Slim - Angela.xlsx “Balanceo” tab at install; editable from here.
  • Asignación puesto ↔ operación (station ↔ operation mapping).
  • Cámaras: RTSP URL, credentials, sub-stream toggle. (admin-only)
  • Modelo: which YOLOv8 weights are loaded, last refresh. (admin-only)
  • Roles: who has access. (admin-only)
StateCopy
No data yet todaySin datos aún. La jornada inicia a las 06:00.
All cameras downSin señal de cámaras. Avise a Sophia / Andrew. Tailscale: <enlace>.
One camera downCámara del puesto N sin señal. Último cuadro: hace 2 min 14 s.
Database write failedNo se pudo guardar el evento. Reintentar.
Auth0 token expiredSesión vencida. Vuelva a iniciar sesión.
  • e → export
  • c → open codify-lost-time modal
  • 19 → jump to workstation tile N (cycle nav)
  • / → search

Not P0; document so we don’t paint ourselves into a no-shortcuts corner.

  • Hourly pace strip: poll or push every 5 s.
  • Tile cycle durations: update as cycles close — Phase I polls every 5 s (the live-push channel is parked per 60-parking/websocket-live-updates.md).
  • Camera health: poll every 10 s.
  • Sparkline: rebuild on each new cycle.
  • One single number on the screen (“OEE: 84%”). Rejected — Ronald codes by station, not by aggregate. He needs the grid.
  • No grid; just a sortable table of workstations. Considered. Tables work in Excel because Ronald has Excel-native filtering. On screen, the tile grid gives faster spatial recognition (“which area of the line is dimming”) at a glance. Add a table view as a secondary layout option in Phase II.
  • Hide operator names entirely. Rejected for the engineer view — Ronald needs to identify who is at which station to coordinate with the floor. The privacy fence applies to executive/research views (see Mariana doc).
  • Make Ronald log in to lbzfai.com to see this. Rejected — that’s a round trip he doesn’t need. Tailscale-direct on the Jetson is faster (sub-second) and matches v1.9.
  • AI-generated daily narrative at the top. Rejected for Phase I — risk of hallucination, no upside vs glance-at-grid. Phase II.
  • OPEN: Operator-name visibility in Ronald’s view — default on? Owner: Sophia + Mariana + Ronald, blocking: Phase I privacy review, target: 2026-06-01.
  • OPEN: Anonymization (face blur) default state on the per-workstation video panel for engineer role. Owner: Agent E, blocking: Phase I privacy review.
  • OPEN: Excel export — does it have to preserve Ronald’s existing macros/formulas in INDICADORES ABRIL.xlsx? Owner: Agent B + Sophia + Ronald, blocking: Ronald adoption, target: 2026-06-01.
  • OPEN: Where does the “Marcar pausa activa” data go? Is it a lost-time code or a separate event type? Owner: Agent B + Ronald, blocking: data model finalization, target: 2026-06-01.
  • OPEN: Threshold defaults (95/80) — do these match LBZF’s current internal banding? Owner: Ronald (via Armando), blocking: not blocking but visible-from-day-1, target: 2026-05-30.
  • OPEN: Does Ronald enter the operator roster manually each morning, or is it persisted shift-to-shift? Owner: Sophia + Ronald, blocking: tile detail, target: 2026-06-15.
  • OPEN: Tablet layout — yes or no for Phase I? Owner: confirmed by Ronald-tablet open question in user-personas.md, target: 2026-05-13.
  • From backend/integration (Agent B):
    • Cycle-event stream API (push or 5s poll) keyed by workstation.
    • Hourly aggregator producing meta, real, eficiencia, rendimiento consistent with INDICADORES ABRIL.xlsx math.
    • Excel-export endpoint that produces .xlsx matching the existing file format (and ideally the existing template).
    • Camera-health endpoint (per-camera last-frame timestamp, fps, resolution).
  • From hardware/ML (Agent A, D):
    • One inference event per cycle per workstation. Cycle = person-detected → person-gone → person-detected-again, or a more sophisticated heuristic. The dashboard treats events as ground truth.
    • Sub-stream RTSP URL per camera available to the page for live-video panels.
  • From business/cross-cutting (Agent E):
    • Colombian labor-law clearance for showing operator names + sub-stream video to the engineer role.
    • Privacy policy text to surface as a tooltip or footer link.
  1. The wireframe has not been shown to Ronald. Every panel above is Sophia-and-mentor-team’s guess at what he wants. The whole doc is provisional until he sits in front of a clickable mock in Spanish and corrects us. Round-2 reviewer: prioritize a real Ronald review session.
  2. “Glance in 5 seconds” is asserted, not measured. We have no Fitts’s-law or eye-tracking-style validation that this layout achieves that. A coarser version — Ronald on a video call, talking through what he sees in the first 5 seconds — would be enough validation for Phase I.
  3. Spanish-CO copy was written by a non-native author. Pereira-specific idioms may differ from generic Latin-American Spanish; LBZF spreadsheets use specific verbatim labels we should reuse exactly (e.g., eficiencia vs % de eficiencia). Round 2: cross-check every label against INDICADORES ABRIL.xlsx and Ref22 Slim - Angela.xlsx.
  4. The per-station video panel assumes faces can be shown. That decision is in Agent E’s bucket. If Agent E says “no faces, ever, in any view”, the video panel becomes a heat-map / box-overlay-only view, and the spec changes.
  5. No offline mode. If the Jetson reboots mid-shift, Ronald loses the dashboard for ~1–2 minutes. The whiteboard he used to keep does not exist in the new world. We have not planned for this; should we keep a passive whiteboard as a fallback for Phase I?
  6. No print/PDF view. End-of-shift Ronald may want to print a snapshot. Not designed.
  7. Tile grid scaling. At Phase III with 4 modules × 6 workstations each = 24 tiles, the grid is still tractable. At ~80 workstations (theoretical Phase III max), the layout above no longer fits one screen. Punt to Phase III but record.
  • Argentina demo (2026-05-13): show a static HTML mockup of the screen (no real data). Walk Andrew + ITBA through it. Mark every assumption as open.
  • 2026-05-20 → 2026-06-15: build the page on the Jetson with synthetic data. Sophia + Armando review.
  • 2026-06-15: Spanish translation review pass; Ronald walk-through scheduled.
  • 2026-06-22: Ronald walk-through (Granola-recorded). Update doc.
  • 2026-07-01 → deploy: wired up to real cameras and SQLite.
  • Phase II: add narrative summary, AI-suggested lost-time codes, behavioral panel.
  • Phase III: scale to 4 modules; consider table-view layout option for ≥ 60 workstation case.
  • docs/factory/current-state.md
  • docs/factory/operations.md
  • Ref22 Slim - Angela.xlsx (Drive 1oo5s4R70XXXK4zeeCsEMNNJcnXrvEUKV)
  • INDICADORES ABRIL.xlsx (same folder)
  • This bucket’s user-personas.md §“Ronald”
  • This bucket’s mariana-dashboard-ux.md
  • ../technical/frontend/information-architecture.md
  • ../technical/frontend/localization-es-co.md