<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="drawio" version="31.7.0">
  <diagram id="event-driven-orders" name="Serverless orders • Dark">
    <mxGraphModel grid="1" gridSize="10" guides="1" page="1" pageScale="1" pageWidth="1540" pageHeight="1385" background="#0B1220" shadow="0">
      <root>
        <UserObject label="" drawmeMotion="{&quot;loop&quot;:true,&quot;hold&quot;:2200,&quot;steps&quot;:[{&quot;effect&quot;:&quot;popIn&quot;,&quot;cells&quot;:[&quot;checkout&quot;,&quot;gateway&quot;,&quot;api&quot;],&quot;duration&quot;:500,&quot;stagger&quot;:100},{&quot;effect&quot;:&quot;drawIn&quot;,&quot;cells&quot;:[&quot;e-submit&quot;,&quot;e-invoke&quot;],&quot;duration&quot;:650,&quot;stagger&quot;:100},{&quot;effect&quot;:&quot;popIn&quot;,&quot;cells&quot;:[&quot;outbox&quot;,&quot;relay&quot;,&quot;events&quot;],&quot;duration&quot;:550,&quot;stagger&quot;:100},{&quot;effect&quot;:&quot;drawIn&quot;,&quot;cells&quot;:[&quot;e-commit&quot;,&quot;e-read&quot;,&quot;e-publish&quot;],&quot;duration&quot;:650,&quot;stagger&quot;:80},{&quot;effect&quot;:&quot;slideIn&quot;,&quot;cells&quot;:[&quot;fulfill-queue&quot;,&quot;worker&quot;,&quot;shipments&quot;,&quot;notify-queue&quot;,&quot;notifications&quot;,&quot;email&quot;],&quot;duration&quot;:550,&quot;stagger&quot;:80,&quot;direction&quot;:&quot;up&quot;},{&quot;effect&quot;:&quot;drawIn&quot;,&quot;cells&quot;:[&quot;e-consume&quot;,&quot;e-work&quot;,&quot;e-persist&quot;,&quot;e-notify&quot;,&quot;e-notify-work&quot;,&quot;e-email&quot;],&quot;duration&quot;:700,&quot;stagger&quot;:80},{&quot;effect&quot;:&quot;popIn&quot;,&quot;cells&quot;:[&quot;dlq&quot;],&quot;duration&quot;:500},{&quot;effect&quot;:&quot;fadeIn&quot;,&quot;cells&quot;:[&quot;e-deadletter&quot;],&quot;duration&quot;:450},{&quot;effect&quot;:&quot;travel&quot;,&quot;cells&quot;:[&quot;e-submit&quot;,&quot;e-invoke&quot;,&quot;e-commit&quot;,&quot;e-read&quot;,&quot;e-publish&quot;],&quot;duration&quot;:800,&quot;stagger&quot;:150},{&quot;effect&quot;:&quot;travel&quot;,&quot;cells&quot;:[&quot;e-consume&quot;,&quot;e-work&quot;,&quot;e-notify&quot;,&quot;e-notify-work&quot;],&quot;duration&quot;:1000,&quot;stagger&quot;:100},{&quot;effect&quot;:&quot;highlight&quot;,&quot;cells&quot;:[&quot;worker&quot;,&quot;notifications&quot;],&quot;duration&quot;:750},{&quot;effect&quot;:&quot;travel&quot;,&quot;cells&quot;:[&quot;e-persist&quot;,&quot;e-email&quot;],&quot;duration&quot;:900}]}" id="0"><mxCell/></UserObject>
        <mxCell id="1" parent="0"/>
        <mxCell id="eyebrow" value="DRAWME / ANIMATED CLOUD ARCHITECTURE" style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=middle;spacing=0;strokeColor=none;fillColor=none;fontFamily=Helvetica;fontColor=#60A5FA;fontSize=14;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="40" y="40" width="650" height="24" as="geometry"/>
        </mxCell>
        <mxCell id="title" value="An order becomes an event." style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=middle;spacing=0;strokeColor=none;fillColor=none;fontFamily=Helvetica;fontColor=#F8FAFC;fontSize=42;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="40" y="80" width="1460" height="60" as="geometry"/>
        </mxCell>
        <mxCell id="subtitle" value="A serverless outbox on AWS • independent consumers • explicit recovery boundaries" style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=middle;spacing=0;strokeColor=none;fillColor=none;fontFamily=Helvetica;fontColor=#94A3B8;fontSize=19;fontStyle=0;" vertex="1" parent="1">
          <mxGeometry x="40" y="153" width="1460" height="32" as="geometry"/>
        </mxCell>
        <mxCell id="ingest" value="01 / ACCEPT + PUBLISH" style="rounded=1;absoluteArcSize=1;arcSize=18;container=1;pointerEvents=0;html=1;align=left;verticalAlign=top;spacingLeft=24;spacingTop=18;whiteSpace=wrap;fontFamily=Helvetica;fontSize=14;fontStyle=1;fontColor=#94A3B8;fillColor=#0F172A;strokeColor=#1F2937;strokeWidth=1;" vertex="1" parent="1">
          <mxGeometry x="40" y="230" width="1340" height="250" as="geometry"/>
        </mxCell>
        <mxCell id="fulfillment" value="02 / FULFILLMENT" style="rounded=1;absoluteArcSize=1;arcSize=18;container=1;pointerEvents=0;html=1;align=left;verticalAlign=top;spacingLeft=24;spacingTop=18;whiteSpace=wrap;fontFamily=Helvetica;fontSize=14;fontStyle=1;fontColor=#94A3B8;fillColor=#0F172A;strokeColor=#1F2937;strokeWidth=1;" vertex="1" parent="1">
          <mxGeometry x="40" y="550" width="980" height="260" as="geometry"/>
        </mxCell>
        <mxCell id="notification-zone" value="03 / NOTIFICATIONS" style="rounded=1;absoluteArcSize=1;arcSize=18;container=1;pointerEvents=0;html=1;align=left;verticalAlign=top;spacingLeft=24;spacingTop=18;whiteSpace=wrap;fontFamily=Helvetica;fontSize=14;fontStyle=1;fontColor=#94A3B8;fillColor=#0F172A;strokeColor=#1F2937;strokeWidth=1;" vertex="1" parent="1">
          <mxGeometry x="40" y="870" width="980" height="260" as="geometry"/>
        </mxCell>
        <mxCell id="recovery" value="RECOVERY / SQS REDRIVE" style="rounded=1;absoluteArcSize=1;arcSize=18;container=1;pointerEvents=0;html=1;align=left;verticalAlign=top;spacingLeft=24;spacingTop=18;whiteSpace=wrap;fontFamily=Helvetica;fontSize=14;fontStyle=1;fontColor=#94A3B8;fillColor=#0F172A;strokeColor=#1F2937;strokeWidth=1;" vertex="1" parent="1">
          <mxGeometry x="1100" y="590" width="280" height="240" as="geometry"/>
        </mxCell>
        <mxCell id="checkout" value="&lt;b&gt;Checkout&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;Web client&lt;/font&gt;" style="sketch=0;outlineConnect=0;gradientColor=none;fontColor=#E2E8F0;strokeColor=none;fillColor=#94A3B8;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.illustration_users;pointerEvents=1;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=14;" vertex="1" parent="ingest">
          <mxGeometry x="70" y="80" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="gateway" value="&lt;b&gt;HTTP endpoint&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;API Gateway&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#E2E8F0;fillColor=#334155;strokeColor=#CBD5E1;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=14;" vertex="1" parent="ingest">
          <mxGeometry x="290" y="80" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="api" value="&lt;b&gt;Orders API&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;Lambda&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#E2E8F0;fillColor=#2563EB;strokeColor=#CBD5E1;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=14;" vertex="1" parent="ingest">
          <mxGeometry x="510" y="80" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="outbox" value="&lt;b&gt;Order + outbox&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;DynamoDB transaction&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#E2E8F0;fillColor=#334155;strokeColor=#CBD5E1;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=14;" vertex="1" parent="ingest">
          <mxGeometry x="730" y="80" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="relay" value="&lt;b&gt;Outbox publisher&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;Stream-triggered Lambda&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#E2E8F0;fillColor=#334155;strokeColor=#CBD5E1;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=14;" vertex="1" parent="ingest">
          <mxGeometry x="950" y="80" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="events" value="&lt;b&gt;Order events&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;SNS standard topic&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#E2E8F0;fillColor=#2563EB;strokeColor=#CBD5E1;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sns;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=0;verticalLabelPosition=top;verticalAlign=bottom;spacingBottom=14;" vertex="1" parent="ingest">
          <mxGeometry x="1170" y="80" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="shipments" value="&lt;b&gt;Shipment store&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;DynamoDB&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#E2E8F0;fillColor=#334155;strokeColor=#CBD5E1;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=14;" vertex="1" parent="fulfillment">
          <mxGeometry x="180" y="70" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="worker" value="&lt;b&gt;Fulfillment&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;Idempotent Lambda&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#E2E8F0;fillColor=#334155;strokeColor=#CBD5E1;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=14;" vertex="1" parent="fulfillment">
          <mxGeometry x="510" y="70" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="fulfill-queue" value="&lt;b&gt;Fulfillment queue&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;SQS standard queue&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#E2E8F0;fillColor=#334155;strokeColor=#CBD5E1;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=14;" vertex="1" parent="fulfillment">
          <mxGeometry x="840" y="70" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="email" value="&lt;b&gt;Email delivery&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;Amazon SES&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#E2E8F0;fillColor=#334155;strokeColor=#CBD5E1;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.simple_email_service;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=14;" vertex="1" parent="notification-zone">
          <mxGeometry x="180" y="70" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="notifications" value="&lt;b&gt;Notify customer&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;Idempotent Lambda&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#E2E8F0;fillColor=#334155;strokeColor=#CBD5E1;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=14;" vertex="1" parent="notification-zone">
          <mxGeometry x="510" y="70" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="notify-queue" value="&lt;b&gt;Notification queue&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;SQS standard queue&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#E2E8F0;fillColor=#334155;strokeColor=#CBD5E1;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=14;" vertex="1" parent="notification-zone">
          <mxGeometry x="840" y="70" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="dlq" value="&lt;b&gt;Dead-letter queue&lt;/b&gt;&lt;br&gt;&lt;font color=&quot;#94A3B8&quot; style=&quot;font-size:14px&quot;&gt;SQS · inspect + redrive&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#E2E8F0;fillColor=#334155;strokeColor=#CBD5E1;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=18;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;fontFamily=Helvetica;labelWidth=200;whiteSpace=wrap;spacingTop=14;" vertex="1" parent="recovery">
          <mxGeometry x="100" y="60" width="80" height="80" as="geometry"/>
        </mxCell>
        <mxCell id="e-submit" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#60A5FA;strokeWidth=2;endArrow=blockThin;endFill=1;endSize=8;fontFamily=Helvetica;fontSize=15;fontColor=#94A3B8;labelBackgroundColor=#0B1220;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="checkout" target="gateway">
          <mxGeometry x="0" relative="1" as="geometry"><Array as="points"><mxPoint x="260" y="350"/></Array></mxGeometry>
        </mxCell>
        <mxCell id="e-invoke" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#60A5FA;strokeWidth=2;endArrow=blockThin;endFill=1;endSize=8;fontFamily=Helvetica;fontSize=15;fontColor=#94A3B8;labelBackgroundColor=#0B1220;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="gateway" target="api">
          <mxGeometry x="0" relative="1" as="geometry"><Array as="points"><mxPoint x="480" y="350"/></Array></mxGeometry>
        </mxCell>
        <mxCell id="e-commit" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#60A5FA;strokeWidth=2;endArrow=blockThin;endFill=1;endSize=8;fontFamily=Helvetica;fontSize=15;fontColor=#94A3B8;labelBackgroundColor=#0B1220;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="api" target="outbox">
          <mxGeometry x="0" relative="1" as="geometry"><Array as="points"><mxPoint x="700" y="350"/></Array></mxGeometry>
        </mxCell>
        <mxCell id="e-read" value="stream" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#60A5FA;strokeWidth=2;endArrow=blockThin;endFill=1;endSize=8;fontFamily=Helvetica;fontSize=15;fontColor=#94A3B8;labelBackgroundColor=#0B1220;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="outbox" target="relay">
          <mxGeometry x="0" relative="1" as="geometry"><mxPoint x="0" y="-22" as="offset"/><Array as="points"><mxPoint x="920" y="350"/></Array></mxGeometry>
        </mxCell>
        <mxCell id="e-publish" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#60A5FA;strokeWidth=2;endArrow=blockThin;endFill=1;endSize=8;fontFamily=Helvetica;fontSize=15;fontColor=#94A3B8;labelBackgroundColor=#0B1220;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="relay" target="events">
          <mxGeometry x="0" relative="1" as="geometry"><Array as="points"><mxPoint x="1140" y="350"/></Array></mxGeometry>
        </mxCell>
        <mxCell id="e-consume" value="subscription" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#60A5FA;strokeWidth=2;endArrow=blockThin;endFill=1;endSize=8;fontFamily=Helvetica;fontSize=15;fontColor=#94A3B8;labelBackgroundColor=#0B1220;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="events" target="fulfill-queue">
          <mxGeometry x="0.4" relative="1" as="geometry"><mxPoint x="0" y="-22" as="offset"/><Array as="points"><mxPoint x="1250" y="520"/><mxPoint x="920" y="520"/></Array></mxGeometry>
        </mxCell>
        <mxCell id="e-work" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#60A5FA;strokeWidth=2;endArrow=blockThin;endFill=1;endSize=8;fontFamily=Helvetica;fontSize=15;fontColor=#94A3B8;labelBackgroundColor=#0B1220;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="fulfill-queue" target="worker">
          <mxGeometry x="0" relative="1" as="geometry"><Array as="points"><mxPoint x="755" y="660"/></Array></mxGeometry>
        </mxCell>
        <mxCell id="e-persist" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#60A5FA;strokeWidth=2;endArrow=blockThin;endFill=1;endSize=8;fontFamily=Helvetica;fontSize=15;fontColor=#94A3B8;labelBackgroundColor=#0B1220;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="worker" target="shipments">
          <mxGeometry x="0" relative="1" as="geometry"><Array as="points"><mxPoint x="425" y="660"/></Array></mxGeometry>
        </mxCell>
        <mxCell id="e-notify" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748B;strokeWidth=1.5;endArrow=blockThin;endFill=1;endSize=8;fontFamily=Helvetica;fontSize=15;fontColor=#94A3B8;labelBackgroundColor=#0B1220;exitX=1;exitY=0.5;entryX=0.5;entryY=0;" edge="1" parent="1" source="events" target="notify-queue">
          <mxGeometry x="0.5" relative="1" as="geometry"><mxPoint x="0" y="-22" as="offset"/><Array as="points"><mxPoint x="1420" y="350"/><mxPoint x="1420" y="840"/><mxPoint x="920" y="840"/></Array></mxGeometry>
        </mxCell>
        <mxCell id="e-notify-work" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748B;strokeWidth=1.5;endArrow=blockThin;endFill=1;endSize=8;fontFamily=Helvetica;fontSize=15;fontColor=#94A3B8;labelBackgroundColor=#0B1220;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="notify-queue" target="notifications">
          <mxGeometry x="0" relative="1" as="geometry"><Array as="points"><mxPoint x="755" y="980"/></Array></mxGeometry>
        </mxCell>
        <mxCell id="e-email" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748B;strokeWidth=1.5;endArrow=blockThin;endFill=1;endSize=8;fontFamily=Helvetica;fontSize=15;fontColor=#94A3B8;labelBackgroundColor=#0B1220;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="notifications" target="email">
          <mxGeometry x="0" relative="1" as="geometry"><Array as="points"><mxPoint x="425" y="980"/></Array></mxGeometry>
        </mxCell>
        <mxCell id="e-deadletter" value="maxReceiveCount" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748B;strokeWidth=1.5;endArrow=blockThin;endFill=1;endSize=8;fontFamily=Helvetica;fontSize=15;fontColor=#94A3B8;labelBackgroundColor=#0B1220;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="fulfill-queue" target="dlq">
          <mxGeometry x="-0.5" relative="1" as="geometry"><mxPoint x="0" y="-22" as="offset"/><Array as="points"><mxPoint x="1060" y="660"/><mxPoint x="1060" y="690"/></Array></mxGeometry>
        </mxCell>
        <mxCell id="recovery-note" value="SQS moves repeatedly failed&lt;br&gt;messages to the DLQ.&lt;br&gt;Notifications need their own&lt;br&gt;production retry policy." style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=middle;spacing=0;strokeColor=none;fillColor=none;fontFamily=Helvetica;fontColor=#94A3B8;fontSize=17;fontStyle=0;" vertex="1" parent="1">
          <mxGeometry x="1100" y="940" width="280" height="120" as="geometry"/>
        </mxCell>
        <mxCell id="contract-rule" value="" style="fillColor=#1F2937;strokeColor=none;html=1;" vertex="1" parent="1">
          <mxGeometry x="40" y="1180" width="1420" height="1" as="geometry"/>
        </mxCell>
        <mxCell id="delivery" value="Order + outbox commit atomically; the stream-triggered publisher filters outbox records.&lt;br&gt;SNS + SQS deliver at least once: both Lambda consumers must be idempotent.&lt;br&gt;Illustrative design: authentication, IAM, observability and deployment details omitted." style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=middle;spacing=0;strokeColor=none;fillColor=none;fontFamily=Helvetica;fontColor=#94A3B8;fontSize=18;fontStyle=0;" vertex="1" parent="1">
          <mxGeometry x="40" y="1210" width="1420" height="90" as="geometry"/>
        </mxCell>
        <mxCell id="motion-note" value="STAGED REVEAL → MESSAGE TRAVEL → CONSUMER FOCUS   /   Reduced motion shows the full static diagram." style="text;html=1;whiteSpace=wrap;align=left;verticalAlign=middle;spacing=0;strokeColor=none;fillColor=none;fontFamily=Helvetica;fontColor=#60A5FA;fontSize=14;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="40" y="1320" width="1420" height="25" as="geometry"/>
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
