Dispatch Board
0 rides today
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
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:
| Factor | Weight | How |
|---|---|---|
| Proximity | 25% | Distance from driver to pickup (GPS or last dropoff) |
| Cost Efficiency | 30% | Cheapest vehicle that fits = highest profit margin |
| Capacity Fit | 20% | Don't waste a minibus on 1 passenger |
| Workload | 15% | Fewer rides today = higher priority |
| Rating | 10% | 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).
- On the driver's Android phone, open Chrome and navigate to
https://your-tenant.linkandbook.com/driver/app/ - An install banner appears at the bottom — tap Install
- If no banner appears (e.g., tenant PWA already installed): tap menu → Add to Home Screen
- The icon "Driver - TenantName" appears on the home screen with a steering wheel badge
- 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.
CLLocationManager with allowsBackgroundLocationUpdates — GPS never stops, even in background.
iOS — Native App via TestFlight
Prerequisites
- Apple Developer Account ($99/year) — developer.apple.com
- GitHub account (free) — github.com
- Codemagic account (free, 500 build min/month) — codemagic.io
- No Mac needed — builds run on Codemagic's M2 Mac minis in the cloud
Step 1 — Register App in Apple Developer Portal
- Go to Certificates, Identifiers & Profiles
- Click + → App IDs → App
- Description:
LB Driver, Bundle ID:com.linkandbook.driverapp - Check capabilities: Background Modes
- Click Register
Step 2 — Create App in App Store Connect
- Go to App Store Connect → My Apps → + → New App
- Platform: iOS, Name: LB Driver
- Bundle ID: select
com.linkandbook.driverapp, SKU:lb-driver-001 - Save — note the Apple ID number shown (e.g.,
6449012345)
Step 3 — Create App Store Connect API Key
- Go to App Store Connect → Integrations → API
- Click + Generate Key, Name:
Codemagic, Access: Developer - Download the
.p8file (one-time download!) - Note the Key ID and Issuer ID shown on the page
Step 4 — Push Code to GitHub
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
- Sign up at codemagic.io (use GitHub login)
- Click Add application → select your
lb-driver-iosrepo - Go to Teams → Integrations → App Store Connect
- Enter your Issuer ID, Key ID, and upload the .p8 file
- In app Environment variables, add:
APP_STORE_CONNECT_APP_ID= the Apple ID from Step 2
Step 6 — Build & Deploy
- In Codemagic: Start new build → select
ios-driver-appworkflow - Wait ~5-10 minutes — Codemagic builds on a cloud M2 Mac, signs the app, and uploads to TestFlight
- You receive an email from Apple when the build is ready
Step 7 — Install on Driver's iPhone
- In App Store Connect → TestFlight, create a group called Drivers
- Add drivers by email — they receive an invite
- Driver installs the free TestFlight app from the App Store
- Opens the invite → installs LB Driver
- Grant "Always Allow" location permission when prompted
Prerequisites
- Mac with Xcode 15+
- Apple Developer Account ($99/year) — developer.apple.com
- iPhone running iOS 16+ (driver's phone)
Build Steps
- Copy
ios_driver_app/DriverApp/folder to the Mac - Open
DriverApp.xcodeprojin Xcode - Click the DriverApp project in the sidebar (blue icon)
- Go to Signing & Capabilities tab
- Set Team to your Apple Developer account
- Verify Bundle ID:
com.linkandbook.driverapp - Verify Background Modes → Location updates is checked
- Connect an iPhone via USB cable, select it in the device dropdown
- Click Run (play button) — Xcode builds and installs on the phone
- On iPhone: Settings → General → VPN & Device Management → Trust
- Open the app — grant "Always Allow" location permission
Distribute via TestFlight
- In Xcode: Product → Archive
- In Organizer: Distribute App → TestFlight Internal
- Upload completes in ~5 minutes
- Go to App Store Connect → TestFlight
- Add drivers' email addresses as testers
- Drivers install TestFlight app → install LB Driver from invite
- Updates: Archive + Upload again — drivers get auto-update
What the Native App Does
- Thin native shell (WKWebView) loads your existing
/driver/app/page - Native
CLLocationManagerreplaces 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
↓ 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/
| File | Purpose |
|---|---|
AppDelegate.swift | App entry point, keeps screen on |
DriverWebViewController.swift | WKWebView + JS bridge + external links |
NativeLocationManager.swift | Background GPS, injects into web + server sync |
Info.plist | Background location mode, permission strings |
DriverApp.entitlements | Always-on location entitlement |
LaunchScreen.storyboard | Dark splash: "LB Driver" in gold |
codemagic.yaml | Cloud build config (Codemagic CI/CD) |
Configuration
If your server URL changes, edit one line in DriverWebViewController.swift:
Troubleshooting
| Issue | Fix |
|---|---|
| GPS stops in background | Settings → LB Driver → Location = Always |
| "Untrusted Developer" | Settings → General → VPN & Device Mgmt → Trust |
| No location permission prompt | Delete app, reinstall — iOS only asks once |
| Blue bar not showing | Verify showsBackgroundLocationIndicator = true in NativeLocationManager |
| App expires (TestFlight) | TestFlight builds expire after 90 days — push code to rebuild |
| Codemagic build fails | Check build logs — usually signing issue. Verify .p8 key and Bundle ID match |
Today's Rides
No rides scheduled.
2026 at a glance
11 rides this yearFleet Map
Fleet (3)
2 availableDriver Schedules
Dispatch Chat
Drivers + Dispatch + AIAI Activity · last 7 days
Chat, booking evaluations, and driver recommendations — expand a day to review.Today Today No AI activity
Monday, Jul 27 No AI activity
Sunday, Jul 26 No AI activity
Saturday, Jul 25 No AI activity
Friday, Jul 24 No AI activity
Thursday, Jul 23 No AI activity
Wednesday, Jul 22 No AI activity
AI Assistant
Ask about customers, sales, bookingsInstall My Transfers (Demo)
Tap Share, then select "Add to Home Screen".