Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Sistema de gestión de residuos urbanos que rastrea en tiempo real los camiones recolectores y facilita la comunicación entre autoridades, operadores y ciudadanos

empiricalhq/waste

Repository files navigation

[monorepo]: lima-limpia

@lima-limpia es un sistema de gestión de residuos urbanos que rastrea en tiempo real los camiones recolectores y facilita la comunicación entre autoridades, operadores y ciudadanos.

El sistema actualmente incluye:

  • [autoridades] Aplicación web para visualizar ubicación y métricas de camiones recolectores
  • [operadores] Aplicación móvil para operadores con registro de trayectos e incidencias
  • [ciudadanos] Aplicación móvil pública para notificaciones de llegada y reportes de incidencias

Nuestros planes a futuro incluyen:

  • [hardware] Integrar trackers GPS en los camiones recolectores para obtener datos de ubicación en tiempo real con mayor precisión y confiabilidad, manteniendo la aplicación móvil como respaldo
  • [data-science] Optimizar rutas y frecuencias con datos recolectados
  • [app] Implementar clasificación automática con machine learning
  • [deploy] Expandir el sistema a otras municipalidades adaptándolo al contexto local

El team:

David
David Duran

🚧 🛡️
Pedro Rojas F
Pedro Rojas F

🚧 💡
Andrés Cosme Malaz
Andrés Cosme Malaz

🚧

Nuestro stack: TypeScript es el lenguaje principal del proyecto. Usamos frameworks como Next.js para la web, la app de uso público en React Native con Expo, la app de uso interno para choferes en Flutter y Supabase con PostgreSQL como backend.

Adicionalmente, dependemos de los siguientes paquetes: better-auth para la autenticación, drizzle-orm para el esquema, Tailwind CSS para los estilos, Zustand para la gestión de estado.

Deploy: Las aplicaciones móviles se compilan con EAS, el CI de Expo y la API a través de Deno Deploy EA.

Guía rápida

Ejecuta todos estos comandos desde la raíz del proyecto.

  1. Para generar y aplicar el esquema de base de datos:

    bun --filter @lima-garbage/database db:generate
    bun --filter @lima-garbage/database db:push
  2. Para crear el usuario administrador:

    bun --filter @lima-garbage/database setup:admin
  3. Para poblar la base de datos con datos de prueba:

    bun --filter @lima-garbage/database db:seed
  4. Para iniciar el servidor de desarrollo de la API:

    bun --filter @lima-garbage/api dev

    Para asegurar que la API está funcionando correctamente:

    bun --filter @lima-garbage/api test

    Para ver los endpoints disponibles, visita la documentación de la API en apps/api/readme.md.

Repositorios

  1. API (apps/api): Aplicación hono desplegada en Deno Deploy. Disponible en https://api-prod.empirical.deno.net/

    • Gestiona todas las operaciones de datos.
    • Autenticación con better-auth; valida solicitudes.
    • Es el único componente autorizado a importar y usar @lima-garbage/database.
  2. App (apps/citizen): Aplicación pública desarrollada en React Native con Expo.

    • Reporte de problemas de recolección, consulta de horarios y acceso a material educativo sobre clasificación de residuos.
    • Autenticación con @better-auth/expo y manejo del state con Zustand.
  3. App (apps/trucker): Aplicación interna en Flutter para operadores de recolección.

    • Gestión de rutas asignadas, actualización en tiempo real y registro de progreso.
    • Autenticación OAuth estándar mediante cliente HTTP Dio (TBA).
  4. Administración (apps/web): Aplicación interna en Next.js para supervisores y administradores.

    • Dashboards operativos, gestión de rutas y análisis de datos.
    • Implementa patrón Backend for Frontend (BFF), donde el servidor Next.js actúa como proxy hacia la API central.
  5. Esquema de la DB (packages/database): Paquete compartido que define el esquema en PostgreSQL con Drizzle ORM.

    • Exporta tipos TypeScript para consultas type-safe en la API.
    • No es ejecutable; funciona únicamente como definición de la capa de datos.
graph TD
    A["apps/citizen – expo / react native"]
    B["apps/trucker – flutter"]
    C["apps/web – next.js"]
    D["apps/api – hono (deno deploy)"]
    E["packages/database – drizzle orm"]
    F[(supabase postgresql)]

    A -->|auth http| D
    B -->|auth http| D
    C -->|server-to-server| D

    D -->|sql queries| E
    E --> F
Loading

Flujo de autenticación

Todas las aplicaciones cliente generan tokens de sesión válidos, que deben enviarse en cada solicitud HTTP a la API, ya sea en headers de autorización o cookies.

  • app/citizen usa el SDK de better-auth para Expo, almacenando credenciales en el almacenamiento seguro del dispositivo.
  • app/trucker implementa OAuth estándar con gestión manual de tokens.
  • app/admin-web gestiona autenticación a través de su backend en Next.js, que actúa como proxy de sesión hacia la API Hono.

Reglas

Las modificaciones al esquema de base de datos deben realizarse en packages/database/src/schema. Tras los cambios, se generan las migraciones con bun run db:generate y se aplican en desarrollo mediante bun run db:push. See package.json.

La implementación de nuevas funcionalidades comienza siempre en apps/api, creando un endpoint con el middleware de autenticación y validación correspondiente. La lógica se define en el controlador, utilizando Drizzle para las operaciones de base de datos. Una vez completado este paso, se continúa con la integración en las aplicaciones cliente respectivas.

Las aplicaciones cliente se limitan a la interfaz de usuario, la gestión del state (local) y la comunicación HTTP con la API. La validación de datos, la lógica de negocio y la persistencia se centralizan exclusivamente en la API.

About

Sistema de gestión de residuos urbanos que rastrea en tiempo real los camiones recolectores y facilita la comunicación entre autoridades, operadores y ciudadanos

Resources

Stars

Watchers

Forks

Contributors 4

  •  
  •  
  •  
  •