PaquetesBA

CompletadoDemo
Ver portfolio
PaquetesBA

Plataforma móvil de logística de última milla construida con Expo React Native. Conecta clientes que necesitan enviar paquetes con repartidores disponibles en su zona, con rastreo GPS en tiempo real vía WebSocket, confirmación de entrega con firma digital y tres interfaces diferenciadas: clientes, repartidores y administradores.

Capturas de pantalla

Cliente — home con pedidos activos y acceso rápido a nuevo envío
Cliente — home con pedidos activos y acceso rápido a nuevo envío
Cliente — rastreo GPS en tiempo real del paquete en el mapa
Cliente — rastreo GPS en tiempo real del paquete en el mapa
Cliente — historial de envíos con filtros y estados de cada pedido
Cliente — historial de envíos con filtros y estados de cada pedido
Cliente — perfil con datos personales y configuración de cuenta
Cliente — perfil con datos personales y configuración de cuenta
Repartidor — pedidos disponibles en la zona con toggle online/offline
Repartidor — pedidos disponibles en la zona con toggle online/offline
Repartidor — entrega activa con mapa y confirmación por firma digital
Repartidor — entrega activa con mapa y confirmación por firma digital
Repartidor — historial de entregas con estadísticas de rendimiento
Repartidor — historial de entregas con estadísticas de rendimiento
Repartidor — perfil con datos del vehículo y métricas de desempeño
Repartidor — perfil con datos del vehículo y métricas de desempeño
Admin — dashboard con KPIs del día y pedidos recientes
Admin — dashboard con KPIs del día y pedidos recientes
Admin — lista completa de pedidos con filtros por estado
Admin — lista completa de pedidos con filtros por estado
Admin — gestión de repartidores con estado online/offline
Admin — gestión de repartidores con estado online/offline
Admin — gestión de clientes registrados en la plataforma
Admin — gestión de clientes registrados en la plataforma
Admin — CRUD de zonas de cobertura del servicio
Admin — CRUD de zonas de cobertura del servicio
Admin — tarifas por zona, tamaño y tipo de paquete
Admin — tarifas por zona, tamaño y tipo de paquete
Admin — reportes con KPIs generales y rendimiento por repartidor
Admin — reportes con KPIs generales y rendimiento por repartidor

¿Cómo funciona?

1. Creación y asignación del pedido

El cliente ingresa origen, destino y tipo de paquete. El backend calcula el precio según la zona de cobertura y el tamaño del envío, crea el pedido en estado PENDING y notifica vía push a los repartidores disponibles en esa zona. El primer repartidor que acepta el pedido queda asignado, el estado pasa a CONFIRMED y el cliente recibe una notificación inmediata.

2. Ciclo de vida del pedido

El pedido atraviesa 6 estados: PENDING → CONFIRMED → PICKED_UP → IN_TRANSIT → OUT_FOR_DELIVERY → DELIVERED. Cada transición queda registrada en OrderStatusHistory con timestamp. En cada cambio de estado, el cliente recibe una notificación push nativa vía Firebase FCM (Android) o APNs (iOS). Si algo sale mal, el pedido puede pasar a FAILED o CANCELLED desde cualquier punto del ciclo.

3. Tracking GPS en tiempo real

Mientras el pedido está activo, el repartidor emite su posición cada 5 segundos a través de un WebSocket en el namespace /tracking. El backend aplica un throttle por conductor, guarda la última posición conocida en DriverProfile y hace fanout a la room order:<id>, donde el cliente está suscrito. En segundo plano (app minimizada), expo-task-manager mantiene el GPS activo y envía la posición vía HTTP al endpoint PATCH /drivers/me/location.

4. Confirmación de entrega con firma digital

Para marcar un pedido como entregado, el repartidor debe capturar la firma del receptor directamente en la pantalla del celular usando react-native-signature-canvas. Opcionalmente puede adjuntar una foto del paquete. Ambos archivos se envían como multipart/form-data al backend, que los sube a Cloudinary y guarda las URLs en el pedido. La firma es obligatoria: sin ella el endpoint rechaza la confirmación.

5. Panel de administración

Los administradores acceden a un panel con vista Drawer que incluye un mapa en vivo de toda la flota, asignación manual de pedidos a repartidores específicos, gestión de zonas de cobertura con sus tarifas por tamaño y tipo de paquete, y reportes con KPIs generales y rendimiento individual de cada repartidor.

Funcionalidades

Tecnologías

React NativeNestJSPostgreSQLDockerGitHub
Ver en GitHub¿Tenés un proyecto? HablemosContactame