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
Context
Section titled “Context”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 withjornada,#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.mddocs/factory/operations.mddocs/factory/lbzf.mddocs/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
.xlsxbyte-compatible withINDICADORES ABRIL.xlsxso 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.
Non-goals
Section titled “Non-goals”- 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.xlsxformat”. Owned in Agent B’s spec. - Behavioral monitoring (phone use, eating). Phase II.
Proposed approach
Section titled “Proposed approach”Where this lives
Section titled “Where this lives”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.
Top-level structure
Section titled “Top-level structure”┌──────────────────────────────────────────────────────────────────────────────────┐│ 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 ] │└──────────────────────────────────────────────────────────────────────────────────┘Panel-by-panel spec
Section titled “Panel-by-panel spec”1. Header
Section titled “1. Header”- 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:
| Field | Spanish label | Source | Semantics |
|---|---|---|---|
| Current hour window | Hora actual: 09:00–10:00 | server clock + shift definition | Inclusive-exclusive. |
| Hour goal | Meta: 49 | standard times × workstation pace | The 49 units/hr target for Angela. |
| Hour actual | Real: 41 | sum of completed garments this hour | Live, updates as cycles close. |
| % attainment | 84% + status icon | Real / Meta | Green ≥ 95%, yellow 80–94%, red < 80% (thresholds editable in /admin). |
| Shift cumulative | Acumulado jornada: 312/360 | sum of completed units for the shift / sum of goals so far | Shift = jornada. |
| Shift efficiency | Eficiencia: 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 yesterday | Tendencia: ▼3pp | yesterday’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.
3. Workstation grid (puestos)
Section titled “3. Workstation grid (puestos)”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.
4. Actions row
Section titled “4. Actions row”Five primary buttons:
| Button | Spanish | What it does |
|---|---|---|
| Code lost time | Codificar tiempo perdido (C001–C022) | Opens modal listing the 22 codes; Ronald selects code, scope (module / workstation / interval), notes. Writes to event store. |
| Export INDICADORES | Exportar INDICADORES (.xlsx) | Generates a .xlsx matching INDICADORES ABRIL.xlsx for the current shift, current day, or current month. Downloads to local. |
| Adjust thresholds | Ajustar umbrales | Opens /admin/umbrales. Per-module thresholds for green/yellow/red. |
| View cameras | Ver cámaras | Opens /camaras — health page. |
| History | Historial Angela | Opens /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:
- Código — dropdown C001–C022, default to last-used.
- Alcance (scope) — radio: módulo / puesto / operario.
- Inicio / fin (start/end times) — defaults to last detected gap from the event store.
- Notas — free text.
- 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.
Excel export (Exportar INDICADORES)
Section titled “Excel export (Exportar INDICADORES)”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.
Settings (/admin)
Section titled “Settings (/admin)”(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)
Empty / error states (Spanish)
Section titled “Empty / error states (Spanish)”| State | Copy |
|---|---|
| No data yet today | Sin datos aún. La jornada inicia a las 06:00. |
| All cameras down | Sin señal de cámaras. Avise a Sophia / Andrew. Tailscale: <enlace>. |
| One camera down | Cámara del puesto N sin señal. Último cuadro: hace 2 min 14 s. |
| Database write failed | No se pudo guardar el evento. Reintentar. |
| Auth0 token expired | Sesión vencida. Vuelva a iniciar sesión. |
Keyboard / efficiency shortcuts (stretch)
Section titled “Keyboard / efficiency shortcuts (stretch)”e→ exportc→ open codify-lost-time modal1–9→ jump to workstation tile N (cycle nav)/→ search
Not P0; document so we don’t paint ourselves into a no-shortcuts corner.
Data refresh cadence
Section titled “Data refresh cadence”- 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.
Alternatives considered
Section titled “Alternatives considered”- 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 questions
Section titled “Open questions”- 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.
Cross-bucket dependencies
Section titled “Cross-bucket dependencies”- From backend/integration (Agent B):
- Cycle-event stream API (push or 5s poll) keyed by workstation.
- Hourly aggregator producing
meta,real,eficiencia,rendimientoconsistent withINDICADORES ABRIL.xlsxmath. - Excel-export endpoint that produces
.xlsxmatching 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.
What’s weak in this doc
Section titled “What’s weak in this doc”- 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.
- “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.
- 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.,
eficienciavs% de eficiencia). Round 2: cross-check every label againstINDICADORES ABRIL.xlsxandRef22 Slim - Angela.xlsx. - 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.
- 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?
- No print/PDF view. End-of-shift Ronald may want to print a snapshot. Not designed.
- 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.
Rollout
Section titled “Rollout”- 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.
Appendix / references
Section titled “Appendix / references”docs/factory/current-state.mddocs/factory/operations.mdRef22 Slim - Angela.xlsx(Drive1oo5s4R70XXXK4zeeCsEMNNJcnXrvEUKV)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