Transportation Manager

Transportation ManagerFlutter Project

Enterprise-Grade Transportation & Warehouse Management System

Project Overview

This client was drowning in paperwork, trying to manage a complex logistics network. They had no single system to track warehouse purchases (In), warehouse-to-retail transfers (Out), and retail receiving (In) across multiple locations.

We built an all-in-one, cross-platform Transportation & Warehouse Management System in Flutter. The entire system was designed around one core principle: it had to be so intuitive that a new warehouse manager could use it perfectly with "zero minutes of training."

😟 The Client's Problem: A "Blind" and Complex Logistics Chain

The client's daily operations were slow, manual, and full of errors. They had no real-time visibility into their own inventory.

  • No Central Hub: Warehouse managers used one set of spreadsheets for "Purchase Orders" (purchase_order_list_page.dart), another for "Warehouse Out" (warehouse_out_list.dart), and retail managers had another system for "Warehouse In" (warehousein_list_page.dart).
  • Constant Manual Error: With no single source of truth, products were frequently mis-shipped, incorrectly received, or lost in transit, leading to stock discrepancies.
  • High Training Overhead: Existing software was complex. Training a new warehouse employee was time-consuming and costly.
  • Data Silos: Information was trapped. For example, to check the status of an invoice, a manager might have to manually log into a 3rd-party website.

💡 The Solution: An All-in-One App Designed for "Zero Training"

We built a single Flutter application that unifies every step of the logistics process into one simple, task-based interface.

Transportation Manager Application Dashboard and Interface

Key Components of a Supply Chain

  • Task-Based UI: Instead of confusing menus, the home screen gives users clear options: "Receive Purchase Order," "Prepare Warehouse Shipment," or "View Reports." The design guides the user, requiring zero training.
  • Unified Warehouse "In": The purchase_order module allows warehouse staff to see all incoming supplier POs, check them against the physical items, and mark them as "received" into inventory.
  • Unified Warehouse "Out": The warehouse_out module lets staff see all transfer requests from retail locations. They can build a shipment, scan items, and mark it as "in-transit."
  • Unified Retail "In": The warehousein module allows the retail store manager to see all "in-transit" shipments, receive them, and confirm the inventory, which automatically updates the central database.
  • Smart Automation: We built an invoice_fetcher module that automatically logs into external websites, scrapes invoice data (using htmlParser), and uploads it to FirebaseFirestore. This turned a 30-minute manual task into a 0-second background process.
  • Utility Tools: We included a barcode_generator so staff could print their own internal SKU labels, ensuring 100% scan accuracy.

🛠️ Technology Stack & Key Services

This project showcases our ability to solve complex, real-world logistics problems with an enterprise-grade application.

Key Services

  • Warehouse Management System (WMS) Development
  • Logistics & Transportation Management Software
  • Flutter App Development (Cross-Platform)
  • Business Process Automation (BPA)
  • Firebase App Development
  • Data Scraping and Integration

Technology Stack

  • Core App: Flutter (for a single codebase on iOS, Android, and Desktop)
  • Backend Database: Firebase Firestore (as the real-time, central source of truth)
  • API & Web Scraping: http package, htmlParser
  • Hardware Integration: barcode_generator
  • Core Modules: warehouse_out, warehousein, purchase_order

⚙️ The Process

  1. Discovery & Shadowing: We spent a day shadowing the warehouse manager to understand their exact physical workflow, from receiving a PO to shipping a box. We mapped every pain point.
  2. UX/UI "Zero Training" Design: We prototyped a UI with a "task-first" philosophy. We tested it by asking, "If you had no training, would you know what to click?"
  3. Agile Development (Flutter): We built the app in modules, starting with the core "In" and "Out" loops.
  4. Backend & Integration: We structured the Firestore database to act as the central ledger and built the invoice_fetcher to automate the client's most time-consuming manual task.
  5. The "Zero Training" Test: We delivered the app to a new employee with zero instructions. They were able to successfully receive a purchase order and prepare a retail shipment on their first try.

🏆 The Result: A "Zero Training" System That Eliminated Errors

The new, unified system had a massive and immediate impact on the business.

  • Achieved "Zero Minutes of Training" Goal: The app was so intuitive that new employees could use it perfectly on day one, completely eliminating training overhead.
  • Centralized All Logistics: We replaced all disconnected spreadsheets and paperwork with a single, real-time app.
  • Drastically Reduced Shipping Errors: By linking Warehouse "Out" to Retail "In," mismatched shipments and inventory "ghosts" were virtually eliminated.
  • Full "In-Transit" Visibility: For the first time, management could see the exact status and location of all products in their internal supply chain.
  • Automated Manual Work: The invoice_fetcher alone saved the team over 10 hours per week of manual data entry.

Code Showcase

main.dart
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Invoice App',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: HomeScreen(),
    );
  }
}
invoice_fetcher.dart
Future<void> fetchInvoiceData(String url) async {
  setState(() {
    _message = 'Fetching data...';
    _products.clear();
  });
  try {
    final response = await http.get(Uri.parse(url));
    var document = htmlParser.parse(response.body);
    // ...parse invoice, customer, products...
    await uploadToFirestore(invoiceNo, customerName, customerMobile, _products, url);
    setState(() { _message = 'Data fetched and uploaded successfully.'; });
  } catch (e) {
    setState(() { _message = 'Error: $e'; });
  }
}