PaquetesBA
CompletadoDemoPlataforma 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
¿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
- ✦Rastreo GPS en tiempo real vía WebSocket: el repartidor emite su posición cada 5 segundos y el cliente ve el movimiento en un mapa en vivo. En segundo plano usa expo-task-manager para mantener el GPS activo.
- ✦Ciclo de vida completo del pedido con 6 estados: PENDING → CONFIRMED → PICKED_UP → IN_TRANSIT → OUT_FOR_DELIVERY → DELIVERED, con notificaciones push en cada transición.
- ✦Confirmación de entrega con firma digital obligatoria y foto opcional, almacenadas en Cloudinary y accesibles como comprobante.
- ✦Código de seguimiento público en formato PBA-{año}-{hex} que permite rastrear el paquete sin necesidad de autenticación.
- ✦Tres roles con interfaces dedicadas: clientes con historial y mapa, repartidores con gestión de entregas activas y toggle online/offline, y administradores con panel de flota, zonas, tarifas y reportes.
- ✦Panel de administración con mapa en vivo de toda la flota, asignación manual de pedidos y gestión de zonas y tarifas por tamaño de paquete.
- ✦Notificaciones push nativas vía Firebase FCM (Android) y APNs (iOS) en cada cambio de estado del pedido.
- ✦Precio estimado por envío calculado automáticamente según la zona de cobertura, el tamaño y el tipo de paquete.















