Files
marianesaldana 80dbd947e5 Initial commit
2026-05-23 08:59:34 -06:00

191 lines
8.7 KiB
Markdown

# Guion de presentación — 5 a 7 minutos
> Script para el pitch del hackathon. Cubre los puntos clave que los jueces evalúan.
---
## ⏱️ Distribución del tiempo
| Sección | Duración | Objetivo |
|---------|----------|----------|
| 1. Problema | 30s | Sembrar el dolor del usuario |
| 2. Solución | 30s | Decir qué construimos |
| 3. Demo ciudadano | 2 min | Mostrar el flujo principal |
| 4. Demo empleado | 1 min | RBAC + motivación |
| 5. Demo admin | 1 min | Gestión y métricas |
| 6. Arquitectura técnica | 1 min | Convencer en lo técnico |
| 7. Privacy by Design | 30s | Punto innegociable del reto |
| 8. Cierre | 30s | Llamado a la acción |
---
## 🎬 Guion completo
### 1. Problema (30 segundos)
> **"En Celaya, todos hemos sacado la basura demasiado temprano… o demasiado tarde. La basura termina en la calle, atrae fauna nociva, y los vecinos se molestan. La solución obvia sería ponerle un GPS al camión, pero eso es peligroso: la gente lo persigue, expone información operativa, y rompe la privacidad."**
Mostrar imagen o slide con el problema.
---
### 2. Solución (30 segundos)
> **"Mi Ruta Limpia: una app que te dice cuándo viene el camión a tu casa, sin nunca mostrarte dónde está. Privacy by Design, multiplataforma, con folio oficial en cada reporte, y tres vistas: ciudadano, empleado operativo y administrador."**
Mostrar la pantalla principal en el simulador.
---
### 3. Demo CIUDADANO (2 minutos)
**Login:**
- *"Entro como `demo@celaya.gob.mx`."*
**Inicio:**
- *"Esta es mi pantalla principal. Veo mi domicilio asignado a la **RUTA-01 (Zona Centro)**, y el camión llegará entre las 7:20 y 7:35. Si me faltan menos de 30 minutos, me muestra los minutos exactos."*
- *"Atrás de esta sencilla pantalla hay un cálculo geo-espacial: cuando registro mi domicilio, el backend usa **distancia Haversine** para asignarme automáticamente la ruta más cercana."*
- *"Importante: NO veo dónde está el camión. Solo veo MI ventana horaria. Esto es privacy by design real."*
**Confirmar ya pasó:**
- *"Cuando el camión pasa, confirmo con esta calificación. La tarjeta se pone verde. Si me equivoqué, tengo un **botón de deshacer**."*
**Educación:**
- *"Toco la hojita y entro a la sección educativa: 4 categorías de residuos, datos de impacto, puntos de acopio reales en Celaya y un FAQ extenso. Cada categoría tiene un modal con qué SÍ y qué NO va, y un dato de impacto."*
**Reportes:**
- *"Si el camión no pasó, levanto un reporte. Recibo un **folio oficial** tipo `MRL-20260523-A4B5C6` y puedo **compartirlo por WhatsApp, correo, o lo que sea** — porque es mi comprobante."*
---
### 4. Demo EMPLEADO (1 minuto)
**Logout y login como empleado:**
- *"Cierro sesión y entro como empleado: `empleado@celaya.gob.mx`. **El navegador cambia: ahora solo tengo 3 pestañas**."*
**Dashboard del empleado:**
- *"Esta es la vista del operador del camión. Aquí está el corazón motivacional: **mi racha de puntualidad** — 19 días seguidos. **Mi bono acumulado** — $950 MXN. Me faltan 11 días para desbloquear el siguiente bono de $500."*
- *"También veo mi horario con descansos preestablecidos: 5 min de estiramiento a las 8 AM. Esto es bienestar laboral integrado."*
- *"Y arriba hay una **frase motivacional que rota cada día**: 'Tu puntualidad permite que miles de familias planifiquen su día.'"*
**Reportes operativos:**
- *"Si algo pasa en mi turno — falla mecánica, accidente, tráfico — lo reporto. Tengo **8 categorías** con iconos. Esto le permite al equipo central reaccionar inmediatamente."*
**RBAC en acción:**
- *"Y muy importante: **el empleado NO puede ver los reportes ciudadanos**. Está en su pantalla de Cuenta: hay permisos en gris bloqueados. Si intento llamar a `/admin/reports` desde mi token de empleado, el backend responde **403 Forbidden**."*
---
### 5. Demo ADMIN (1 minuto)
**Login admin:**
- *"Cierro sesión, entro como admin: `admin@celaya.gob.mx`. Ahora tengo 4 pestañas."*
**Dashboard:**
- *"KPIs en vivo de toda la ciudad: 185 ciudadanos activos, 302 domicilios, 280 reportes totales, 8 en las últimas 24h, calificación promedio 4.07/5."*
- *"Gráficas por estado y por tipo de reporte. Veo de un vistazo que hay 84 pendientes."*
**Gestión de reportes:**
- *"Aquí veo TODOS los reportes ciudadanos de la ciudad. Filtro por estado. Puedo cambiar el estado con un botón: **PENDIENTE → EN_PROCESO → RESUELTO**. Esto cierra el loop con el ciudadano, que ve la actualización en su app."*
**Gestión de usuarios:**
- *"Y solo el admin puede ver esta pestaña: 202 usuarios, filtrables por rol. Puedo promover a alguien a empleado o demovrer si es necesario."*
---
### 6. Arquitectura técnica (1 minuto)
> **"Backend en FastAPI con SQLAlchemy. JWT con RBAC de 3 niveles. SQLite para el hackathon, pero migración a PostgreSQL es trivial."**
> **"Frontend en React Native con Expo, multiplataforma — corre en iOS, Android y Web con un solo código."**
> **"La simulación de eventos es elegante: no usamos cron jobs ni websockets. Los timestamps del JSON son templates que se reinterpretan cada día, y el ETA se calcula on-demand con interpolación temporal. Cero infraestructura, máxima escalabilidad."**
> **"Tenemos 28 endpoints REST documentados en OpenAPI."**
(Opcional: mostrar `localhost:8000/docs` con Swagger)
---
### 7. Privacy by Design (30 segundos)
> **"El reto fue tajante: PROHIBIDO el seguidor activo, PROHIBIDO el snooping. Lo cumplimos así:"**
> **"Primero, el endpoint `/eta/address/:id` **nunca** devuelve coordenadas del camión. Solo: status, mensaje, ventana, progreso porcentual."**
> **"Segundo, el backend valida en cada petición que el `address_id` pertenezca al usuario autenticado. Si intento consultar el domicilio de otro, **404**."**
> **"Tercero, la interfaz tiene mensajes preventivos: 'Por tu seguridad, no persigas al camión'."**
> **"Privacy by Design no es un slogan, es nuestra arquitectura."**
---
### 8. Cierre (30 segundos)
> **"Mi Ruta Limpia es: una app que **resuelve el problema real** del ciudadano sin romper la privacidad."**
> **"Tiene **arquitectura productiva** lista para escalar."**
> **"Da **dignidad al trabajador** con motivación y bonos, no solo control."**
> **"Y le da al gobierno **datos accionables** para gestionar la ciudad."**
> **"Es lo que Celaya necesita. Gracias."**
---
## 🎯 Posibles preguntas de los jueces
### "¿Cómo escalan a 50,000 usuarios?"
- Cambiar SQLite por PostgreSQL (solo cambia `DATABASE_URL`)
- Containerizar con Docker, desplegar en AWS ECS / Cloud Run
- Cache con Redis para `/eta/*` (ya está stateless)
- Notificaciones via Firebase Cloud Messaging (esquema `push_token` ya en User)
- CDN para el bundle de Expo Web
### "¿Cómo manejan días festivos?"
- El simulador permite ajustar las rutas por fecha
- Endpoint admin podría exponer `/admin/holidays` para excluir días
- La notificación push avisaría al ciudadano
### "¿Cómo validan que la ruta es la correcta para mi casa?"
- El algoritmo `assign_route` usa Haversine con O(120) waypoints; en producción se usaría PostGIS con polígonos reales de zonas de cobertura
### "¿Y si tengo Android?"
- React Native + Expo compila a iOS, Android y Web con un solo código
- La demo es en iOS pero funciona idéntico en Android
### "¿OAuth real?"
- El endpoint `/auth/oauth` ya recibe datos del provider; falta integrar el SDK del cliente. Es 1-2 horas de trabajo.
### "¿Por qué SQLite y no Postgres?"
- Hackathon: zero-config, portable. Para producción, cambio trivial.
### "¿La simulación es real?"
- Es un mock realista que cumple el requisito del reto. En producción se reemplaza el `eta_service.get_eta()` para leer de una tabla de telemetría real, sin cambiar nada del cliente.
### "¿Mostraron el código?"
- Todo el código está en estructura limpia: 27 archivos backend, 22 archivos frontend src, todo en GitHub (o donde lo tengas).
---
## 📝 Notas para el presentador
### Antes de iniciar:
1. Verifica que backend y frontend estén corriendo
2. Cierra cualquier app que muestre notificaciones en pantalla
3. Limpia las pestañas de Safari/Chrome (que no se vea historial sensible)
4. Pon el simulador en modo de "Demo" si quieres ocultar status bar
### Durante la demo:
- **No tartamudees**: si no sabes algo, di "buena pregunta, eso lo cubrimos en la documentación técnica"
- **Mira a los jueces**, no al simulador
- **Habla en futuro presente**: "esta app permite", no "esta app permitirá"
- **Energía**: convierte el problema en algo emocional ("todos hemos sacado la basura")
### Si algo falla:
- "El simulador se está reiniciando, mientras tanto les muestro el código..."
- Ten capturas de pantalla en backup por si el simulador muere
- Ten el OpenAPI docs (`/docs`) abierto en una pestaña como respaldo