{
  "$schema": "https://next.mdxui.dev/schema.json",
  "theme": "callboard",
  "frame": "none",
  "template": "post",
  "title": "Route swaps between depots · Vanroster",
  "description": "Two depots can trade jobs on one board. A swap checks skills, drive time and overtime before it saves.",
  "meta": {"type":"article"},
  "sections": [
    {
      "kind": "nav",
      "shell": {"inset":"bleed","density":"none","surface":"glass","sticky":true},
      "block": {
        "type": "nav",
        "menu": "push",
        "collapse": 880,
        "brand": {"href":"/","text":"Vanroster","mark":"radar"},
        "links": [
          ["/product/dispatch","Dispatch"],
          ["/pricing","Pricing"],
          ["/changelog","Changelog"],
          ["/security","Security"]
        ],
        "cta": {"href":"/contact","label":"Book a walkthrough"}
      }
    },
    {
      "kind": "article",
      "shell": {"inset":"article","density":"article"},
      "block": {
        "type": "article",
        "head": {
          "back": {"href":"/changelog","label":"Changelog"},
          "tag": "Dispatch",
          "dateline": {"date":"2026-10-14","read":{"minutes":4,"unit":"min read"}},
          "title": "Route swaps between depots",
          "dek": "Two depots can trade jobs on one board. A swap checks skills, drive time and overtime before it saves."
        },
        "body": "A depot with a crew out used to call the next depot and ask. Now the board shows both depots, and a dispatcher drags the job across.\n\n## What a swap checks\n\nA swap saves only when three checks pass:\n\n- **Skills.** The receiving crew holds every skill the job names.\n- **Drive.** The new drive fits inside the customer window.\n- **Hours.** The receiving crew stays under 10 hours that day.\n\nA failed check names itself on the board, so the dispatcher knows which crew to try next.\n\n## What each side sees\n\nThe sending depot sees the job leave its board with the name of the depot that took it. The receiving crew phone adds the job in drive order. The customer gets one text only if the window moves.\n\n## The event\n\nEvery swap posts one webhook event to each depot that subscribes:\n\n```json\n{\n  \"type\": \"job.swapped\",\n  \"job\": \"J-1182\",\n  \"from\": { \"depot\": \"north\", \"crew\": \"B-2\" },\n  \"to\": { \"depot\": \"harborside\", \"crew\": \"C-3\" },\n  \"checks\": { \"skills\": \"pass\", \"drive\": \"6 min\", \"hours\": \"8 h 05\" }\n}\n```\n\n## Plans\n\nRoute swaps reach Fleet and Region. A Crew plan holds one depot, so it has nothing to swap with."
      }
    },
    {
      "kind": "footer",
      "shell": {"inset":"contained","density":"footer"},
      "block": {
        "type": "footer",
        "layout": "areas",
        "brand": {"href":"/","text":"Vanroster","mark":"radar"},
        "blurb": "Crew scheduling for field-service teams: heating, electrical, plumbing, cleaning and grounds.",
        "columns": [
          {
            "title": "Product",
            "links": [["/product/dispatch","Dispatch"],["/pricing","Pricing"],["/changelog","Changelog"]]
          },
          {"title":"Company","links":[["/security","Security"],["/contact","Contact"]]},
          {
            "title": "For agents",
            "links": [["/product/dispatch","The Dispatch API"],["/records.zip","Site records (.zip)"]]
          }
        ],
        "cta": {"href":"/contact","label":"Book a walkthrough","icon":"arrow-right"},
        "note": [
          "Vanroster is a worked example on mdxui.dev, not a customer.",
          "Rendered by @mdxui/site. Forms here do not send."
        ]
      }
    }
  ]
}
