Excalidraw — Checkout Architecture Whiteboard Sketch
The architecture a team draws on a whiteboard before writing the design doc: mobile app through an API gateway to the orders and payments services, the orders database, the external card processor behind 3-D Secure, and an order.placed event feeding the email worker — with the open question about idempotency keys pencilled beside it.
Rendering…
Make it your own.
{
"type": "excalidraw",
"version": 2,
"source": "https://www.flowss.ai",
"elements": [
{"id":"title","type":"text","x":40,"y":10,"width":551,"height":30,"text":"Checkout — whiteboard architecture sketch","fontSize":24,"fontFamily":1,"textAlign":"left","verticalAlign":"top","strokeColor":"#1e1e1e"},
{"id":"app","type":"rectangle","x":40,"y":120,"width":170,"height":80,"strokeColor":"#6741d9","backgroundColor":"#d0bfff","fillStyle":"hachure","strokeWidth":2,"roughness":1.4,"roundness":{"type":3},"boundElements":[{"type":"text","id":"app-t"},{"type":"arrow","id":"a1"}]},
{"id":"app-t","type":"text","x":50,"y":138,"width":151,"height":45,"text":"Mobile app\n(iOS / Android)","fontSize":18,"fontFamily":1,"textAlign":"center","verticalAlign":"middle","strokeColor":"#6741d9","containerId":"app"},
{"id":"gw","type":"rectangle","x":290,"y":120,"width":170,"height":80,"strokeColor":"#495057","backgroundColor":"#e9ecef","fillStyle":"hachure","strokeWidth":2,"roughness":1.4,"roundness":{"type":3},"boundElements":[{"type":"text","id":"gw-t"},{"type":"arrow","id":"a1"},{"type":"arrow","id":"a2"},{"type":"arrow","id":"a3"}]},
{"id":"gw-t","type":"text","x":285,"y":138,"width":181,"height":45,"text":"API gateway\n(auth, rate limit)","fontSize":18,"fontFamily":1,"textAlign":"center","verticalAlign":"middle","strokeColor":"#495057","containerId":"gw"},
{"id":"ord","type":"rectangle","x":540,"y":40,"width":180,"height":80,"strokeColor":"#1971c2","backgroundColor":"#a5d8ff","fillStyle":"hachure","strokeWidth":2,"roughness":1.4,"roundness":{"type":3},"boundElements":[{"type":"text","id":"ord-t"},{"type":"arrow","id":"a2"},{"type":"arrow","id":"a4"},{"type":"arrow","id":"a6"}]},
{"id":"ord-t","type":"text","x":595,"y":58,"width":71,"height":45,"text":"Orders\nservice","fontSize":18,"fontFamily":1,"textAlign":"center","verticalAlign":"middle","strokeColor":"#1971c2","containerId":"ord"},
{"id":"pay","type":"rectangle","x":540,"y":200,"width":180,"height":80,"strokeColor":"#e8590c","backgroundColor":"#ffd8a8","fillStyle":"hachure","strokeWidth":2,"roughness":1.4,"roundness":{"type":3},"boundElements":[{"type":"text","id":"pay-t"},{"type":"arrow","id":"a3"},{"type":"arrow","id":"a5"}]},
{"id":"pay-t","type":"text","x":590,"y":218,"width":81,"height":45,"text":"Payments\nservice","fontSize":18,"fontFamily":1,"textAlign":"center","verticalAlign":"middle","strokeColor":"#e8590c","containerId":"pay"},
{"id":"db","type":"ellipse","x":800,"y":40,"width":170,"height":80,"strokeColor":"#0c8599","backgroundColor":"#99e9f2","fillStyle":"hachure","strokeWidth":2,"roughness":1.4,"boundElements":[{"type":"text","id":"db-t"},{"type":"arrow","id":"a4"}]},
{"id":"db-t","type":"text","x":835,"y":58,"width":101,"height":45,"text":"Orders DB\n(Postgres)","fontSize":18,"fontFamily":1,"textAlign":"center","verticalAlign":"middle","strokeColor":"#0c8599","containerId":"db"},
{"id":"psp","type":"rectangle","x":800,"y":200,"width":170,"height":80,"strokeColor":"#e03131","backgroundColor":"#ffc9c9","fillStyle":"hachure","strokeWidth":2,"roughness":1.4,"roundness":{"type":3},"boundElements":[{"type":"text","id":"psp-t"},{"type":"arrow","id":"a5"}]},
{"id":"psp-t","type":"text","x":835,"y":218,"width":101,"height":45,"text":"Card PSP\n(external)","fontSize":18,"fontFamily":1,"textAlign":"center","verticalAlign":"middle","strokeColor":"#e03131","containerId":"psp"},
{"id":"q","type":"rectangle","x":540,"y":360,"width":180,"height":70,"strokeColor":"#f08c00","backgroundColor":"#ffec99","fillStyle":"hachure","strokeWidth":2,"roughness":1.4,"roundness":{"type":3},"boundElements":[{"type":"text","id":"q-t"},{"type":"arrow","id":"a6"},{"type":"arrow","id":"a7"}]},
{"id":"q-t","type":"text","x":560,"y":373,"width":141,"height":45,"text":"Event bus\n(order.placed)","fontSize":18,"fontFamily":1,"textAlign":"center","verticalAlign":"middle","strokeColor":"#f08c00","containerId":"q"},
{"id":"mail","type":"rectangle","x":800,"y":360,"width":170,"height":70,"strokeColor":"#2f9e44","backgroundColor":"#b2f2bb","fillStyle":"hachure","strokeWidth":2,"roughness":1.4,"roundness":{"type":3},"boundElements":[{"type":"text","id":"mail-t"},{"type":"arrow","id":"a7"}]},
{"id":"mail-t","type":"text","x":855,"y":373,"width":60,"height":45,"text":"Email\nworker","fontSize":18,"fontFamily":1,"textAlign":"center","verticalAlign":"middle","strokeColor":"#2f9e44","containerId":"mail"},
{"id":"a1","type":"arrow","x":214,"y":160,"width":72,"height":0,"strokeColor":"#1e1e1e","strokeWidth":2,"roughness":1.5,"endArrowhead":"arrow","startBinding":{"elementId":"app","focus":0,"gap":4},"endBinding":{"elementId":"gw","focus":0,"gap":4},"points":[[0,0],[72,0]],"boundElements":[{"type":"text","id":"a1-t"}]},
{"id":"a1-t","type":"text","x":228,"y":150,"width":45,"height":20,"text":"HTTPS","fontSize":16,"fontFamily":1,"textAlign":"center","verticalAlign":"middle","strokeColor":"#1e1e1e","containerId":"a1"},
{"id":"a2","type":"arrow","x":464,"y":145,"width":72,"height":60,"strokeColor":"#1e1e1e","strokeWidth":2,"roughness":1.5,"endArrowhead":"arrow","startBinding":{"elementId":"gw","focus":0,"gap":4},"endBinding":{"elementId":"ord","focus":0,"gap":4},"points":[[0,0],[72,-60]]},
{"id":"a3","type":"arrow","x":464,"y":175,"width":72,"height":60,"strokeColor":"#1e1e1e","strokeWidth":2,"roughness":1.5,"endArrowhead":"arrow","startBinding":{"elementId":"gw","focus":0,"gap":4},"endBinding":{"elementId":"pay","focus":0,"gap":4},"points":[[0,0],[72,60]]},
{"id":"a4","type":"arrow","x":724,"y":80,"width":72,"height":0,"strokeColor":"#1e1e1e","strokeWidth":2,"roughness":1.5,"endArrowhead":"arrow","startBinding":{"elementId":"ord","focus":0,"gap":4},"endBinding":{"elementId":"db","focus":0,"gap":4},"points":[[0,0],[72,0]]},
{"id":"a5","type":"arrow","x":724,"y":240,"width":72,"height":0,"strokeColor":"#e03131","strokeWidth":2,"roughness":1.5,"endArrowhead":"arrow","startBinding":{"elementId":"pay","focus":0,"gap":4},"endBinding":{"elementId":"psp","focus":0,"gap":4},"points":[[0,0],[72,0]],"boundElements":[{"type":"text","id":"a5-t"}]},
{"id":"a5-t","type":"text","x":715,"y":230,"width":90,"height":20,"text":"3-D Secure","fontSize":16,"fontFamily":1,"textAlign":"center","verticalAlign":"middle","strokeColor":"#e03131","containerId":"a5"},
{"id":"a6","type":"arrow","x":630,"y":124,"width":0,"height":232,"strokeColor":"#f08c00","strokeWidth":2,"roughness":1.5,"endArrowhead":"arrow","startBinding":{"elementId":"ord","focus":0,"gap":4},"endBinding":{"elementId":"q","focus":0,"gap":4},"points":[[0,0],[0,232]]},
{"id":"a7","type":"arrow","x":724,"y":395,"width":72,"height":0,"strokeColor":"#1e1e1e","strokeWidth":2,"roughness":1.5,"endArrowhead":"arrow","startBinding":{"elementId":"q","focus":0,"gap":4},"endBinding":{"elementId":"mail","focus":0,"gap":4},"points":[[0,0],[72,0]]},
{"id":"n1","type":"text","x":40,"y":260,"width":188,"height":40,"text":"? idempotency keys on\n payment retries","fontSize":16,"fontFamily":1,"textAlign":"left","verticalAlign":"top","strokeColor":"#e03131"}
],
"appState": { "viewBackgroundColor": "#ffffff" },
"files": {}
}