{
  "version": 1,
  "title": "Webhook or poll: one repository push",
  "format": "custom",
  "canvasSize": [
    1200,
    720
  ],
  "watermark": true,
  "objects": [
    {
      "type": "text",
      "text": "Webhook or poll? One repository push",
      "x": 46,
      "y": 25,
      "fontSize": 43,
      "color": "#292d32",
      "fontFamily": "sans"
    },
    {
      "type": "text",
      "text": "Fictional CI dashboard: commit c42 is pushed at 10:01",
      "x": 47,
      "y": 90,
      "fontSize": 27,
      "color": "#59675e",
      "fontFamily": "sans"
    },
    {
      "type": "pen",
      "points": [
        [
          46,
          140
        ],
        [
          280,
          142
        ],
        [
          558,
          139
        ],
        [
          819,
          141
        ],
        [
          1151,
          140
        ]
      ],
      "color": "#bac9c1",
      "width": 3,
      "smooth": false
    },
    {
      "type": "pen",
      "points": [
        [
          440,
          168
        ],
        [
          760,
          169
        ],
        [
          760,
          240
        ],
        [
          440,
          239
        ],
        [
          440,
          168
        ]
      ],
      "color": "#292d32",
      "width": 3,
      "smooth": false
    },
    {
      "type": "text",
      "text": "PUSH  c42  ·  10:01",
      "x": 461,
      "y": 188,
      "fontSize": 30,
      "color": "#292d32",
      "fontFamily": "sans"
    },
    {
      "type": "arrow",
      "points": [
        [
          520,
          242
        ],
        [
          345,
          270
        ],
        [
          297,
          284
        ]
      ],
      "color": "#285caa",
      "width": 4,
      "smooth": false
    },
    {
      "type": "arrow",
      "points": [
        [
          683,
          242
        ],
        [
          854,
          270
        ],
        [
          903,
          284
        ]
      ],
      "color": "#287355",
      "width": 4,
      "smooth": false
    },
    {
      "type": "text",
      "text": "WEBHOOK  ·  EVENT ARRIVES",
      "x": 54,
      "y": 304,
      "fontSize": 25,
      "color": "#285caa",
      "fontFamily": "sans"
    },
    {
      "type": "text",
      "text": "POLLING  ·  APP ASKS",
      "x": 658,
      "y": 304,
      "fontSize": 25,
      "color": "#287355",
      "fontFamily": "sans"
    },
    {
      "type": "pen",
      "points": [
        [
          51,
          352
        ],
        [
          545,
          353
        ],
        [
          545,
          424
        ],
        [
          51,
          423
        ],
        [
          51,
          352
        ]
      ],
      "color": "#285caa",
      "width": 3,
      "smooth": false
    },
    {
      "type": "text",
      "text": "GitHub → HTTPS receiver",
      "x": 72,
      "y": 369,
      "fontSize": 29,
      "color": "#292d32",
      "fontFamily": "sans"
    },
    {
      "type": "text",
      "text": "validate + queue the push",
      "x": 72,
      "y": 397,
      "fontSize": 23,
      "color": "#59675e",
      "fontFamily": "sans"
    },
    {
      "type": "pen",
      "points": [
        [
          653,
          352
        ],
        [
          1149,
          353
        ],
        [
          1149,
          424
        ],
        [
          653,
          423
        ],
        [
          653,
          352
        ]
      ],
      "color": "#287355",
      "width": 3,
      "smooth": false
    },
    {
      "type": "text",
      "text": "10:00  API read: old commit",
      "x": 673,
      "y": 369,
      "fontSize": 28,
      "color": "#292d32",
      "fontFamily": "sans"
    },
    {
      "type": "text",
      "text": "10:05  next read: c42",
      "x": 673,
      "y": 399,
      "fontSize": 25,
      "color": "#59675e",
      "fontFamily": "sans"
    },
    {
      "type": "arrow",
      "points": [
        [
          296,
          426
        ],
        [
          297,
          451
        ]
      ],
      "color": "#285caa",
      "width": 4,
      "smooth": false
    },
    {
      "type": "arrow",
      "points": [
        [
          901,
          426
        ],
        [
          902,
          451
        ]
      ],
      "color": "#287355",
      "width": 4,
      "smooth": false
    },
    {
      "type": "pen",
      "points": [
        [
          51,
          461
        ],
        [
          545,
          462
        ],
        [
          545,
          534
        ],
        [
          51,
          533
        ],
        [
          51,
          461
        ]
      ],
      "color": "#285caa",
      "width": 3,
      "smooth": false
    },
    {
      "type": "text",
      "text": "Dashboard can update soon",
      "x": 72,
      "y": 479,
      "fontSize": 28,
      "color": "#292d32",
      "fontFamily": "sans"
    },
    {
      "type": "text",
      "text": "if delivery + processing work",
      "x": 72,
      "y": 507,
      "fontSize": 23,
      "color": "#59675e",
      "fontFamily": "sans"
    },
    {
      "type": "pen",
      "points": [
        [
          653,
          461
        ],
        [
          1149,
          462
        ],
        [
          1149,
          534
        ],
        [
          653,
          533
        ],
        [
          653,
          461
        ]
      ],
      "color": "#287355",
      "width": 3,
      "smooth": false
    },
    {
      "type": "text",
      "text": "Dashboard sees c42 later",
      "x": 673,
      "y": 479,
      "fontSize": 28,
      "color": "#292d32",
      "fontFamily": "sans"
    },
    {
      "type": "text",
      "text": "four-minute example wait",
      "x": 673,
      "y": 507,
      "fontSize": 23,
      "color": "#59675e",
      "fontFamily": "sans"
    },
    {
      "type": "pen",
      "points": [
        [
          48,
          573
        ],
        [
          310,
          574
        ],
        [
          593,
          572
        ],
        [
          884,
          574
        ],
        [
          1150,
          572
        ]
      ],
      "color": "#bac9c1",
      "width": 3,
      "smooth": false
    },
    {
      "type": "text",
      "text": "If delivery fails: detect it, redeliver or reconcile by API.",
      "x": 49,
      "y": 592,
      "fontSize": 26,
      "color": "#a34438",
      "fontFamily": "sans"
    },
    {
      "type": "text",
      "text": "If delivery repeats: use its ID to avoid duplicate work.",
      "x": 49,
      "y": 633,
      "fontSize": 25,
      "color": "#59675e",
      "fontFamily": "sans"
    }
  ]
}
