<mxfile host="Electron" version="29.6.1">
  <diagram name="Page-1" id="diagram-proptech">
    <mxGraphModel dx="1200" dy="800" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="1500" pageHeight="900" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="title-text" parent="1" style="text;html=1;align=left;verticalAlign=top;fontSize=30;fontStyle=1;fontFamily=Helvetica;fontColor=light-dark(#232F3E,#FFFFFF);" value="PropTech on AWS: MLS to Mobile Map" vertex="1">
          <mxGeometry x="50" y="30" width="900" height="40" as="geometry" />
        </mxCell>
        <mxCell id="subtitle-text" parent="1" style="text;html=1;align=left;verticalAlign=top;fontSize=16;fontFamily=Helvetica;fontColor=light-dark(#232F3E,#D4D4D4);" value="Ingest · Canonical (DynamoDB) · Search (OpenSearch) · Media (S3 + CloudFront)" vertex="1">
          <mxGeometry x="50" y="70" width="1100" height="30" as="geometry" />
        </mxCell>
        <mxCell id="title-separator" parent="1" style="line;strokeWidth=2;html=1;strokeColor=#FF9900;fontFamily=Helvetica;" value="" vertex="1">
          <mxGeometry x="50" y="105" width="1180" height="10" as="geometry" />
        </mxCell>
        <mxCell id="mls-container" parent="1" style="fillColor=#f5f5f5;strokeColor=light-dark(#666666,#D4D4D4);rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#333333;fontFamily=Helvetica;container=1;collapsible=0;" value="MLS / IDX APIs" vertex="1">
          <mxGeometry x="50" y="240" width="120" height="110" as="geometry" />
        </mxCell>
        <mxCell id="images-container" parent="1" style="fillColor=#f5f5f5;strokeColor=light-dark(#666666,#D4D4D4);rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#333333;fontFamily=Helvetica;container=1;collapsible=0;" value="MLS image feeds" vertex="1">
          <mxGeometry x="50" y="500" width="120" height="110" as="geometry" />
        </mxCell>
        <mxCell id="mobile-container" parent="1" style="fillColor=#f5f5f5;strokeColor=light-dark(#666666,#D4D4D4);rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#333333;fontFamily=Helvetica;container=1;collapsible=0;" value="Mobile / web" vertex="1">
          <mxGeometry x="50" y="640" width="120" height="110" as="geometry" />
        </mxCell>
        <mxCell id="aws-cloud" parent="1" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud;strokeColor=light-dark(#232F3E,#E4F0FF);fillColor=light-dark(#232F3E0D,#232F3E0D);fillStyle=auto;verticalAlign=top;align=left;spacingLeft=30;fontColor=#232F3E;dashed=0;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;fontFamily=Helvetica;" value="AWS Cloud" vertex="1">
          <mxGeometry x="220" y="130" width="900" height="620" as="geometry" />
        </mxCell>
        <mxCell id="grp-lambda-ingest" parent="1" style="fillColor=#FFF2E8;strokeColor=#ED7100;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#ED7100;fontFamily=Helvetica;container=1;collapsible=0;" value="Compute" vertex="1">
          <mxGeometry x="260" y="200" width="120" height="120" as="geometry" />
        </mxCell>
        <mxCell id="svc-lambda-ingest" parent="grp-lambda-ingest" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#ED7100;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;fontFamily=Helvetica;" value="Lambda&lt;div&gt;&lt;i&gt;per-MLS connector&lt;/i&gt;&lt;/div&gt;" vertex="1">
          <mxGeometry x="36" y="30" width="48" height="48" as="geometry" />
        </mxCell>
        <mxCell id="grp-sqs" parent="1" style="fillColor=#FCE4EC;strokeColor=#E7157B;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#E7157B;fontFamily=Helvetica;container=1;collapsible=0;" value="Integration" vertex="1">
          <mxGeometry x="420" y="200" width="120" height="120" as="geometry" />
        </mxCell>
        <mxCell id="svc-sqs" parent="grp-sqs" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#E7157B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;fontFamily=Helvetica;" value="Amazon SQS&lt;div&gt;&lt;i&gt;per-feed DLQ&lt;/i&gt;&lt;/div&gt;" vertex="1">
          <mxGeometry x="36" y="30" width="48" height="48" as="geometry" />
        </mxCell>
        <mxCell id="grp-sfn" parent="1" style="fillColor=#FCE4EC;strokeColor=#E7157B;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#E7157B;fontFamily=Helvetica;container=1;collapsible=0;" value="Integration" vertex="1">
          <mxGeometry x="580" y="200" width="120" height="120" as="geometry" />
        </mxCell>
        <mxCell id="svc-sfn" parent="grp-sfn" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#E7157B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.step_functions;fontFamily=Helvetica;" value="Step Functions&lt;div&gt;&lt;i&gt;normalize + dedupe&lt;/i&gt;&lt;/div&gt;" vertex="1">
          <mxGeometry x="36" y="30" width="48" height="48" as="geometry" />
        </mxCell>
        <mxCell id="grp-dynamo" parent="1" style="fillColor=#F5E6F7;strokeColor=#C925D1;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#C925D1;fontFamily=Helvetica;container=1;collapsible=0;" value="Database" vertex="1">
          <mxGeometry x="740" y="200" width="120" height="120" as="geometry" />
        </mxCell>
        <mxCell id="svc-dynamo" parent="grp-dynamo" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#C925D1;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;fontFamily=Helvetica;" value="DynamoDB&lt;div&gt;&lt;i&gt;canonical store&lt;/i&gt;&lt;/div&gt;" vertex="1">
          <mxGeometry x="36" y="30" width="48" height="48" as="geometry" />
        </mxCell>
        <mxCell id="grp-opensearch" parent="1" style="fillColor=#EDE7F6;strokeColor=#8C4FFF;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#8C4FFF;fontFamily=Helvetica;container=1;collapsible=0;" value="Analytics" vertex="1">
          <mxGeometry x="900" y="200" width="120" height="120" as="geometry" />
        </mxCell>
        <mxCell id="svc-opensearch" parent="grp-opensearch" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#8C4FFF;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elasticsearch_service;fontFamily=Helvetica;" value="OpenSearch&lt;div&gt;&lt;i&gt;geo_point + k-NN&lt;/i&gt;&lt;/div&gt;" vertex="1">
          <mxGeometry x="36" y="30" width="48" height="48" as="geometry" />
        </mxCell>
        <mxCell id="grp-s3" parent="1" style="fillColor=#E8F5E9;strokeColor=#3F8624;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#3F8624;fontFamily=Helvetica;container=1;collapsible=0;" value="Storage" vertex="1">
          <mxGeometry x="260" y="480" width="120" height="120" as="geometry" />
        </mxCell>
        <mxCell id="svc-s3" parent="grp-s3" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#3F8624;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3;fontFamily=Helvetica;" value="Amazon S3&lt;div&gt;&lt;i&gt;image ingest&lt;/i&gt;&lt;/div&gt;" vertex="1">
          <mxGeometry x="36" y="30" width="48" height="48" as="geometry" />
        </mxCell>
        <mxCell id="grp-lambda-resize" parent="1" style="fillColor=#FFF2E8;strokeColor=#ED7100;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#ED7100;fontFamily=Helvetica;container=1;collapsible=0;" value="Compute" vertex="1">
          <mxGeometry x="420" y="480" width="120" height="120" as="geometry" />
        </mxCell>
        <mxCell id="svc-lambda-resize" parent="grp-lambda-resize" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#ED7100;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;fontFamily=Helvetica;" value="Lambda&lt;div&gt;&lt;i&gt;WebP variants&lt;/i&gt;&lt;/div&gt;" vertex="1">
          <mxGeometry x="36" y="30" width="48" height="48" as="geometry" />
        </mxCell>
        <mxCell id="grp-cf" parent="1" style="fillColor=#EDE7F6;strokeColor=#8C4FFF;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#8C4FFF;fontFamily=Helvetica;container=1;collapsible=0;" value="Networking" vertex="1">
          <mxGeometry x="580" y="480" width="120" height="120" as="geometry" />
        </mxCell>
        <mxCell id="svc-cf" parent="grp-cf" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#8C4FFF;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudfront;fontFamily=Helvetica;" value="CloudFront&lt;div&gt;&lt;i&gt;Intelligent-Tiering&lt;/i&gt;&lt;/div&gt;" vertex="1">
          <mxGeometry x="36" y="30" width="48" height="48" as="geometry" />
        </mxCell>
        <mxCell id="grp-rekognition" parent="1" style="fillColor=#E0F2F1;strokeColor=#01A88D;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#01A88D;fontFamily=Helvetica;container=1;collapsible=0;dashed=1;" value="AI/ML (optional)" vertex="1">
          <mxGeometry x="740" y="400" width="120" height="120" as="geometry" />
        </mxCell>
        <mxCell id="svc-rekognition" parent="grp-rekognition" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#01A88D;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.rekognition_2;fontFamily=Helvetica;" value="Rekognition&lt;div&gt;&lt;i&gt;listing labels&lt;/i&gt;&lt;/div&gt;" vertex="1">
          <mxGeometry x="36" y="30" width="48" height="48" as="geometry" />
        </mxCell>
        <mxCell id="grp-bedrock" parent="1" style="fillColor=#E0F2F1;strokeColor=#01A88D;rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=12;fontColor=#01A88D;fontFamily=Helvetica;container=1;collapsible=0;dashed=1;" value="AI/ML (optional)" vertex="1">
          <mxGeometry x="900" y="400" width="120" height="120" as="geometry" />
        </mxCell>
        <mxCell id="svc-bedrock" parent="grp-bedrock" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#01A88D;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.bedrock;fontFamily=Helvetica;" value="Bedrock&lt;div&gt;&lt;i&gt;copy + human review&lt;/i&gt;&lt;/div&gt;" vertex="1">
          <mxGeometry x="36" y="30" width="48" height="48" as="geometry" />
        </mxCell>
        <mxCell id="legend-box" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=light-dark(#EDF3FF,#305363);strokeColor=light-dark(#6c8ebf,#6c8ebf);fontFamily=Helvetica;fontColor=light-dark(#232F3E,#FFFFFF);align=left;verticalAlign=top;fontSize=12;spacingLeft=10;spacingTop=8;" value="&lt;b&gt;Flow Steps&lt;/b&gt;&lt;br&gt;&lt;span style=&quot;color: light-dark(rgb(0,0,0), rgb(255,255,255));&quot;&gt;1. MLS connector Lambda per feed with DLQ&lt;br&gt;2. SQS buffer to Step Functions normalize&lt;br&gt;3. DynamoDB canonical single-table store&lt;br&gt;4. Stream indexer upserts OpenSearch geo_point&lt;br&gt;5. Images to S3, Lambda resize to WebP&lt;br&gt;6. CloudFront delivers variants to mobile&lt;br&gt;7. Optional Rekognition labels + Bedrock copy&lt;/span&gt;" vertex="1">
          <mxGeometry x="1260" y="130" width="280" height="620" as="geometry" />
        </mxCell>
        <mxCell id="edge-1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#007CBD;fontFamily=Helvetica;" edge="1" source="mls-container" target="svc-lambda-ingest">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="badge-1" parent="edge-1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#007CBD;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Helvetica;" value="1" vertex="1" connectable="0">
          <mxGeometry x="-0.8" y="-1" width="28" height="28" relative="1" as="geometry" />
        </mxCell>
        <mxCell id="edge-2" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#007CBD;fontFamily=Helvetica;" edge="1" source="svc-lambda-ingest" target="svc-sqs">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="badge-2" parent="edge-2" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#007CBD;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Helvetica;" value="2" vertex="1" connectable="0">
          <mxGeometry x="-0.8" y="-1" width="28" height="28" relative="1" as="geometry" />
        </mxCell>
        <mxCell id="edge-3" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#007CBD;fontFamily=Helvetica;" edge="1" source="svc-sqs" target="svc-sfn">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="edge-4" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#007CBD;fontFamily=Helvetica;" edge="1" source="svc-sfn" target="svc-dynamo">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="badge-4" parent="edge-4" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#007CBD;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Helvetica;" value="3" vertex="1" connectable="0">
          <mxGeometry x="-0.8" y="-1" width="28" height="28" relative="1" as="geometry" />
        </mxCell>
        <mxCell id="edge-5" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#007CBD;fontFamily=Helvetica;" edge="1" source="svc-dynamo" target="svc-opensearch">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="badge-5" parent="edge-5" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#007CBD;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Helvetica;" value="4" vertex="1" connectable="0">
          <mxGeometry x="-0.8" y="-1" width="28" height="28" relative="1" as="geometry" />
        </mxCell>
        <mxCell id="edge-6" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#007CBD;fontFamily=Helvetica;" edge="1" source="images-container" target="svc-s3">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="badge-6" parent="edge-6" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#007CBD;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Helvetica;" value="5" vertex="1" connectable="0">
          <mxGeometry x="-0.8" y="-1" width="28" height="28" relative="1" as="geometry" />
        </mxCell>
        <mxCell id="edge-7" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#007CBD;fontFamily=Helvetica;" edge="1" source="svc-s3" target="svc-lambda-resize">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="edge-8" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#007CBD;fontFamily=Helvetica;" edge="1" source="svc-lambda-resize" target="svc-cf">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="badge-8" parent="edge-8" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#007CBD;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Helvetica;" value="6" vertex="1" connectable="0">
          <mxGeometry x="-0.8" y="-1" width="28" height="28" relative="1" as="geometry" />
        </mxCell>
        <mxCell id="edge-9" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#007CBD;fontFamily=Helvetica;" edge="1" source="svc-cf" target="mobile-container">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="edge-10" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#007CBD;dashed=1;fontFamily=Helvetica;" edge="1" source="svc-s3" target="svc-rekognition">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="badge-10" parent="edge-10" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#007CBD;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Helvetica;" value="7" vertex="1" connectable="0">
          <mxGeometry x="-0.8" y="-1" width="28" height="28" relative="1" as="geometry" />
        </mxCell>
        <mxCell id="edge-11" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#007CBD;dashed=1;fontFamily=Helvetica;" edge="1" source="svc-dynamo" target="svc-bedrock">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
