{
  "kind": "diagrams.info/diagram",
  "version": 2,
  "elements": {
    "n-editor": {
      "id": "n-editor",
      "type": "webview",
      "shape": "rounded-rectangle",
      "content": "/",
      "description": "The canvas itself. Opens straight in \u2014 no account, nothing uploaded.",
      "built": true,
      "done": true,
      "apis": [],
      "apisOpen": false,
      "position": {
        "x": 150,
        "y": 354
      },
      "size": {
        "width": 232,
        "height": 106
      },
      "zIndex": 10,
      "style": {
        "backgroundColor": "#1f2937",
        "borderColor": "#22d3ee",
        "textColor": "#e5e7eb",
        "borderStyle": "solid",
        "fontSize": 13,
        "textAlign": "left",
        "verticalAlign": "top"
      },
      "parentId": "f-p1"
    },
    "f-p1": {
      "id": "f-p1",
      "type": "frame",
      "shape": "rectangle",
      "content": "",
      "containerPreset": "swimlane",
      "frameTitle": "P1 \u2014 Editor standalone  \u00b7  shipped",
      "position": {
        "x": 120,
        "y": 290
      },
      "size": {
        "width": 292,
        "height": 200
      },
      "zIndex": 0,
      "style": {
        "backgroundColor": "rgba(22, 163, 74, 0.06)",
        "borderColor": "#16a34a",
        "textColor": "#9ca3af",
        "borderStyle": "solid"
      }
    },
    "n-share": {
      "id": "n-share",
      "type": "webview",
      "shape": "rounded-rectangle",
      "content": "/d/[slug]",
      "description": "An unlisted, expiring link to a board.",
      "built": false,
      "done": false,
      "apis": [
        "POST /api/d",
        "PUT /api/d/[slug]",
        "GET /d/[slug]"
      ],
      "apisOpen": true,
      "position": {
        "x": 482,
        "y": 354
      },
      "size": {
        "width": 232,
        "height": 202
      },
      "zIndex": 11,
      "style": {
        "backgroundColor": "#1f2937",
        "borderColor": "#22d3ee",
        "textColor": "#e5e7eb",
        "borderStyle": "solid",
        "fontSize": 13,
        "textAlign": "left",
        "verticalAlign": "top"
      },
      "parentId": "f-p2"
    },
    "s-db": {
      "id": "s-db",
      "type": "shape",
      "shape": "cylinder",
      "content": "Postgres \u00b7 diagrams(data jsonb)",
      "position": {
        "x": 482,
        "y": 582
      },
      "size": {
        "width": 232,
        "height": 96
      },
      "zIndex": 12,
      "style": {
        "backgroundColor": "#374151",
        "borderColor": "#6b7280",
        "textColor": "#e5e7eb",
        "borderStyle": "solid",
        "fontSize": 13,
        "textAlign": "center",
        "verticalAlign": "middle"
      },
      "parentId": "f-p2"
    },
    "s-purge": {
      "id": "s-purge",
      "type": "shape",
      "shape": "document",
      "content": "Purge job \u2014 expired anon rows",
      "position": {
        "x": 482,
        "y": 704
      },
      "size": {
        "width": 232,
        "height": 84
      },
      "zIndex": 13,
      "style": {
        "backgroundColor": "#374151",
        "borderColor": "#6b7280",
        "textColor": "#e5e7eb",
        "borderStyle": "solid",
        "fontSize": 13,
        "textAlign": "center",
        "verticalAlign": "middle"
      },
      "parentId": "f-p2"
    },
    "f-p2": {
      "id": "f-p2",
      "type": "frame",
      "shape": "rectangle",
      "content": "",
      "containerPreset": "swimlane",
      "frameTitle": "P2 \u2014 Anonymous backend  \u00b7  next",
      "position": {
        "x": 452,
        "y": 290
      },
      "size": {
        "width": 292,
        "height": 528
      },
      "zIndex": 0,
      "style": {
        "backgroundColor": "rgba(37, 99, 235, 0.06)",
        "borderColor": "#22d3ee",
        "textColor": "#9ca3af",
        "borderStyle": "solid"
      }
    },
    "n-register": {
      "id": "n-register",
      "type": "webview",
      "shape": "rounded-rectangle",
      "content": "/register",
      "description": "Email + password. Claims the board you already drew.",
      "built": false,
      "done": false,
      "apis": [
        "POST /register",
        "POST /api/d/[slug]/claim"
      ],
      "apisOpen": true,
      "position": {
        "x": 814,
        "y": 354
      },
      "size": {
        "width": 232,
        "height": 178
      },
      "zIndex": 14,
      "style": {
        "backgroundColor": "#1f2937",
        "borderColor": "#22d3ee",
        "textColor": "#e5e7eb",
        "borderStyle": "solid",
        "fontSize": 13,
        "textAlign": "left",
        "verticalAlign": "top"
      },
      "parentId": "f-p3"
    },
    "n-login": {
      "id": "n-login",
      "type": "webview",
      "shape": "rounded-rectangle",
      "content": "/login",
      "description": "Http-only cookie sessions; hooks.server.ts fills locals.user.",
      "built": false,
      "done": false,
      "apis": [
        "POST /login",
        "POST /logout"
      ],
      "apisOpen": true,
      "position": {
        "x": 814,
        "y": 558
      },
      "size": {
        "width": 232,
        "height": 178
      },
      "zIndex": 15,
      "style": {
        "backgroundColor": "#1f2937",
        "borderColor": "#22d3ee",
        "textColor": "#e5e7eb",
        "borderStyle": "solid",
        "fontSize": 13,
        "textAlign": "left",
        "verticalAlign": "top"
      },
      "parentId": "f-p3"
    },
    "n-app": {
      "id": "n-app",
      "type": "webview",
      "shape": "rounded-rectangle",
      "content": "/app",
      "description": "The dashboard: nestable folders and the diagrams in them.",
      "built": false,
      "done": false,
      "apis": [
        "CRUD /api/folders",
        "CRUD /api/diagrams"
      ],
      "apisOpen": true,
      "position": {
        "x": 814,
        "y": 762
      },
      "size": {
        "width": 232,
        "height": 178
      },
      "zIndex": 16,
      "style": {
        "backgroundColor": "#1f2937",
        "borderColor": "#22d3ee",
        "textColor": "#e5e7eb",
        "borderStyle": "solid",
        "fontSize": 13,
        "textAlign": "left",
        "verticalAlign": "top"
      },
      "parentId": "f-p3"
    },
    "n-verify": {
      "id": "n-verify",
      "type": "email",
      "shape": "rounded-rectangle",
      "content": "Verify your email",
      "description": "A deliberate fast-follow, not a gate on first login.",
      "built": false,
      "done": false,
      "apis": [],
      "apisOpen": false,
      "position": {
        "x": 814,
        "y": 966
      },
      "size": {
        "width": 232,
        "height": 106
      },
      "zIndex": 17,
      "style": {
        "backgroundColor": "#1f2937",
        "borderColor": "#a855f7",
        "textColor": "#e5e7eb",
        "borderStyle": "solid",
        "fontSize": 13,
        "textAlign": "left",
        "verticalAlign": "top"
      },
      "parentId": "f-p3"
    },
    "f-p3": {
      "id": "f-p3",
      "type": "frame",
      "shape": "rectangle",
      "content": "",
      "containerPreset": "swimlane",
      "frameTitle": "P3 \u2014 Accounts",
      "position": {
        "x": 784,
        "y": 290
      },
      "size": {
        "width": 292,
        "height": 812
      },
      "zIndex": 0,
      "style": {
        "backgroundColor": "rgba(100, 116, 139, 0.07)",
        "borderColor": "#6b7280",
        "textColor": "#9ca3af",
        "borderStyle": "dashed"
      }
    },
    "n-pricing": {
      "id": "n-pricing",
      "type": "webview",
      "shape": "rounded-rectangle",
      "content": "/pricing",
      "description": "$5 single \u00b7 $15 business. Gates enforced server-side.",
      "built": false,
      "done": false,
      "apis": [
        "POST /api/billing/checkout",
        "POST /api/billing/webhook",
        "POST /api/billing/portal"
      ],
      "apisOpen": true,
      "position": {
        "x": 1146,
        "y": 354
      },
      "size": {
        "width": 232,
        "height": 202
      },
      "zIndex": 18,
      "style": {
        "backgroundColor": "#1f2937",
        "borderColor": "#22d3ee",
        "textColor": "#e5e7eb",
        "borderStyle": "solid",
        "fontSize": 13,
        "textAlign": "left",
        "verticalAlign": "top"
      },
      "parentId": "f-p4"
    },
    "n-receipt": {
      "id": "n-receipt",
      "type": "email",
      "shape": "rounded-rectangle",
      "content": "Receipt email",
      "description": "Transactional mail, on checkout and on plan change.",
      "built": false,
      "done": false,
      "apis": [],
      "apisOpen": false,
      "position": {
        "x": 1146,
        "y": 720
      },
      "size": {
        "width": 232,
        "height": 106
      },
      "zIndex": 19,
      "style": {
        "backgroundColor": "#1f2937",
        "borderColor": "#a855f7",
        "textColor": "#e5e7eb",
        "borderStyle": "solid",
        "fontSize": 13,
        "textAlign": "left",
        "verticalAlign": "top"
      },
      "parentId": "f-p4"
    },
    "f-p4": {
      "id": "f-p4",
      "type": "frame",
      "shape": "rectangle",
      "content": "",
      "containerPreset": "swimlane",
      "frameTitle": "P4 \u2014 Billing",
      "position": {
        "x": 1116,
        "y": 290
      },
      "size": {
        "width": 292,
        "height": 566
      },
      "zIndex": 0,
      "style": {
        "backgroundColor": "rgba(100, 116, 139, 0.07)",
        "borderColor": "#6b7280",
        "textColor": "#9ca3af",
        "borderStyle": "dashed"
      }
    },
    "n-marketing": {
      "id": "n-marketing",
      "type": "webview",
      "shape": "rounded-rectangle",
      "content": "/ \u2014 marketing",
      "description": "A server-rendered surface, so the panel is not the only copy.",
      "built": false,
      "done": false,
      "apis": [],
      "apisOpen": false,
      "position": {
        "x": 1478,
        "y": 354
      },
      "size": {
        "width": 232,
        "height": 106
      },
      "zIndex": 20,
      "style": {
        "backgroundColor": "#1f2937",
        "borderColor": "#22d3ee",
        "textColor": "#e5e7eb",
        "borderStyle": "solid",
        "fontSize": 13,
        "textAlign": "left",
        "verticalAlign": "top"
      },
      "parentId": "f-p5"
    },
    "n-legal": {
      "id": "n-legal",
      "type": "webview",
      "shape": "rounded-rectangle",
      "content": "/legal",
      "description": "ToS, privacy, GDPR export + delete. Rate-limit uploads.",
      "built": false,
      "done": false,
      "apis": [],
      "apisOpen": false,
      "position": {
        "x": 1478,
        "y": 486
      },
      "size": {
        "width": 232,
        "height": 106
      },
      "zIndex": 21,
      "style": {
        "backgroundColor": "#1f2937",
        "borderColor": "#22d3ee",
        "textColor": "#e5e7eb",
        "borderStyle": "solid",
        "fontSize": 13,
        "textAlign": "left",
        "verticalAlign": "top"
      },
      "parentId": "f-p5"
    },
    "f-p5": {
      "id": "f-p5",
      "type": "frame",
      "shape": "rectangle",
      "content": "",
      "containerPreset": "swimlane",
      "frameTitle": "P5 \u2014 Polish / launch",
      "position": {
        "x": 1448,
        "y": 290
      },
      "size": {
        "width": 292,
        "height": 332
      },
      "zIndex": 0,
      "style": {
        "backgroundColor": "rgba(100, 116, 139, 0.07)",
        "borderColor": "#6b7280",
        "textColor": "#9ca3af",
        "borderStyle": "dashed"
      }
    },
    "t-title": {
      "id": "t-title",
      "type": "text",
      "shape": "rectangle",
      "content": "diagrams.info \u2014 build roadmap",
      "position": {
        "x": 120,
        "y": 182
      },
      "size": {
        "width": 620,
        "height": 56
      },
      "zIndex": 60,
      "style": {
        "textColor": "#e5e7eb",
        "fontSize": 30,
        "bold": true,
        "textAlign": "left",
        "verticalAlign": "middle",
        "backgroundColor": "transparent",
        "borderColor": "transparent"
      }
    },
    "t-sub": {
      "id": "t-sub",
      "type": "text",
      "shape": "rectangle",
      "content": "Drawn in the editor it describes. Every card is a page to build, the list under it is the APIs that page needs,\nand the pill in its header is where that page has got to.",
      "position": {
        "x": 120,
        "y": 242
      },
      "size": {
        "width": 1100,
        "height": 64
      },
      "zIndex": 60,
      "style": {
        "textColor": "#9ca3af",
        "fontSize": 14,
        "textAlign": "left",
        "verticalAlign": "middle",
        "backgroundColor": "transparent",
        "borderColor": "transparent"
      }
    },
    "s-legend": {
      "id": "s-legend",
      "type": "shape",
      "shape": "sticky",
      "content": "Click a status pill to advance it:\nBuild \u2192 Built \u2192 Done.\n\nImport this file into\ndiagrams.info to poke at it.",
      "position": {
        "x": 1478,
        "y": 100
      },
      "size": {
        "width": 232,
        "height": 150
      },
      "zIndex": 60,
      "style": {
        "backgroundColor": "#fde68a",
        "borderColor": "#f59e0b",
        "textColor": "#111827",
        "fontSize": 13,
        "textAlign": "left",
        "verticalAlign": "top"
      }
    }
  },
  "connections": {
    "c-0": {
      "id": "c-0",
      "sourceId": "n-editor",
      "targetId": "n-share",
      "type": "elbow",
      "sourceAnchor": {
        "side": "right",
        "position": 0.5,
        "manual": true
      },
      "targetAnchor": {
        "side": "left",
        "position": 0.5,
        "manual": true
      },
      "style": {
        "color": "#94a3b8",
        "width": 2,
        "style": "solid",
        "targetArrow": true,
        "sourceArrow": false
      }
    },
    "c-1": {
      "id": "c-1",
      "sourceId": "n-share",
      "targetId": "s-db",
      "type": "elbow",
      "sourceAnchor": {
        "side": "bottom",
        "position": 0.5,
        "manual": true
      },
      "targetAnchor": {
        "side": "top",
        "position": 0.5,
        "manual": true
      },
      "style": {
        "color": "#94a3b8",
        "width": 2,
        "style": "solid",
        "targetArrow": true,
        "sourceArrow": false
      }
    },
    "c-2": {
      "id": "c-2",
      "sourceId": "s-db",
      "targetId": "s-purge",
      "type": "elbow",
      "sourceAnchor": {
        "side": "bottom",
        "position": 0.5,
        "manual": true
      },
      "targetAnchor": {
        "side": "top",
        "position": 0.5,
        "manual": true
      },
      "style": {
        "color": "#94a3b8",
        "width": 2,
        "style": "solid",
        "targetArrow": true,
        "sourceArrow": false
      }
    },
    "c-3": {
      "id": "c-3",
      "sourceId": "n-share",
      "targetId": "n-register",
      "type": "elbow",
      "sourceAnchor": {
        "side": "right",
        "position": 0.5,
        "manual": true
      },
      "targetAnchor": {
        "side": "left",
        "position": 0.5,
        "manual": true
      },
      "style": {
        "color": "#94a3b8",
        "width": 2,
        "style": "solid",
        "targetArrow": true,
        "sourceArrow": false
      }
    },
    "c-4": {
      "id": "c-4",
      "sourceId": "n-register",
      "targetId": "n-login",
      "type": "elbow",
      "sourceAnchor": {
        "side": "bottom",
        "position": 0.5,
        "manual": true
      },
      "targetAnchor": {
        "side": "top",
        "position": 0.5,
        "manual": true
      },
      "style": {
        "color": "#94a3b8",
        "width": 2,
        "style": "solid",
        "targetArrow": true,
        "sourceArrow": false
      }
    },
    "c-5": {
      "id": "c-5",
      "sourceId": "n-login",
      "targetId": "n-app",
      "type": "elbow",
      "sourceAnchor": {
        "side": "bottom",
        "position": 0.5,
        "manual": true
      },
      "targetAnchor": {
        "side": "top",
        "position": 0.5,
        "manual": true
      },
      "style": {
        "color": "#94a3b8",
        "width": 2,
        "style": "solid",
        "targetArrow": true,
        "sourceArrow": false
      }
    },
    "c-6": {
      "id": "c-6",
      "sourceId": "n-app",
      "targetId": "n-verify",
      "type": "elbow",
      "sourceAnchor": {
        "side": "bottom",
        "position": 0.5,
        "manual": true
      },
      "targetAnchor": {
        "side": "top",
        "position": 0.5,
        "manual": true
      },
      "style": {
        "color": "#94a3b8",
        "width": 2,
        "style": "solid",
        "targetArrow": true,
        "sourceArrow": false
      }
    },
    "c-7": {
      "id": "c-7",
      "sourceId": "n-app",
      "targetId": "n-pricing",
      "type": "elbow",
      "sourceAnchor": {
        "side": "right",
        "position": 0.5,
        "manual": true
      },
      "targetAnchor": {
        "side": "left",
        "position": 0.5,
        "manual": true
      },
      "style": {
        "color": "#94a3b8",
        "width": 2,
        "style": "solid",
        "targetArrow": true,
        "sourceArrow": false
      }
    },
    "c-8": {
      "id": "c-8",
      "sourceId": "n-pricing",
      "targetId": "n-receipt",
      "type": "elbow",
      "sourceAnchor": {
        "side": "bottom",
        "position": 0.5,
        "manual": true
      },
      "targetAnchor": {
        "side": "top",
        "position": 0.5,
        "manual": true
      },
      "style": {
        "color": "#94a3b8",
        "width": 2,
        "style": "solid",
        "targetArrow": true,
        "sourceArrow": false
      }
    },
    "c-9": {
      "id": "c-9",
      "sourceId": "n-pricing",
      "targetId": "n-marketing",
      "type": "elbow",
      "sourceAnchor": {
        "side": "right",
        "position": 0.5,
        "manual": true
      },
      "targetAnchor": {
        "side": "left",
        "position": 0.5,
        "manual": true
      },
      "style": {
        "color": "#94a3b8",
        "width": 2,
        "style": "solid",
        "targetArrow": true,
        "sourceArrow": false
      }
    },
    "c-10": {
      "id": "c-10",
      "sourceId": "n-marketing",
      "targetId": "n-legal",
      "type": "elbow",
      "sourceAnchor": {
        "side": "bottom",
        "position": 0.5,
        "manual": true
      },
      "targetAnchor": {
        "side": "top",
        "position": 0.5,
        "manual": true
      },
      "style": {
        "color": "#94a3b8",
        "width": 2,
        "style": "solid",
        "targetArrow": true,
        "sourceArrow": false
      }
    }
  },
  "gridSettings": {
    "visible": true,
    "snapToGrid": true,
    "gridSize": 20
  }
}
