PD Suite manual

Project export and Buildertrend fields

Plot plan → Export plot data downloads the site and paperwork JSON. Saving a project stores the full design document on the project.

Design document

{
  "version": 1,
  "photo": { "src": "", "corners": [], "scale": { "lengthFt": 48 } },
  "shell": { "modelId": "", "x": 0, "y": 0, "rotationDeg": 0 },
  "finishId": "",
  "equipment": [],
  "landscape": [],
  "site": {
    "parcelId": "",
    "jurisdiction": "",
    "northDeg": 0,
    "deckWidthFt": 4,
    "shapes": [{ "kind": "property", "points": [], "closed": true }],
    "gates": [],
    "panel": null,
    "gas": []
  },
  "paperwork": {
    "projectTitle": "",
    "permitCost": 0,
    "commissionPct": 3,
    "discount": 0,
    "marginPct": null,
    "applicationType": "Inground residential pool",
    "revision": "1"
  },
  "customer": { "name": "", "email": "", "phone": "", "address": "" }
}

Shape kinds include property, house, septic, well, easement, overhead, underground, fence, spoil, access, and pad. Setback distances are not in this file. They are company rules: jurisdiction, name, fromKind, appliesTo, and feet.

Planned Buildertrend handoff

A signed proposal can push this payload. The connector is mock, webhook, or a partner attempt. Credentials stay in environment variables.

{
  "customer": { "name": "", "email": "", "phone": "", "address": "" },
  "job": { "name": "", "status": "sold", "source": "PD Suite" },
  "estimate": {
    "number": "",
    "total": 0,
    "lines": [{ "label": "", "qty": 1, "unit": "each", "unitPrice": 0, "total": 0, "group": "" }]
  },
  "designFiles": [{ "name": "", "kind": "poolsuite-design", "note": "" }]
}