# 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