Waiting list no pending requests
Dispatch Board — Complete Guide
1. How Bookings Arrive

Bookings come from 3 channels:

  • Customer website — via /transfer-booking/ form or AI chat assistant
  • Phone call — dispatcher creates booking via New Booking page
  • AI voice — automated phone booking (booking_source = AI)

The system auto-assigns the best vehicle across the entire fleet — customer doesn't choose. Before confirming, it verifies: no time overlap, driver can physically reach the pickup (GPS + road distance + 15 min buffer), and vehicle has enough seats.

2. Ride Status Flow
confirmed Booking confirmed — needs a driver assigned
Assign (direct) or Offer (driver accepts/rejects)
offered Sent to driver — waiting for accept/reject
Driver accepts (if rejected → auto re-dispatched to next driver)
assigned Driver committed — ride is scheduled
"I'm On My Way"
en route Driver heading to pickup (customer can track live)
"I've Arrived"
arrived At pickup — waiting for passenger
"Passenger In" or "No Show"
onboard Passenger in vehicle — ride in progress
"Ride Complete"
completed Ride finished — driver status returns to Available

Note: Steps must follow order — driver can't skip from "En Route" to "Complete". If customer cancels mid-ride, driver is automatically released back to Available.

3. Assigning a Driver

Click "Assign" on any unassigned ride. The system validates the driver is actually available before assigning.

  • Assign Directly — instant assignment, driver sees it immediately
  • Offer — driver gets Accept/Reject buttons. If rejected, system automatically offers to the next best driver.
4. AI Smart Dispatch

In the assign modal, use AI Best Driver for automatic scoring:

FactorWeightHow
Proximity25%Distance from driver to pickup (GPS or last dropoff)
Cost Efficiency30%Cheapest vehicle that fits = highest profit margin
Capacity Fit20%Don't waste a minibus on 1 passenger
Workload15%Fewer rides today = higher priority
Rating10%Higher-rated drivers preferred
5. Profit Analysis

Click Profit Analysis in the assign modal to see:

  • Grade (A-F) — overall booking quality based on Net Profit Per Hour
  • Net Profit — fare minus vehicle cost (fuel + maintenance + depreciation) minus driver cost
  • Margin % — profit as percentage of fare
  • Dead KM % — empty driving (pickup deadhead + estimated return)
  • Chain Rides — if another booking exists near the dropoff, same vehicle can take it (saves deadhead)
  • Vehicle recommendation — which vehicle maximizes profit for this ride
6. Dispatch New Booking (Phone Calls)

Click New Booking to create a booking during a phone call:

  • Search existing customers or create new ones
  • Enter pickup/dropoff with geocoding, date, time, passengers
  • System shows fare + profit analysis + vehicle recommendation
  • Dispatcher can override the price (loyalty discount, premium quote)
  • Phone scripts provided for common scenarios
  • Booking created with source = PHONE for tracking
7. Vehicle Tracking & Management
  • Fleet map — live GPS positions (green = available, red = busy, grey = offline)
  • Shift tracking — drivers record odometer at shift start/end. System detects km discrepancies (personal use).
  • Vehicle costs — each vehicle has a cost/km (auto from type or custom). Used for profit calculations.
  • Damage reports — drivers mark damage on a car diagram during inspections.
  • Maintenance log — service history, costs, next-due alerts.
8. Pricing

Configured in the Transfer Service Wizard (4 steps):

  • Fixed routes — predefined A-to-B prices (e.g. Airport → City = €50)
  • Per-km metered — base fare + €/km (for custom routes)
  • Surcharges — airport fee, extra stops, child seats, night %
  • Fare is server-calculated — customer can't tamper with the price
9. Customer Experience
  • Booking page — clean form at /transfer-booking/, no vehicle selection (auto-assigned)
  • AI chat — customer can book via conversation ("I need a ride from airport to hotel tomorrow at 3pm")
  • Live tracking — customer sees driver position, ETA, vehicle details
  • Alternative times — if unavailable, system suggests the earliest slot where a driver can actually reach the pickup

Driver App — Installation Guide
Android — PWA Install (No App Store Needed)

Android drivers get a standalone app directly from the browser — no download from Play Store required. The Driver PWA has its own icon, opens to /driver/app/, and includes keep-alive systems (silent audio, persistent notification, wake lock).

  1. On the driver's Android phone, open Chrome and navigate to https://your-tenant.linkandbook.com/driver/app/
  2. An install banner appears at the bottom — tap Install
  3. If no banner appears (e.g., tenant PWA already installed): tap menu → Add to Home Screen
  4. The icon "Driver - TenantName" appears on the home screen with a steering wheel badge
  5. Open the app — grant Location and Notification permissions when prompted

Tip: Go to Settings → Apps → Chrome → Battery → Unrestricted to prevent Android from killing background tracking.

Why native for iPhone? Safari/PWA on iPhone kills GPS when the screen locks or the driver switches apps. The native app uses CLLocationManager with allowsBackgroundLocationUpdates — GPS never stops, even in background.
iOS — Native App via TestFlight
Prerequisites
  1. Apple Developer Account ($99/year) — developer.apple.com
  2. GitHub account (free) — github.com
  3. Codemagic account (free, 500 build min/month) — codemagic.io
  4. No Mac needed — builds run on Codemagic's M2 Mac minis in the cloud
Step 1 — Register App in Apple Developer Portal
  1. Go to Certificates, Identifiers & Profiles
  2. Click +App IDsApp
  3. Description: LB Driver, Bundle ID: com.linkandbook.driverapp
  4. Check capabilities: Background Modes
  5. Click Register
Step 2 — Create App in App Store Connect
  1. Go to App Store ConnectMy Apps+New App
  2. Platform: iOS, Name: LB Driver
  3. Bundle ID: select com.linkandbook.driverapp, SKU: lb-driver-001
  4. Save — note the Apple ID number shown (e.g., 6449012345)
Step 3 — Create App Store Connect API Key
  1. Go to App Store Connect → Integrations → API
  2. Click + Generate Key, Name: Codemagic, Access: Developer
  3. Download the .p8 file (one-time download!)
  4. Note the Key ID and Issuer ID shown on the page
Step 4 — Push Code to GitHub
cd ios_driver_app
git init
git add .
git commit -m "LB Driver iOS app"
git remote add origin https://github.com/YOU/lb-driver-ios.git
git push -u origin main

The repo already includes codemagic.yaml with the build configuration.

Step 5 — Configure Codemagic
  1. Sign up at codemagic.io (use GitHub login)
  2. Click Add application → select your lb-driver-ios repo
  3. Go to Teams → Integrations → App Store Connect
  4. Enter your Issuer ID, Key ID, and upload the .p8 file
  5. In app Environment variables, add:
    APP_STORE_CONNECT_APP_ID = the Apple ID from Step 2
Step 6 — Build & Deploy
  1. In Codemagic: Start new build → select ios-driver-app workflow
  2. Wait ~5-10 minutes — Codemagic builds on a cloud M2 Mac, signs the app, and uploads to TestFlight
  3. You receive an email from Apple when the build is ready
Step 7 — Install on Driver's iPhone
  1. In App Store Connect → TestFlight, create a group called Drivers
  2. Add drivers by email — they receive an invite
  3. Driver installs the free TestFlight app from the App Store
  4. Opens the invite → installs LB Driver
  5. Grant "Always Allow" location permission when prompted
Updates: Push code to GitHub → Codemagic auto-builds → TestFlight notifies drivers to update. Total cost: $99/year (Apple Developer Program only).
Prerequisites
  1. Mac with Xcode 15+
  2. Apple Developer Account ($99/year) — developer.apple.com
  3. iPhone running iOS 16+ (driver's phone)
Build Steps
  1. Copy ios_driver_app/DriverApp/ folder to the Mac
  2. Open DriverApp.xcodeproj in Xcode
  3. Click the DriverApp project in the sidebar (blue icon)
  4. Go to Signing & Capabilities tab
  5. Set Team to your Apple Developer account
  6. Verify Bundle ID: com.linkandbook.driverapp
  7. Verify Background Modes → Location updates is checked
  8. Connect an iPhone via USB cable, select it in the device dropdown
  9. Click Run (play button) — Xcode builds and installs on the phone
  10. On iPhone: Settings → General → VPN & Device Management → Trust
  11. Open the app — grant "Always Allow" location permission
Distribute via TestFlight
  1. In Xcode: Product → Archive
  2. In Organizer: Distribute App → TestFlight Internal
  3. Upload completes in ~5 minutes
  4. Go to App Store Connect → TestFlight
  5. Add drivers' email addresses as testers
  6. Drivers install TestFlight app → install LB Driver from invite
  7. Updates: Archive + Upload again — drivers get auto-update
What the Native App Does
  • Thin native shell (WKWebView) loads your existing /driver/app/ page
  • Native CLLocationManager replaces web GPS — survives background/lock screen
  • Injects GPS into web page via JS bridge (calls onPosition())
  • Direct HTTP POST to /driver/update-location/ as backup
  • Opens Google Maps / phone calls in system apps
  • Keeps screen always on, shows iOS blue location bar in background
Architecture
Native CLLocationManager (never stops)
  ↓ every 5 meters
NativeLocationManager.swift
  ↓ injects into WebView    ↓ direct HTTP POST
onPosition(pos) in JS        /driver/update-location/
  ↓
Existing driver app works as-is
Project Files

Located in: ios_driver_app/DriverApp/

FilePurpose
AppDelegate.swiftApp entry point, keeps screen on
DriverWebViewController.swiftWKWebView + JS bridge + external links
NativeLocationManager.swiftBackground GPS, injects into web + server sync
Info.plistBackground location mode, permission strings
DriverApp.entitlementsAlways-on location entitlement
LaunchScreen.storyboardDark splash: "LB Driver" in gold
codemagic.yamlCloud build config (Codemagic CI/CD)
Configuration

If your server URL changes, edit one line in DriverWebViewController.swift:

private let driverAppURL = "https://www.linkandbook.com/driver/app/"
Troubleshooting
IssueFix
GPS stops in backgroundSettings → LB Driver → Location = Always
"Untrusted Developer"Settings → General → VPN & Device Mgmt → Trust
No location permission promptDelete app, reinstall — iOS only asks once
Blue bar not showingVerify showsBackgroundLocationIndicator = true in NativeLocationManager
App expires (TestFlight)TestFlight builds expire after 90 days — push code to rebuild
Codemagic build failsCheck build logs — usually signing issue. Verify .p8 key and Bundle ID match
0
Pending
0
Assigned
0
En Route
0
Completed
Today's Rides

No rides scheduled.

2026 at a glance
11 rides this year
January
MTWTFSS
1 2 3 4
5 6 7 8 9 10 11
February
MTWTFSS
1
2 3 4 5 6 7 8
March
MTWTFSS
1
2 3 4 5 6 7 8
30 31
April
MTWTFSS
1 2 3 4 5
6 7 8 9 10 11 12
May
MTWTFSS
1 2 3
4 5 6 7 8 9 10
June
11
MTWTFSS
1 2 3 4 5 6 7
8 9 10 11 12 13 14
29 30
July
MTWTFSS
1 2 3 4 5
6 7 8 9 10 11 12
August
MTWTFSS
1 2
3 4 5 6 7 8 9
31
September
MTWTFSS
1 2 3 4 5 6
7 8 9 10 11 12 13
28 29 30
October
MTWTFSS
1 2 3 4
5 6 7 8 9 10 11
November
MTWTFSS
1
2 3 4 5 6 7 8
30
December
MTWTFSS
1 2 3 4 5 6
7 8 9 10 11 12 13
Less More
Fleet Map
Fleet (3)
2 available
Ford E Tourneo
Van (7-8 pax)
Available
3 months ago
Ford E-Explorer Premium
SUV (1-5 pax)
Available
Never seen
Mazda 3 Sedan
Sedan (1-3 pax) · YNY-4854
Off Duty
Never seen
Driver Schedules
Ford E Tourneo
· Van (7-8 pax) · 7 pax
Available
0 rides 0h
No completed cost data yet.
Ford E-Explorer Premium
· SUV (1-5 pax) · 4 pax
Available
0 rides 0h
No completed cost data yet.
Mazda 3 Sedan
YNY-4854 · Sedan (1-3 pax) · 4 pax
Off Duty
0 rides 0h
No completed cost data yet.
Dispatch Chat
Drivers + Dispatch + AI
Messages between dispatch and drivers
AI Activity · last 7 days
Chat, booking evaluations, and driver recommendations — expand a day to review.
Today Today No AI activity
No AI activity recorded on this day.
Monday, Jul 27 No AI activity
No AI activity recorded on this day.
Sunday, Jul 26 No AI activity
No AI activity recorded on this day.
Saturday, Jul 25 No AI activity
No AI activity recorded on this day.
Friday, Jul 24 No AI activity
No AI activity recorded on this day.
Thursday, Jul 23 No AI activity
No AI activity recorded on this day.
Wednesday, Jul 22 No AI activity
No AI activity recorded on this day.
AI Assistant
Ask about customers, sales, bookings
How can I help you? Ask me about customers, bookings, sales, reports, or clinical notes.
Report issue
App Icon
Install My Transfers (Demo)

Add to home screen

Install My Transfers (Demo)

Tap Share, then select "Add to Home Screen".