<mxfile host="app.diagrams.net" modified="2026-04-15T00:00:00.000Z" agent="uKinnect-backend" version="22.1.0" type="device">
  <diagram id="ukinnect-poster" name="uKinnect AWS poster">
    <mxGraphModel dx="1600" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1920" pageHeight="1200" math="0" shadow="0">
      <root>
        <mxCell id="0"/>
        <mxCell id="1" parent="0"/>

        <mxCell id="title" value="&lt;b style=&quot;font-size:22px&quot;&gt;uKinnect — AWS architecture (example-style poster)&lt;/b&gt;&lt;br&gt;Replace rectangles with AWS Architecture Icons in diagrams.net: &lt;i&gt;More shapes → AWS&lt;/i&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
          <mxGeometry x="360" y="20" width="1200" height="70" as="geometry"/>
        </mxCell>

        <mxCell id="internet" value="App users&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;Web and mobile clients&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8DAEF;strokeColor=#6C3483;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="80" y="120" width="140" height="70" as="geometry"/>
        </mxCell>

        <mxCell id="r53" value="Route 53&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;DNS → ALB&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FAD7A0;strokeColor=#D35400;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="280" y="120" width="130" height="70" as="geometry"/>
        </mxCell>

        <mxCell id="alb" value="Application Load Balancer&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;HTTPS · path rules&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F8C471;strokeColor=#CA6F1E;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="460" y="120" width="200" height="70" as="geometry"/>
        </mxCell>

        <mxCell id="region" value="&lt;b&gt;AWS Region&lt;/b&gt; — Node API on EC2 + ALB + ElastiCache" style="swimlane;startSize=28;fillColor=#FEF9E7;strokeColor=#B7950B;strokeWidth=2;dashed=1;fontStyle=1;fontSize=14;" vertex="1" parent="1">
          <mxGeometry x="120" y="240" width="1280" height="520" as="geometry"/>
        </mxCell>

        <mxCell id="az1" value="Node tier (ALB targets)" style="swimlane;horizontal=0;startSize=24;fillColor=#EBF5FB;strokeColor=#2874A6;dashed=1;fontStyle=1" vertex="1" parent="region">
          <mxGeometry x="20" y="40" width="1240" height="460" as="geometry"/>
        </mxCell>

        <mxCell id="ec2_api" value="Auto Scaling — EC2&lt;br&gt;&lt;b&gt;Node.js API&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;Express /api/v1 · ALB target&lt;/font&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=12;fillColor=#D6EAF8;strokeColor=#1F618D;fontStyle=1" vertex="1" parent="az1">
          <mxGeometry x="100" y="80" width="200" height="110" as="geometry"/>
        </mxCell>

        <mxCell id="ec2_api2" value="Auto Scaling — EC2&lt;br&gt;&lt;b&gt;Node.js API&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;Express /api/v1 · ALB target&lt;/font&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=12;fillColor=#D6EAF8;strokeColor=#1F618D;fontStyle=1" vertex="1" parent="az1">
          <mxGeometry x="420" y="80" width="200" height="110" as="geometry"/>
        </mxCell>

        <mxCell id="redis" value="ElastiCache&lt;br&gt;&lt;b&gt;Redis&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;BullMQ (shared)&lt;/font&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=12;fillColor=#E8DAEF;strokeColor=#7D3C98;fontStyle=1" vertex="1" parent="az1">
          <mxGeometry x="800" y="200" width="150" height="100" as="geometry"/>
        </mxCell>

        <mxCell id="atlas" value="MongoDB Atlas&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;Primary DB (SaaS, not AWS)&lt;br&gt;TLS · Mongoose&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D4EFDF;strokeColor=#196F3D;strokeWidth=2;fontStyle=1;dashed=1" vertex="1" parent="1">
          <mxGeometry x="1460" y="320" width="200" height="120" as="geometry"/>
        </mxCell>

        <mxCell id="stripe" value="&lt;font color=&quot;#635BFF&quot; style=&quot;font-size:16px&quot;&gt;stripe&lt;/font&gt;&lt;br&gt;&lt;font style=&quot;font-size:9px&quot; color=&quot;#555&quot;&gt;Connect + webhooks (booking / payments on API)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#E2E8F0" vertex="1" parent="1">
          <mxGeometry x="80" y="360" width="200" height="70" as="geometry"/>
        </mxCell>

        <mxCell id="smtp" value="SMTP&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;Email templates&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F5EEF8;strokeColor=#8E44AD" vertex="1" parent="1">
          <mxGeometry x="80" y="460" width="120" height="70" as="geometry"/>
        </mxCell>

        <mxCell id="fcm" value="Firebase FCM&lt;br&gt;&lt;font style=&quot;font-size:10px&quot;&gt;Push&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FDEDEC;strokeColor=#CB4335" vertex="1" parent="1">
          <mxGeometry x="80" y="550" width="120" height="70" as="geometry"/>
        </mxCell>

        <mxCell id="e1" style="endArrow=classic;html=1;strokeWidth=2" edge="1" parent="1" source="internet" target="r53">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="e2" style="endArrow=classic;html=1;strokeWidth=2" edge="1" parent="1" source="r53" target="alb">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="e3" style="endArrow=classic;html=1;strokeWidth=2;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="alb" target="ec2_api">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="e4" style="endArrow=classic;html=1;strokeWidth=2;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="alb" target="ec2_api2">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="900" y="200" as="targetPoint"/>
          </mxGeometry>
        </mxCell>
        <mxCell id="e5" style="endArrow=classic;html=1;strokeWidth=1;dashed=1" edge="1" parent="1" source="ec2_api" target="atlas">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="e6" style="endArrow=classic;html=1;strokeWidth=1;dashed=1" edge="1" parent="1" source="ec2_api2" target="atlas">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="e9" style="endArrow=classic;html=1;strokeWidth=1;dashed=1" edge="1" parent="1" source="ec2_api" target="redis">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="e9b" style="endArrow=classic;html=1;strokeWidth=1;dashed=1" edge="1" parent="1" source="ec2_api2" target="redis">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="e10" style="endArrow=classic;html=1;strokeWidth=1;dashed=1" edge="1" parent="1" source="stripe" target="alb">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="e10b" value="webhooks + booking handlers" style="endArrow=classic;html=1;strokeWidth=1;dashed=1;fontSize=10" edge="1" parent="1" source="stripe" target="ec2_api">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="e10c" value="webhooks + booking handlers" style="endArrow=classic;html=1;strokeWidth=1;dashed=1;fontSize=10" edge="1" parent="1" source="stripe" target="ec2_api2">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="e11" style="endArrow=classic;html=1;strokeWidth=1;dashed=1" edge="1" parent="1" source="ec2_api" target="smtp">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>
        <mxCell id="e12" style="endArrow=classic;html=1;strokeWidth=1;dashed=1" edge="1" parent="1" source="ec2_api" target="fcm">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>

        <mxCell id="note" value="&lt;b&gt;Export as PNG:&lt;/b&gt; File → Export as → PNG (set border ~20px).&lt;br&gt;For &lt;b&gt;official AWS icons&lt;/b&gt;: More shapes → AWS → drag ELB, EC2, Route53, ElastiCache and replace the orange/blue boxes." style="text;html=1;strokeColor=#85929E;fillColor=#F4F6F6;align=left;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="1">
          <mxGeometry x="120" y="800" width="1280" height="70" as="geometry"/>
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
