Please read the agreement in full before signing.
Design PRD · v0.1
AI Dispatch is an intelligent routing engine embedded in the iCANS Dispatch board. It automatically sequences driver workloads, selects optimal dumpsites, accounts for real-world constraints including traffic, landfill wait times, weather, and road restrictions, and continuously adapts as conditions change throughout the day. Dispatchers retain full control — they can override, lock, or adjust any decision the AI makes.
This feature is delivered in three phases:
| Phase | Name | Description |
|---|---|---|
| Crawl (v1) | Deterministic AI | Rule-based routing engine. Priority levels, time windows, driver schedules, truck constraints, landfill data, inventory availability, and next-day job consideration. Generates data for v2. |
| Walk (v2) | Learned Intelligence | Adds real-time landfill wait times (iCANS driver network), historical traffic, weather, road restriction data, trash photo AI analysis, revenue weighting, predictive customer demand, fuel pricing, company-specific AI training, and a feedback loop for continuous improvement. |
| Run (v3) | Predictive & Autonomous | Pre-day AI route planning with dispatcher approval workflow, ML feedback loop with accuracy dashboard, Next-Day Prep Mode, automated broker/reschedule suggestions, and revenue flagging for unprofitable jobs. |
This section provides context for developers who are new to iCANS. It describes the current dispatch workflow that AI Dispatch is built on top of.
The Dispatch board is accessible from the main navigation under Daily Operations → Dispatch. It has two tabs: Map and Inventory.
Dispatchers today sequence routes manually — a time-intensive process that cannot account for real-time traffic, landfill wait times, driver availability, inventory constraints, and changing order volumes simultaneously. As a result:
Dispatchers can choose between four operating modes from the Dispatch board. The selected mode applies globally for all drivers for the current day. The mode selector is displayed prominently at the top of the Dispatch board and persists per user session (not per company). Each mode label includes a tooltip explaining its behavior.
Customer priority levels and requested time windows are the primary routing criteria. Cost efficiency is applied as a secondary sort after all priority and time window conflicts are resolved.
Decision logic order:
Tooltip copy: "Prioritizes customer priority levels and time windows first. Routes are optimized for cost after all priority requirements are met."
The most cost-effective route is always selected. Priority levels are used only as a tiebreaker when two route options produce results within 10% of each other in total cost.
Decision logic order:
Tooltip copy: "Builds the lowest-cost route regardless of customer priority levels. When costs are within 10% between two options, the higher-priority customer is served first."
The AI makes no automatic routing decisions. Dispatchers build and sequence the route entirely by hand. The AI remains active in an advisory capacity only — it can surface warnings (e.g., anticipated shift overrun, landfill closed) but will not reroute, resequence, or push changes to drivers automatically.
Tooltip copy: "AI routing is off. Build routes manually. The AI will still surface warnings but will not change any assignments."
The following variables are inputs to the routing engine. Phase indicates when each variable is introduced.
| Input Variable | Data Source | Phase | Role in Decision |
|---|---|---|---|
| Customer priority level | Task data (existing) | v1 | Primary sort key in Priority Mode. Tiebreaker in Efficiency Mode. |
| Requested time window | Task data (existing) | v1 | Hard constraint (cannot arrive before window opens). Sort key after priority in Priority Mode. |
| Driver schedule (start/end) | Driver profile | v1 | All routing stays within shift window. Driver break stops clock. |
| Driver territory | Territory settings | v1 | Default assignment scope. Proximity overrides territory when it produces a more efficient overall route. |
| Truck type & capacity | Vehicle profile (AI questionnaire) | v1 | Determines which jobs a truck can service and how many pickups before a dump run is required. |
| Truck out-of-service status | Vehicle profile | v1 | Blocked from any routing assignment. |
| Landfill hours of operation | Socialized Landfills registry | v1 | Dump runs only scheduled within open hours. |
| Landfill accepted materials | Socialized Landfills registry | v1 | Only landfills accepting the load's material type are considered. |
| Landfill pricing model | Socialized Landfills registry (company-private) | v1 | Tonnage vs. yardage pricing informs cost estimate per dump run. |
| Landfill address / distance | Socialized Landfills registry | v1 | Drive time and fuel cost estimate. |
| Inventory availability by size | iCANS inventory | v1 | Determines dump priority for full dumpsters. Low/unavailable inventory elevates dump priority. |
| Next-day confirmed jobs | iCANS order data | v1 | Informs Next-Day Prep Mode. Confirmed orders only. |
| Job revenue | Order data (existing) | v1 | Secondary tiebreaker when cost and priority are equal. Higher-revenue job preferred. |
| Task in-progress status | Driver App status | v1 | In-progress tasks are locked from rerouting. |
| User-locked tasks | Dispatcher override | v1 | Locked tasks are excluded from AI rerouting. |
| Real-time landfill wait times | iCANS Driver App network | v2 | Estimated wait time at each landfill based on active iCANS drivers on-site. Modeled similarly to Google traffic. |
| Historical landfill wait patterns | iCANS platform data | v2 | Day-of-week and time-of-day wait time baselines per landfill. |
| Historical traffic patterns | Google Maps / routing API | v2 | Drive time estimates incorporate time-of-day traffic patterns. |
| Real-time traffic events | Google Maps / routing API | v2 | Road closures, accidents, and construction detected mid-day. Triggers reroute evaluation. |
| Road weight & height restrictions | Public road restriction dataset (DOT / OSM) | v2 | Routes avoid roads the truck cannot legally or physically use. |
| Weather forecast | Public weather API | v2 | Rain and severe weather factored into drive time estimates and job completion probability. |
| Local fuel prices | Public fuel price API | v2 | Per-mile cost estimate used in route cost calculations. |
| Driver pay type | Driver profile (future field) | v2 | Hourly drivers make landfill wait time more expensive than per-job drivers. |
| Trash photo material analysis | Driver App camera + AI vision model | v2 | AI identifies material type and estimates weight from driver photo to select optimal landfill. |
| Customer historical demand patterns | iCANS order history | v2 | Repeat customers with consistent pickup days inform demand density estimates. Used only as a tiebreaker. |
| Gate codes (historical) | iCANS order history / future Gate Code feature | v3 | Known gate codes pre-populate driver instructions and inform job time estimates. |
| Company-specific AI training | Dispatcher feedback | v2 | Custom rules per company (e.g., hazmat handling, driver certifications, preferred routes). |
When a dumpster is marked as full in iCANS (via the existing "full" status flag), the AI evaluates whether a dump run needs to be scheduled and at what priority level.
| Condition | Priority Assigned | Rationale |
|---|---|---|
| Full dumpster; inventory of that size is available | Low (default) | No blocking dependency today. |
| Full dumpster; inventory of that size is low or unavailable; a Drop Off or Swap for that size is confirmed today | High | Dump run must be completed before the same-day drop/swap can be fulfilled. |
| Full dumpster; inventory low/unavailable; Drop Off or Swap confirmed for next day with an early time window and the landfill opens the same time or later than the job | High (escalated today) | Example: Drop Off at 7am tomorrow, landfill opens at 7am. Dump must happen today to have the asset ready in time. |
| High volume of High priority jobs tomorrow; running low on available inventory of any size | Medium → High (AI-elevated) | AI proactively clears inventory today to get ahead of tomorrow's load. Used in Next-Day Prep Mode. |
The AI checks both today's and tomorrow's confirmed job schedule when evaluating dump priority. Draft and brokered jobs are excluded.
When a driver needs to dump, the AI evaluates all landfills marked as "Used" in the company's Socialized Landfills registry.
Driver has a 20YD dumpster half-full of shingles. AI identifies material as roofing shingles via photo analysis. Estimates ~5,000 lbs.
| Landfill | Distance | Rate | Wait | Estimated Total |
|---|---|---|---|---|
| Landfill A | 8 miles | $42/ton | ~45 min (real-time) | $105 + ~$30 driver time → Selected |
| Landfill B | 14 miles | $58/ton | No wait | $145 + $0 wait → more expensive overall |
| Landfill C (Concrete) | — | — | — | Does not accept shingles → Excluded |
AI routes to Landfill A and notes reasoning in the AI Reasoning panel.
If the AI returns low confidence on the material type from the first photo:
There is no default landfill fallback. The driver must make a selection or defer.
Dispatchers can manually drag and reorder tasks on the Dispatch board at any time. When a task is moved manually:
Dispatchers can lock any task on the board to prevent the AI from rerouting it. A locked task displays a lock icon.
When a High-Priority Job Is Blocked by a Lock: If a new high-priority job arrives and the optimal route would require moving a locked task, the AI does not move the locked task. Instead, it sends an urgent push notification to all users with Dispatch permission: "A new high-priority job has been added. Unlock [Task Name] to allow AI to find a more efficient route."
As new jobs come in throughout the day, the AI re-evaluates all unlocked, not-in-progress tasks and updates routes automatically. Drivers receive updated route instructions in the Driver App immediately when a reroute occurs.
Driver Offline During Reroute: If a driver is offline when a reroute is generated, the reroute is queued with a timestamp. When the driver comes back online, the Driver App syncs and pushes the updated route with a notification. If the driver's location has advanced past the point where the reroute would have applied, the AI discards the stale reroute and recalculates from the driver's current position. The dispatcher receives a badge notification that the driver is offline with pending routing updates.
The AI continuously monitors each driver's estimated completion time against their scheduled shift end. When it detects that a driver is at risk of not finishing their assigned jobs:
| Trigger | Action | Channel |
|---|---|---|
| First detection of projected overrun | Alert sent to all users with Dispatch permission. AI provides estimated jobs at risk and options: reassign to another driver, broker the job, contact customer to reschedule, or extend the driver's shift. | Push notification (mobile) + urgent issue notification (desktop). Email/SMS to dispatch-permission users (v1). |
| Every 60 minutes if issue unresolved | Reminder alert with updated job count at risk. | Same channels as initial alert. |
If another driver in the same territory has capacity, the AI identifies which jobs can be reassigned and includes the suggestion in the alert. If no internal capacity is available, the AI flags the job as a potential candidate for brokering or customer reschedule.
The following UI elements are added to the existing Dispatch board. The current layout (Unassigned Tasks panel / Drivers panel / Map) is preserved.
A mode selector control is added to the top of the Dispatch board, near the existing date selector. It displays the currently active mode and allows the dispatcher to switch modes. Each mode option includes a tooltip icon that opens a plain-language explanation on hover/tap.
Each task card on the Dispatch board includes a collapsible "AI Reasoning" section. This section is collapsed by default and contains one to two plain-English sentences explaining why the AI placed that task in its current position in the route.
Examples:
Locked tasks display a lock icon on their task card. The lock can be toggled by the dispatcher from the task card directly.
Urgent issue notifications appear as a banner at the top of the Dispatch board on desktop. On mobile, they are delivered as push notifications with a badge count on the Dispatch nav item. Notifications are dismissible but persist until the underlying issue is resolved.
The existing Tomorrow toggle on the Dispatch board shows tomorrow's confirmed jobs. In Next-Day Prep Mode, the AI surfaces recommended dump runs for today based on tomorrow's job requirements — these appear as AI-suggested tasks in the Unassigned Tasks panel with a "Prep for Tomorrow" label.
Rather than presenting dispatchers with a list of form fields to fill out for each vehicle, truck setup is completed through a short conversational AI questionnaire in the Admin App. The questionnaire is triggered when a new vehicle is added or when an existing vehicle profile is incomplete.
The questionnaire captures:
The AI interprets natural language answers and maps them to structured fields. For example, a dispatcher who answers "it's a standard 20-yard roll-off" will have capacity, type, and dimensional estimates pre-filled based on known industry specifications, with a confirmation step before saving.
When the AI reroutes a driver's queue, the Driver App updates automatically. The driver receives a push notification: "Your route has been updated." The updated sequence is reflected immediately in the Driver App task list.
Before departure for a pick-up job, the Driver App prompts the driver to photograph the load. This is a required step in the pick-up flow (v2). The AI analyzes the photo and returns:
The driver sees the recommended landfill and can accept it or choose a different one from the company's available list. The AI recommendation is advisory — the driver always has final selection.
Drivers can tap a "Take Break" button in the Driver App to pause their shift clock. While on break, the AI pauses routing calculations for that driver and does not generate reroute decisions based on their location. When the driver resumes, the AI recalculates from their current position.
The AI logs every routing decision alongside key parameters: estimated drive time, estimated landfill wait, estimated cost, priority levels, and mode. After each job is completed, the system captures actual outcomes: actual drive time, actual landfill wait, actual completion time. This dataset is used to identify systematic estimation errors and improve routing model accuracy over time.
Dispatchers can submit feedback on any AI decision directly from the AI Reasoning panel. A thumbs-up / thumbs-down control is visible on each expanded reasoning panel. Thumbs-down opens a short feedback form.
The feedback form includes:
Feedback Routing Rules:
Companies can define custom routing rules through a training interface in the Admin App. Training rules are stored per company and take precedence over platform-level model outputs where they conflict.
A read-only dashboard accessible to Admin users shows AI decision accuracy over time: estimated vs. actual drive times, estimated vs. actual landfill wait times, on-time job completion rate, and jobs completed per shift trend.
The AI analyzes order history to identify customers with consistent pickup patterns (e.g., a customer who calls for a pickup every Thursday). This data is used at a low weight in routing decisions — it is only applied when two route options produce similar results across higher-priority variables.
Predicted pickups do not appear as tasks on the dispatch board and are never surfaced to the driver. They influence only the AI's positioning decisions when all other factors are equal.
Customer demand predictions are only factored into routing when the AI is resolving a near-tie between two route options. They are never the primary driver of a routing decision.
Gate codes are a future parallel-track feature. When available, historically captured gate codes will pre-populate driver instructions and will be used by the AI to factor in access delay time for jobs at gated locations. This feature is out of scope for v1 and v2 and is documented here as a future dependency.