Overview
The Jember Regency Department of Transportation wanted a mobile app to provide transportation information and services. Citizens could check bus schedules, find transit routes, and access department contact info. Standard stuff.
But they also wanted to include a car towing service. If your car breaks down or gets illegally parked, you could request a tow through the app. The department would dispatch a truck, tow your vehicle, and log the transaction. This was less standard.
I built J-Tras1e as a transportation services platform. The information side was straightforward — display schedules, routes, and contact details. The towing service required more thought. It needed request management, dispatch coordination, real-time tracking, and payment logging.
The app had to work for both citizens and department staff. Citizens submit requests. Staff manage the queue, assign drivers, and update status. Drivers use the app to navigate to the vehicle and confirm completion. Everyone sees the same data in real time.
Client
The Jember Regency Department of Transportation manages public transit, traffic enforcement, and vehicle services. They wanted to modernize how citizens access their services and improve response times for towing requests.
The towing service was a pain point. Requests came in via phone. Dispatchers used paper logs. Drivers had no GPS guidance. Citizens had no way to track their request. The process was slow and opaque. They wanted to fix that.
Features
Transportation information provides bus schedules, route maps, and terminal locations. Citizens can search by route or destination. The data is pulled from the backend and updated by department staff.
Towing request system lets citizens submit requests with their location, vehicle details, and reason for towing. The system generates a ticket and notifies dispatchers. Citizens can track the status of their request — pending, assigned, in progress, or completed.
Dispatch management gives staff a queue of pending requests. They can assign requests to available drivers, view driver locations, and monitor progress. The system prioritizes requests based on urgency and location.
Driver interface shows assigned requests with navigation to the vehicle location. Drivers can update status, upload photos of the vehicle, and mark the job as complete. The system logs timestamps for accountability.
Push notifications keep citizens informed. They get notified when their request is assigned, when the driver is en route, and when the job is done. Reduces the need for phone calls and improves transparency.
Tech Stack
Flutter for the mobile app with GetX for state management. CodeIgniter 3 backend with MySQL for data storage. REST API for communication between the app and backend.
Google Maps integration for location selection and driver navigation. Firebase Cloud Messaging for push notifications. Role-based access control for citizens, staff, and drivers.
Real-time updates were handled with polling. Not the most elegant solution, but it worked and didn't require WebSocket infrastructure. The app polls the backend every few seconds when a request is active.
My Role
Full-stack developer. I built the mobile app, designed the API, and developed the backend. I also worked with the transportation department to define the towing workflow and request prioritization rules.
The dispatch logic was the hardest part. How do you assign requests fairly? Closest driver? First available? What if a driver is already en route to another job? I built a simple assignment algorithm that considers driver location, availability, and current workload. Not perfect, but better than manual assignment.
I also handled edge cases. What if a citizen cancels a request? What if a driver can't find the vehicle? What if the vehicle is gone when the driver arrives? Built in cancellation flows, status updates, and notes fields so staff could handle exceptions without breaking the system.
The app was deployed but never gained significant traction. The transportation department used it internally, but citizen adoption was low. Turns out most people still prefer calling for a tow. The app worked, but changing behavior is harder than building software.
Still, it was a good learning experience. I got to work on real-time coordination, role-based workflows, and GPS integration. And the department got a functional system, even if it didn't become the primary channel they hoped for.
