Files
floci-ui/docs/images/thecloud-architecture.svg
T
Zakaria 811791603c
CI / checks (pull_request) Successful in 27m5s
docs: rebrand the README as TheCloud
Replace the Floci logo, screenshots and architecture diagram with TheCloud's
logo, a current screenshot and a redrawn diagram; say TheCloud in prose while
keeping literal identifiers (env vars, image and compose service names); point
the runtime setup at FlociClone; drop the upstream release and Docker badges
and the upstream community section; keep the credit to Floci under License.
2026-10-25 09:57:22 -04:00

73 lines
5.0 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 620" width="960" height="620" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif" role="img" aria-labelledby="title desc">
<title id="title">TheCloud architecture</title>
<desc id="desc">The browser talks only to TheCloud's API, which dispatches each request through one proxy service and an adapter registry to a provider adapter, which calls the local AWS, Azure or GCP runtime with that cloud's real API.</desc>
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M0,0 L10,5 L0,10 z" fill="#5b6473"/>
</marker>
</defs>
<rect width="960" height="620" rx="16" fill="#f7f4ee"/>
<text x="480" y="44" text-anchor="middle" font-size="24" font-weight="700" fill="#1d2330">TheCloud architecture</text>
<text x="480" y="70" text-anchor="middle" font-size="14" fill="#5b6473">One console for local AWS, Azure and GCP runtimes, using each cloud's real API</text>
<!-- Browser -->
<rect x="250" y="96" width="460" height="74" rx="10" fill="#ffffff" stroke="#c9b48a" stroke-width="2"/>
<text x="270" y="124" font-size="16" font-weight="700" fill="#1d2330">Console (React, port 4500)</text>
<text x="270" y="148" font-size="13" fill="#5b6473">Nav and pages rendered from each service's schema; calls only /api/*</text>
<line x1="480" y1="170" x2="480" y2="202" stroke="#5b6473" stroke-width="2" marker-end="url(#arrow)"/>
<!-- API -->
<rect x="160" y="206" width="640" height="186" rx="10" fill="#ffffff" stroke="#1d2330" stroke-width="2"/>
<text x="180" y="234" font-size="16" font-weight="700" fill="#1d2330">TheCloud API (Bun and Hono, port 4501)</text>
<text x="180" y="256" font-size="13" fill="#5b6473">Sign-in, then the generic /api/clouds/:cloud/services/:service routes</text>
<rect x="180" y="272" width="280" height="50" rx="8" fill="#efe7d6"/>
<text x="196" y="294" font-size="14" font-weight="600" fill="#1d2330">CloudProxyService</text>
<text x="196" y="312" font-size="12" fill="#5b6473">One dispatcher for every request</text>
<rect x="500" y="272" width="280" height="50" rx="8" fill="#efe7d6"/>
<text x="516" y="294" font-size="14" font-weight="600" fill="#1d2330">Adapter registry and service catalog</text>
<text x="516" y="312" font-size="12" fill="#5b6473">Registered adapters decide what is shown</text>
<line x1="460" y1="297" x2="496" y2="297" stroke="#5b6473" stroke-width="2" marker-end="url(#arrow)"/>
<text x="180" y="350" font-size="13" fill="#1d2330"><tspan font-weight="600">Schemas</tspan> describe fields, columns and capabilities; a capability</text>
<text x="180" y="370" font-size="13" fill="#1d2330">is only advertised when its adapter can perform it (checked by tests).</text>
<line x1="240" y1="392" x2="200" y2="438" stroke="#5b6473" stroke-width="2" marker-end="url(#arrow)"/>
<line x1="480" y1="392" x2="480" y2="438" stroke="#5b6473" stroke-width="2" marker-end="url(#arrow)"/>
<line x1="720" y1="392" x2="760" y2="438" stroke="#5b6473" stroke-width="2" marker-end="url(#arrow)"/>
<!-- Adapters -->
<rect x="60" y="442" width="270" height="60" rx="10" fill="#fff3e3" stroke="#e08a2c" stroke-width="2"/>
<text x="76" y="468" font-size="15" font-weight="700" fill="#a85a0c">AWS adapters</text>
<text x="76" y="488" font-size="12" fill="#5b6473">AWS SDK v3, one per service</text>
<rect x="345" y="442" width="270" height="60" rx="10" fill="#e8f0fd" stroke="#2f6fd6" stroke-width="2"/>
<text x="361" y="468" font-size="15" font-weight="700" fill="#1f4fa3">Azure adapters</text>
<text x="361" y="488" font-size="12" fill="#5b6473">Azure runtime client</text>
<rect x="630" y="442" width="270" height="60" rx="10" fill="#e8f6ec" stroke="#2f9a55" stroke-width="2"/>
<text x="646" y="468" font-size="15" font-weight="700" fill="#1f7140">GCP adapters</text>
<text x="646" y="488" font-size="12" fill="#5b6473">GCP runtime client</text>
<line x1="195" y1="502" x2="195" y2="530" stroke="#5b6473" stroke-width="2" marker-end="url(#arrow)"/>
<line x1="480" y1="502" x2="480" y2="530" stroke="#5b6473" stroke-width="2" marker-end="url(#arrow)"/>
<line x1="765" y1="502" x2="765" y2="530" stroke="#5b6473" stroke-width="2" marker-end="url(#arrow)"/>
<!-- Runtimes -->
<rect x="60" y="534" width="270" height="56" rx="10" fill="#1d2330"/>
<text x="76" y="558" font-size="14" font-weight="700" fill="#f7f4ee">TheCloud AWS runtime</text>
<text x="76" y="578" font-size="12" fill="#c9cfd8">port 4566</text>
<rect x="345" y="534" width="270" height="56" rx="10" fill="#1d2330"/>
<text x="361" y="558" font-size="14" font-weight="700" fill="#f7f4ee">Azure runtime</text>
<text x="361" y="578" font-size="12" fill="#c9cfd8">port 4577, optional</text>
<rect x="630" y="534" width="270" height="56" rx="10" fill="#1d2330"/>
<text x="646" y="558" font-size="14" font-weight="700" fill="#f7f4ee">GCP runtime</text>
<text x="646" y="578" font-size="12" fill="#c9cfd8">port 4588, optional</text>
</svg>