Mariana's dashboard — UX spec
Status: draft Author: Agent C (frontend bucket, round 1) Reviewers: Sophia Mann, Andrew Kent, Agent E (privacy + business), Agent B (integration); round-2 critique agent Last updated: 2026-05-10
Context
Section titled “Context”Mariana Saker is LBZF’s CEO and the project’s executive sponsor. She is Sophia’s aunt — family relationship accelerates decisions but raises the personal stakes. She funds Phase II. Her use of this product is a few times per week, primarily on her phone, in Spanish. She must answer one question quickly: “Are the four modules on pace this week, and is Ronald already on it if not?”
Ronald’s view is operational. Mariana’s view is executive — fewer numbers, more reassurance. She must never end up doing Ronald’s job from her phone.
Anchor artifacts:
- This bucket’s
user-personas.md§“Mariana” docs/factory/current-state.md(the monthlyINDICADORESshe receives today)docs/factory/lbzf.md(4 modules: Angela, Carmenza, Camisetas, Empaque)
- One screen, one glance: home view answers “are modules on pace today?” in under 5 seconds.
- Mobile-first. Looks correct on a phone in portrait. Desktop is a fallback layout.
- Spanish-CO copy throughout, executive register (less jargon than Ronald’s view).
- A reassurance signal that “Ronald has this” — last engineer activity timestamp per module — so she doesn’t feel forced to call him to confirm.
- A single per-module drill-down for context, no deeper.
- No live video by default — privacy fence per Agent E. If video is shown, it’s an explicit one-tap reveal, and what’s shown is anonymized.
Non-goals
Section titled “Non-goals”- The full Ronald cycle-time grid. Mariana is not the engineer.
- Excel export from this view (she gets it monthly from Ronald — that workflow continues).
- Behavioral monitoring. Phase II + careful policy review.
- Real-time alerting / push notifications. Phase II.
- English-language layout. Phase I is es-CO; English is admin-only.
Proposed approach
Section titled “Proposed approach”Where this lives
Section titled “Where this lives”https://lbzfai.com/app/ejecutivo (per ../technical/frontend/information-architecture.md §“Option C — Hybrid”). Cloudflare Workers + Auth0 + a backend API that hits the Jetson over Tailscale through a Worker proxy or a Cloudflare Tunnel (precise mechanism owned by Agent B).
Mariana’s view does not require her to install Tailscale. That is the explicit design constraint that drives this architecture.
Home view (/app/ejecutivo)
Section titled “Home view (/app/ejecutivo)”Portrait phone layout (single column):
┌───────────────────────────────┐│ LBZF ⏻ ││ Hoy: Lunes 27 Jul 2026 │├───────────────────────────────┤│ ANGELA ││ Hoy: 87% Semana: 79% ▲ ││ Última actualización: ││ Ronald — 09:14 ││ ───────────────────────── ││ CARMENZA (próximamente)││ CAMISETAS (próximamente)││ EMPAQUE (próximamente)│├───────────────────────────────┤│ Tendencia mensual ││ ┌─────────────────────────┐ ││ │ █ █ █ █ █ █ ▆ █ ▇ █ │ ││ │ Eficiencia diaria │ ││ └─────────────────────────┘ ││ Promedio mes: 82,4% │├───────────────────────────────┤│ [ Ver Angela en detalle ] ││ [ Cuenta ] │└───────────────────────────────┘Landscape / desktop layout: 2×2 module tiles + the trend chart side-by-side.
Per-module tile
Section titled “Per-module tile”Per Phase I, only Angela is active. Carmenza/Camisetas/Empaque tiles show “próximamente” (coming soon) labels and are not interactive.
The active tile has exactly four things on it:
| Field | Spanish | What |
|---|---|---|
| Module name | ANGELA | Caps, large. |
| Today’s headline | Hoy: 87% | Today’s shift-to-date efficiency. Color-coded: green ≥ 95%, yellow 80–94%, red < 80%. |
| Week trend | Semana: 79% ▲ | Rolling-7-day mean efficiency + arrow direction vs prior 7 days. |
| Engineer pulse | Última actualización: Ronald — 09:14 | Timestamp of the last lost-time entry or threshold change Ronald made. The “Ronald has this” reassurance signal. |
Tap → /app/ejecutivo/modulo/angela.
Per-module drill-down (/app/ejecutivo/modulo/angela)
Section titled “Per-module drill-down (/app/ejecutivo/modulo/angela)”Still executive. NO workstation grid. NO operator names. NO live video by default.
┌───────────────────────────────┐│ ← Angela │├───────────────────────────────┤│ Hoy 87% ││ Esta semana 79% ││ Este mes 82,4% │├───────────────────────────────┤│ Hora a hora (hoy) ││ 06–07 93% ✓ ││ 07–08 88% ✓ ││ 08–09 76% ⚠ ││ 09–10 84% ⚠ │├───────────────────────────────┤│ Tiempo perdido más común ││ esta semana ││ · Espera mecánico 1h 42m ││ · Falta de balanceo 58m ││ · Pausas activas 45m │├───────────────────────────────┤│ [ Ver módulo en vivo (foto)] │ ← lazy load; static still, not video│ [ Compartir resumen ] │└───────────────────────────────┘”Ver módulo en vivo (foto)” — the privacy-sensitive button
Section titled “”Ver módulo en vivo (foto)” — the privacy-sensitive button”Mariana’s instinct will be to want to “see the floor”. Live video is a labor-law minefield (see Agent E). The compromise:
- Default: single still image per camera, captured every 5 minutes, faces blurred. Loads on user tap.
- Per camera: shows the still + count of “person-detected” boxes + timestamp.
- Never autoplay video. Never default-show faces.
- Admin can flip the default to live video for admin role only — never for executive role in Phase I.
OPEN: confirm Mariana sees the value in a stills-only mode, vs. demands live video. — owner: Sophia + Mariana, target: 2026-05-20. If she demands live video, the conversation escalates to Agent E + a Colombian labor-law consult before we ship.
Trend chart (home view)
Section titled “Trend chart (home view)”Bar chart, 30 daily bars. Y-axis 0–100% efficiency. No legend (it’s redundant). Tap a bar → that day’s summary (no per-station drill).
”Compartir resumen” button
Section titled “”Compartir resumen” button”Generates a short, paste-friendly text block in Spanish:
ANGELA — Lunes 27 Jul 2026Hoy: 87% (eficiencia)Semana: 79% ▲ vs semana anteriorTiempos perdidos principales: - Espera mecánico (1h 42m) - Falta de balanceo (58m)Última acción de Ronald: 09:14This lets her drop the summary into WhatsApp to board members or partners without forwarding a link they can’t open. OPEN: WhatsApp share affordance — is this a system share sheet or a copy-to-clipboard button? — owner: Sophia, target: 2026-06-01.
Header
Section titled “Header”- LBZF wordmark left.
- Sign-out icon right.
- Today’s date below in Spanish:
Hoy: Lunes 27 Jul 2026— capitalized day, localees-CO.
Empty / error / degraded states
Section titled “Empty / error / degraded states”| State | Copy (Spanish) |
|---|---|
| Backend unreachable (Cloudflare → Jetson tunnel down) | No hay conexión con la planta. Datos al ${HH:MM} de hoy. (shows last cached) |
| No data yet today | La jornada inicia a las 06:00. |
| Live image unavailable | Sin imagen del módulo en este momento. |
| Auth0 token expired | Sesión vencida. Inicie sesión de nuevo. |
Caching strategy
Section titled “Caching strategy”Mariana on a phone with intermittent connectivity:
- Aggressive cache of the most-recent home view in localStorage / IndexedDB so the page renders something useful even before the network round-trip finishes.
- Show a
Datos al ${HH:MM}timestamp under every figure. - Background refresh; soft-update on success.
Accessibility
Section titled “Accessibility”- Tap targets ≥ 44×44 px.
- Color is not the only signal — the green/yellow/red carries a glyph (✓ / ⚠ / ✕) alongside.
- High-contrast mode acceptable.
- Font sizing respects iOS / Android system text scaling.
What is NOT on this view
Section titled “What is NOT on this view”- Per-workstation cycle times.
- Operator names.
- The C001–C022 lost-time taxonomy in full (only the top 3 are shown by aggregated category — not by code).
- The Excel export (Ronald owns that workflow; she gets it from him monthly).
- The full historical drill-down (Phase II —
/app/ejecutivo/historico). - Settings / admin (Phase II, and only via admin role).
Alternatives considered
Section titled “Alternatives considered”- Show Mariana the same dashboard as Ronald. Rejected — she will end up doing his job at 11pm on her phone. Bad for both.
- Push notifications when a module turns red. Rejected for Phase I — too high a false-positive risk; she’ll mute the app within a week. Reconsider for Phase II once thresholds are tuned.
- Live video on by default with a “blur faces” toggle. Rejected — labor law fence; ask-permission, not ask-forgiveness.
- No drill-down at all; pure 4-tile glance. Considered. Drill-down stays because Mariana will sometimes want context (e.g., before a board meeting). But the drill-down is intentionally shallow.
- Tablet-only / desktop-only. Rejected — Mariana’s primary device is her phone (subject to the open question; if confirmed otherwise, this doc revises).
Open questions
Section titled “Open questions”- OPEN: Mariana’s primary device — confirm phone / iOS vs Android / both. Owner: Sophia + Armando → Mariana, blocking: rollout target devices, target: 2026-05-20.
- OPEN: Mariana’s appetite for stills-only vs live video. Owner: Sophia + Mariana, blocking: privacy spec, target: 2026-05-20. Default until confirmed: stills-only.
- OPEN: Are Spanish operator names ever shown to executive role? Owner: Agent E, blocking: privacy spec, target: 2026-06-01. Default until confirmed: no, executive sees aggregates only.
- OPEN: WhatsApp/share affordance behavior. Owner: Sophia, target: 2026-06-01.
- OPEN: Does Mariana want a weekly email summary instead of (or in addition to) the dashboard? Owner: Sophia + Mariana, blocking: scoping, target: 2026-06-15. If yes, email becomes its own surface and may obsolete part of this dashboard.
- OPEN: How does Mariana’s view degrade when Tailscale is down? Owner: Agent B, blocking: error-state copy, target: 2026-06-15. Proposal: serve last successful data from cache + clear timestamp.
Cross-bucket dependencies
Section titled “Cross-bucket dependencies”- From backend/integration (Agent B):
- A JSON API endpoint reachable from a Cloudflare Worker (or Cloudflare Tunnel) returning per-module aggregate figures (today, this week, this month, hour-by-hour).
- A “still image” endpoint that emits a recent frame from each camera, with face anonymization already applied. Anonymization happening on the Jetson, not on Cloudflare. Worker should never see un-blurred frames.
- Last-engineer-action timestamp.
- From hardware/ML (Agent A, D):
- Face-anonymization step in the inference pipeline. If YOLOv8 person-only is the Phase I model, the anonymization could be a simple “blur the head bounding box” derived from the person box — but that needs a head-region heuristic or a face detector. Surface as cross-bucket.
- From business/cross-cutting (Agent E):
- Privacy policy text + Colombian labor-law clearance for displaying anonymized stills to the executive role.
- Sign-off on operator-name exclusion from the executive view.
- Multi-tenancy posture — if LBZF ever becomes one of many tenants, Mariana’s view is the template for tenant-CEO experiences and should be designed accordingly.
What’s weak in this doc
Section titled “What’s weak in this doc”- Mariana has not been asked. Everything here is a guess at executive habits in a LatAm family business; we have not validated with the actual user. Round 2 priority: a 20-minute Spanish call with Mariana to walk her through this layout. Without that, this is a polished assumption.
- The “Ronald pulse” timestamp could backfire. If Ronald is in a meeting and hasn’t touched the system since 7am, Mariana might read 7am as “Ronald is asleep at the wheel” when he is actually fine. We may need a richer signal: “engineer present and observing” vs “last write”. Open.
- Stills-only defaults to a labor-law preference we have not actually researched. Colombian labor regulations on workplace monitoring are non-trivial, and a recommendation here without Agent E’s analysis is half-baked.
- No metric for whether the executive view “works”. Adoption signal is fuzzy — Mariana opening the app weekly is plausibly success; her not opening it because nothing surprised her is also plausibly success. We need an honest metric (e.g., “she’s the source on the monthly board update” vs “she still asks Ronald for monthly numbers”).
- The “Compartir resumen” feature assumes WhatsApp; Mariana may not actually share that way. Untested.
- One number per module is fragile. Daily efficiency is a single rollup. If Mariana sees Angela at 92% and the next day at 64%, she has no context for the volatility. The drill-down patches this, but the home tile is intentionally lossy. Document the loss.
Rollout
Section titled “Rollout”- Argentina demo (2026-05-13): show a static-mock executive view to Andrew + ITBA. Use it to anchor the labor-law conversation with Agent E.
- 2026-05-20: Mariana walk-through (Spanish, Sophia leads). Update doc.
- 2026-06-01: wire up
/app/ejecutivoagainst synthetic data on Cloudflare. - 2026-06-15: wire up backend connection to Jetson aggregates.
- 2026-07-01: anonymized stills working end-to-end.
- July deploy: Mariana uses the view weekly for the first month; collect feedback.
- Phase II: add weekly email summary; alerting; full month/quarter view.
- Phase III: 4 module tiles all active.
Appendix / references
Section titled “Appendix / references”docs/overview/people.mddocs/factory/current-state.mddocs/factory/lbzf.md(the 4 modules)- This bucket’s
user-personas.md - This bucket’s
ronald-dashboard-ux.md ../technical/frontend/information-architecture.md../technical/frontend/auth0-roles-and-access.md../technical/frontend/localization-es-co.md