Mobile

Melaka Water Taxi Service Management System

A mobile platform for booking Melaka Water Taxis with real-time boat tracking, digital payments, and improved coordination between passengers and operators.

Technologies
DartFlutterFirebase

Project Overview & Context

  • The Problem: Managing water taxi bookings, ticketing, and scheduling manually in historical Melaka led to massive physical queues, completely blind fleet tracking for operators, and an unpredictable passenger wait experience.
  • The Solution: An integrated multi-app platform designed to fully digitize the booking lifecycle. Passengers get a dedicated application to book seats and track fleets, while boat operators utilize a master system to dispatch captain personnel and optimize routes.

Key Features & User Flow

  • Dual-App Ecosystem: Split client architectures separating passenger-facing booking screens from operator-facing management utilities.
  • Live Map Synchronization: Live positioning synchronization rendering boat/operator locations seamlessly across interactive route maps.
  • Fare & Route Architecture: Flexible distance-based fare matrices calculating pricing dynamically across various jetties.
  • Push Notification Alerts: Automated alerts notifying captains and dispatchers of route assignment status changes.

Technical Architecture & Tech Stack

  • Frontend Ecosystem: Created as an individual cross-platform Flutter system written in Dart to serve cross-platform mobile binaries.
  • Shared Packages: Utilizes a central, local Dart package (water_taxi_shared) to share immutable database fields, data models, and static lookup constants across apps.
  • Real-time Data Storage: Built on Firebase architecture leveraging Cloud Firestore listeners for fast backend state propagation.
  • Authentication: Built via Firebase Authentication for secure account setup and role validation.

Engineering Challenges & Solutions

Cross-App Code Bloat & Contract Drift

  • Situation: Developing completely separate passenger and operator applications created huge code duplication risks, mismatched API payloads, and fragile database contract tracking.
  • Task: Maintain full domain alignment without writing overlapping data models twice across individual codebases.
  • Action:
    1. Extracted all core model rules, enum definitions, and schema dictionary lists into an independent workspace package called water_taxi_shared.
    2. Implemented clean serialization extensions (toFirestore() and fromFirestore()) within the shared boundary to force uniform parsing.
  • Result: Reduced setup overhead across apps and guaranteed compile-time structural agreement for all database transactions.

Gambaran Keseluruhan & Konteks Projek

  • Masalah: Pengurusan tempahan teksi air, tiket, dan penjadualan secara manual di Melaka bersejarah menyebabkan barisan fizikal yang panjang, penjejakan bot yang tidak kelihatan bagi pengendali, dan pengalaman menunggu penumpang yang tidak menentu.
  • Penyelesaian: Platform berbilang aplikasi bersepadu yang direka untuk mendigitalkan kitaran hayat tempahan sepenuhnya. Penumpang mendapat aplikasi khas untuk menempah tempat duduk dan menjejak bot, manakala pengendali bot memanfaatkan sistem utama untuk mengagihkan kapten dan mengoptimumkan laluan.

Ciri-Ciri Teras & Aliran Pengguna

  • Ekosistem Aplikasi Dwi: Seni bina klien berasingan yang mengasingkan skrin tempahan penumpang daripada utiliti pengurusan pengendali.
  • Penyelarasan Peta Langsung: Penyelarasan kedudukan masa nyata yang memaparkan lokasi bot/pengendali secara lancar di atas peta laluan interaktif.
  • Seni Bina Tambang & Laluan: Matriks tambang berasaskan jarak yang fleksibel yang mengira harga secara dinamik di pelbagai jeti.
  • Pemberitahuan Tolakan: Amaran automatik yang memaklumkan kapten dan pengagih tentang perubahan status tugasan laluan.

Seni Bina Teknikal & Stack Teknologi

  • Ekosistem Klien: Dibina sebagai sistem Flutter pelbagai platform yang ditulis dalam Dart untuk menyediakan binaan mudah alih pada pelbagai peranti.
  • Pakej Dikongsi: Menggunakan pakej Dart tempatan pusat (water_taxi_shared) untuk berkongsi medan pangkalan data, model data, dan pemalar rujukan statik di seluruh aplikasi.
  • Penstoran Data Masa Nyata: Dibina di atas seni bina Firebase memanfaatkan pendengar Cloud Firestore untuk penyebaran keadaan bahagian belakang yang pantas.
  • Pengesahan: Dibina melalui Firebase Authentication untuk pendaftaran akaun dan pengesahan peranan yang selamat.

Cabaran Kejuruteraan & Penyelesaian

Pengulangan Kod Berbilang Aplikasi & Penyimpangan Kontrak

  • Situasi: Membina aplikasi penumpang dan pengendali yang berasingan secara penuh mewujudkan risiko pengulangan kod yang besar, ketidakpadanan muatan API, dan penjejakan kontrak pangkalan data yang rapuh.
  • Tugasan: Mengekalkan penyelarasan domain sepenuhnya tanpa menulis model data yang sama sebanyak dua kali di seluruh asas kod.
  • Tindakan:
    1. Mengeluar semua peraturan model teras, definisi enum, dan senarai kamus skema ke dalam pakej ruang kerja berasingan dinamakan water_taxi_shared.
    2. Melaksanakan sambungan siri yang bersih (toFirestore() dan fromFirestore()) di dalam pakej yang dikongsi untuk memaksakan analisis data yang seragam.
  • Hasil: Mengurangkan beban persediaan di seluruh aplikasi dan menjamin kesepakatan struktur semasa pemprosesan untuk semua transaksi pangkalan data.