479 lines
44 KiB
Plaintext
479 lines
44 KiB
Plaintext
<mxfile host="app.diagrams.net" modified="2026-02-12T18:00:00.000Z" agent="Cascade" version="24.0.0" etag="common-plat-ecosystem" type="device">
|
|
<diagram id="main" name="Ecosystem After Refactor">
|
|
<mxGraphModel dx="3400" dy="2800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="4000" pageHeight="3200" math="0" shadow="0">
|
|
<root>
|
|
<mxCell id="0" />
|
|
<mxCell id="1" parent="0" />
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<!-- TITLE -->
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<mxCell id="title" value="<b>ByteLyst Ecosystem — Post-Refactor Architecture</b><br><i>3-Repo Monorepo Ecosystem with Shared Common Platform</i><br>v1.0 · Feb 2026" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=22;fontFamily=Helvetica;" vertex="1" parent="1">
|
|
<mxGeometry x="900" y="-60" width="700" height="70" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<!-- LEGEND -->
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<mxCell id="legend_box" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;dashed=1;opacity=80;" vertex="1" parent="1">
|
|
<mxGeometry x="1780" y="-60" width="360" height="200" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="legend_title" value="<b>LEGEND</b>" style="text;html=1;align=left;fontSize=12;fontStyle=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1800" y="-50" width="80" height="20" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="leg1" value="" style="rounded=1;whiteSpace=wrap;fillColor=#FF6E6E;strokeColor=#b85450;opacity=40;" vertex="1" parent="1">
|
|
<mxGeometry x="1800" y="-20" width="18" height="18" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="leg1t" value="LysnrAI Repo (learning_voice_ai_agent)" style="text;html=1;align=left;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1826" y="-22" width="290" height="20" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="leg2" value="" style="rounded=1;whiteSpace=wrap;fillColor=#5A8CFF;strokeColor=#6c8ebf;opacity=40;" vertex="1" parent="1">
|
|
<mxGeometry x="1800" y="4" width="18" height="18" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="leg2t" value="MindLyst Repo (learning_multimodal_memory_agents)" style="text;html=1;align=left;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1826" y="2" width="310" height="20" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="leg3" value="" style="rounded=1;whiteSpace=wrap;fillColor=#34D399;strokeColor=#82b366;opacity=40;" vertex="1" parent="1">
|
|
<mxGeometry x="1800" y="28" width="18" height="18" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="leg3t" value="Common Platform (learning_ai_common_plat)" style="text;html=1;align=left;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1826" y="26" width="290" height="20" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="leg4" value="" style="rounded=1;whiteSpace=wrap;fillColor=#2EE6D6;strokeColor=#0097a7;opacity=40;" vertex="1" parent="1">
|
|
<mxGeometry x="1800" y="52" width="18" height="18" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="leg4t" value="Azure Cloud Infrastructure" style="text;html=1;align=left;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1826" y="50" width="200" height="20" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="leg5" value="" style="rounded=1;whiteSpace=wrap;fillColor=#FFD166;strokeColor=#d6b656;opacity=40;" vertex="1" parent="1">
|
|
<mxGeometry x="1800" y="76" width="18" height="18" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="leg5t" value="Client Applications (End User)" style="text;html=1;align=left;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1826" y="74" width="200" height="20" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="leg6_line" value="" style="endArrow=classic;html=1;strokeColor=#34D399;strokeWidth=2;dashed=1;" edge="1" parent="1">
|
|
<mxGeometry relative="1" as="geometry">
|
|
<mxPoint x="1800" y="110" as="sourcePoint" />
|
|
<mxPoint x="1860" y="110" as="targetPoint" />
|
|
</mxGeometry>
|
|
</mxCell>
|
|
<mxCell id="leg6t" value="Depends on (npm/file: reference)" style="text;html=1;align=left;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1870" y="100" width="220" height="20" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="leg7_line" value="" style="endArrow=classic;html=1;strokeColor=#666666;strokeWidth=2;" edge="1" parent="1">
|
|
<mxGeometry relative="1" as="geometry">
|
|
<mxPoint x="1800" y="132" as="sourcePoint" />
|
|
<mxPoint x="1860" y="132" as="targetPoint" />
|
|
</mxGeometry>
|
|
</mxCell>
|
|
<mxCell id="leg7t" value="Network call (HTTP/REST)" style="text;html=1;align=left;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1870" y="122" width="200" height="20" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<!-- LAYER 0: CLIENT APPLICATIONS (Top) -->
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<mxCell id="clients_group" value="<b>LAYER 0 — CLIENT APPLICATIONS</b>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFD166;strokeColor=#d6b656;opacity=15;verticalAlign=top;fontSize=13;fontStyle=1;align=left;spacingLeft=10;" vertex="1" parent="1">
|
|
<mxGeometry x="40" y="40" width="2400" height="160" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- LysnrAI Clients -->
|
|
<mxCell id="client_desktop" value="<b>LysnrAI Desktop</b><br><font style='font-size:10px'>Python 3.12 + tkinter<br>macOS / Windows</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="60" y="80" width="160" height="60" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="client_lysnr_ios" value="<b>LysnrAI iOS</b><br><font style='font-size:10px'>Swift + SwiftUI</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="240" y="80" width="130" height="60" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="client_lysnr_android" value="<b>LysnrAI Android</b><br><font style='font-size:10px'>Kotlin + Compose</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="390" y="80" width="140" height="60" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="client_admin" value="<b>Admin Dashboard</b><br><font style='font-size:10px'>Next.js 16 :3001</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="550" y="80" width="140" height="60" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="client_user" value="<b>User Portal</b><br><font style='font-size:10px'>Next.js 16 :3002</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="710" y="80" width="130" height="60" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="client_tracker" value="<b>Tracker Dashboard</b><br><font style='font-size:10px'>Next.js :3003</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="860" y="80" width="140" height="60" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- MindLyst Clients -->
|
|
<mxCell id="client_ml_ios" value="<b>MindLyst iOS</b><br><font style='font-size:10px'>SwiftUI + KMP</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="1680" y="80" width="130" height="60" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="client_ml_android" value="<b>MindLyst Android</b><br><font style='font-size:10px'>Compose + KMP</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="1830" y="80" width="140" height="60" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="client_ml_web" value="<b>MindLyst Web</b><br><font style='font-size:10px'>Next.js 14 :3050</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="1990" y="80" width="130" height="60" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Separator label -->
|
|
<mxCell id="sep_lysnr_clients" value="<font color='#FF6E6E'><b>LysnrAI Clients</b></font>" style="text;html=1;align=center;fontSize=10;fontStyle=1;" vertex="1" parent="1">
|
|
<mxGeometry x="380" y="155" width="120" height="20" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="sep_ml_clients" value="<font color='#5A8CFF'><b>MindLyst Clients</b></font>" style="text;html=1;align=center;fontSize=10;fontStyle=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1830" y="155" width="120" height="20" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<!-- LAYER 1: LYSNRAI REPO — SERVICES (Left) -->
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<mxCell id="lysnr_repo" value="<b>LAYER 1 — learning_voice_ai_agent (LysnrAI)</b>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FF6E6E;strokeColor=#b85450;opacity=12;verticalAlign=top;fontSize=13;fontStyle=1;align=left;spacingLeft=10;" vertex="1" parent="1">
|
|
<mxGeometry x="40" y="240" width="960" height="620" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Python Backend -->
|
|
<mxCell id="python_backend" value="<b>FastAPI Backend</b><br><font style='font-size:9px'>Python 3.12 :8000<br>auth · config · cloud</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="60" y="280" width="180" height="65" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Fastify Services -->
|
|
<mxCell id="svc_group" value="<b>Fastify Microservices (TypeScript)</b>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#999999;dashed=1;verticalAlign=top;fontSize=11;fontStyle=1;align=left;spacingLeft=8;" vertex="1" parent="1">
|
|
<mxGeometry x="60" y="370" width="920" height="200" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="svc_platform" value="<b>platform-service</b><br><font style='font-size:9px'>:4003<br>Auth · Audit · Flags<br>Notifications · Blob<br>Rate Limiting</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="80" y="410" width="150" height="90" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="svc_billing" value="<b>billing-service</b><br><font style='font-size:9px'>:4002<br>Subscriptions · Plans<br>Usage · Licenses<br>Stripe Webhooks</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="250" y="410" width="150" height="90" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="svc_growth" value="<b>growth-service</b><br><font style='font-size:9px'>:4001<br>Invitations<br>Referrals · Promos</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="420" y="410" width="140" height="90" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="svc_tracker" value="<b>tracker-service</b><br><font style='font-size:9px'>:4004<br>Items · Comments<br>Votes · Public API</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="580" y="410" width="140" height="90" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Service internal lib — BEFORE (crossed out) -->
|
|
<mxCell id="svc_old_lib" value="<font color='#999999'><s>src/lib/ (per-service duplicate)</s><br><s>cosmos.ts · errors.ts · config.ts</s><br><s>auth.ts · product-config.ts</s></font><br><font color='#34D399'><b>→ NOW: @bytelyst/* packages</b></font>" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontSize=10;align=left;" vertex="1" parent="1">
|
|
<mxGeometry x="740" y="400" width="220" height="70" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Dashboards internal lib — BEFORE (crossed out) -->
|
|
<mxCell id="dash_group" value="<b>Next.js Dashboards (TypeScript)</b>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#999999;dashed=1;verticalAlign=top;fontSize=11;fontStyle=1;align=left;spacingLeft=8;" vertex="1" parent="1">
|
|
<mxGeometry x="60" y="595" width="920" height="120" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="dash_admin" value="<b>admin-dashboard-web</b><br><font style='font-size:9px'>:3001 · Next.js 16<br>Users · Tokens · Audit<br>Usage · Invitations · Themes</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="80" y="630" width="180" height="70" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="dash_user" value="<b>user-dashboard-web</b><br><font style='font-size:9px'>:3002 · Next.js 16<br>Profile · Billing<br>Settings · SSO</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="280" y="630" width="160" height="70" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="dash_tracker" value="<b>tracker-dashboard-web</b><br><font style='font-size:9px'>:3003 · Next.js<br>Board · Roadmap<br>Public Voting</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="460" y="630" width="160" height="70" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="dash_old_lib" value="<font color='#999999'><s>src/lib/ (per-dashboard duplicate)</s><br><s>cosmos.ts · auth-server.ts · auth-context.tsx</s><br><s>api.ts · utils.ts</s></font><br><font color='#34D399'><b>→ NOW: @bytelyst/* packages</b></font>" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontSize=10;align=left;" vertex="1" parent="1">
|
|
<mxGeometry x="640" y="630" width="320" height="70" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Monitoring -->
|
|
<mxCell id="monitoring" value="<b>Monitoring</b><br><font style='font-size:9px'>Loki · Grafana<br>Health Checks</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="260" y="280" width="130" height="65" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Shared JSON -->
|
|
<mxCell id="lysnr_product_json" value="<b>shared/product.json</b><br><font style='font-size:9px'>Product Identity</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="410" y="280" width="140" height="45" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Desktop app -->
|
|
<mxCell id="desktop_app" value="<b>Desktop App</b><br><font style='font-size:9px'>Python 3.12 · tkinter<br>Audio · STT · LLM · Paste<br>Hotkey · Cloud Sync</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="570" y="270" width="180" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Mobile apps -->
|
|
<mxCell id="lysnr_mobile" value="<b>Mobile Apps</b><br><font style='font-size:9px'>iOS (Swift) + Android (Kotlin)<br>Fully native (no KMP)</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="770" y="280" width="180" height="60" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<!-- LAYER 1: MINDLYST REPO (Right) -->
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<mxCell id="ml_repo" value="<b>LAYER 1 — learning_multimodal_memory_agents (MindLyst)</b>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#5A8CFF;strokeColor=#6c8ebf;opacity=12;verticalAlign=top;fontSize=13;fontStyle=1;align=left;spacingLeft=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1560" y="240" width="580" height="620" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- KMP Shared -->
|
|
<mxCell id="kmp_shared" value="<b>KMP Shared Module</b><br><font style='font-size:9px'>commonMain/ (Kotlin)<br>Models · Repositories<br>DI · Triage Pipeline<br>OpenAI + Whisper Client</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1580" y="290" width="180" height="90" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- MindLyst Design Tokens -->
|
|
<mxCell id="ml_tokens_old" value="<font color='#999999'><s>MindLystTokens.kt</s><br><s>MindLystTheme.swift</s><br><s>globals.css</s></font><br><font color='#34D399'><b>→ NOW: @bytelyst/design-tokens</b></font>" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontSize=10;align=left;" vertex="1" parent="1">
|
|
<mxGeometry x="1780" y="290" width="220" height="70" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- MindLyst iOS -->
|
|
<mxCell id="ml_ios" value="<b>iOS App</b><br><font style='font-size:9px'>SwiftUI<br>MindLystTheme.swift<br>HomeScreen · CaptureOrb</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1580" y="420" width="160" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- MindLyst Android -->
|
|
<mxCell id="ml_android" value="<b>Android App</b><br><font style='font-size:9px'>Jetpack Compose<br>MindLystTheme.kt<br>HomeScreen · CaptureOrb</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1760" y="420" width="160" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- MindLyst Web -->
|
|
<mxCell id="ml_web" value="<b>Web Dashboard</b><br><font style='font-size:9px'>Next.js 14 :3050<br>Pages Router · CSS vars<br>Landing · Dashboard</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1580" y="530" width="160" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- MindLyst Design System -->
|
|
<mxCell id="ml_design_sys" value="<b>design-system/</b><br><font style='font-size:9px'>tokens/ (JSON source)<br>web/ (mindlyst.css)<br>components/ (specs)</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1760" y="530" width="160" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Future MindLyst services -->
|
|
<mxCell id="ml_future" value="<font color='#999999'><b>Future: MindLyst Backend Services</b><br><font style='font-size:9px'>Will also use @bytelyst/cosmos,<br>@bytelyst/auth, @bytelyst/fastify-core</font></font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#6c8ebf;dashed=1;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="1580" y="650" width="340" height="55" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<!-- LAYER 2: COMMON PLATFORM (Center) -->
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<mxCell id="common_repo" value="<b>LAYER 2 — learning_ai_common_plat (@bytelyst/*)</b>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#34D399;strokeColor=#82b366;opacity=15;verticalAlign=top;fontSize=14;fontStyle=1;align=center;" vertex="1" parent="1">
|
|
<mxGeometry x="1040" y="240" width="480" height="620" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- P0 packages -->
|
|
<mxCell id="p0_label" value="<font color='#dc2626'><b>P0 — Drop-in (do first)</b></font>" style="text;html=1;align=left;fontSize=10;fontStyle=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1060" y="270" width="180" height="18" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="pkg_errors" value="<b>@bytelyst/errors</b><br><font style='font-size:9px'>ServiceError base class<br>NotFound · BadRequest<br>Unauthorized · Forbidden<br>Conflict · TooManyRequests</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1060" y="295" width="200" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="pkg_cosmos" value="<b>@bytelyst/cosmos</b><br><font style='font-size:9px'>CosmosClient singleton<br>getContainer(name)<br>Container registry + TTL<br>initializeAllContainers()</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1280" y="295" width="200" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- P1 packages -->
|
|
<mxCell id="p1_label" value="<font color='#ea580c'><b>P1 — High impact</b></font>" style="text;html=1;align=left;fontSize=10;fontStyle=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1060" y="390" width="180" height="18" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="pkg_config" value="<b>@bytelyst/config</b><br><font style='font-size:9px'>Zod base env schema<br>(PORT, HOST, NODE_ENV,<br>COSMOS_*, SERVICE_NAME)<br>Product identity loader</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1060" y="415" width="200" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="pkg_auth" value="<b>@bytelyst/auth</b><br><font style='font-size:9px'>JWT create/verify (jose)<br>Fastify extractAuth hook<br>Next.js getCurrentUser<br>bcrypt password hashing</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1280" y="415" width="200" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="pkg_fastify" value="<b>@bytelyst/fastify-core</b><br><font style='font-size:9px'>createServiceApp() factory<br>CORS · Swagger · Metrics<br>x-request-id hook<br>/health · Error handler</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1060" y="510" width="200" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- P2 packages -->
|
|
<mxCell id="p2_label" value="<font color='#ca8a04'><b>P2 — Medium impact</b></font>" style="text;html=1;align=left;fontSize=10;fontStyle=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1280" y="510" width="180" height="18" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="pkg_api_client" value="<b>@bytelyst/api-client</b><br><font style='font-size:9px'>createApiClient() factory<br>Typed fetch + auth headers<br>{ data, error } or throw</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1280" y="535" width="200" height="70" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="pkg_react_auth" value="<b>@bytelyst/react-auth</b><br><font style='font-size:9px'>AuthProvider&lt;TUser&gt;<br>useAuth() hook<br>localStorage token mgmt</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1060" y="610" width="200" height="70" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- P3 package -->
|
|
<mxCell id="p3_label" value="<font color='#4f46e5'><b>P3 — Cross-platform</b></font>" style="text;html=1;align=left;fontSize=10;fontStyle=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1280" y="620" width="180" height="18" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="pkg_tokens" value="<b>@bytelyst/design-tokens</b><br><font style='font-size:9px'>Canonical JSON source<br>→ CSS vars (--ml-*)<br>→ TypeScript constants<br>→ Kotlin object<br>→ Swift structs</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1280" y="645" width="200" height="85" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<!-- LAYER 3: AZURE INFRASTRUCTURE (Bottom) -->
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<mxCell id="azure_layer" value="<b>LAYER 3 — Azure Cloud Infrastructure</b>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#2EE6D6;strokeColor=#0097a7;opacity=12;verticalAlign=top;fontSize=13;fontStyle=1;align=center;" vertex="1" parent="1">
|
|
<mxGeometry x="40" y="920" width="2100" height="180" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="az_cosmos" value="<b>Azure Cosmos DB</b><br><font style='font-size:9px'>cosmos-mywisprai<br>Serverless · NoSQL<br>DB: lysnrai<br>13+ containers</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f7fa;strokeColor=#0097a7;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="80" y="960" width="170" height="90" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="az_blob" value="<b>Azure Blob Storage</b><br><font style='font-size:9px'>bytelystblobs<br>6 containers: audio,<br>transcripts, attachments,<br>avatars, releases, backups</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f7fa;strokeColor=#0097a7;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="280" y="960" width="180" height="90" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="az_keyvault" value="<b>Azure Key Vault</b><br><font style='font-size:9px'>kv-mywisprai<br>Secrets management</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f7fa;strokeColor=#0097a7;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="490" y="960" width="150" height="70" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="az_speech" value="<b>Azure Speech</b><br><font style='font-size:9px'>mywisprai-speech<br>STT (F0 tier)</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f7fa;strokeColor=#0097a7;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="670" y="960" width="140" height="70" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="az_openai" value="<b>Azure OpenAI</b><br><font style='font-size:9px'>mywisprai-openai-sweden<br>swedencentral · S0<br>gpt-4o-mini</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f7fa;strokeColor=#0097a7;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="840" y="960" width="170" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="az_stripe" value="<b>Stripe</b><br><font style='font-size:9px'>Payments · Webhooks<br>Subscriptions</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f7fa;strokeColor=#0097a7;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1040" y="960" width="140" height="70" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="az_openai_public" value="<b>OpenAI API</b><br><font style='font-size:9px'>api.openai.com<br>gpt-4o-mini · Whisper<br>(MindLyst triage)</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f7fa;strokeColor=#0097a7;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1210" y="960" width="150" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="az_docker" value="<b>Docker Compose</b><br><font style='font-size:9px'>Traefik · Loki · Grafana<br>All services</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f7fa;strokeColor=#0097a7;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1390" y="960" width="150" height="70" as="geometry" />
|
|
</mxCell>
|
|
|
|
<mxCell id="az_gh_actions" value="<b>GitHub Actions</b><br><font style='font-size:9px'>CI pipelines<br>9 workflows (LysnrAI)<br>1 workflow (MindLyst)</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0f7fa;strokeColor=#0097a7;fontSize=10;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1570" y="960" width="160" height="80" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<!-- DEPENDENCY ARROWS: Services → Common Platform -->
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
|
|
<!-- Platform service → errors -->
|
|
<mxCell id="arr_plat_err" style="endArrow=classic;html=1;strokeColor=#34D399;strokeWidth=2;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="svc_platform" target="pkg_errors">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Billing service → errors -->
|
|
<mxCell id="arr_bill_err" style="endArrow=classic;html=1;strokeColor=#34D399;strokeWidth=1.5;dashed=1;exitX=1;exitY=0.3;exitDx=0;exitDy=0;entryX=0;entryY=0.7;entryDx=0;entryDy=0;" edge="1" parent="1" source="svc_billing" target="pkg_errors">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Growth service → fastify-core -->
|
|
<mxCell id="arr_grow_fc" style="endArrow=classic;html=1;strokeColor=#34D399;strokeWidth=1.5;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.3;entryDx=0;entryDy=0;" edge="1" parent="1" source="svc_growth" target="pkg_fastify">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Tracker service → auth -->
|
|
<mxCell id="arr_trk_auth" style="endArrow=classic;html=1;strokeColor=#34D399;strokeWidth=1.5;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="svc_tracker" target="pkg_auth">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Admin dashboard → cosmos -->
|
|
<mxCell id="arr_admin_cos" style="endArrow=classic;html=1;strokeColor=#34D399;strokeWidth=1.5;dashed=1;exitX=1;exitY=0.3;exitDx=0;exitDy=0;entryX=0;entryY=0.9;entryDx=0;entryDy=0;" edge="1" parent="1" source="dash_admin" target="pkg_cosmos">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- User dashboard → react-auth -->
|
|
<mxCell id="arr_user_ra" style="endArrow=classic;html=1;strokeColor=#34D399;strokeWidth=1.5;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="dash_user" target="pkg_react_auth">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Tracker dashboard → api-client -->
|
|
<mxCell id="arr_trkd_api" style="endArrow=classic;html=1;strokeColor=#34D399;strokeWidth=1.5;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="dash_tracker" target="pkg_api_client">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<!-- DEPENDENCY ARROWS: MindLyst → Common Platform -->
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
|
|
<!-- MindLyst web → design-tokens -->
|
|
<mxCell id="arr_mlweb_tok" style="endArrow=classic;html=1;strokeColor=#34D399;strokeWidth=2;dashed=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="ml_web" target="pkg_tokens">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- MindLyst design-system → design-tokens -->
|
|
<mxCell id="arr_mlds_tok" style="endArrow=classic;html=1;strokeColor=#34D399;strokeWidth=1.5;dashed=1;exitX=0;exitY=0.7;exitDx=0;exitDy=0;entryX=1;entryY=0.8;entryDx=0;entryDy=0;" edge="1" parent="1" source="ml_design_sys" target="pkg_tokens">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- MindLyst future services → fastify-core -->
|
|
<mxCell id="arr_mlfut_fc" style="endArrow=classic;html=1;strokeColor=#34D399;strokeWidth=1.5;dashed=1;dashPattern=8 4;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.7;entryDx=0;entryDy=0;" edge="1" parent="1" source="ml_future" target="pkg_fastify">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<!-- NETWORK ARROWS: Services → Azure -->
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
|
|
<!-- Services → Cosmos -->
|
|
<mxCell id="arr_svc_cosmos" style="endArrow=classic;html=1;strokeColor=#666666;strokeWidth=1.5;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="svc_group" target="az_cosmos">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Desktop → Azure Speech -->
|
|
<mxCell id="arr_desk_speech" style="endArrow=classic;html=1;strokeColor=#666666;strokeWidth=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="desktop_app" target="az_speech">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Dashboards → Cosmos -->
|
|
<mxCell id="arr_dash_cosmos" style="endArrow=classic;html=1;strokeColor=#666666;strokeWidth=1.5;exitX=0.3;exitY=1;exitDx=0;exitDy=0;entryX=0.7;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="dash_group" target="az_cosmos">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Billing → Stripe -->
|
|
<mxCell id="arr_bill_stripe" style="endArrow=classic;html=1;strokeColor=#666666;strokeWidth=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="svc_billing" target="az_stripe">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- KMP → OpenAI public -->
|
|
<mxCell id="arr_kmp_openai" style="endArrow=classic;html=1;strokeColor=#666666;strokeWidth=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="kmp_shared" target="az_openai_public">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<!-- CLIENT → SERVICE ARROWS -->
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
|
|
<!-- Desktop client → Desktop app -->
|
|
<mxCell id="arr_c_desk" style="endArrow=classic;html=1;strokeColor=#666666;strokeWidth=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.3;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="client_desktop" target="desktop_app">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Admin client → admin dashboard -->
|
|
<mxCell id="arr_c_admin" style="endArrow=classic;html=1;strokeColor=#666666;strokeWidth=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="client_admin" target="dash_admin">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- User client → user dashboard -->
|
|
<mxCell id="arr_c_user" style="endArrow=classic;html=1;strokeColor=#666666;strokeWidth=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="client_user" target="dash_user">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- MindLyst clients → KMP -->
|
|
<mxCell id="arr_c_ml_ios" style="endArrow=classic;html=1;strokeColor=#666666;strokeWidth=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.3;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="client_ml_ios" target="kmp_shared">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
<!-- INTRA-PACKAGE DEPENDENCY ARROWS (within common plat) -->
|
|
<!-- ═══════════════════════════════════════════════════════════ -->
|
|
|
|
<!-- fastify-core → errors -->
|
|
<mxCell id="arr_fc_err" style="endArrow=classic;html=1;strokeColor=#22c55e;strokeWidth=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="pkg_fastify" target="pkg_errors">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- fastify-core → config -->
|
|
<mxCell id="arr_fc_cfg" style="endArrow=classic;html=1;strokeColor=#22c55e;strokeWidth=1;exitX=0.3;exitY=0;exitDx=0;exitDy=0;entryX=0.3;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="pkg_fastify" target="pkg_config">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- auth → config -->
|
|
<mxCell id="arr_auth_cfg" style="endArrow=classic;html=1;strokeColor=#22c55e;strokeWidth=1;exitX=0.3;exitY=0;exitDx=0;exitDy=0;entryX=0.7;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="pkg_auth" target="pkg_config">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- api-client → auth -->
|
|
<mxCell id="arr_apic_auth" style="endArrow=classic;html=1;strokeColor=#22c55e;strokeWidth=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="pkg_api_client" target="pkg_auth">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- react-auth → api-client -->
|
|
<mxCell id="arr_ra_apic" style="endArrow=classic;html=1;strokeColor=#22c55e;strokeWidth=1;exitX=1;exitY=0.3;exitDx=0;exitDy=0;entryX=0;entryY=0.7;entryDx=0;entryDy=0;" edge="1" parent="1" source="pkg_react_auth" target="pkg_api_client">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
</root>
|
|
</mxGraphModel>
|
|
</diagram>
|
|
</mxfile>
|