00-day-brief.md
Abrir documentoDay brief — 2026-08-05 — ALS-2
Restricciones (LOAD)
- Complejidad: Nivel 2 (no L3 consecutivo tras FIRME)
- Sector: Logística / última milla (cola memory)
- No: legal, mayores, salud AP, museos, cocinas; no SaaS legal FIRME; no indigo SENDA; no parchment forest
- Craft ≥ FIRME densificado; UX Paper ≥ 8; JWT multi-rol
Concepto
| Campo | Valor |
|---|---|
| Nombre | TROCHA |
| Eslogan | ”La ruta clara. El reparto, en trocha.” |
| Tipo | PWA/web consola microflota última milla |
| Roles | DISPATCHER + COURIER (JWT) |
| Estilo | Industrial signage · asphalt × signal amber × chalk |
| Tipo | Space Grotesk + IBM Plex Sans |
Must-have
Home · Login · Lista paradas ops · Detalle + estado · Nueva parada · Ruta courier mobile · empty/error
00-paper-reference.md
Abrir documentoReferencia Paper — TROCHA
| Campo | Valor |
|---|---|
| File ID | 01KZ8BMSCGXN5QW4PEFZHCYAKD |
| URL | https://app.paper.design/file/01KZ8BMSCGXN5QW4PEFZHCYAKD |
| Nombre | TROCHA — Daily UX 2026-08-05 |
| Artboards | 8 UX + DS + Home + Login + 3 dispatcher + 2 mobile + 2 states + offline/volumen + 5 labels § |
Mapa canvas
| § | Banda | Contenido |
|---|---|---|
| 1 | UX PROCESS | UX-00…07 |
| 2 | DESIGN + PUBLIC | DS · Home · Login |
| 3 | DISPATCHER | Stops · Detail · New |
| 4 | COURIER MOBILE | Login · My stops |
| 5 | STATES | Empty · Error · Offline + volumen día |
01-project-definition.md
Abrir documento01 — Definición TROCHA
Identidad
- Nombre: TROCHA (camino / vía estrecha de trabajo — la ruta operativa del día)
- Eslogan: La ruta clara. El reparto, en trocha.
- Una frase: Consola web multi-rol para microflotas de última milla (ops + mensajero).
- Sector: Logística / última milla urbana
- Tipo: Web responsive + PWA-ready (L2)
- Plataforma: Web desktop ops + mobile courier
- Mercado: ES / microflotas 2–15 riders
- Idioma UI: Español
Problema
Principal (hipótesis de diseño, no investigación de campo): coordinadores de microflota pierden el hilo de paradas entre WhatsApp, Excel y llamadas. Coste: reentregas, clientes sin paquete, mensajeros sin siguiente parada clara. Oportunidad: un solo estado de verdad JWT-scoped.
Objetivos
- Negocio: activación de ops en <10 min; retención semanal de uso lista.
- Usuario ops: ver y asignar paradas sin chat.
- Usuario courier: 1-tap estado en ruta.
- No objetivos v1: tracking GPS live, facturación, portal shipper B2B, routing optimizado.
Métricas
North Star: paradas con estado actualizado el mismo día de creación. Activación: 1ª parada creada. Retención: ops 3+ días/semana.
02-ux-research-strategy.md
Abrir documento02 — UX Research & modelo operativo (microflotas)
Método: investigación secundaria + síntesis operativa. No son entrevistas de campo reales.
Fuentes citables abajo. Cada hallazgo se marca: comprobado (secundario) / supuesto / hipótesis / decisión de diseño.
1. Preguntas de investigación (cerradas en esta ejecución)
- ¿Cuántas paradas/día gestiona una microflota / mensajero de cargo bike en ciudad densa?
- ¿Qué implica offline (cobertura irregular en sótanos, parking, casco antiguo) para el courier?
- ¿Qué debe hacer el producto hoy (L2) con esas respuestas?
2. Hallazgos — volumen de paradas
| Fuente | Dato | Tipo |
|---|---|---|
| Microhub + e-cargo bike pilots (p. ej. resúmenes de NYC DOT / estudios microhub) | ~4–8 viajes/día × ~5 entregas/viaje → orden 20–40 paradas/día por bici en programas densos | Comprobado (secundario agregado) |
| Modelos de ruta cargo e-bike en literatura (p. ej. ETRR 2019, escenarios de densidades) | Rutas de referencia con ~8 stops en tramos cortos; capacidad de bultos limita carga, no el “tapping” de estado | Comprobado (secundario) |
| Flotas van/camión urbana (fleet last-mile) | 80–150 stops/día en van — no es el target de microflota TROCHA | Comprobado (contexto; fuera de persona) |
| Ops microflota 2–15 riders (modelo de producto) | Coordinador ve 15–80 paradas/día en total flota; courier individual 8–25 paradas/turno en B2B ligero/local | Supuesto de diseño calibrado por secundarios |
| Decisión TROCHA L2 | KPI de volumen del día en consola ops: total, por estado, % entregadas. Seed ≥ 12 paradas del día para lista creíble | Decisión de diseño |
Implicación producto (implementada):
- Endpoint y UI de stats del día (no solo lista plana).
- Lista ordenada por urgencia operativa (en ruta → asignada → pendiente → entregada/fallida).
- Copy de journey y JTBD anclado a “turno con muchas paradas”, no a flota van de 120 stops.
3. Hallazgos — offline
| Hallazgo | Tipo |
|---|---|
| Mensajeros pierden red en sótanos, patios interiores, parkings y tramos de casco antiguo (patrón operativo conocido en last-mile; no medido aquí con telemetría) | Hipótesis fuerte / supuesto de campo |
| Actualizar estado debe poder encolarse y sincronizar al recuperar red; no bloquear el turno | Decisión de diseño |
| Listado de la ruta del día debe ser legible offline desde última sync (caché local) | Decisión de diseño |
| Conflictos de estado concurrente (ops + courier) → last-write-wins en L2; documentar riesgo | Decisión de diseño (L3: versionado) |
Implicación producto (implementada):
- Banner offline / en cola.
- Caché de paradas en
localStoragetras cada listado OK. - Cola de
PATCH statussinavigator.onLine === falseo fallo de red; flush enonline. - Detalle de parada usable desde caché si GET falla.
4. Personas (actualizadas con modelo operativo)
Nora Aguilar — DISPATCHER (ops)
| Campo | Valor |
|---|---|
| Rol | Coordinadora microflota 4–8 mensajeros |
| Volumen | ~20–60 paradas/día flota (supuesto) |
| Devices | Laptop + móvil |
| Necesidad | KPIs del día + asignar sin WhatsApp |
| Cita (sintética) | “Si no veo cuántas van en ruta, llamo a todo el mundo.” |
Hugo Serra — COURIER
| Campo | Valor |
|---|---|
| Rol | Cargo bike |
| Volumen | ~10–20 paradas/turno (supuesto calibrado) |
| Devices | Móvil, guantes, sol |
| Necesidad | 1 tap estado; funciona sin red un rato |
| Cita (sintética) | “En el parking del centro se me cae el 4G; igual tengo que marcar entregado.” |
5. JTBD
Funcional: Cuando empiezo el turno con muchas paradas, quiero un listado con estado y volumen del día, para no repreguntar por chat.
Emocional: Reducir ansiedad de “¿se me ha perdido un paquete?”.
Social: Parecer flota profesional frente a comercios B2B locales.
6. Stories Must (con AC)
| ID | Historia | Prioridad | Criterios de aceptación |
|---|---|---|---|
| E1 | Login JWT multi-rol | Must | Token con role DISPATCHER|COURIER |
| E2 | Ops lista + stats día | Must | Totales por estado del día calendario |
| E3 | Ops crea y asigna | Must | PENDING o ASSIGNED con courierEmail |
| E4 | Courier cambia estado | Must | IN_TRANSIT / DELIVERED / FAILED |
| E5 | Offline enqueue status | Must | Sin red, estado queda en cola y se reintenta |
| E6 | Lista cache offline | Must | Sin red, se muestran últimas paradas cacheadas |
7. Journey (ops + courier) — offline branch
- Login ops → stats día → crea paradas
- Courier login → ve asignadas (cache al cargar)
- En sótano: marca DELIVERED offline → banner cola
- Sale a la calle:
online→ flush → ops ve DELIVERED
8. Fuentes (secundarias)
- Springer ETRR: Measuring delivery route cost trade-offs between electric-assist cargo bicycles and delivery trucks (2019) — escenarios de densidades y stops.
- Microhub / e-cargo summaries (NYC DOT y estudios microhub): órdenes de magnitud entregas/hora y trips/día.
- Last-mile fleet guides: van 80–150 stops/día como contraste de no-persona.
9. No inventado
No se afirman entrevistas, NPS de clientes reales ni telemetría de flotas TROCHA. El seed y la UI son demo realistas, no datos de un cliente productizado.
03-information-architecture.md
Abrir documento03 IA
/ · /login · /app/stops · /app/stops/new · /app/stops/:id Roles: DISPATCHER (CRUD paradas) · COURIER (ver asignadas + PATCH estado limitado)
04-user-flows.md
Abrir documento04 Flujos
Login → list → create (ops) → assign → courier IN_TRANSIT → DELIVERED Errores: 401, 403, empty list, red 503 UI
05-data-model.md
Abrir documento05 — Datos
User: id, email, passwordHash, name, role(DISPATCHER|COURIER) DeliveryStop: id, code, address, recipient, notes, status(PENDING|ASSIGNED|IN_TRANSIT|DELIVERED|FAILED), dispatcherId, courierId?, timestamps
06-tech-stack.md
Abrir documento06 Stack
Angular + Tailwind · NestJS + Prisma · Neon Postgres · JWT Bearer Puerto API: 3005
07-creative-direction.md
Abrir documento07 Creativa
Mood: industrial signage. Asphalt #121417 · Signal amber #F5A623 · Chalk #F4F2EC · Steel #3A4048 Space Grotesk (display) + IBM Plex Sans (UI). No fintech neón, no parchment legal.
08-design-system.md
Abrir documento08 DS
Tokens: bg, surface, ink, primary amber, asphalt, border. Buttons: ink primary, amber CTA. Badges: PENDING/ASSIGNED/IN_TRANSIT/DELIVERED/FAILED.
09-content-guide.md
Abrir documento09-content-guide
10-accessibility.md
Abrir documento10 A11y
WCAG 2.2 AA target: contraste amber/ink, labels en forms, focus visible, no color-only status (badge + text)
11-privacy-security.md
Abrir documento11-privacy-security
12-analytics.md
Abrir documento12-analytics
13-qa-test-plan.md
Abrir documento13-qa-test-plan
14-dev-handoff.md
Abrir documento14 Handoff
Repo: trocha-app · Neon proud-tooth-29711833 · Demo ops@trocha.log / ruta@trocha.log · password123 API: GET/POST /api/stops · PATCH /api/stops/:id/status · POST /api/auth/login
15-roadmap.md
Abrir documento15-roadmap
16-interaction-specs.md
Abrir documento16-interaction-specs
17-prototype-map.md
Abrir documento17-prototype-map
18-completeness-audit.md
Abrir documento18 Completeness
| Entregable | Estado |
|---|---|
| Docs 00–20 | ✅ |
| Research volumen + offline (docs/02) → producto | ✅ stats/day + offline queue |
| Paper hi-fi + UX + estado offline | ✅ artboard 10 |
| Neon + seed 14 paradas | ✅ |
| Angular JWT + cache/cola | ✅ |
| Smoke GET/POST + stats | ✅ |
| Registry + Excel + memory | ✅ |
| Sin “próximos pasos” de producto abiertos | ✅ (CRON §1.1) |
19-backlog-completo.md
Abrir documento19-backlog-completo
20-implementation.md
Abrir documento20 Implementation notes
Apps: ~/orca/trocha-app · API :3005 · Web :4200
Research → features (misma iteración)
| Hallazgo | Implementación |
|---|---|
| Volumen día courier 10–20 / flota 20–60 | GET /api/stops/stats/day + KPIs en lista; seed 14 paradas |
| Offline en parking/sótanos | OfflineQueueService: cache lista, cola PATCH status, flush on online |
| Orden operativo | Lista ordenada IN_TRANSIT → ASSIGNED → PENDING → FAILED → DELIVERED |
Demo
ops@trocha.log / ruta@trocha.log · password123