first commit
This commit is contained in:
577
Overview/.$MeetVault_UI_Wireframes_v2.drawio.bkp
Normal file
577
Overview/.$MeetVault_UI_Wireframes_v2.drawio.bkp
Normal file
@@ -0,0 +1,577 @@
|
||||
<mxfile host="Electron" agent="ChatGPT" pages="7">
|
||||
<diagram id="dashboard" name="1. Dashboard">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="d_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_sidebar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault" vertex="1">
|
||||
<mxGeometry height="860" width="230" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_nav1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="⌂ Dashboard" vertex="1">
|
||||
<mxGeometry height="44" width="180" x="85" y="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_nav2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="◷ Meetings" vertex="1">
|
||||
<mxGeometry height="44" width="180" x="85" y="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_nav3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="⚙ Settings" vertex="1">
|
||||
<mxGeometry height="44" width="180" x="85" y="250" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_user" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Signed in as alex@example.com" vertex="1">
|
||||
<mxGeometry height="70" width="180" x="85" y="800" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Good morning" vertex="1">
|
||||
<mxGeometry height="40" width="420" x="340" y="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_desc" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Record, transcribe, summarize, and follow up on meetings." vertex="1">
|
||||
<mxGeometry height="30" width="560" x="340" y="135" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_start" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="+ Start new meeting" vertex="1">
|
||||
<mxGeometry height="48" width="250" x="1210" y="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="180" width="350" x="340" y="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card1h" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Quick start" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="365" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card1b" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Microphone: Default System&nbsp;<div>audio: On Local STT: Whisper small</div>" vertex="1">
|
||||
<mxGeometry height="80" width="260" x="360" y="290" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card1btn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Start recording" vertex="1">
|
||||
<mxGeometry height="38" width="160" x="365" y="350" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="180" width="350" x="720" y="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card2h" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Live overlay" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="745" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card2b" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Overlay: Enabled&nbsp;<div>Position: Bottom center&nbsp;</div><div>Speaker labels: On</div>" vertex="1">
|
||||
<mxGeometry height="80" width="260" x="745" y="280" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card2btn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Preview overlay" vertex="1">
|
||||
<mxGeometry height="38" width="170" x="745" y="350" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="180" width="360" x="1100" y="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card3h" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Storage" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="1125" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card3b" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="SeaweedFS connected&nbsp;<div>Storage used: 12.8 GB Uploads: healthy</div>" vertex="1">
|
||||
<mxGeometry height="80" width="260" x="1125" y="290" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_storagechip" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Connected" vertex="1">
|
||||
<mxGeometry height="26" width="110" x="1270" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_recenth" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Recent meetings" vertex="1">
|
||||
<mxGeometry height="30" width="220" x="340" y="455" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_table" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="300" width="1120" x="340" y="500" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th0" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Title" vertex="1">
|
||||
<mxGeometry height="28" width="230" x="360" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Date" vertex="1">
|
||||
<mxGeometry height="28" width="140" x="760" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th2" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Duration" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="930" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th3" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Status" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="1090" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th4" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Actions" vertex="1">
|
||||
<mxGeometry height="28" width="140" x="1270" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0t" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="34" width="340" x="360" y="555" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0d" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 27, 2026" vertex="1">
|
||||
<mxGeometry height="34" width="150" x="760" y="555" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0dur" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="48 min" vertex="1">
|
||||
<mxGeometry height="34" width="120" x="930" y="555" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0s" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Ready" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="1090" y="558" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0a" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Open" vertex="1">
|
||||
<mxGeometry height="30" width="90" x="1270" y="557" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1t" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Backend Architecture Review" vertex="1">
|
||||
<mxGeometry height="34" width="340" x="360" y="625" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1d" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 26, 2026" vertex="1">
|
||||
<mxGeometry height="34" width="150" x="760" y="625" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1dur" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="61 min" vertex="1">
|
||||
<mxGeometry height="34" width="120" x="930" y="625" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1s" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Ready" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="1090" y="628" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1a" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Open" vertex="1">
|
||||
<mxGeometry height="30" width="90" x="1270" y="627" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2t" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Client Planning Call" vertex="1">
|
||||
<mxGeometry height="34" width="340" x="360" y="695" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2d" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 25, 2026" vertex="1">
|
||||
<mxGeometry height="34" width="150" x="760" y="695" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2dur" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="35 min" vertex="1">
|
||||
<mxGeometry height="34" width="120" x="930" y="695" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2s" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Processing" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="1090" y="698" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2a" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Open" vertex="1">
|
||||
<mxGeometry height="30" width="90" x="1270" y="697" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="live" name="2. Live Meeting">
|
||||
<mxGraphModel grid="1" page="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="l_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_top" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault • Live Meeting" vertex="1">
|
||||
<mxGeometry height="60" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="40" width="500" x="100" y="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_timer" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fee2e2;strokeColor=#fecaca;fontColor=#991b1b;" value="● REC 00:18:42" vertex="1">
|
||||
<mxGeometry height="40" width="200" x="1260" y="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_left" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="570" width="860" x="100" y="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_transh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Live transcription" vertex="1">
|
||||
<mxGeometry height="30" width="240" x="125" y="235" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Speaker 1" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="125" y="290" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s1txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="We should finalize the upload flow before Friday." vertex="1">
|
||||
<mxGeometry height="42" width="630" x="250" y="285" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Speaker 2" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="125" y="360" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s2txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="I can take the SeaweedFS integration and the presigned URL endpoint." vertex="1">
|
||||
<mxGeometry height="54" width="630" x="250" y="355" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s1b" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Speaker 1" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="125" y="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s1btxt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Great. I will handle the meeting job queue and reminders." vertex="1">
|
||||
<mxGeometry height="54" width="630" x="250" y="430" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_partial" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Speaker 2 • listening…" vertex="1">
|
||||
<mxGeometry height="48" width="760" x="125" y="525" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_wave" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="▁▃▅▆▅▃▂▁▂▅▇▆▃▂▁" vertex="1">
|
||||
<mxGeometry height="40" width="760" x="125" y="600" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_controls" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Pause" vertex="1">
|
||||
<mxGeometry height="40" width="110" x="125" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_overlaybtn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Show overlay" vertex="1">
|
||||
<mxGeometry height="40" width="150" x="250" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_finish" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fee2e2;strokeColor=#fecaca;fontColor=#991b1b;" value="Finish meeting" vertex="1">
|
||||
<mxGeometry height="40" width="160" x="725" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_right" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="570" width="460" x="1000" y="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_speakersh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Speakers" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="1025" y="235" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_sp1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Speaker 1" vertex="1">
|
||||
<mxGeometry height="40" width="260" x="1025" y="285" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_rename1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Rename" vertex="1">
|
||||
<mxGeometry height="40" width="110" x="1300" y="285" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_sp2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Speaker 2" vertex="1">
|
||||
<mxGeometry height="40" width="260" x="1025" y="345" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_rename2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Rename" vertex="1">
|
||||
<mxGeometry height="40" width="110" x="1300" y="345" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_audioh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Audio sources" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="1025" y="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_mic" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Microphone" vertex="1">
|
||||
<mxGeometry height="38" width="180" x="1025" y="480" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_sys" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ System audio" vertex="1">
|
||||
<mxGeometry height="38" width="190" x="1220" y="480" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_stth" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Local transcription" vertex="1">
|
||||
<mxGeometry height="30" width="220" x="1025" y="555" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_stt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Whisper small Device: GPU Latency: ~1.2 s" vertex="1">
|
||||
<mxGeometry height="90" width="260" x="1025" y="595" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_sttchip" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Healthy" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="1300" y="610" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="overlay" name="3. Live Overlay">
|
||||
<mxGraphModel grid="1" page="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="o_bg" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Desktop / meeting app background" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_fakeapp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Video conference / presentation area" vertex="1">
|
||||
<mxGeometry height="600" width="1100" x="250" y="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_toolbar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault overlay controls" vertex="1">
|
||||
<mxGeometry height="42" width="320" x="1030" y="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_box" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#111827;strokeColor=#374151;fontColor=#ffffff;opacity=92;" vertex="1">
|
||||
<mxGeometry height="190" width="820" x="390" y="590" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_sp1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=14;fontStyle=1;fontColor=#93c5fd;" value="Alice" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="425" y="620" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_txt1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=20;fontColor=#ffffff;" value="We should finalize the API contract before tomorrow." vertex="1">
|
||||
<mxGeometry height="40" width="720" x="425" y="650" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_sp2" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=14;fontStyle=1;fontColor=#86efac;" value="Bob" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="425" y="700" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_txt2" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=20;fontColor=#ffffff;" value="I will update the database migration tonight." vertex="1">
|
||||
<mxGeometry height="40" width="720" x="425" y="730" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_hint" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Overlay options: drag • resize • opacity • font size • click-through • show/hide speaker labels" vertex="1">
|
||||
<mxGeometry height="30" width="820" x="390" y="805" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="6jg8ZA6zPTfZGke1Gjl6-1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=20;fontColor=#ffffff;" value="<font style="font-size: 11px;">Click the speaker's name to rename</font>" vertex="1">
|
||||
<mxGeometry height="40" width="720" x="410" y="580" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="speaker" name="4. Rename Speakers">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="s_bg" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Live meeting screen (dimmed)" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_modal" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="600" width="660" x="470" y="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Rename speakers" vertex="1">
|
||||
<mxGeometry height="40" width="300" x="510" y="200" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_desc" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Speaker labels are local to this meeting. Rename them anytime during the session." vertex="1">
|
||||
<mxGeometry height="40" width="520" x="510" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_card1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1">
|
||||
<mxGeometry height="120" width="580" x="510" y="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_label1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Speaker 1" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="535" y="342" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_input1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Alice" vertex="1">
|
||||
<mxGeometry height="42" width="360" x="535" y="382" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_save1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Save" vertex="1">
|
||||
<mxGeometry height="42" width="120" x="915" y="382" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_card2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1">
|
||||
<mxGeometry height="120" width="580" x="510" y="470" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_label2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Speaker 2" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="535" y="492" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_input2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Bob" vertex="1">
|
||||
<mxGeometry height="42" width="360" x="535" y="532" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_save2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Save" vertex="1">
|
||||
<mxGeometry height="42" width="120" x="915" y="532" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_note" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Tip: if diarization temporarily swaps speakers, you can reassign the latest segment from the transcript view." vertex="1">
|
||||
<mxGeometry height="60" width="540" x="510" y="630" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_close" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Close" vertex="1">
|
||||
<mxGeometry height="42" width="150" x="900" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="review" name="6. Meeting Review">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="r_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_top" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault / Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="60" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="40" width="500" x="100" y="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_meta" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 27, 2026 • 48 min • 2 speakers" vertex="1">
|
||||
<mxGeometry height="30" width="420" x="100" y="185" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_player" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Video / audio player 00:18:42 / 00:48:05" vertex="1">
|
||||
<mxGeometry height="220" width="700" x="100" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_trans" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Transcript" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="100" y="510" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_tbox" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Alice 00:18:41 We should finalize the API contract before tomorrow. Bob 00:18:49 I will update the database migration tonight. Alice 00:19:02 Perfect, then I'll prepare the release notes." vertex="1">
|
||||
<mxGeometry height="260" width="700" x="100" y="550" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_sumh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Summary" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="850" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_sum" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="The team agreed to finalize the API contract before tomorrow. Bob will update the database migration tonight, while Alice prepares the release notes." vertex="1">
|
||||
<mxGeometry height="140" width="590" x="850" y="280" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_taskh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Action items" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="850" y="465" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_task1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="☐ Update database migration Bob • Due tonight" vertex="1">
|
||||
<mxGeometry height="70" width="590" x="850" y="505" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_task2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="☐ Prepare release notes Alice • Due tomorrow" vertex="1">
|
||||
<mxGeometry height="70" width="590" x="850" y="590" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_rem" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Create reminder" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="850" y="705" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_export" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Export transcript" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="1050" y="705" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9EBs0guQWN_vwKdUdXgs-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Change speaker's name" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="420" y="505" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9EBs0guQWN_vwKdUdXgs-4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Copy transcript" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="620" y="505" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="meeting_details" name="7. Meeting Details">
|
||||
<mxGraphModel grid="1" page="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="md_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" value="" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_top" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault / Meetings / Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="60" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_back" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="← Back to meetings" vertex="1">
|
||||
<mxGeometry height="38" width="160" x="100" y="135" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="42" width="500" x="100" y="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_meta" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 27, 2026 • 48 min • 2 detected speakers • Ready" vertex="1">
|
||||
<mxGeometry height="30" width="520" x="100" y="235" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_edit" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Edit details" vertex="1">
|
||||
<mxGeometry height="40" width="120" x="1180" y="185" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_delete" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fee2e2;strokeColor=#fecaca;fontColor=#991b1b;" value="Delete" vertex="1">
|
||||
<mxGeometry height="40" width="110" x="1320" y="185" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_player" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Video / Audio Player ▶ 00:18:42 ━━━━━━━━━━━━━━━━━━━ 00:48:05 Volume • Speed 1.0x • Full screen" vertex="1">
|
||||
<mxGeometry height="230" width="760" x="100" y="300" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_info" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Meeting information" vertex="1">
|
||||
<mxGeometry height="30" width="220" x="910" y="300" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_info_box" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Title Weekly Product Sync Started Sep 27, 2026 09:00 Ended Sep 27, 2026 09:48 Language English Status Ready" vertex="1">
|
||||
<mxGeometry height="190" width="520" x="910" y="340" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_tabs" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Transcript Summary Action items Files" vertex="1">
|
||||
<mxGeometry height="42" width="1330" x="100" y="575" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_transcript" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Transcript" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="100" y="640" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_search" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Search transcript..." vertex="1">
|
||||
<mxGeometry height="38" width="300" x="1030" y="635" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_export" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Export" vertex="1">
|
||||
<mxGeometry height="38" width="85" x="1345" y="635" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Alice 00:18:41" vertex="1">
|
||||
<mxGeometry height="28" width="150" x="100" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t1txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="We should finalize the API contract before tomorrow." vertex="1">
|
||||
<mxGeometry height="38" width="690" x="270" y="686" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Bob 00:18:49" vertex="1">
|
||||
<mxGeometry height="28" width="150" x="100" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t2txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="I will update the database migration tonight." vertex="1">
|
||||
<mxGeometry height="38" width="690" x="270" y="736" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Alice 00:19:02" vertex="1">
|
||||
<mxGeometry height="28" width="150" x="100" y="790" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t3txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Perfect. I'll prepare the release notes after that." vertex="1">
|
||||
<mxGeometry height="38" width="690" x="270" y="786" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_rightsum" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Generated summary" vertex="1">
|
||||
<mxGeometry height="30" width="190" x="1010" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_summary" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="The team agreed to finalize the API contract before tomorrow. Bob will update the database migration, while Alice prepares release notes." vertex="1">
|
||||
<mxGeometry height="95" width="420" x="1010" y="730" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_regen" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Regenerate summary" vertex="1">
|
||||
<mxGeometry height="38" width="170" x="1010" y="845" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_reminder" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Create reminder" vertex="1">
|
||||
<mxGeometry height="38" width="150" x="1195" y="845" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="4IYnDq8jVSWbccKvp8l8-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Copy" vertex="1">
|
||||
<mxGeometry height="38" width="170" x="140" y="850" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="4IYnDq8jVSWbccKvp8l8-4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Change speaker name" vertex="1">
|
||||
<mxGeometry height="38" width="150" x="325" y="850" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="settings_full" name="8. Settings - Full">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="sf_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" value="" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_sidebar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault Settings" vertex="1">
|
||||
<mxGeometry height="860" width="250" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="General" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="150" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Audio" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="205" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Transcription" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="260" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Overlay" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="315" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav5" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Storage & Sync" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="370" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav6" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Account" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="425" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Settings" vertex="1">
|
||||
<mxGeometry height="40" width="300" x="360" y="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_desc" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Configure MeetVault desktop behavior and local transcription." vertex="1">
|
||||
<mxGeometry height="30" width="620" x="360" y="135" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_general" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="General" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="360" y="200" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_card1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="" vertex="1">
|
||||
<mxGeometry height="150" width="1070" x="360" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_launch" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Launch MeetVault at startup" vertex="1">
|
||||
<mxGeometry height="38" width="320" x="400" y="270" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_tray" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Keep running in system tray" vertex="1">
|
||||
<mxGeometry height="38" width="320" x="400" y="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_hotkey_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Global hotkey" vertex="1">
|
||||
<mxGeometry height="28" width="150" x="780" y="270" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_hotkey" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Ctrl + Shift + M" vertex="1">
|
||||
<mxGeometry height="42" width="260" x="780" y="305" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_theme_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Theme" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="1090" y="270" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_theme" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="System default ▼" vertex="1">
|
||||
<mxGeometry height="42" width="260" x="1090" y="305" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_audio" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Audio" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="360" y="430" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_card2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="" vertex="1">
|
||||
<mxGeometry height="160" width="1070" x="360" y="470" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_mic_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Microphone" vertex="1">
|
||||
<mxGeometry height="28" width="160" x="400" y="500" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_mic" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Default microphone ▼" vertex="1">
|
||||
<mxGeometry height="42" width="300" x="400" y="535" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_sys_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="System audio" vertex="1">
|
||||
<mxGeometry height="28" width="160" x="760" y="500" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_sys" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Default output ▼" vertex="1">
|
||||
<mxGeometry height="42" width="300" x="760" y="535" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_monitor" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Monitor microphone level" vertex="1">
|
||||
<mxGeometry height="42" width="250" x="1110" y="535" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_trans" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Transcription" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="360" y="675" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_card3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="" vertex="1">
|
||||
<mxGeometry height="150" width="1070" x="360" y="715" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_model_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Model" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="400" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_model" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Whisper small ▼" vertex="1">
|
||||
<mxGeometry height="42" width="260" x="400" y="775" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_device_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Compute" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="700" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_device" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="GPU ▼" vertex="1">
|
||||
<mxGeometry height="42" width="220" x="700" y="775" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_lang_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Language" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="960" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_lang" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Auto detect ▼" vertex="1">
|
||||
<mxGeometry height="42" width="220" x="960" y="775" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_diar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Speaker diarization" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="1210" y="775" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_save" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Save changes" vertex="1">
|
||||
<mxGeometry height="40" width="150" x="1240" y="875" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
384
Overview/.$meeting_system_architecture.drawio.bkp
Normal file
384
Overview/.$meeting_system_architecture.drawio.bkp
Normal file
@@ -0,0 +1,384 @@
|
||||
<mxfile host="Electron" agent="ChatGPT" pages="4">
|
||||
<diagram id="architecture" name="Architecture Overview">
|
||||
<mxGraphModel dx="3654" dy="2201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="client_zone" parent="1" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;fontSize=14;" value="USER MACHINE" vertex="1">
|
||||
<mxGeometry height="720" width="430" x="-150" y="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="K5FFtGGXxMcr7Zq1do-5-1" edge="1" parent="client_zone" source="browser" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="recorder" value="">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="browser" parent="client_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" value="Browser / Desktop UI React / Next.js" vertex="1">
|
||||
<mxGeometry height="90" width="170" x="105" y="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="recorder" parent="client_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" value="Meeting Recorder WebRTC / MediaRecorder (or native recorder)" vertex="1">
|
||||
<mxGeometry height="90" width="170" x="105" y="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="local_tx" parent="client_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" value="Local Transcription Engine Whisper / whisper.cpp / other local STT Runs on user machine" vertex="1">
|
||||
<mxGeometry height="120" width="200" x="90" y="330" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="local_data" parent="client_zone" style="shape=note;whiteSpace=wrap;html=1;size=15;fontSize=12;" value="Local temporary data • video/audio chunks • transcript text / segments • timestamps / speakers" vertex="1">
|
||||
<mxGeometry height="120" width="240" x="70" y="510" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e1" edge="1" parent="client_zone" source="browser" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="recorder">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e2" edge="1" parent="client_zone" source="recorder" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="local_tx">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e3" edge="1" parent="client_zone" source="local_tx" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;dashed=1;" target="local_data">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="backend_zone" parent="1" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;fontSize=14;" value="YOUR BACKEND / PRIVATE INFRASTRUCTURE" vertex="1">
|
||||
<mxGeometry height="820" width="1010" x="520" y="-30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="api" parent="backend_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" value="Backend API FastAPI / Node.js Auth • Meetings • Upload URLs Transcript ingestion • Job creation" vertex="1">
|
||||
<mxGeometry height="150" width="230" x="30" y="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pg" parent="backend_zone" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;fontSize=14;" value="PostgreSQL users auth_identities subscriptions meetings meeting_files transcripts meeting_tasks meeting_schedules processing_jobs" vertex="1">
|
||||
<mxGeometry height="170" width="210" x="460" y="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="seaweed" parent="backend_zone" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;fontSize=14;" value="SeaweedFS S3-compatible object storage videos audio thumbnails attachments exports" vertex="1">
|
||||
<mxGeometry height="100" width="240" x="580" y="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="queue" parent="backend_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" value="Job Queue Redis / PostgreSQL queue (optional for MVP)" vertex="1">
|
||||
<mxGeometry height="100" width="200" x="80" y="485" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="summary_worker" parent="backend_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;dashed=1;" value="Summarization Worker Reads transcript from PostgreSQL Generates summary + action items Writes results back" vertex="1">
|
||||
<mxGeometry height="150" width="240" x="330" y="460" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="reminder_worker" parent="backend_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;dashed=1;" value="Reminder Worker / Scheduler Finds due schedules Sends notification / email / webhook Updates execution status" vertex="1">
|
||||
<mxGeometry height="150" width="240" x="730" y="450" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="security_note" parent="backend_zone" style="shape=note;whiteSpace=wrap;html=1;size=15;fontSize=12;" value="Important: • S3/SeaweedFS credentials stay on backend • Browser uses presigned URLs for large video uploads/downloads • Transcript is uploaded as structured JSON/text after local transcription" vertex="1">
|
||||
<mxGeometry height="110" width="535" x="390" y="680" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="upload_video" edge="1" parent="1" source="browser" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="api" value="HTTPS / request presigned upload">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="460" y="170" />
|
||||
<mxPoint x="460" y="170" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="api_pg" edge="1" parent="1" source="api" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="pg" value="SQL">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="800" y="200" />
|
||||
<mxPoint x="800" y="200" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="api_s3" edge="1" parent="1" source="api" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="seaweed" value="S3 API / presigned URLs">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="665" y="80" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="browser_s3" edge="1" parent="1" source="browser" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;dashed=1;" target="seaweed" value="Direct large-file upload/download">
|
||||
<mxGeometry relative="1" x="-0.2784" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
<Array as="points">
|
||||
<mxPoint x="200" y="190" />
|
||||
<mxPoint x="200" y="400" />
|
||||
<mxPoint x="1270" y="400" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="api_queue" edge="1" parent="1" source="api" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="queue" value="enqueue summarization / reminder jobs">
|
||||
<mxGeometry relative="1" x="-0.4286" y="100" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
<Array as="points">
|
||||
<mxPoint x="690" y="440" />
|
||||
<mxPoint x="690" y="440" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="queue_sum" edge="1" parent="1" source="queue" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="summary_worker">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="820" y="510" />
|
||||
<mxPoint x="820" y="510" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="queue_rem" edge="1" parent="1" source="queue" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="reminder_worker">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="700" y="620" />
|
||||
<mxPoint x="1360" y="620" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="sum_pg" edge="1" parent="1" source="summary_worker" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="pg" value="read transcript / write summary & tasks">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="1040" y="380" />
|
||||
<mxPoint x="1040" y="380" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="rem_pg" edge="1" parent="1" source="reminder_worker" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="pg" value="read schedules / update status">
|
||||
<mxGeometry relative="1" x="0.0154" y="-20" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
<Array as="points">
|
||||
<mxPoint x="1150" y="555" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="database" name="PostgreSQL Database Design">
|
||||
<mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="dbtitle" value="PostgreSQL Logical Data Model" style="text;html=1;align=center;verticalAlign=middle;fontSize=22;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="20" width="800" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="users" value="users PK id UUID email UNIQUE display_name identification_status account_status created_at updated_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="100" width="260" height="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="auth" value="auth_identities PK id UUID FK user_id → users.id provider provider_user_id password_hash created_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="370" width="260" height="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="subs" value="subscriptions PK id UUID FK user_id → users.id provider plan status current_period_end cancel_at_period_end" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="620" width="260" height="200" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="meetings" value="meetings PK id UUID FK owner_user_id → users.id title description started_at / ended_at status summary extra_metadata JSONB created_at / updated_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="100" width="300" height="250" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="files" value="meeting_files PK id UUID FK meeting_id → meetings.id FK uploaded_by → users.id file_type bucket object_key UNIQUE mime_type size_bytes checksum upload_status" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="80" width="310" height="260" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="transcripts" value="transcripts PK id UUID FK meeting_id → meetings.id language provider = local plain_text transcript_json JSONB status created_at / updated_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="410" width="310" height="230" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tasks" value="meeting_tasks PK id UUID FK meeting_id → meetings.id FK assigned_user_id → users.id title description due_at status source source_data JSONB" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="80" width="310" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="schedules" value="meeting_schedules PK id UUID FK meeting_id → meetings.id FK user_id → users.id schedule_type scheduled_at status payload JSONB executed_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="390" width="310" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="jobs" value="processing_jobs PK id UUID FK meeting_id → meetings.id job_type status attempts error_message input_data JSONB output_data JSONB started_at completed_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="720" width="310" height="260" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="participants" value="meeting_participants PK id UUID FK meeting_id → meetings.id FK user_id → users.id NULL display_name email role joined_at / left_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="450" width="300" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="access" value="meeting_access PK id UUID FK meeting_id → meetings.id FK user_id → users.id permission created_at UNIQUE(meeting_id,user_id)" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="700" width="310" height="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r1" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="users" target="auth">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r2" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="users" target="subs">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r3" value="owner" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="users" target="meetings">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r4" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="files">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r5" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="transcripts">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r6" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="tasks">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r7" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="schedules">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r8" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="jobs">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r9" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="participants">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r10" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="access">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r11" value="assigned" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="users" target="tasks">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r12" value="owner" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="users" target="schedules">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="dbnote" value="Recommended indexes: • meetings(owner_user_id, started_at DESC) • meeting_files(meeting_id) • transcripts(meeting_id) • meeting_schedules(status, scheduled_at) • processing_jobs(status, created_at) • GIN on transcript_json / extra_metadata only if queried" style="shape=note;whiteSpace=wrap;html=1;size=15;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="930" width="660" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="flows" name="Main Flows">
|
||||
<mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1700" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="ftitle" value="Core Runtime Flows" style="text;html=1;align=center;verticalAlign=middle;fontSize=22;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="20" width="700" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fuser" value="User Machine" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="70" y="90" width="250" height="870" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fapi" value="Backend API" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="420" y="90" width="250" height="870" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fpg" value="PostgreSQL" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="770" y="90" width="250" height="870" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fs3" value="SeaweedFS" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1120" y="90" width="250" height="870" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fworker" value="Backend Workers" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1450" y="90" width="250" height="870" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s1" value="1. Record meeting" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fuser">
|
||||
<mxGeometry x="30" y="60" width="180" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s2" value="2. Upload video using presigned URL" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fuser">
|
||||
<mxGeometry x="30" y="180" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s3" value="3. Transcribe locally" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fuser">
|
||||
<mxGeometry x="30" y="330" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s4" value="4. Upload transcript JSON/text" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fuser">
|
||||
<mxGeometry x="30" y="480" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s5" value="5. View summary / reminders" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fuser">
|
||||
<mxGeometry x="30" y="670" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a1" value="Create meeting Generate presigned URL" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fapi">
|
||||
<mxGeometry x="35" y="90" width="180" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a2" value="Register completed upload" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fapi">
|
||||
<mxGeometry x="35" y="240" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a3" value="Validate + save transcript Create summarization job" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fapi">
|
||||
<mxGeometry x="35" y="470" width="180" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a4" value="Create/update reminders" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fapi">
|
||||
<mxGeometry x="35" y="630" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="p1" value="meeting row" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fpg">
|
||||
<mxGeometry x="35" y="90" width="180" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="p2" value="meeting_files row" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fpg">
|
||||
<mxGeometry x="35" y="240" width="180" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="p3" value="transcripts row" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fpg">
|
||||
<mxGeometry x="35" y="470" width="180" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="p4" value="processing_jobs meeting_tasks meeting_schedules" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fpg">
|
||||
<mxGeometry x="35" y="630" width="180" height="110" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o1" value="video/audio object" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fs3">
|
||||
<mxGeometry x="35" y="190" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o2" value="attachments / exports" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fs3">
|
||||
<mxGeometry x="35" y="380" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="w1" value="Summarization job → summary → action items" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fworker">
|
||||
<mxGeometry x="35" y="470" width="180" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="w2" value="Reminder scheduler → due reminders → send + mark executed" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fworker">
|
||||
<mxGeometry x="35" y="640" width="180" height="110" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx1" value="Create meeting" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="s1" target="a1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx2" value="INSERT" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="a1" target="p1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx3" value="presigned PUT" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;dashed=1;" edge="1" parent="1" source="s2" target="o1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx4" value="upload complete" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="s2" target="a2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx5" value="INSERT metadata" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="a2" target="p2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx6" value="local only" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;dashed=1;" edge="1" parent="1" source="s3" target="s4">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx7" value="POST transcript" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="s4" target="a3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx8" value="INSERT transcript" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="a3" target="p3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx9" value="enqueue" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="a3" target="w1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx10" value="summary/tasks" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="w1" target="p4">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx11" value="due schedules" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="p4" target="w2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx12" value="execution status" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="w2" target="p4">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="storage" name="SeaweedFS Storage Layout">
|
||||
<mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="stitle" value="SeaweedFS — S3-Compatible Object Layout" style="text;html=1;align=center;verticalAlign=middle;fontSize=22;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="430" y="20" width="740" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bucket" value="Bucket: meeting-storage" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="620" y="100" width="360" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="userpath" value="users/{user_id}/" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="620" y="280" width="360" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="meetpath" value="meetings/{meeting_id}/" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="620" y="420" width="360" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="orig" value="original/ meeting.webm / meeting.mp4" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="210" y="620" width="250" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="audio" value="audio/ meeting.opus / meeting.wav" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="520" y="620" width="250" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="thumb" value="thumbnails/ cover.jpg" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="830" y="620" width="250" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="attach" value="attachments/ agenda.pdf / files" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1140" y="620" width="250" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="se1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="bucket" target="userpath">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="se2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="userpath" target="meetpath">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e_orig" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="meetpath" target="orig">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e_audio" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="meetpath" target="audio">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e_thumb" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="meetpath" target="thumb">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e_attach" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="meetpath" target="attach">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="snote" value="PostgreSQL stores only bucket + object_key + metadata. The video/audio bytes live in SeaweedFS, not PostgreSQL." style="shape=note;whiteSpace=wrap;html=1;size=15;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="810" width="600" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
828
Overview/README.md
Normal file
828
Overview/README.md
Normal file
@@ -0,0 +1,828 @@
|
||||
# MeetVault
|
||||
|
||||
MeetVault is a self-hosted meeting recording and intelligence platform.
|
||||
|
||||
The user machine handles meeting recording and local transcription. The backend handles authentication, meeting metadata, transcript ingestion, summarization jobs, task extraction, reminder scheduling, and persistent storage.
|
||||
|
||||
Large media files are stored in SeaweedFS through its S3-compatible API, while PostgreSQL stores structured application data.
|
||||
|
||||
---
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
### User Machine
|
||||
|
||||
The browser or desktop application is responsible for:
|
||||
|
||||
- Recording meeting audio/video
|
||||
- Running local speech-to-text using Whisper, whisper.cpp, or another local STT engine
|
||||
- Sending the generated transcript to the backend
|
||||
- Uploading large media files directly to SeaweedFS using presigned URLs
|
||||
|
||||
Local transcription keeps transcription compute and cost on the user's device rather than on the backend.
|
||||
|
||||
### Backend Infrastructure
|
||||
|
||||
The backend API is responsible for:
|
||||
|
||||
- Authentication
|
||||
- User management
|
||||
- Meeting management
|
||||
- Presigned upload URL generation
|
||||
- Transcript ingestion
|
||||
- Summarization job creation
|
||||
- Action-item extraction
|
||||
- Reminder scheduling
|
||||
- Job status tracking
|
||||
|
||||
PostgreSQL stores structured application data such as users, meetings, transcripts, summaries, tasks, schedules, and processing jobs.
|
||||
|
||||
SeaweedFS stores the actual large binary files such as:
|
||||
|
||||
- Video
|
||||
- Audio
|
||||
- Thumbnails
|
||||
- Attachments
|
||||
- Exported files
|
||||
|
||||
---
|
||||
|
||||
## Data Flow
|
||||
|
||||
```text
|
||||
User machine
|
||||
│
|
||||
├── video ─────────────────────────────► SeaweedFS
|
||||
│
|
||||
└── local transcript ────────────────► PostgreSQL
|
||||
│
|
||||
▼
|
||||
processing_jobs
|
||||
│
|
||||
Summarizer
|
||||
│
|
||||
┌─────────────┴─────────────┐
|
||||
▼ ▼
|
||||
meeting_tasks meeting_summaries
|
||||
│
|
||||
▼
|
||||
meeting_schedules
|
||||
│
|
||||
▼
|
||||
Reminder Worker
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Database Design
|
||||
|
||||
```text
|
||||
users
|
||||
│
|
||||
├──── auth_identities
|
||||
│
|
||||
├──── subscriptions
|
||||
│
|
||||
├──── meetings
|
||||
│ │
|
||||
│ ├──── meeting_files ─────────► SeaweedFS
|
||||
│ │
|
||||
│ ├──── transcripts
|
||||
│ │
|
||||
│ ├──── meeting_summaries
|
||||
│ │
|
||||
│ ├──── meeting_tasks
|
||||
│ │ │
|
||||
│ │ └──── meeting_schedules
|
||||
│ │
|
||||
│ └──── processing_jobs
|
||||
│
|
||||
└──── meeting_schedules
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# PostgreSQL Schema
|
||||
|
||||
## Enable UUID Generation
|
||||
|
||||
```sql
|
||||
CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Users
|
||||
|
||||
```sql
|
||||
CREATE TABLE users (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
|
||||
email VARCHAR(320) UNIQUE NOT NULL,
|
||||
display_name VARCHAR(255),
|
||||
|
||||
identification_status VARCHAR(30)
|
||||
NOT NULL DEFAULT 'unidentified'
|
||||
CHECK (
|
||||
identification_status IN (
|
||||
'unidentified',
|
||||
'pending',
|
||||
'identified',
|
||||
'rejected'
|
||||
)
|
||||
),
|
||||
|
||||
account_status VARCHAR(30)
|
||||
NOT NULL DEFAULT 'active'
|
||||
CHECK (
|
||||
account_status IN (
|
||||
'active',
|
||||
'suspended',
|
||||
'disabled'
|
||||
)
|
||||
),
|
||||
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Authentication Identities
|
||||
|
||||
Supports local login and external providers such as Google or Microsoft.
|
||||
|
||||
```sql
|
||||
CREATE TABLE auth_identities (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
|
||||
user_id UUID NOT NULL
|
||||
REFERENCES users(id)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
provider VARCHAR(50) NOT NULL,
|
||||
|
||||
provider_user_id VARCHAR(255),
|
||||
password_hash TEXT,
|
||||
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
|
||||
UNIQUE(provider, provider_user_id)
|
||||
);
|
||||
```
|
||||
|
||||
Typical providers:
|
||||
|
||||
```text
|
||||
local
|
||||
google
|
||||
microsoft
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Subscriptions
|
||||
|
||||
```sql
|
||||
CREATE TABLE subscriptions (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
|
||||
user_id UUID NOT NULL
|
||||
REFERENCES users(id)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
plan VARCHAR(50)
|
||||
NOT NULL DEFAULT 'free',
|
||||
|
||||
status VARCHAR(30)
|
||||
NOT NULL DEFAULT 'active'
|
||||
CHECK (
|
||||
status IN (
|
||||
'active',
|
||||
'trialing',
|
||||
'past_due',
|
||||
'cancelled',
|
||||
'expired'
|
||||
)
|
||||
),
|
||||
|
||||
provider VARCHAR(50),
|
||||
|
||||
provider_customer_id VARCHAR(255),
|
||||
provider_subscription_id VARCHAR(255),
|
||||
|
||||
current_period_start TIMESTAMPTZ,
|
||||
current_period_end TIMESTAMPTZ,
|
||||
|
||||
cancel_at_period_end BOOLEAN
|
||||
NOT NULL DEFAULT FALSE,
|
||||
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Meetings
|
||||
|
||||
```sql
|
||||
CREATE TABLE meetings (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
|
||||
owner_user_id UUID NOT NULL
|
||||
REFERENCES users(id)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
title VARCHAR(500),
|
||||
description TEXT,
|
||||
|
||||
started_at TIMESTAMPTZ,
|
||||
ended_at TIMESTAMPTZ,
|
||||
|
||||
timezone VARCHAR(100),
|
||||
|
||||
status VARCHAR(30)
|
||||
NOT NULL DEFAULT 'created'
|
||||
CHECK (
|
||||
status IN (
|
||||
'created',
|
||||
'recording',
|
||||
'uploading',
|
||||
'transcribing',
|
||||
'processing',
|
||||
'ready',
|
||||
'failed',
|
||||
'archived',
|
||||
'deleted'
|
||||
)
|
||||
),
|
||||
|
||||
metadata JSONB NOT NULL DEFAULT '{}',
|
||||
|
||||
deleted_at TIMESTAMPTZ,
|
||||
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
|
||||
CHECK (
|
||||
ended_at IS NULL
|
||||
OR started_at IS NULL
|
||||
OR ended_at >= started_at
|
||||
)
|
||||
);
|
||||
```
|
||||
|
||||
Summaries are stored separately in `meeting_summaries`.
|
||||
|
||||
---
|
||||
|
||||
## Meeting Files
|
||||
|
||||
This table stores file metadata only. The actual media files are stored in SeaweedFS.
|
||||
|
||||
```sql
|
||||
CREATE TABLE meeting_files (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
|
||||
meeting_id UUID NOT NULL
|
||||
REFERENCES meetings(id)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
uploaded_by UUID
|
||||
REFERENCES users(id)
|
||||
ON DELETE SET NULL,
|
||||
|
||||
file_type VARCHAR(50)
|
||||
NOT NULL
|
||||
CHECK (
|
||||
file_type IN (
|
||||
'video',
|
||||
'audio',
|
||||
'thumbnail',
|
||||
'attachment',
|
||||
'export'
|
||||
)
|
||||
),
|
||||
|
||||
original_filename VARCHAR(500),
|
||||
mime_type VARCHAR(150),
|
||||
|
||||
storage_provider VARCHAR(30)
|
||||
NOT NULL DEFAULT 'seaweedfs',
|
||||
|
||||
storage_bucket VARCHAR(255) NOT NULL,
|
||||
storage_key TEXT NOT NULL,
|
||||
|
||||
size_bytes BIGINT
|
||||
CHECK (
|
||||
size_bytes IS NULL
|
||||
OR size_bytes >= 0
|
||||
),
|
||||
|
||||
checksum VARCHAR(255),
|
||||
|
||||
upload_status VARCHAR(30)
|
||||
NOT NULL DEFAULT 'pending'
|
||||
CHECK (
|
||||
upload_status IN (
|
||||
'pending',
|
||||
'uploading',
|
||||
'uploaded',
|
||||
'failed',
|
||||
'deleted'
|
||||
)
|
||||
),
|
||||
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
|
||||
UNIQUE(storage_provider, storage_bucket, storage_key)
|
||||
);
|
||||
```
|
||||
|
||||
Example SeaweedFS object path:
|
||||
|
||||
```text
|
||||
meeting-storage/
|
||||
users/{user_id}/
|
||||
meetings/{meeting_id}/
|
||||
original/
|
||||
recording.webm
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Transcripts
|
||||
|
||||
Transcription happens locally on the user's machine and is uploaded to the backend afterward.
|
||||
|
||||
```sql
|
||||
CREATE TABLE transcripts (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
|
||||
meeting_id UUID NOT NULL
|
||||
REFERENCES meetings(id)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
source VARCHAR(30)
|
||||
NOT NULL DEFAULT 'local'
|
||||
CHECK (
|
||||
source IN (
|
||||
'local',
|
||||
'imported'
|
||||
)
|
||||
),
|
||||
|
||||
engine VARCHAR(100),
|
||||
language VARCHAR(20),
|
||||
|
||||
version INTEGER
|
||||
NOT NULL DEFAULT 1
|
||||
CHECK (version > 0),
|
||||
|
||||
is_active BOOLEAN
|
||||
NOT NULL DEFAULT TRUE,
|
||||
|
||||
plain_text TEXT,
|
||||
transcript_json JSONB,
|
||||
|
||||
duration_seconds NUMERIC(12,2)
|
||||
CHECK (
|
||||
duration_seconds IS NULL
|
||||
OR duration_seconds >= 0
|
||||
),
|
||||
|
||||
status VARCHAR(30)
|
||||
NOT NULL DEFAULT 'uploaded'
|
||||
CHECK (
|
||||
status IN (
|
||||
'uploaded',
|
||||
'processing',
|
||||
'ready',
|
||||
'failed'
|
||||
)
|
||||
),
|
||||
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
|
||||
UNIQUE(meeting_id, version)
|
||||
);
|
||||
```
|
||||
|
||||
Example transcript JSON:
|
||||
|
||||
```json
|
||||
{
|
||||
"segments": [
|
||||
{
|
||||
"speaker": "Speaker 1",
|
||||
"start": 4.2,
|
||||
"end": 9.8,
|
||||
"text": "Let's review the deployment."
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Meeting Summaries
|
||||
|
||||
```sql
|
||||
CREATE TABLE meeting_summaries (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
|
||||
meeting_id UUID NOT NULL
|
||||
REFERENCES meetings(id)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
summary_type VARCHAR(50)
|
||||
NOT NULL DEFAULT 'general',
|
||||
|
||||
content TEXT NOT NULL,
|
||||
|
||||
model VARCHAR(100),
|
||||
|
||||
metadata JSONB NOT NULL DEFAULT '{}',
|
||||
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
Possible summary types:
|
||||
|
||||
```text
|
||||
general
|
||||
short
|
||||
executive
|
||||
technical
|
||||
action-focused
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Meeting Tasks
|
||||
|
||||
```sql
|
||||
CREATE TABLE meeting_tasks (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
|
||||
meeting_id UUID NOT NULL
|
||||
REFERENCES meetings(id)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
assigned_user_id UUID
|
||||
REFERENCES users(id)
|
||||
ON DELETE SET NULL,
|
||||
|
||||
title VARCHAR(500) NOT NULL,
|
||||
description TEXT,
|
||||
|
||||
due_at TIMESTAMPTZ,
|
||||
|
||||
status VARCHAR(30)
|
||||
NOT NULL DEFAULT 'open'
|
||||
CHECK (
|
||||
status IN (
|
||||
'open',
|
||||
'in_progress',
|
||||
'completed',
|
||||
'cancelled'
|
||||
)
|
||||
),
|
||||
|
||||
source VARCHAR(30)
|
||||
NOT NULL DEFAULT 'ai'
|
||||
CHECK (
|
||||
source IN (
|
||||
'ai',
|
||||
'manual',
|
||||
'imported'
|
||||
)
|
||||
),
|
||||
|
||||
source_metadata JSONB,
|
||||
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Meeting Schedules / Reminders
|
||||
|
||||
```sql
|
||||
CREATE TABLE meeting_schedules (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
|
||||
meeting_id UUID NOT NULL
|
||||
REFERENCES meetings(id)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
task_id UUID
|
||||
REFERENCES meeting_tasks(id)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
user_id UUID NOT NULL
|
||||
REFERENCES users(id)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
schedule_type VARCHAR(50) NOT NULL,
|
||||
|
||||
scheduled_at TIMESTAMPTZ NOT NULL,
|
||||
|
||||
status VARCHAR(30)
|
||||
NOT NULL DEFAULT 'pending'
|
||||
CHECK (
|
||||
status IN (
|
||||
'pending',
|
||||
'processing',
|
||||
'executed',
|
||||
'failed',
|
||||
'cancelled'
|
||||
)
|
||||
),
|
||||
|
||||
payload JSONB NOT NULL DEFAULT '{}',
|
||||
|
||||
executed_at TIMESTAMPTZ,
|
||||
|
||||
attempts INTEGER
|
||||
NOT NULL DEFAULT 0,
|
||||
|
||||
last_error TEXT,
|
||||
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
Example reminder payload:
|
||||
|
||||
```json
|
||||
{
|
||||
"channel": "email",
|
||||
"message": "Prepare the deployment report"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Processing Jobs
|
||||
|
||||
MeetVault can use PostgreSQL itself as the first job queue.
|
||||
|
||||
```sql
|
||||
CREATE TABLE processing_jobs (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
|
||||
meeting_id UUID
|
||||
REFERENCES meetings(id)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
job_type VARCHAR(50)
|
||||
NOT NULL
|
||||
CHECK (
|
||||
job_type IN (
|
||||
'summarize_meeting',
|
||||
'extract_action_items',
|
||||
'generate_reminders'
|
||||
)
|
||||
),
|
||||
|
||||
status VARCHAR(30)
|
||||
NOT NULL DEFAULT 'queued'
|
||||
CHECK (
|
||||
status IN (
|
||||
'queued',
|
||||
'running',
|
||||
'completed',
|
||||
'failed',
|
||||
'cancelled'
|
||||
)
|
||||
),
|
||||
|
||||
priority SMALLINT
|
||||
NOT NULL DEFAULT 0,
|
||||
|
||||
attempts INTEGER
|
||||
NOT NULL DEFAULT 0,
|
||||
|
||||
max_attempts INTEGER
|
||||
NOT NULL DEFAULT 3
|
||||
CHECK (max_attempts > 0),
|
||||
|
||||
input_data JSONB,
|
||||
output_data JSONB,
|
||||
|
||||
error_message TEXT,
|
||||
|
||||
available_at TIMESTAMPTZ
|
||||
NOT NULL DEFAULT NOW(),
|
||||
|
||||
locked_at TIMESTAMPTZ,
|
||||
locked_by VARCHAR(255),
|
||||
|
||||
started_at TIMESTAMPTZ,
|
||||
completed_at TIMESTAMPTZ,
|
||||
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
Example job pickup query:
|
||||
|
||||
```sql
|
||||
SELECT *
|
||||
FROM processing_jobs
|
||||
WHERE status = 'queued'
|
||||
AND available_at <= NOW()
|
||||
ORDER BY priority DESC, created_at
|
||||
FOR UPDATE SKIP LOCKED
|
||||
LIMIT 1;
|
||||
```
|
||||
|
||||
This allows multiple workers without two workers processing the same job.
|
||||
|
||||
Redis or another dedicated queue can be added later if required.
|
||||
|
||||
---
|
||||
|
||||
# Indexes
|
||||
|
||||
```sql
|
||||
CREATE INDEX idx_meetings_owner
|
||||
ON meetings(owner_user_id);
|
||||
|
||||
CREATE INDEX idx_meetings_owner_started
|
||||
ON meetings(owner_user_id, started_at DESC);
|
||||
|
||||
CREATE INDEX idx_meetings_status
|
||||
ON meetings(status);
|
||||
|
||||
CREATE INDEX idx_meeting_files_meeting
|
||||
ON meeting_files(meeting_id);
|
||||
|
||||
CREATE INDEX idx_transcripts_meeting
|
||||
ON transcripts(meeting_id);
|
||||
|
||||
CREATE INDEX idx_transcripts_active
|
||||
ON transcripts(meeting_id, is_active);
|
||||
|
||||
CREATE INDEX idx_summaries_meeting
|
||||
ON meeting_summaries(meeting_id);
|
||||
|
||||
CREATE INDEX idx_tasks_meeting
|
||||
ON meeting_tasks(meeting_id);
|
||||
|
||||
CREATE INDEX idx_tasks_assigned_user
|
||||
ON meeting_tasks(assigned_user_id);
|
||||
|
||||
CREATE INDEX idx_schedules_due
|
||||
ON meeting_schedules(status, scheduled_at);
|
||||
|
||||
CREATE INDEX idx_processing_jobs_queue
|
||||
ON processing_jobs(status, available_at, priority DESC);
|
||||
```
|
||||
|
||||
The most important worker indexes are:
|
||||
|
||||
```text
|
||||
meeting_schedules(status, scheduled_at)
|
||||
processing_jobs(status, available_at, priority)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Automatic `updated_at`
|
||||
|
||||
PostgreSQL does not automatically modify `updated_at` when a row changes.
|
||||
|
||||
Create a shared trigger function:
|
||||
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION set_updated_at()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = NOW();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
```
|
||||
|
||||
Apply it to relevant tables:
|
||||
|
||||
```sql
|
||||
CREATE TRIGGER trg_users_updated_at
|
||||
BEFORE UPDATE ON users
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION set_updated_at();
|
||||
|
||||
CREATE TRIGGER trg_subscriptions_updated_at
|
||||
BEFORE UPDATE ON subscriptions
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION set_updated_at();
|
||||
|
||||
CREATE TRIGGER trg_meetings_updated_at
|
||||
BEFORE UPDATE ON meetings
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION set_updated_at();
|
||||
|
||||
CREATE TRIGGER trg_transcripts_updated_at
|
||||
BEFORE UPDATE ON transcripts
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION set_updated_at();
|
||||
|
||||
CREATE TRIGGER trg_tasks_updated_at
|
||||
BEFORE UPDATE ON meeting_tasks
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION set_updated_at();
|
||||
|
||||
CREATE TRIGGER trg_schedules_updated_at
|
||||
BEFORE UPDATE ON meeting_schedules
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION set_updated_at();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Final Architecture
|
||||
|
||||
```text
|
||||
MeetVault
|
||||
|
||||
USER MACHINE
|
||||
│
|
||||
┌──────────┴──────────┐
|
||||
│ │
|
||||
Recording Local STT
|
||||
│ Whisper
|
||||
│ │
|
||||
▼ ▼
|
||||
Video/audio Transcript
|
||||
│ │
|
||||
│ ▼
|
||||
│ Backend API
|
||||
│ │
|
||||
│ ▼
|
||||
│ PostgreSQL
|
||||
│ │
|
||||
│ processing_jobs
|
||||
│ │
|
||||
│ ▼
|
||||
│ Summary Worker
|
||||
│ / \
|
||||
│ / \
|
||||
▼ ▼ ▼
|
||||
SeaweedFS meeting_tasks summaries
|
||||
│
|
||||
▼
|
||||
meeting_schedules
|
||||
│
|
||||
▼
|
||||
Reminder Worker
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Recommended MVP Stack
|
||||
|
||||
A practical first implementation could use:
|
||||
|
||||
```text
|
||||
Frontend
|
||||
React / Next.js
|
||||
|
||||
Backend
|
||||
FastAPI or Node.js
|
||||
|
||||
Database
|
||||
PostgreSQL
|
||||
|
||||
Media Storage
|
||||
SeaweedFS
|
||||
|
||||
Local Transcription
|
||||
Whisper / whisper.cpp
|
||||
|
||||
Backend Jobs
|
||||
PostgreSQL processing_jobs
|
||||
|
||||
Workers
|
||||
Summarization Worker
|
||||
Reminder Worker
|
||||
```
|
||||
|
||||
For the first version, MeetVault does not require:
|
||||
|
||||
- Kafka
|
||||
- Elasticsearch
|
||||
- Kubernetes
|
||||
- A vector database
|
||||
- A separate microservice architecture
|
||||
- Redis, unless job volume grows enough to justify it
|
||||
|
||||
PostgreSQL + SeaweedFS + the backend API + workers is sufficient for the MVP and leaves room to scale later.
|
||||
385
Overview/meeting_system_architecture.drawio
Normal file
385
Overview/meeting_system_architecture.drawio
Normal file
@@ -0,0 +1,385 @@
|
||||
<mxfile host="Electron" agent="ChatGPT" pages="4">
|
||||
<diagram id="architecture" name="Architecture Overview">
|
||||
<mxGraphModel dx="1712" dy="1001" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="client_zone" parent="1" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;fontSize=14;" value="USER MACHINE" vertex="1">
|
||||
<mxGeometry height="720" width="430" x="30" y="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="K5FFtGGXxMcr7Zq1do-5-1" edge="1" parent="client_zone" source="browser" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="recorder" value="">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="browser" parent="client_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" value="Browser / Desktop UI React / Next.js" vertex="1">
|
||||
<mxGeometry height="90" width="170" x="105" y="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="recorder" parent="client_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" value="Meeting Recorder WebRTC / MediaRecorder (or native recorder)" vertex="1">
|
||||
<mxGeometry height="90" width="170" x="105" y="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="local_tx" parent="client_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" value="Local Transcription Engine Whisper / whisper.cpp / other local STT Runs on user machine" vertex="1">
|
||||
<mxGeometry height="120" width="200" x="90" y="330" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="local_data" parent="client_zone" style="shape=note;whiteSpace=wrap;html=1;size=15;fontSize=12;" value="Local temporary data • video/audio chunks • transcript text / segments • timestamps / speakers" vertex="1">
|
||||
<mxGeometry height="120" width="240" x="70" y="510" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e1" edge="1" parent="client_zone" source="browser" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="recorder">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e2" edge="1" parent="client_zone" source="recorder" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="local_tx">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e3" edge="1" parent="client_zone" source="local_tx" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;dashed=1;" target="local_data">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="backend_zone" parent="1" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;fontSize=14;" value="YOUR BACKEND / PRIVATE INFRASTRUCTURE" vertex="1">
|
||||
<mxGeometry height="820" width="1010" x="560" y="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="api" parent="backend_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" value="Backend API FastAPI / Node.js Auth • Meetings • Upload URLs Transcript ingestion • Job creation" vertex="1">
|
||||
<mxGeometry height="150" width="230" x="30" y="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pg" parent="backend_zone" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;fontSize=14;" value="PostgreSQL users auth_identities subscriptions meetings meeting_files transcripts meeting_tasks meeting_schedules processing_jobs" vertex="1">
|
||||
<mxGeometry height="170" width="210" x="460" y="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="seaweed" parent="backend_zone" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;fontSize=14;" value="SeaweedFS S3-compatible object storage videos audio thumbnails attachments exports" vertex="1">
|
||||
<mxGeometry height="100" width="240" x="580" y="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="queue" parent="backend_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" value="Job Queue Redis / PostgreSQL queue (optional for MVP)" vertex="1">
|
||||
<mxGeometry height="100" width="200" x="80" y="485" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="summary_worker" parent="backend_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;dashed=1;" value="Summarization Worker Reads transcript from PostgreSQL Generates summary + action items Writes results back" vertex="1">
|
||||
<mxGeometry height="150" width="240" x="330" y="460" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="reminder_worker" parent="backend_zone" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;dashed=1;" value="Reminder Worker / Scheduler Finds due schedules Sends notification / email / webhook Updates execution status" vertex="1">
|
||||
<mxGeometry height="150" width="240" x="730" y="450" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="security_note" parent="backend_zone" style="shape=note;whiteSpace=wrap;html=1;size=15;fontSize=12;" value="Important: • S3/SeaweedFS credentials stay on backend • Browser uses presigned URLs for large video uploads/downloads • Transcript is uploaded as structured JSON/text after local transcription" vertex="1">
|
||||
<mxGeometry height="110" width="535" x="390" y="680" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="upload_video" edge="1" parent="1" source="browser" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="api" value="HTTPS / request presigned upload">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="360" y="200" />
|
||||
<mxPoint x="360" y="200" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="api_pg" edge="1" parent="1" source="api" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="pg" value="SQL">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="800" y="200" />
|
||||
<mxPoint x="800" y="200" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="api_s3" edge="1" parent="1" source="api" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="seaweed" value="S3 API / presigned URLs">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="665" y="80" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="browser_s3" edge="1" parent="1" source="browser" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;dashed=1;" target="seaweed" value="Direct large-file upload/download">
|
||||
<mxGeometry relative="1" x="-0.2784" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
<Array as="points">
|
||||
<mxPoint x="280" y="230" />
|
||||
<mxPoint x="330" y="230" />
|
||||
<mxPoint x="330" y="400" />
|
||||
<mxPoint x="1270" y="400" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="api_queue" edge="1" parent="1" source="api" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="queue" value="enqueue summarization / reminder jobs">
|
||||
<mxGeometry relative="1" x="-0.4286" y="100" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
<Array as="points">
|
||||
<mxPoint x="690" y="440" />
|
||||
<mxPoint x="690" y="440" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="queue_sum" edge="1" parent="1" source="queue" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="summary_worker">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="820" y="510" />
|
||||
<mxPoint x="820" y="510" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="queue_rem" edge="1" parent="1" source="queue" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="reminder_worker">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="700" y="620" />
|
||||
<mxPoint x="1360" y="620" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="sum_pg" edge="1" parent="1" source="summary_worker" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="pg" value="read transcript / write summary & tasks">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="1040" y="380" />
|
||||
<mxPoint x="1040" y="380" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="rem_pg" edge="1" parent="1" source="reminder_worker" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" target="pg" value="read schedules / update status">
|
||||
<mxGeometry relative="1" x="0.0154" y="-20" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
<Array as="points">
|
||||
<mxPoint x="1150" y="555" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="database" name="PostgreSQL Database Design">
|
||||
<mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="dbtitle" value="PostgreSQL Logical Data Model" style="text;html=1;align=center;verticalAlign=middle;fontSize=22;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="20" width="800" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="users" value="users PK id UUID email UNIQUE display_name identification_status account_status created_at updated_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="100" width="260" height="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="auth" value="auth_identities PK id UUID FK user_id → users.id provider provider_user_id password_hash created_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="370" width="260" height="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="subs" value="subscriptions PK id UUID FK user_id → users.id provider plan status current_period_end cancel_at_period_end" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="620" width="260" height="200" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="meetings" value="meetings PK id UUID FK owner_user_id → users.id title description started_at / ended_at status summary extra_metadata JSONB created_at / updated_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="100" width="300" height="250" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="files" value="meeting_files PK id UUID FK meeting_id → meetings.id FK uploaded_by → users.id file_type bucket object_key UNIQUE mime_type size_bytes checksum upload_status" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="80" width="310" height="260" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="transcripts" value="transcripts PK id UUID FK meeting_id → meetings.id language provider = local plain_text transcript_json JSONB status created_at / updated_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="410" width="310" height="230" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tasks" value="meeting_tasks PK id UUID FK meeting_id → meetings.id FK assigned_user_id → users.id title description due_at status source source_data JSONB" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="80" width="310" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="schedules" value="meeting_schedules PK id UUID FK meeting_id → meetings.id FK user_id → users.id schedule_type scheduled_at status payload JSONB executed_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="390" width="310" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="jobs" value="processing_jobs PK id UUID FK meeting_id → meetings.id job_type status attempts error_message input_data JSONB output_data JSONB started_at completed_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="720" width="310" height="260" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="participants" value="meeting_participants PK id UUID FK meeting_id → meetings.id FK user_id → users.id NULL display_name email role joined_at / left_at" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="450" width="300" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="access" value="meeting_access PK id UUID FK meeting_id → meetings.id FK user_id → users.id permission created_at UNIQUE(meeting_id,user_id)" style="rounded=0;whiteSpace=wrap;html=1;align=left;verticalAlign=top;fontSize=12;spacing=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="700" width="310" height="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r1" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="users" target="auth">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r2" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="users" target="subs">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r3" value="owner" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="users" target="meetings">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r4" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="files">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r5" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="transcripts">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r6" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="tasks">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r7" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="schedules">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r8" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="jobs">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r9" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="participants">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r10" value="1:N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="meetings" target="access">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r11" value="assigned" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="users" target="tasks">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r12" value="owner" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=none;startArrow=none;" edge="1" parent="1" source="users" target="schedules">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="dbnote" value="Recommended indexes: • meetings(owner_user_id, started_at DESC) • meeting_files(meeting_id) • transcripts(meeting_id) • meeting_schedules(status, scheduled_at) • processing_jobs(status, created_at) • GIN on transcript_json / extra_metadata only if queried" style="shape=note;whiteSpace=wrap;html=1;size=15;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="930" width="660" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="flows" name="Main Flows">
|
||||
<mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1700" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="ftitle" value="Core Runtime Flows" style="text;html=1;align=center;verticalAlign=middle;fontSize=22;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="20" width="700" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fuser" value="User Machine" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="70" y="90" width="250" height="870" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fapi" value="Backend API" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="420" y="90" width="250" height="870" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fpg" value="PostgreSQL" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="770" y="90" width="250" height="870" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fs3" value="SeaweedFS" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1120" y="90" width="250" height="870" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fworker" value="Backend Workers" style="swimlane;horizontal=1;startSize=28;rounded=1;html=1;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1450" y="90" width="250" height="870" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s1" value="1. Record meeting" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fuser">
|
||||
<mxGeometry x="30" y="60" width="180" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s2" value="2. Upload video using presigned URL" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fuser">
|
||||
<mxGeometry x="30" y="180" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s3" value="3. Transcribe locally" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fuser">
|
||||
<mxGeometry x="30" y="330" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s4" value="4. Upload transcript JSON/text" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fuser">
|
||||
<mxGeometry x="30" y="480" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s5" value="5. View summary / reminders" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fuser">
|
||||
<mxGeometry x="30" y="670" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a1" value="Create meeting Generate presigned URL" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fapi">
|
||||
<mxGeometry x="35" y="90" width="180" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a2" value="Register completed upload" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fapi">
|
||||
<mxGeometry x="35" y="240" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a3" value="Validate + save transcript Create summarization job" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fapi">
|
||||
<mxGeometry x="35" y="470" width="180" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a4" value="Create/update reminders" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fapi">
|
||||
<mxGeometry x="35" y="630" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="p1" value="meeting row" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fpg">
|
||||
<mxGeometry x="35" y="90" width="180" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="p2" value="meeting_files row" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fpg">
|
||||
<mxGeometry x="35" y="240" width="180" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="p3" value="transcripts row" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fpg">
|
||||
<mxGeometry x="35" y="470" width="180" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="p4" value="processing_jobs meeting_tasks meeting_schedules" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fpg">
|
||||
<mxGeometry x="35" y="630" width="180" height="110" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o1" value="video/audio object" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fs3">
|
||||
<mxGeometry x="35" y="190" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o2" value="attachments / exports" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fs3">
|
||||
<mxGeometry x="35" y="380" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="w1" value="Summarization job → summary → action items" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fworker">
|
||||
<mxGeometry x="35" y="470" width="180" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="w2" value="Reminder scheduler → due reminders → send + mark executed" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="fworker">
|
||||
<mxGeometry x="35" y="640" width="180" height="110" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx1" value="Create meeting" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="s1" target="a1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx2" value="INSERT" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="a1" target="p1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx3" value="presigned PUT" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;dashed=1;" edge="1" parent="1" source="s2" target="o1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx4" value="upload complete" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="s2" target="a2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx5" value="INSERT metadata" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="a2" target="p2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx6" value="local only" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;dashed=1;" edge="1" parent="1" source="s3" target="s4">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx7" value="POST transcript" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="s4" target="a3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx8" value="INSERT transcript" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="a3" target="p3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx9" value="enqueue" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="a3" target="w1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx10" value="summary/tasks" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="w1" target="p4">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx11" value="due schedules" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="p4" target="w2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fx12" value="execution status" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="w2" target="p4">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="storage" name="SeaweedFS Storage Layout">
|
||||
<mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="stitle" value="SeaweedFS — S3-Compatible Object Layout" style="text;html=1;align=center;verticalAlign=middle;fontSize=22;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="430" y="20" width="740" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bucket" value="Bucket: meeting-storage" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="620" y="100" width="360" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="userpath" value="users/{user_id}/" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="620" y="280" width="360" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="meetpath" value="meetings/{meeting_id}/" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="620" y="420" width="360" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="orig" value="original/ meeting.webm / meeting.mp4" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="210" y="620" width="250" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="audio" value="audio/ meeting.opus / meeting.wav" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="520" y="620" width="250" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="thumb" value="thumbnails/ cover.jpg" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="830" y="620" width="250" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="attach" value="attachments/ agenda.pdf / files" style="rounded=1;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;fontSize=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1140" y="620" width="250" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="se1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="bucket" target="userpath">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="se2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="userpath" target="meetpath">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e_orig" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="meetpath" target="orig">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e_audio" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="meetpath" target="audio">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e_thumb" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="meetpath" target="thumb">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e_attach" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;fontSize=11;" edge="1" parent="1" source="meetpath" target="attach">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="snote" value="PostgreSQL stores only bucket + object_key + metadata. The video/audio bytes live in SeaweedFS, not PostgreSQL." style="shape=note;whiteSpace=wrap;html=1;size=15;fontSize=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="810" width="600" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
577
Wireframes/Desktop/.$MeetVault_UI_Wireframes_v2.drawio.bkp
Normal file
577
Wireframes/Desktop/.$MeetVault_UI_Wireframes_v2.drawio.bkp
Normal file
@@ -0,0 +1,577 @@
|
||||
<mxfile host="Electron" agent="ChatGPT" pages="7">
|
||||
<diagram id="dashboard" name="1. Dashboard">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="d_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_sidebar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault" vertex="1">
|
||||
<mxGeometry height="860" width="230" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_nav1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="⌂ Dashboard" vertex="1">
|
||||
<mxGeometry height="44" width="180" x="85" y="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_nav2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="◷ Meetings" vertex="1">
|
||||
<mxGeometry height="44" width="180" x="85" y="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_nav3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="⚙ Settings" vertex="1">
|
||||
<mxGeometry height="44" width="180" x="85" y="250" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_user" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Signed in as alex@example.com" vertex="1">
|
||||
<mxGeometry height="70" width="180" x="85" y="800" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Good morning" vertex="1">
|
||||
<mxGeometry height="40" width="420" x="340" y="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_desc" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Record, transcribe, summarize, and follow up on meetings." vertex="1">
|
||||
<mxGeometry height="30" width="560" x="340" y="135" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_start" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="+ Start new meeting" vertex="1">
|
||||
<mxGeometry height="48" width="250" x="1210" y="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="180" width="350" x="340" y="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card1h" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Quick start" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="365" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card1b" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Microphone: Default System&nbsp;<div>audio: On Local STT: Whisper small</div>" vertex="1">
|
||||
<mxGeometry height="80" width="260" x="360" y="290" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card1btn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Start recording" vertex="1">
|
||||
<mxGeometry height="38" width="160" x="365" y="350" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="180" width="350" x="720" y="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card2h" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Live overlay" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="745" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card2b" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Overlay: Enabled&nbsp;<div>Position: Bottom center&nbsp;</div><div>Speaker labels: On</div>" vertex="1">
|
||||
<mxGeometry height="80" width="260" x="745" y="280" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card2btn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Preview overlay" vertex="1">
|
||||
<mxGeometry height="38" width="170" x="745" y="350" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="180" width="360" x="1100" y="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card3h" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Storage" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="1125" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card3b" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="SeaweedFS connected&nbsp;<div>Storage used: 12.8 GB Uploads: healthy</div>" vertex="1">
|
||||
<mxGeometry height="80" width="260" x="1125" y="290" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_storagechip" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Connected" vertex="1">
|
||||
<mxGeometry height="26" width="110" x="1270" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_recenth" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Recent meetings" vertex="1">
|
||||
<mxGeometry height="30" width="220" x="340" y="455" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_table" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="300" width="1120" x="340" y="500" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th0" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Title" vertex="1">
|
||||
<mxGeometry height="28" width="230" x="360" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Date" vertex="1">
|
||||
<mxGeometry height="28" width="140" x="760" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th2" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Duration" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="930" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th3" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Status" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="1090" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th4" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Actions" vertex="1">
|
||||
<mxGeometry height="28" width="140" x="1270" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0t" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="34" width="340" x="360" y="555" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0d" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 27, 2026" vertex="1">
|
||||
<mxGeometry height="34" width="150" x="760" y="555" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0dur" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="48 min" vertex="1">
|
||||
<mxGeometry height="34" width="120" x="930" y="555" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0s" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Ready" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="1090" y="558" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0a" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Open" vertex="1">
|
||||
<mxGeometry height="30" width="90" x="1270" y="557" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1t" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Backend Architecture Review" vertex="1">
|
||||
<mxGeometry height="34" width="340" x="360" y="625" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1d" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 26, 2026" vertex="1">
|
||||
<mxGeometry height="34" width="150" x="760" y="625" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1dur" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="61 min" vertex="1">
|
||||
<mxGeometry height="34" width="120" x="930" y="625" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1s" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Ready" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="1090" y="628" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1a" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Open" vertex="1">
|
||||
<mxGeometry height="30" width="90" x="1270" y="627" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2t" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Client Planning Call" vertex="1">
|
||||
<mxGeometry height="34" width="340" x="360" y="695" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2d" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 25, 2026" vertex="1">
|
||||
<mxGeometry height="34" width="150" x="760" y="695" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2dur" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="35 min" vertex="1">
|
||||
<mxGeometry height="34" width="120" x="930" y="695" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2s" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Processing" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="1090" y="698" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2a" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Open" vertex="1">
|
||||
<mxGeometry height="30" width="90" x="1270" y="697" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="live" name="2. Live Meeting">
|
||||
<mxGraphModel grid="1" page="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="l_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_top" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault • Live Meeting" vertex="1">
|
||||
<mxGeometry height="60" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="40" width="500" x="100" y="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_timer" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fee2e2;strokeColor=#fecaca;fontColor=#991b1b;" value="● REC 00:18:42" vertex="1">
|
||||
<mxGeometry height="40" width="200" x="1260" y="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_left" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="570" width="860" x="100" y="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_transh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Live transcription" vertex="1">
|
||||
<mxGeometry height="30" width="240" x="125" y="235" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Speaker 1" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="125" y="290" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s1txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="We should finalize the upload flow before Friday." vertex="1">
|
||||
<mxGeometry height="42" width="630" x="250" y="285" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Speaker 2" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="125" y="360" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s2txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="I can take the SeaweedFS integration and the presigned URL endpoint." vertex="1">
|
||||
<mxGeometry height="54" width="630" x="250" y="355" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s1b" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Speaker 1" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="125" y="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s1btxt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Great. I will handle the meeting job queue and reminders." vertex="1">
|
||||
<mxGeometry height="54" width="630" x="250" y="430" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_partial" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Speaker 2 • listening…" vertex="1">
|
||||
<mxGeometry height="48" width="760" x="125" y="525" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_wave" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="▁▃▅▆▅▃▂▁▂▅▇▆▃▂▁" vertex="1">
|
||||
<mxGeometry height="40" width="760" x="125" y="600" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_controls" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Pause" vertex="1">
|
||||
<mxGeometry height="40" width="110" x="125" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_overlaybtn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Show overlay" vertex="1">
|
||||
<mxGeometry height="40" width="150" x="250" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_finish" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fee2e2;strokeColor=#fecaca;fontColor=#991b1b;" value="Finish meeting" vertex="1">
|
||||
<mxGeometry height="40" width="160" x="725" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_right" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="570" width="460" x="1000" y="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_speakersh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Speakers" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="1025" y="235" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_sp1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Speaker 1" vertex="1">
|
||||
<mxGeometry height="40" width="260" x="1025" y="285" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_rename1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Rename" vertex="1">
|
||||
<mxGeometry height="40" width="110" x="1300" y="285" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_sp2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Speaker 2" vertex="1">
|
||||
<mxGeometry height="40" width="260" x="1025" y="345" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_rename2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Rename" vertex="1">
|
||||
<mxGeometry height="40" width="110" x="1300" y="345" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_audioh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Audio sources" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="1025" y="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_mic" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Microphone" vertex="1">
|
||||
<mxGeometry height="38" width="180" x="1025" y="480" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_sys" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ System audio" vertex="1">
|
||||
<mxGeometry height="38" width="190" x="1220" y="480" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_stth" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Local transcription" vertex="1">
|
||||
<mxGeometry height="30" width="220" x="1025" y="555" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_stt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Whisper small Device: GPU Latency: ~1.2 s" vertex="1">
|
||||
<mxGeometry height="90" width="260" x="1025" y="595" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_sttchip" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Healthy" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="1300" y="610" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="overlay" name="3. Live Overlay">
|
||||
<mxGraphModel grid="1" page="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="o_bg" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Desktop / meeting app background" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_fakeapp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Video conference / presentation area" vertex="1">
|
||||
<mxGeometry height="600" width="1100" x="250" y="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_toolbar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault overlay controls" vertex="1">
|
||||
<mxGeometry height="42" width="320" x="1030" y="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_box" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#111827;strokeColor=#374151;fontColor=#ffffff;opacity=92;" vertex="1">
|
||||
<mxGeometry height="190" width="820" x="390" y="590" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_sp1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=14;fontStyle=1;fontColor=#93c5fd;" value="Alice" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="425" y="620" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_txt1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=20;fontColor=#ffffff;" value="We should finalize the API contract before tomorrow." vertex="1">
|
||||
<mxGeometry height="40" width="720" x="425" y="650" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_sp2" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=14;fontStyle=1;fontColor=#86efac;" value="Bob" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="425" y="700" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_txt2" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=20;fontColor=#ffffff;" value="I will update the database migration tonight." vertex="1">
|
||||
<mxGeometry height="40" width="720" x="425" y="730" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_hint" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Overlay options: drag • resize • opacity • font size • click-through • show/hide speaker labels" vertex="1">
|
||||
<mxGeometry height="30" width="820" x="390" y="805" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="6jg8ZA6zPTfZGke1Gjl6-1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=20;fontColor=#ffffff;" value="<font style="font-size: 11px;">Click the speaker's name to rename</font>" vertex="1">
|
||||
<mxGeometry height="40" width="720" x="410" y="580" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="speaker" name="4. Rename Speakers">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="s_bg" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Live meeting screen (dimmed)" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_modal" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="600" width="660" x="470" y="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Rename speakers" vertex="1">
|
||||
<mxGeometry height="40" width="300" x="510" y="200" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_desc" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Speaker labels are local to this meeting. Rename them anytime during the session." vertex="1">
|
||||
<mxGeometry height="40" width="520" x="510" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_card1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1">
|
||||
<mxGeometry height="120" width="580" x="510" y="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_label1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Speaker 1" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="535" y="342" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_input1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Alice" vertex="1">
|
||||
<mxGeometry height="42" width="360" x="535" y="382" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_save1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Save" vertex="1">
|
||||
<mxGeometry height="42" width="120" x="915" y="382" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_card2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1">
|
||||
<mxGeometry height="120" width="580" x="510" y="470" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_label2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Speaker 2" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="535" y="492" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_input2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Bob" vertex="1">
|
||||
<mxGeometry height="42" width="360" x="535" y="532" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_save2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Save" vertex="1">
|
||||
<mxGeometry height="42" width="120" x="915" y="532" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_note" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Tip: if diarization temporarily swaps speakers, you can reassign the latest segment from the transcript view." vertex="1">
|
||||
<mxGeometry height="60" width="540" x="510" y="630" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_close" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Close" vertex="1">
|
||||
<mxGeometry height="42" width="150" x="900" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="review" name="6. Meeting Review">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="r_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_top" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault / Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="60" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="40" width="500" x="100" y="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_meta" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 27, 2026 • 48 min • 2 speakers" vertex="1">
|
||||
<mxGeometry height="30" width="420" x="100" y="185" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_player" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Video / audio player 00:18:42 / 00:48:05" vertex="1">
|
||||
<mxGeometry height="220" width="700" x="100" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_trans" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Transcript" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="100" y="510" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_tbox" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Alice 00:18:41 We should finalize the API contract before tomorrow. Bob 00:18:49 I will update the database migration tonight. Alice 00:19:02 Perfect, then I'll prepare the release notes." vertex="1">
|
||||
<mxGeometry height="260" width="700" x="100" y="550" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_sumh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Summary" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="850" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_sum" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="The team agreed to finalize the API contract before tomorrow. Bob will update the database migration tonight, while Alice prepares the release notes." vertex="1">
|
||||
<mxGeometry height="140" width="590" x="850" y="280" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_taskh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Action items" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="850" y="465" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_task1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="☐ Update database migration Bob • Due tonight" vertex="1">
|
||||
<mxGeometry height="70" width="590" x="850" y="505" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_task2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="☐ Prepare release notes Alice • Due tomorrow" vertex="1">
|
||||
<mxGeometry height="70" width="590" x="850" y="590" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_rem" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Create reminder" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="850" y="705" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_export" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Export transcript" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="1050" y="705" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9EBs0guQWN_vwKdUdXgs-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Change speaker's name" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="420" y="505" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9EBs0guQWN_vwKdUdXgs-4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Copy transcript" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="620" y="505" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="meeting_details" name="7. Meeting Details">
|
||||
<mxGraphModel grid="1" page="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="md_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" value="" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_top" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault / Meetings / Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="60" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_back" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="← Back to meetings" vertex="1">
|
||||
<mxGeometry height="38" width="160" x="100" y="135" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="42" width="500" x="100" y="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_meta" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 27, 2026 • 48 min • 2 detected speakers • Ready" vertex="1">
|
||||
<mxGeometry height="30" width="520" x="100" y="235" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_edit" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Edit details" vertex="1">
|
||||
<mxGeometry height="40" width="120" x="1180" y="185" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_delete" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fee2e2;strokeColor=#fecaca;fontColor=#991b1b;" value="Delete" vertex="1">
|
||||
<mxGeometry height="40" width="110" x="1320" y="185" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_player" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Video / Audio Player ▶ 00:18:42 ━━━━━━━━━━━━━━━━━━━ 00:48:05 Volume • Speed 1.0x • Full screen" vertex="1">
|
||||
<mxGeometry height="230" width="760" x="100" y="300" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_info" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Meeting information" vertex="1">
|
||||
<mxGeometry height="30" width="220" x="910" y="300" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_info_box" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Title Weekly Product Sync Started Sep 27, 2026 09:00 Ended Sep 27, 2026 09:48 Language English Status Ready" vertex="1">
|
||||
<mxGeometry height="190" width="520" x="910" y="340" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_tabs" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Transcript Summary Action items Files" vertex="1">
|
||||
<mxGeometry height="42" width="1330" x="100" y="575" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_transcript" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Transcript" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="100" y="640" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_search" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Search transcript..." vertex="1">
|
||||
<mxGeometry height="38" width="300" x="1030" y="635" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_export" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Export" vertex="1">
|
||||
<mxGeometry height="38" width="85" x="1345" y="635" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Alice 00:18:41" vertex="1">
|
||||
<mxGeometry height="28" width="150" x="100" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t1txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="We should finalize the API contract before tomorrow." vertex="1">
|
||||
<mxGeometry height="38" width="690" x="270" y="686" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Bob 00:18:49" vertex="1">
|
||||
<mxGeometry height="28" width="150" x="100" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t2txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="I will update the database migration tonight." vertex="1">
|
||||
<mxGeometry height="38" width="690" x="270" y="736" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Alice 00:19:02" vertex="1">
|
||||
<mxGeometry height="28" width="150" x="100" y="790" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t3txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Perfect. I'll prepare the release notes after that." vertex="1">
|
||||
<mxGeometry height="38" width="690" x="270" y="786" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_rightsum" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Generated summary" vertex="1">
|
||||
<mxGeometry height="30" width="190" x="1010" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_summary" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="The team agreed to finalize the API contract before tomorrow. Bob will update the database migration, while Alice prepares release notes." vertex="1">
|
||||
<mxGeometry height="95" width="420" x="1010" y="730" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_regen" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Regenerate summary" vertex="1">
|
||||
<mxGeometry height="38" width="170" x="1010" y="845" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_reminder" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Create reminder" vertex="1">
|
||||
<mxGeometry height="38" width="150" x="1195" y="845" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="4IYnDq8jVSWbccKvp8l8-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Copy" vertex="1">
|
||||
<mxGeometry height="38" width="170" x="140" y="850" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="4IYnDq8jVSWbccKvp8l8-4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Change speaker name" vertex="1">
|
||||
<mxGeometry height="38" width="150" x="325" y="850" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="settings_full" name="8. Settings - Full">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="sf_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" value="" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_sidebar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault Settings" vertex="1">
|
||||
<mxGeometry height="860" width="250" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="General" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="150" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Audio" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="205" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Transcription" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="260" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Overlay" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="315" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav5" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Storage & Sync" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="370" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav6" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Account" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="425" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Settings" vertex="1">
|
||||
<mxGeometry height="40" width="300" x="360" y="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_desc" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Configure MeetVault desktop behavior and local transcription." vertex="1">
|
||||
<mxGeometry height="30" width="620" x="360" y="135" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_general" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="General" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="360" y="200" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_card1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="" vertex="1">
|
||||
<mxGeometry height="150" width="1070" x="360" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_launch" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Launch MeetVault at startup" vertex="1">
|
||||
<mxGeometry height="38" width="320" x="400" y="270" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_tray" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Keep running in system tray" vertex="1">
|
||||
<mxGeometry height="38" width="320" x="400" y="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_hotkey_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Global hotkey" vertex="1">
|
||||
<mxGeometry height="28" width="150" x="780" y="270" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_hotkey" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Ctrl + Shift + M" vertex="1">
|
||||
<mxGeometry height="42" width="260" x="780" y="305" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_theme_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Theme" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="1090" y="270" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_theme" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="System default ▼" vertex="1">
|
||||
<mxGeometry height="42" width="260" x="1090" y="305" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_audio" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Audio" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="360" y="430" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_card2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="" vertex="1">
|
||||
<mxGeometry height="160" width="1070" x="360" y="470" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_mic_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Microphone" vertex="1">
|
||||
<mxGeometry height="28" width="160" x="400" y="500" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_mic" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Default microphone ▼" vertex="1">
|
||||
<mxGeometry height="42" width="300" x="400" y="535" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_sys_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="System audio" vertex="1">
|
||||
<mxGeometry height="28" width="160" x="760" y="500" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_sys" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Default output ▼" vertex="1">
|
||||
<mxGeometry height="42" width="300" x="760" y="535" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_monitor" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Monitor microphone level" vertex="1">
|
||||
<mxGeometry height="42" width="250" x="1110" y="535" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_trans" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Transcription" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="360" y="675" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_card3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="" vertex="1">
|
||||
<mxGeometry height="150" width="1070" x="360" y="715" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_model_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Model" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="400" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_model" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Whisper small ▼" vertex="1">
|
||||
<mxGeometry height="42" width="260" x="400" y="775" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_device_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Compute" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="700" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_device" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="GPU ▼" vertex="1">
|
||||
<mxGeometry height="42" width="220" x="700" y="775" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_lang_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Language" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="960" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_lang" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Auto detect ▼" vertex="1">
|
||||
<mxGeometry height="42" width="220" x="960" y="775" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_diar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Speaker diarization" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="1210" y="775" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_save" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Save changes" vertex="1">
|
||||
<mxGeometry height="40" width="150" x="1240" y="875" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
BIN
Wireframes/Desktop/MeetVault-Desktop-Demo.7z
Normal file
BIN
Wireframes/Desktop/MeetVault-Desktop-Demo.7z
Normal file
Binary file not shown.
1049
Wireframes/Desktop/MeetVault_Desktop_README.md
Normal file
1049
Wireframes/Desktop/MeetVault_Desktop_README.md
Normal file
File diff suppressed because it is too large
Load Diff
568
Wireframes/Desktop/MeetVault_UI_Wireframes_v2.drawio
Normal file
568
Wireframes/Desktop/MeetVault_UI_Wireframes_v2.drawio
Normal file
@@ -0,0 +1,568 @@
|
||||
<mxfile host="Electron" agent="ChatGPT" pages="7">
|
||||
<diagram id="dashboard" name="1. Dashboard">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="d_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_sidebar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault" vertex="1">
|
||||
<mxGeometry height="860" width="230" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_nav1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="⌂ Dashboard" vertex="1">
|
||||
<mxGeometry height="44" width="180" x="85" y="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_nav2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="◷ Meetings" vertex="1">
|
||||
<mxGeometry height="44" width="180" x="85" y="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_nav3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="⚙ Settings" vertex="1">
|
||||
<mxGeometry height="44" width="180" x="85" y="250" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_user" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Signed in as alex@example.com" vertex="1">
|
||||
<mxGeometry height="70" width="180" x="85" y="800" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Good morning" vertex="1">
|
||||
<mxGeometry height="40" width="420" x="340" y="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_desc" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Record, transcribe, summarize, and follow up on meetings." vertex="1">
|
||||
<mxGeometry height="30" width="560" x="340" y="135" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_start" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="+ Start new meeting" vertex="1">
|
||||
<mxGeometry height="48" width="250" x="1210" y="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="180" width="350" x="340" y="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card1h" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Quick start" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="365" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card1b" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Microphone: Default System&nbsp;<div>audio: On Local STT: Whisper small</div>" vertex="1">
|
||||
<mxGeometry height="80" width="260" x="360" y="290" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card1btn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Start recording" vertex="1">
|
||||
<mxGeometry height="38" width="160" x="365" y="350" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="180" width="350" x="720" y="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card2h" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Live overlay" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="745" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card2b" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Overlay: Enabled&nbsp;<div>Position: Bottom center&nbsp;</div><div>Speaker labels: On</div>" vertex="1">
|
||||
<mxGeometry height="80" width="260" x="745" y="280" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card2btn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Preview overlay" vertex="1">
|
||||
<mxGeometry height="38" width="170" x="745" y="350" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="180" width="360" x="1100" y="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card3h" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Storage" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="1125" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_card3b" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="SeaweedFS connected&nbsp;<div>Storage used: 12.8 GB Uploads: healthy</div>" vertex="1">
|
||||
<mxGeometry height="80" width="260" x="1125" y="290" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_storagechip" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Connected" vertex="1">
|
||||
<mxGeometry height="26" width="110" x="1270" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_recenth" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Recent meetings" vertex="1">
|
||||
<mxGeometry height="30" width="220" x="340" y="455" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_table" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="300" width="1120" x="340" y="500" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th0" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Title" vertex="1">
|
||||
<mxGeometry height="28" width="230" x="360" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Date" vertex="1">
|
||||
<mxGeometry height="28" width="140" x="760" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th2" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Duration" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="930" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th3" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Status" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="1090" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_th4" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Actions" vertex="1">
|
||||
<mxGeometry height="28" width="140" x="1270" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0t" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="34" width="340" x="360" y="555" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0d" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 27, 2026" vertex="1">
|
||||
<mxGeometry height="34" width="150" x="760" y="555" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0dur" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="48 min" vertex="1">
|
||||
<mxGeometry height="34" width="120" x="930" y="555" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0s" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Ready" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="1090" y="558" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r0a" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Open" vertex="1">
|
||||
<mxGeometry height="30" width="90" x="1270" y="557" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1t" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Backend Architecture Review" vertex="1">
|
||||
<mxGeometry height="34" width="340" x="360" y="625" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1d" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 26, 2026" vertex="1">
|
||||
<mxGeometry height="34" width="150" x="760" y="625" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1dur" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="61 min" vertex="1">
|
||||
<mxGeometry height="34" width="120" x="930" y="625" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1s" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Ready" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="1090" y="628" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r1a" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Open" vertex="1">
|
||||
<mxGeometry height="30" width="90" x="1270" y="627" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2t" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Client Planning Call" vertex="1">
|
||||
<mxGeometry height="34" width="340" x="360" y="695" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2d" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 25, 2026" vertex="1">
|
||||
<mxGeometry height="34" width="150" x="760" y="695" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2dur" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="35 min" vertex="1">
|
||||
<mxGeometry height="34" width="120" x="930" y="695" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2s" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Processing" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="1090" y="698" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="d_r2a" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Open" vertex="1">
|
||||
<mxGeometry height="30" width="90" x="1270" y="697" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="live" name="2. Live Meeting">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="l_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="40" width="500" x="100" y="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_timer" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fee2e2;strokeColor=#fecaca;fontColor=#991b1b;" value="● REC 00:18:42" vertex="1">
|
||||
<mxGeometry height="40" width="200" x="1260" y="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_left" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="570" width="860" x="100" y="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_transh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Live transcription" vertex="1">
|
||||
<mxGeometry height="30" width="240" x="125" y="235" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Speaker 1" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="125" y="290" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s1txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="We should finalize the upload flow before Friday." vertex="1">
|
||||
<mxGeometry height="42" width="630" x="250" y="285" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Speaker 2" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="125" y="360" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s2txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="I can take the SeaweedFS integration and the presigned URL endpoint." vertex="1">
|
||||
<mxGeometry height="54" width="630" x="250" y="355" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s1b" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Speaker 1" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="125" y="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_s1btxt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Great. I will handle the meeting job queue and reminders." vertex="1">
|
||||
<mxGeometry height="54" width="630" x="250" y="430" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_partial" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Speaker 2 • listening…" vertex="1">
|
||||
<mxGeometry height="48" width="760" x="125" y="525" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_wave" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="▁▃▅▆▅▃▂▁▂▅▇▆▃▂▁" vertex="1">
|
||||
<mxGeometry height="40" width="760" x="125" y="600" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_controls" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Pause" vertex="1">
|
||||
<mxGeometry height="40" width="110" x="125" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_overlaybtn" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Show overlay" vertex="1">
|
||||
<mxGeometry height="40" width="150" x="250" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_finish" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fee2e2;strokeColor=#fecaca;fontColor=#991b1b;" value="Finish meeting" vertex="1">
|
||||
<mxGeometry height="40" width="160" x="725" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_right" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="570" width="460" x="1000" y="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_speakersh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Speakers" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="1025" y="235" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_sp1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Speaker 1" vertex="1">
|
||||
<mxGeometry height="40" width="260" x="1025" y="285" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_rename1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Rename" vertex="1">
|
||||
<mxGeometry height="40" width="110" x="1300" y="285" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_sp2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Speaker 2" vertex="1">
|
||||
<mxGeometry height="40" width="260" x="1025" y="345" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_rename2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Rename" vertex="1">
|
||||
<mxGeometry height="40" width="110" x="1300" y="345" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_audioh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Audio sources" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="1025" y="435" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_mic" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Microphone" vertex="1">
|
||||
<mxGeometry height="38" width="180" x="1025" y="480" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_sys" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ System audio" vertex="1">
|
||||
<mxGeometry height="38" width="190" x="1220" y="480" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_stth" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Local transcription" vertex="1">
|
||||
<mxGeometry height="30" width="220" x="1025" y="555" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_stt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Whisper small Device: GPU Latency: ~1.2 s" vertex="1">
|
||||
<mxGeometry height="90" width="260" x="1025" y="595" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l_sttchip" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Healthy" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="1300" y="610" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="overlay" name="3. Live Overlay">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="o_bg" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Desktop / meeting app background" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_fakeapp" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Video conference / presentation area" vertex="1">
|
||||
<mxGeometry height="600" width="1100" x="250" y="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_toolbar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault overlay controls" vertex="1">
|
||||
<mxGeometry height="42" width="320" x="1030" y="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_box" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#111827;strokeColor=#374151;fontColor=#ffffff;opacity=92;" vertex="1">
|
||||
<mxGeometry height="190" width="820" x="390" y="590" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_sp1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=14;fontStyle=1;fontColor=#93c5fd;" value="Alice" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="425" y="620" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_txt1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=20;fontColor=#ffffff;" value="We should finalize the API contract before tomorrow." vertex="1">
|
||||
<mxGeometry height="40" width="720" x="425" y="650" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_sp2" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=14;fontStyle=1;fontColor=#86efac;" value="Bob" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="425" y="700" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_txt2" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=20;fontColor=#ffffff;" value="I will update the database migration tonight." vertex="1">
|
||||
<mxGeometry height="40" width="720" x="425" y="730" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o_hint" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Overlay options: drag • resize • opacity • font size • click-through • show/hide speaker labels" vertex="1">
|
||||
<mxGeometry height="30" width="820" x="390" y="805" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="6jg8ZA6zPTfZGke1Gjl6-1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=20;fontColor=#ffffff;" value="<font style="font-size: 11px;">Click the speaker's name to rename</font>" vertex="1">
|
||||
<mxGeometry height="40" width="720" x="410" y="580" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="speaker" name="4. Rename Speakers">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="s_bg" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Live meeting screen (dimmed)" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_modal" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1">
|
||||
<mxGeometry height="600" width="660" x="470" y="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Rename speakers" vertex="1">
|
||||
<mxGeometry height="40" width="300" x="510" y="200" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_desc" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Speaker labels are local to this meeting. Rename them anytime during the session." vertex="1">
|
||||
<mxGeometry height="40" width="520" x="510" y="245" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_card1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1">
|
||||
<mxGeometry height="120" width="580" x="510" y="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_label1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Speaker 1" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="535" y="342" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_input1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Alice" vertex="1">
|
||||
<mxGeometry height="42" width="360" x="535" y="382" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_save1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Save" vertex="1">
|
||||
<mxGeometry height="42" width="120" x="915" y="382" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_card2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1">
|
||||
<mxGeometry height="120" width="580" x="510" y="470" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_label2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Speaker 2" vertex="1">
|
||||
<mxGeometry height="28" width="110" x="535" y="492" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_input2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Bob" vertex="1">
|
||||
<mxGeometry height="42" width="360" x="535" y="532" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_save2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Save" vertex="1">
|
||||
<mxGeometry height="42" width="120" x="915" y="532" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_note" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Tip: if diarization temporarily swaps speakers, you can reassign the latest segment from the transcript view." vertex="1">
|
||||
<mxGeometry height="60" width="540" x="510" y="630" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="s_close" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Close" vertex="1">
|
||||
<mxGeometry height="42" width="150" x="900" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="review" name="6. Meeting Review">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="r_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="40" width="500" x="100" y="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_meta" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 27, 2026 • 48 min • 2 speakers" vertex="1">
|
||||
<mxGeometry height="30" width="420" x="100" y="185" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_player" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Video / audio player 00:18:42 / 00:48:05" vertex="1">
|
||||
<mxGeometry height="220" width="700" x="100" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_trans" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Transcript" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="100" y="510" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_tbox" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Alice 00:18:41 We should finalize the API contract before tomorrow. Bob 00:18:49 I will update the database migration tonight. Alice 00:19:02 Perfect, then I'll prepare the release notes." vertex="1">
|
||||
<mxGeometry height="260" width="700" x="100" y="550" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_sumh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Summary" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="850" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_sum" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="The team agreed to finalize the API contract before tomorrow. Bob will update the database migration tonight, while Alice prepares the release notes." vertex="1">
|
||||
<mxGeometry height="140" width="590" x="850" y="280" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_taskh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Action items" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="850" y="465" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_task1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="☐ Update database migration Bob • Due tonight" vertex="1">
|
||||
<mxGeometry height="70" width="590" x="850" y="505" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_task2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="☐ Prepare release notes Alice • Due tomorrow" vertex="1">
|
||||
<mxGeometry height="70" width="590" x="850" y="590" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_rem" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Create reminder" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="850" y="705" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r_export" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Export transcript" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="1050" y="705" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9EBs0guQWN_vwKdUdXgs-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Change speaker's name" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="420" y="505" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9EBs0guQWN_vwKdUdXgs-4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Copy transcript" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="620" y="505" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="meeting_details" name="7. Meeting Details">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="md_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" value="" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_back" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="← Back to meetings" vertex="1">
|
||||
<mxGeometry height="38" width="160" x="100" y="135" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="42" width="500" x="100" y="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_meta" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Sep 27, 2026 • 48 min • 2 detected speakers • Ready" vertex="1">
|
||||
<mxGeometry height="30" width="520" x="100" y="235" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_edit" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Edit details" vertex="1">
|
||||
<mxGeometry height="40" width="120" x="1180" y="185" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_delete" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fee2e2;strokeColor=#fecaca;fontColor=#991b1b;" value="Delete" vertex="1">
|
||||
<mxGeometry height="40" width="110" x="1320" y="185" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_player" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Video / Audio Player ▶ 00:18:42 ━━━━━━━━━━━━━━━━━━━ 00:48:05 Volume • Speed 1.0x • Full screen" vertex="1">
|
||||
<mxGeometry height="230" width="760" x="100" y="300" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_info" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Meeting information" vertex="1">
|
||||
<mxGeometry height="30" width="220" x="910" y="300" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_info_box" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Title Weekly Product Sync Started Sep 27, 2026 09:00 Ended Sep 27, 2026 09:48 Language English Status Ready" vertex="1">
|
||||
<mxGeometry height="190" width="520" x="910" y="340" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_tabs" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Transcript Summary Action items Files" vertex="1">
|
||||
<mxGeometry height="42" width="1330" x="100" y="575" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_transcript" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Transcript" vertex="1">
|
||||
<mxGeometry height="30" width="200" x="100" y="640" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_search" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Search transcript..." vertex="1">
|
||||
<mxGeometry height="38" width="300" x="1030" y="635" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_export" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Export" vertex="1">
|
||||
<mxGeometry height="38" width="85" x="1345" y="635" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Alice 00:18:41" vertex="1">
|
||||
<mxGeometry height="28" width="150" x="100" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t1txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="We should finalize the API contract before tomorrow." vertex="1">
|
||||
<mxGeometry height="38" width="690" x="270" y="686" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Bob 00:18:49" vertex="1">
|
||||
<mxGeometry height="28" width="150" x="100" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t2txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="I will update the database migration tonight." vertex="1">
|
||||
<mxGeometry height="38" width="690" x="270" y="736" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Alice 00:19:02" vertex="1">
|
||||
<mxGeometry height="28" width="150" x="100" y="790" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_t3txt" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Perfect. I'll prepare the release notes after that." vertex="1">
|
||||
<mxGeometry height="38" width="690" x="270" y="786" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_rightsum" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Generated summary" vertex="1">
|
||||
<mxGeometry height="30" width="190" x="1010" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_summary" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="The team agreed to finalize the API contract before tomorrow. Bob will update the database migration, while Alice prepares release notes." vertex="1">
|
||||
<mxGeometry height="95" width="420" x="1010" y="730" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_regen" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Regenerate summary" vertex="1">
|
||||
<mxGeometry height="38" width="170" x="1010" y="845" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="md_reminder" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Create reminder" vertex="1">
|
||||
<mxGeometry height="38" width="150" x="1195" y="845" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="4IYnDq8jVSWbccKvp8l8-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Copy" vertex="1">
|
||||
<mxGeometry height="38" width="170" x="140" y="850" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="4IYnDq8jVSWbccKvp8l8-4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Change speaker name" vertex="1">
|
||||
<mxGeometry height="38" width="150" x="325" y="850" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="settings_full" name="8. Settings - Full">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="sf_frame" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" value="" vertex="1">
|
||||
<mxGeometry height="860" width="1480" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_sidebar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="MeetVault Settings" vertex="1">
|
||||
<mxGeometry height="860" width="250" x="60" y="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="General" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="150" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Audio" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="205" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Transcription" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="260" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Overlay" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="315" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav5" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Storage & Sync" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="370" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_nav6" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#20242b;strokeColor=#20242b;fontColor=#ffffff;" value="Account" vertex="1">
|
||||
<mxGeometry height="42" width="190" x="85" y="425" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Settings" vertex="1">
|
||||
<mxGeometry height="40" width="300" x="360" y="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_desc" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Configure MeetVault desktop behavior and local transcription." vertex="1">
|
||||
<mxGeometry height="30" width="620" x="360" y="135" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_general" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="General" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="360" y="200" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_card1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="" vertex="1">
|
||||
<mxGeometry height="150" width="1070" x="360" y="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_launch" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Launch MeetVault at startup" vertex="1">
|
||||
<mxGeometry height="38" width="320" x="400" y="270" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_tray" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Keep running in system tray" vertex="1">
|
||||
<mxGeometry height="38" width="320" x="400" y="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_hotkey_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Global hotkey" vertex="1">
|
||||
<mxGeometry height="28" width="150" x="780" y="270" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_hotkey" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Ctrl + Shift + M" vertex="1">
|
||||
<mxGeometry height="42" width="260" x="780" y="305" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_theme_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Theme" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="1090" y="270" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_theme" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="System default ▼" vertex="1">
|
||||
<mxGeometry height="42" width="260" x="1090" y="305" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_audio" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Audio" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="360" y="430" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_card2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="" vertex="1">
|
||||
<mxGeometry height="160" width="1070" x="360" y="470" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_mic_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Microphone" vertex="1">
|
||||
<mxGeometry height="28" width="160" x="400" y="500" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_mic" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Default microphone ▼" vertex="1">
|
||||
<mxGeometry height="42" width="300" x="400" y="535" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_sys_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="System audio" vertex="1">
|
||||
<mxGeometry height="28" width="160" x="760" y="500" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_sys" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Default output ▼" vertex="1">
|
||||
<mxGeometry height="42" width="300" x="760" y="535" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_monitor" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Monitor microphone level" vertex="1">
|
||||
<mxGeometry height="42" width="250" x="1110" y="535" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_trans" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Transcription" vertex="1">
|
||||
<mxGeometry height="30" width="180" x="360" y="675" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_card3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="" vertex="1">
|
||||
<mxGeometry height="150" width="1070" x="360" y="715" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_model_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Model" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="400" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_model" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Whisper small ▼" vertex="1">
|
||||
<mxGeometry height="42" width="260" x="400" y="775" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_device_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Compute" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="700" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_device" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="GPU ▼" vertex="1">
|
||||
<mxGeometry height="42" width="220" x="700" y="775" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_lang_lbl" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=12;fontColor=#6b7280;" value="Language" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="960" y="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_lang" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Auto detect ▼" vertex="1">
|
||||
<mxGeometry height="42" width="220" x="960" y="775" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_diar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Speaker diarization" vertex="1">
|
||||
<mxGeometry height="42" width="180" x="1210" y="775" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sf_save" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Save changes" vertex="1">
|
||||
<mxGeometry height="40" width="150" x="1240" y="875" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
File diff suppressed because one or more lines are too long
16
Wireframes/Mobile/MeetVault_Android_UI_Modern_v2.drawio
Normal file
16
Wireframes/Mobile/MeetVault_Android_UI_Modern_v2.drawio
Normal file
File diff suppressed because one or more lines are too long
455
Wireframes/Mobile/MeetVault_Android_UI_Wireframes.drawio
Normal file
455
Wireframes/Mobile/MeetVault_Android_UI_Wireframes.drawio
Normal file
@@ -0,0 +1,455 @@
|
||||
<mxfile host="Electron" agent="ChatGPT" pages="9">
|
||||
<diagram id="android_home" name="1. Home">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="ah_bg" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" value="" vertex="1">
|
||||
<mxGeometry height="900" width="1520" x="40" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ah_phone" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#111827;strokeWidth=2;" value="" vertex="1">
|
||||
<mxGeometry height="840" width="430" x="540" y="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ah_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Good evening" vertex="1">
|
||||
<mxGeometry height="36" width="250" x="575" y="145" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ah_desc" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="Record, transcribe and review meetings." vertex="1">
|
||||
<mxGeometry height="28" width="310" x="575" y="185" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ah_start" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="+ Start Meeting" vertex="1">
|
||||
<mxGeometry height="52" width="360" x="575" y="235" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ah_statush" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Status" vertex="1">
|
||||
<mxGeometry height="28" width="120" x="575" y="330" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ah_model" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Whisper base" vertex="1">
|
||||
<mxGeometry height="42" width="170" x="575" y="370" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ah_overlay" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Overlay granted" vertex="1">
|
||||
<mxGeometry height="42" width="175" x="760" y="370" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ah_recent" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Recent meetings" vertex="1">
|
||||
<mxGeometry height="28" width="200" x="575" y="445" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ah_r1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Weekly Product Sync Today • 48 min • Ready" vertex="1">
|
||||
<mxGeometry height="72" width="360" x="575" y="490" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ah_r2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Backend Architecture Review Yesterday • 61 min • Ready" vertex="1">
|
||||
<mxGeometry height="72" width="360" x="575" y="575" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ah_r3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Client Planning Call Sep 25 • 35 min • Processing" vertex="1">
|
||||
<mxGeometry height="72" width="360" x="575" y="660" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ah_nav" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="Home Meetings Settings" vertex="1">
|
||||
<mxGeometry height="50" width="360" x="575" y="805" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="android_start" name="2. Start Meeting">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="as_bg" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" value="" vertex="1">
|
||||
<mxGeometry height="900" width="1520" x="40" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_phone" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#111827;strokeWidth=2;" value="" vertex="1">
|
||||
<mxGeometry height="840" width="430" x="540" y="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_top" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#111827;strokeColor=#111827;fontColor=#ffffff;" value="← Start Meeting" vertex="1">
|
||||
<mxGeometry height="58" width="430" x="540" y="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Meeting setup" vertex="1">
|
||||
<mxGeometry height="36" width="250" x="575" y="135" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_lbl1" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=11;fontColor=#6b7280;" value="Meeting title" vertex="1">
|
||||
<mxGeometry height="24" width="130" x="575" y="185" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_titlein" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" value="Weekly Product Sync" vertex="1">
|
||||
<mxGeometry height="46" width="360" x="575" y="215" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_audioh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Audio" vertex="1">
|
||||
<mxGeometry height="28" width="100" x="575" y="290" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_mic" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Microphone Default mic ▼" vertex="1">
|
||||
<mxGeometry height="48" width="360" x="575" y="330" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_playback" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Playback audio Optional / supported only" vertex="1">
|
||||
<mxGeometry height="48" width="360" x="575" y="390" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_transh" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" value="Transcription" vertex="1">
|
||||
<mxGeometry height="28" width="140" x="575" y="465" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_model" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Model Whisper base ▼" vertex="1">
|
||||
<mxGeometry height="48" width="360" x="575" y="505" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_lang" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Language Auto detect ▼" vertex="1">
|
||||
<mxGeometry height="48" width="360" x="575" y="565" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_diar" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Speaker diarization" vertex="1">
|
||||
<mxGeometry height="42" width="175" x="575" y="625" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_ol" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" value="✓ Live overlay" vertex="1">
|
||||
<mxGeometry height="42" width="175" x="760" y="625" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_perm" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Mic ✓ Notifications ✓ Overlay ✓" vertex="1">
|
||||
<mxGeometry height="40" width="360" x="575" y="690" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="as_go" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Start Meeting" vertex="1">
|
||||
<mxGeometry height="52" width="360" x="575" y="760" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="android_live" name="3. Live Meeting">
|
||||
<mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="al_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="30" width="1520" height="900" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_phone" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#111827;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="55" width="430" height="840" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_top" value="Weekly Product Sync" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#111827;strokeColor=#111827;fontColor=#ffffff;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="55" width="430" height="58" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_rec" value="● REC 00:18:42" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fee2e2;strokeColor=#fecaca;fontColor=#991b1b;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="135" width="160" height="38" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_overlay" value="Overlay ON" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="135" width="175" height="38" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_transh" value="Live transcript" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="205" width="170" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_s1" value="Alice" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="250" width="90" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_t1" value="We should finalize the API contract before tomorrow." style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="244" width="250" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_s2" value="Bob" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="320" width="90" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_t2" value="I'll update the database migration tonight." style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="314" width="250" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_s3" value="Speaker 3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="390" width="90" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_t3" value="Can we move the deadline to Friday?" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="384" width="250" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_partial" value="Speaker 2 • listening… We also need to check the…" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="465" width="360" height="62" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_levels" value="Mic ▂▅▇▆▃ ASR Healthy Diarization Healthy" style="text;html=1;align=left;verticalAlign=middle;fontSize=11;fontColor=#6b7280;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="555" width="360" height="35" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_speakers" value="Speakers" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="615" width="120" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_sp1" value="Alice Rename" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="650" width="170" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_sp2" value="Bob Rename" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="765" y="650" width="170" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_pause" value="Pause" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="735" width="105" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_olbtn" value="Overlay" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" vertex="1" parent="1">
|
||||
<mxGeometry x="690" y="735" width="105" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="al_finish" value="Finish" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fee2e2;strokeColor=#fecaca;fontColor=#991b1b;" vertex="1" parent="1">
|
||||
<mxGeometry x="805" y="735" width="130" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="android_overlay" name="4. Realtime Overlay">
|
||||
<mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="ao_bg" value="Other application / video meeting" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="70" width="1440" height="800" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ao_fake" value="Video call / presentation content" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="140" width="960" height="560" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ao_bubble" value="MV" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1310" y="160" width="52" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ao_overlay" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#111827;strokeColor=#374151;fontColor=#ffffff;opacity=92;" vertex="1" parent="1">
|
||||
<mxGeometry x="460" y="590" width="680" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ao_n1" value="Alice" style="text;html=1;align=left;fontStyle=1;fontSize=14;fontColor=#93c5fd;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="615" width="100" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ao_t1" value="We should finalize the API contract before tomorrow." style="text;html=1;align=left;fontSize=19;fontColor=#ffffff;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="645" width="600" height="42" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ao_n2" value="Bob" style="text;html=1;align=left;fontStyle=1;fontSize=14;fontColor=#86efac;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="695" width="100" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ao_t2" value="I'll update the migration tonight." style="text;html=1;align=left;fontSize=19;fontColor=#ffffff;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="725" width="600" height="38" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ao_note" value="Drag • collapse • reopen app • close overlay" style="text;html=1;align=left;verticalAlign=middle;fontSize=11;fontColor=#6b7280;" vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="795" width="640" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="android_rename" name="5. Rename Speakers">
|
||||
<mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="ar_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="30" width="1520" height="900" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_phone" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#111827;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="55" width="430" height="840" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_top" value="Weekly Product Sync" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#111827;strokeColor=#111827;fontColor=#ffffff;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="55" width="430" height="58" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_dim" value="Live transcript behind sheet" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="565" y="135" width="380" height="340" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_sheet" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="470" width="430" height="425" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_title" value="Rename speakers" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="500" width="260" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_desc" value="Names apply to the current meeting." style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="540" width="300" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_s1" value="Speaker 1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="590" width="100" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_i1" value="Alice" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="625" width="250" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_save1" value="Save" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="835" y="625" width="100" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_s2" value="Speaker 2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="690" width="100" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_i2" value="Bob" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="725" width="250" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_save2" value="Save" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="835" y="725" width="100" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar_done" value="Done" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="805" width="360" height="48" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="android_meetings" name="6. Meetings">
|
||||
<mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="am_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="30" width="1520" height="900" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="am_phone" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#111827;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="55" width="430" height="840" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="am_top" value="Meetings" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#111827;strokeColor=#111827;fontColor=#ffffff;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="55" width="430" height="58" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="am_search" value="Search meetings..." style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#cbd5e1;align=left;spacingLeft=10;fontColor=#64748b;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="140" width="360" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="am_filter" value="All Ready Processing" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="205" width="360" height="38" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="am_m1" value="Weekly Product Sync Sep 27 • 48 min Ready" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="270" width="360" height="95" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="am_m2" value="Backend Architecture Review Sep 26 • 61 min Ready" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="380" width="360" height="95" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="am_m3" value="Client Planning Call Sep 25 • 35 min Processing" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="490" width="360" height="95" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="am_m4" value="Interview Recording Sep 23 • 42 min Local only" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="600" width="360" height="95" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="am_nav" value="Home Meetings Settings" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="805" width="360" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="android_details" name="7. Meeting Details">
|
||||
<mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="ad_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="30" width="1520" height="900" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_phone" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#111827;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="55" width="430" height="840" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_top" value="← Weekly Product Sync" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#111827;strokeColor=#111827;fontColor=#ffffff;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="55" width="430" height="58" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_meta" value="Sep 27 • 48 min • Ready" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="135" width="300" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_player" value="▶ 00:18:42 ━━━━━━━━━ 00:48:05" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="180" width="360" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_tabs" value="Transcript Summary Tasks Files" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="300" width="360" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_t1" value="Alice 00:18:41" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="365" width="130" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_tt1" value="We should finalize the API contract." style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="400" width="350" height="42" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_t2" value="Bob 00:18:49" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="465" width="130" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_tt2" value="I'll update the migration tonight." style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="500" width="350" height="42" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_sumh" value="Summary" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="575" width="100" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_sum" value="The team agreed to finalize the API contract before tomorrow and complete the migration update tonight." style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="615" width="360" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_actions" value="Create reminder" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="735" width="170" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ad_export" value="Export" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" vertex="1" parent="1">
|
||||
<mxGeometry x="765" y="735" width="170" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="android_settings" name="8. Settings">
|
||||
<mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="aset_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="30" width="1520" height="900" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_phone" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#111827;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="55" width="430" height="840" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_top" value="Settings" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#111827;strokeColor=#111827;fontColor=#ffffff;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="55" width="430" height="58" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_general" value="General" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="135" width="120" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_g1" value="Theme System ▼" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="170" width="360" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_g2" value="Notifications On" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="220" width="360" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_audio" value="Audio" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="290" width="120" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_a1" value="Microphone Default ▼" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="325" width="360" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_a2" value="Playback capture Off" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="375" width="360" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_trans" value="Transcription" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="445" width="140" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_t1" value="Model Whisper base ▼" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="480" width="360" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_t2" value="Language Auto ▼" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="530" width="360" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_t3" value="Speaker diarization On" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="580" width="360" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_ol" value="Overlay" style="text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#111827;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="650" width="120" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_o1" value="Opacity 85%" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="685" width="360" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_o2" value="Visible lines 3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="735" width="360" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aset_nav" value="Home Meetings Settings" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f3f4f6;strokeColor=#e5e7eb;fontColor=#374151;" vertex="1" parent="1">
|
||||
<mxGeometry x="575" y="805" width="360" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram id="android_permissions" name="9. Permissions">
|
||||
<mxGraphModel dx="2054" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="ap_bg" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8f9fb;strokeColor=#cfd6df;strokeWidth=1.5;" value="" vertex="1">
|
||||
<mxGeometry height="900" width="1520" x="40" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_phone" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#111827;strokeWidth=2;" value="" vertex="1">
|
||||
<mxGeometry height="840" width="430" x="540" y="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_top" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#111827;strokeColor=#111827;fontColor=#ffffff;" value="Permissions" vertex="1">
|
||||
<mxGeometry height="58" width="430" x="540" y="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_title" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#111827;" value="Set up MeetVault" vertex="1">
|
||||
<mxGeometry height="36" width="250" x="575" y="145" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_desc" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#374151;" value="These permissions are needed for realtime meetings." vertex="1">
|
||||
<mxGeometry height="44" width="340" x="575" y="185" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_p1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Microphone Required for recording and transcription." vertex="1">
|
||||
<mxGeometry height="80" width="360" x="575" y="255" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_b1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Granted" vertex="1">
|
||||
<mxGeometry height="32" width="100" x="810" y="275" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_p2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Notifications Required for the foreground meeting service." vertex="1">
|
||||
<mxGeometry height="80" width="360" x="575" y="355" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_b2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#a7f3d0;fontColor=#065f46;fontSize=11;" value="Granted" vertex="1">
|
||||
<mxGeometry height="32" width="100" x="810" y="375" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_p3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Display over other apps Required only for live floating captions." vertex="1">
|
||||
<mxGeometry height="90" width="360" x="575" y="455" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_b3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Grant" vertex="1">
|
||||
<mxGeometry height="34" width="100" x="810" y="485" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_p4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#d9dee7;" value="Battery optimization Recommended: allow MeetVault during meetings." vertex="1">
|
||||
<mxGeometry height="90" width="360" x="575" y="570" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_b4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#c7d2fe;fontColor=#1e3a8a;" value="Review" vertex="1">
|
||||
<mxGeometry height="34" width="100" x="810" y="600" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ap_done" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2563eb;strokeColor=#2563eb;fontColor=#ffffff;fontStyle=1;" value="Continue" vertex="1">
|
||||
<mxGeometry height="50" width="360" x="575" y="720" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
Reference in New Issue
Block a user