<mxfile host="www.iigtn.com" modified="2026-05-04T00:00:00.000Z" agent="iigtn-platform" version="24.0.0">
  <diagram name="DocChain Architecture" id="docchain-arch">
    <mxGraphModel dx="1400" dy="1100" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1200" pageHeight="980" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />

        <mxCell id="title" value="DocChain — LP (AWS) + 本体 (予定: Vercel) 構成" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=18;fontStyle=1;" vertex="1" parent="1">
          <mxGeometry x="280" y="20" width="640" height="30" as="geometry" />
        </mxCell>

        <mxCell id="lyrA" value="A. LP (getdocchain.com) — 静的配信 + 事前登録 API" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fafafa;strokeColor=#cccccc;dashed=1;fontSize=12;fontStyle=2;align=left;verticalAlign=top;spacing=8;" vertex="1" parent="1">
          <mxGeometry x="40" y="80" width="1120" height="540" as="geometry" />
        </mxCell>

        <mxCell id="user" value="🌐 訪問者&#xa;getdocchain.com" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666;fontSize=11;" vertex="1" parent="1">
          <mxGeometry x="80" y="220" width="160" height="50" as="geometry" />
        </mxCell>

        <mxCell id="r53" value="Route 53&#xa;hosted zone" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#8C4FFF;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.route_53;" vertex="1" parent="1">
          <mxGeometry x="290" y="210" width="78" height="78" as="geometry" />
        </mxCell>

        <mxCell id="acm" value="ACM&#xa;us-east-1" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#DD344C;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.certificate_manager_3;" vertex="1" parent="1">
          <mxGeometry x="300" y="320" width="58" height="58" as="geometry" />
        </mxCell>

        <mxCell id="cf" value="CloudFront&#xa;(OAC)" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#8C4FFF;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=11;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudfront;" vertex="1" parent="1">
          <mxGeometry x="490" y="210" width="78" height="78" as="geometry" />
        </mxCell>

        <mxCell id="s3lp" value="S3 (private)&#xa;Next.js Static Export" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#7AA116;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3;" vertex="1" parent="1">
          <mxGeometry x="700" y="120" width="78" height="78" as="geometry" />
        </mxCell>

        <mxCell id="apigw" value="API Gateway&#xa;HTTP API" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#FF4F8B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway;" vertex="1" parent="1">
          <mxGeometry x="700" y="320" width="78" height="78" as="geometry" />
        </mxCell>

        <mxCell id="lambda" value="Lambda (Node.js)&#xa;subscribe handler" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#ED7100;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;" vertex="1" parent="1">
          <mxGeometry x="900" y="320" width="78" height="78" as="geometry" />
        </mxCell>

        <mxCell id="ddb" value="DynamoDB&#xa;subscribers" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#3334B9;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;" vertex="1" parent="1">
          <mxGeometry x="900" y="450" width="78" height="78" as="geometry" />
        </mxCell>

        <mxCell id="ses" value="SES&#xa;auto reply + 管理者通知" style="sketch=0;outlineConnect=0;fontColor=#232F3E;fillColor=#DD344C;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=10;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.simple_email_service;" vertex="1" parent="1">
          <mxGeometry x="1060" y="320" width="78" height="78" as="geometry" />
        </mxCell>

        <mxCell id="aedge1" value="① DNS" style="endArrow=classic;html=1;fontSize=10;" edge="1" parent="1" source="user" target="r53">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="aedge2" value="② alias" style="endArrow=classic;html=1;fontSize=10;" edge="1" parent="1" source="r53" target="cf">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="aedge3" value="TLS" style="endArrow=classic;dashed=1;html=1;fontSize=10;" edge="1" parent="1" source="acm" target="cf">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="aedge4" value="③ default behavior&#xa;(GET *)" style="endArrow=classic;html=1;fontSize=10;" edge="1" parent="1" source="cf" target="s3lp">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="aedge5" value="④ /api/* behavior&#xa;(POST)" style="endArrow=classic;html=1;fontSize=10;" edge="1" parent="1" source="cf" target="apigw">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="aedge6" value="⑤ proxy" style="endArrow=classic;html=1;fontSize=10;" edge="1" parent="1" source="apigw" target="lambda">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="aedge7" value="⑥ put_item (PK=email)" style="endArrow=classic;html=1;fontSize=10;" edge="1" parent="1" source="lambda" target="ddb">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="aedge8" value="⑦ SendEmail" style="endArrow=classic;html=1;fontSize=10;" edge="1" parent="1" source="lambda" target="ses">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="lyrB" value="B. 本体 (予定: app.getdocchain.com → Vercel)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#cccccc;dashed=1;fontSize=12;fontStyle=2;align=left;verticalAlign=top;spacing=8;" vertex="1" parent="1">
          <mxGeometry x="40" y="650" width="1120" height="290" as="geometry" />
        </mxCell>

        <mxCell id="usrapp" value="🌐 ユーザー&#xa;app.getdocchain.com" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666;fontSize=11;" vertex="1" parent="1">
          <mxGeometry x="80" y="780" width="160" height="50" as="geometry" />
        </mxCell>

        <mxCell id="vercel" value="Vercel&#xa;Next.js 15 (App Router)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#000;strokeColor=#fff;fontColor=#fff;fontSize=11;" vertex="1" parent="1">
          <mxGeometry x="310" y="770" width="180" height="60" as="geometry" />
        </mxCell>

        <mxCell id="supabase" value="Supabase&#xa;Postgres + Auth" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3ECF8E;strokeColor=#1d8650;fontColor=#fff;fontSize=11;" vertex="1" parent="1">
          <mxGeometry x="560" y="690" width="160" height="50" as="geometry" />
        </mxCell>

        <mxCell id="oai" value="OpenAI API&#xa;GPT-4o-mini → 4o カスケード" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#74AA9C;strokeColor=#3a8175;fontColor=#fff;fontSize=10;" vertex="1" parent="1">
          <mxGeometry x="560" y="770" width="200" height="50" as="geometry" />
        </mxCell>

        <mxCell id="anth" value="Anthropic API&#xa;Claude + Prompt Caching (-90% input)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D97757;strokeColor=#9c4f3a;fontColor=#fff;fontSize=10;" vertex="1" parent="1">
          <mxGeometry x="560" y="850" width="240" height="50" as="geometry" />
        </mxCell>

        <mxCell id="stripe" value="Stripe Checkout&#xa;¥4,980 サブスク" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#635BFF;strokeColor=#3f3aa3;fontColor=#fff;fontSize=10;" vertex="1" parent="1">
          <mxGeometry x="850" y="770" width="180" height="50" as="geometry" />
        </mxCell>

        <mxCell id="bedge1" value="① ログイン (Google OAuth)" style="endArrow=classic;html=1;fontSize=10;" edge="1" parent="1" source="usrapp" target="vercel">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="bedge2" value="② DB / Auth" style="endArrow=classic;html=1;fontSize=10;" edge="1" parent="1" source="vercel" target="supabase">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="bedge3" value="③ 設計書 → テスト仕様 生成" style="endArrow=classic;html=1;fontSize=10;" edge="1" parent="1" source="vercel" target="oai">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="bedge4" value="④ フェイルオーバ / Caching" style="endArrow=classic;dashed=1;html=1;fontSize=10;" edge="1" parent="1" source="vercel" target="anth">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="bedge5" value="⑤ 課金" style="endArrow=classic;html=1;fontSize=10;" edge="1" parent="1" source="vercel" target="stripe">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
