<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36" version="26.2.14">
  <diagram name="Page-1" id="pMAFXSwGTbxxo7wkyZoP">
    <mxGraphModel dx="978" dy="881" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="-JcRy6otO31GiCju6Gh6-18" value="" style="group" vertex="1" connectable="0" parent="1">
          <mxGeometry x="260" y="30" width="330" height="110" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-1" value="&lt;p class=&quot;p1&quot;&gt;&lt;b&gt;&lt;font style=&quot;font-size: 13px;&quot;&gt;Teacher Browser&amp;nbsp;&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;(SvelteKit Frontend App)&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;LocalStorage (Assessment History)&lt;/li&gt;&lt;li&gt;HTTP Client (API Calls)&lt;/li&gt;&lt;li&gt;WebSocket Client (Real-time updates)&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=10;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-18">
          <mxGeometry width="330" height="110" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-5" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://a.storyblok.com/f/88751/1702x2049/619c584101/svelte_logo.png;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-18">
          <mxGeometry x="280" y="14" width="33.24" height="40" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-6" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://static-00.iconduck.com/assets.00/typescript-icon-icon-2048x2048-2rhh1z66.png;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-18">
          <mxGeometry x="281.62" y="64" width="30" height="30" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-19" value="" style="group" vertex="1" connectable="0" parent="1">
          <mxGeometry x="60" y="250" width="330" height="110" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-7" value="&lt;p class=&quot;p1&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;b&gt;SvelteKit API Layer&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 13px;&quot;&gt;&lt;b&gt;(Serverless on Netlify)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;/api/grade&amp;nbsp;&lt;/li&gt;&lt;li&gt;/api/hitl-review&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=10;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-19">
          <mxGeometry width="330" height="110" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-8" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://a.storyblok.com/f/88751/1702x2049/619c584101/svelte_logo.png;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-19">
          <mxGeometry x="280" y="14" width="33.24" height="40" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-9" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://static-00.iconduck.com/assets.00/typescript-icon-icon-2048x2048-2rhh1z66.png;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-19">
          <mxGeometry x="281.62" y="64" width="30" height="30" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-20" value="" style="group" vertex="1" connectable="0" parent="1">
          <mxGeometry x="460" y="250" width="330" height="110" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-10" value="&lt;p class=&quot;p1&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;b&gt;PartyKit Server&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 13px;&quot;&gt;&lt;b&gt;(WebSocket Real-time)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=10;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-20">
          <mxGeometry width="330" height="110" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-11" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://www.partykit.io/assets/PK_Logo_Full.png;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-20">
          <mxGeometry x="262" y="12.259999999999991" width="62.15" height="41.74" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-12" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://static-00.iconduck.com/assets.00/websocket-icon-512x384-sm7dfowk.png;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-20">
          <mxGeometry x="272" y="66" width="42.15" height="31.61" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-21" value="" style="group;fillColor=default;" vertex="1" connectable="0" parent="1">
          <mxGeometry x="60" y="460" width="460" height="230" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-17" value="&lt;p class=&quot;p1&quot;&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;&lt;b&gt;Azure AI Services&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Azure OpenAI (Grading &amp;amp; Feedback)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Azure AI Agent Service (Orchestration)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=10;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-21">
          <mxGeometry y="10" width="330" height="150" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-13" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;editableCssRules=.*;image=data:image/svg+xml, ;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-21">
          <mxGeometry x="279.5" y="70" width="38" height="29.56" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-14" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;editableCssRules=.*;image=data:image/svg+xml, ;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-21">
          <mxGeometry x="280" y="20" width="38" height="38" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-15" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;editableCssRules=.*;image=data:image/svg+xml, ;" vertex="1" parent="-JcRy6otO31GiCju6Gh6-21">
          <mxGeometry x="280.5" y="110" width="37" height="39.18" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-26" value="Azure Cloud" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=2" vertex="1" parent="-JcRy6otO31GiCju6Gh6-21">
          <mxGeometry x="220" y="160" width="110" height="30" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-22" value="HTTP" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="-JcRy6otO31GiCju6Gh6-7" target="-JcRy6otO31GiCju6Gh6-1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="250" y="210" as="sourcePoint" />
            <mxPoint x="300" y="160" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-23" value="WebSocket" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="-JcRy6otO31GiCju6Gh6-10" target="-JcRy6otO31GiCju6Gh6-29">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="530" y="220" as="sourcePoint" />
            <mxPoint x="580" y="170" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-24" value="HTTP (Azure API calls)" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="-JcRy6otO31GiCju6Gh6-17" target="-JcRy6otO31GiCju6Gh6-7">
          <mxGeometry x="0.2727" y="-5" width="50" height="50" relative="1" as="geometry">
            <mxPoint x="430" y="450" as="sourcePoint" />
            <mxPoint x="480" y="400" as="targetPoint" />
            <mxPoint as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-27" value="Hosted on PartyKit Cloud" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=2" vertex="1" parent="1">
          <mxGeometry x="640" y="361" width="150" height="30" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-28" value="Hosted on Netlify" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=2" vertex="1" parent="1">
          <mxGeometry x="240" y="360" width="150" height="30" as="geometry" />
        </mxCell>
        <mxCell id="-JcRy6otO31GiCju6Gh6-29" value="Hosted on Netlify" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=2" vertex="1" parent="1">
          <mxGeometry x="440" y="140" width="150" height="30" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
