Files
hackathon-fenix-dd4242d3e4a…/README.md

3.8 KiB

🚛 BasuraApp — HackOnLinces 2026

Sistema de notificación inteligente y privada de recolección de residuos para la ciudadanía de Celaya, Guanajuato.

🎯 Problemática

Los ciudadanos no saben con certeza cuándo pasará el camión recolector, lo que genera basura en la calle fuera de horario, problemas de salud pública y fauna nociva.

Solución

App móvil que notifica la hora aproximada de llegada del camión sin exponer la ruta completa, bajo un principio de Privacidad por Diseño.

🏗️ Arquitectura

Frontend (React Native / Expo) ↓ JWT + HTTPS + WebSocket API Gateway + Auth (FastAPI) ↓ RBAC por domicilio ┌──────────────────────────────────────┐ │ ETA Service │ Simulator │ WS │ │ (cálculo) │ (cron job) │ Server│ └──────────────────────────────────────┘ ↓ PostgreSQL — Usuario → Domicilio → Zona → Ruta

🔒 Privacidad por Diseño

  • El usuario solo ve la ventana de llegada de su ruta asignada
  • La API valida en cada request que el usuario solo accede a su domicilio
  • Prohibido: mapa en tiempo real, rastreo del camión, explorar rutas ajenas
  • Mensajería preventiva: la app desalienta sacar basura fuera de horario

📱 Funcionalidades MVP

  • Registro e inicio de sesión con JWT (email o teléfono)
  • Múltiples domicilios por usuario (casa y trabajo)
  • Alta de domicilio con combobox de colonias y código postal
  • ETA con ventana de llegada (±7 min)
  • Simulador de rutas — cron job cada 2 min avanza 15 rutas
  • WebSockets para ETA en tiempo real (fallback a polling cada 2 min)
  • 3 eventos de notificación: ROUTE_START, TRUCK_PROXIMITY, ROUTE_COMPLETED
  • Notificaciones configurables por tipo
  • Alertas operativas — retrasos y fallas mecánicas en tiempo real
  • Guía de separación de residuos (funciona offline)
  • RBAC — cada usuario solo consulta su ruta
  • Buzón de reportes con 4 categorías
  • Persistencia de sesión con AsyncStorage
  • Pull to refresh y auto-refresh
  • APK nativo compilado con EAS Build

🛠️ Stack Tecnológico

Capa Tecnología
Frontend React Native + Expo SDK 54
Backend Python 3.12 + FastAPI
Tiempo real WebSockets (FastAPI)
Auth JWT (python-jose + passlib)
Base de datos PostgreSQL + SQLAlchemy
Simulador APScheduler (cron job cada 2 min)
Build nativo EAS Build (Expo)
Control de versiones Gitea (git.onlinces.net)

🚀 Cómo correr el proyecto

Backend

cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --reload --port 8000 --host 0.0.0.0

Frontend

cd frontend
npm install
npx expo start

Documentación de la API

Disponible en http://localhost:8000/docs (Swagger UI)

📊 Datasets utilizados

  • data/rutas.json — 15 rutas con 8 posiciones GPS cada una
  • data/colonias-rutas.json — mapeo colonia → ruta + horario estimado
  • data/notificaciones.json — 3 eventos de notificación push

🔌 Endpoints principales

Método Endpoint Descripción
POST /auth/register Registro con email o teléfono
POST /auth/login Login con JWT
POST /domicilios Alta de domicilio
GET /domicilios Listar domicilios del usuario
GET /eta/{domicilio_id} Ventana de llegada ETA
POST /reportes Buzón de retroalimentación
POST /alertas/operativa Crear alerta de retraso/falla
GET /alertas/operativa/activa Consultar alerta activa
WS /ws/eta/{domicilio_id} ETA en tiempo real vía WebSocket

👤 Equipo

  • hack_21031301_c761d3 — HackOnLinces 2026