RoutePulse is a smart delivery management application for delivery drivers and small logistics teams. Drivers plan their day, follow their deliveries on a live map, update each delivery status from the field and collect a photo proof once the parcel is handed over. Clients and vehicles are managed inside the app, and the home screen summarizes the workload of the day. The mobile app is offline-first: every delivery, client and vehicle is stored locally and synchronized with the backend as soon as the connection is back. It is built as a monorepo with a Flutter mobile app and a NestJS backend.
- Onboarding screens
- Sign up with email OTP verification, resend code and countdown
- Login with JWT authentication
- Biometric login with consent at sign up
- Offline login and offline session through a locally signed token
- Automatic token refresh and redirection to login when the session expires
- Home screen with the KPIs of the day, next deliveries and quick actions
- Delivery list with status filters, sorting and today / all period filter
- Delivery creation in 4 steps: client, scheduling, articles, confirmation
- Client search and creation directly from the delivery creatuib
- Delivery details with articles, client information
- Start a delivery, cancel with a reason, report to a new date and time slot
- Delivery validation with photo proof and travelled kilometers
- Live map with delivery markers and location picking
- Client management
- Vehicle management
- Vehicle availability: a vehicle can be deactivated and hidden from the delivery form
- Offline-first local database with automatic synchronization when back online
- Real time driver position sharing
- Signature as an alternative proof of delivery
- Versioned REST API served
- JWT authentication with access and refresh tokens
- Sign up through an email OTP cached in Redis, with attempt throttling
- Biometric login endpoint, only for accounts that enabled it
- bcrypt password hashing
- PostgreSQL with Drizzle ORM and SQL migrations
- Redis caching for OTP codes, client lists and signed image URLs
- Per user encryption keys (AES-256-GCM)
- Image storage on Supabase with signed URLs
- Delivery workflow with status history: pending, in progress, delivered, cancelled, reported
- Delivery filters: status, sorting, period, pagination
- Delivery counters used by the home KPIs
- Client and vehicle endpoints
- Rate limiting, global exception filter and secrets managed with Infisical
- Real time channel for driver positions
| Mobile | Flutter, Riverpod, GoRouter, Dio, Hive, Freezed |
| Backend | NestJS, Drizzle ORM, PostgreSQL, Redis, Supabase Storage, Nodemailer, Infisical |
