Files
hackathon-v-escape-4ff8b5a6…/docs/PRESENTACION.md
marianesaldana 80dbd947e5 Initial commit
2026-05-23 08:59:34 -06:00

8.7 KiB

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