@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 Duran 🚧 🛡️ |
Pedro Rojas F 🚧 💡 |
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.
Ejecuta todos estos comandos desde la raíz del proyecto.
-
Para generar y aplicar el esquema de base de datos:
bun --filter @lima-garbage/database db:generate bun --filter @lima-garbage/database db:push
-
Para crear el usuario administrador:
bun --filter @lima-garbage/database setup:admin
-
Para poblar la base de datos con datos de prueba:
bun --filter @lima-garbage/database db:seed
-
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 testPara ver los endpoints disponibles, visita la documentación de la API en apps/api/readme.md.
-
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.
-
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.
-
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).
-
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.
-
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
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-authpara 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.
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.