atlas-os/assets/architecture.svg
Atlas Developer e43664a83a refactor: generalize into a distributable template — remove operator infra
- delete internal infra docs: system-of-record.md, sitemap.html status board
  (exposed live attack surface: subdomains, up/down status, client names)
- parameterize OS desktop: derive DOMAIN from location.hostname, u() helper
  builds service URLs so a friend deploying at their domain just works
- scrub all live service links to service.{DOMAIN} placeholders
- remove client domains (bicos, hkintercare, etc.) everywhere
- collapse brand/client site tiles to one generic Website tile
- single public CTA -> atlascorporation.nl (Get a workspace)
- relative SSO sign-out; sanitized server scripts to example.com

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 22:28:51 +02:00

95 lines
6.1 KiB
XML

<svg width="1200" height="640" viewBox="0 0 1200 640" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Atlas OS architecture">
<defs>
<linearGradient id="abg" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#0a1832"/>
<stop offset="100%" stop-color="#050c1e"/>
</linearGradient>
<linearGradient id="caddy" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stop-color="#2b6fc4"/><stop offset="100%" stop-color="#1c4fae"/></linearGradient>
<linearGradient id="ak" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stop-color="#3a7d57"/><stop offset="100%" stop-color="#2c6043"/></linearGradient>
<style>
.t{font-family:'Segoe UI',Helvetica,Arial,sans-serif;fill:#dbe8ff}
.h{font-family:'Segoe UI',Helvetica,Arial,sans-serif;fill:#7fa8d8;font-size:12px;letter-spacing:2px;font-weight:700}
.b{font-family:'Segoe UI',Helvetica,Arial,sans-serif;fill:#cfe0fb;font-size:13px}
.s{font-family:'Segoe UI',Helvetica,Arial,sans-serif;fill:#90aede;font-size:10.5px}
.flow{stroke:#4a9fe2;stroke-opacity:.55;fill:none;stroke-width:1.6}
.dash{stroke:#9b8cf0;stroke-opacity:.5;fill:none;stroke-width:1.4;stroke-dasharray:5 4;animation:march 1.2s linear infinite}
@keyframes march{to{stroke-dashoffset:-18}}
</style>
<marker id="arr" markerWidth="9" markerHeight="9" refX="7" refY="4.5" orient="auto"><path d="M0 0 L9 4.5 L0 9 z" fill="#4a9fe2" fill-opacity="0.7"/></marker>
</defs>
<rect width="1200" height="640" fill="url(#abg)"/>
<text x="40" y="44" class="t" font-size="20" font-weight="700">Atlas OS — One Box, One Identity</text>
<text x="40" y="66" class="s" font-size="12.5">Hetzner CPX32 · 8 vCPU · 16 GB · Nuremberg — the entire stack on a single hardened server</text>
<!-- clients -->
<text x="40" y="110" class="h">CLIENTS</text>
<g>
<rect x="40" y="124" width="150" height="52" rx="10" fill="#11244a" stroke="#4a9fe2" stroke-opacity=".35"/>
<text x="115" y="148" class="b" text-anchor="middle">🌐 Browser</text>
<text x="115" y="166" class="s" text-anchor="middle">any device, HTTPS</text>
<rect x="40" y="190" width="150" height="52" rx="10" fill="#11244a" stroke="#9b8cf0" stroke-opacity=".4"/>
<text x="115" y="214" class="b" text-anchor="middle">📱 iOS / Laptop</text>
<text x="115" y="232" class="s" text-anchor="middle">Tailscale mesh</text>
</g>
<!-- Caddy -->
<text x="250" y="110" class="h">EDGE · TLS</text>
<rect x="250" y="124" width="150" height="118" rx="10" fill="url(#caddy)"/>
<text x="325" y="172" class="t" font-size="16" font-weight="700" text-anchor="middle">Caddy</text>
<text x="325" y="194" class="s" text-anchor="middle" fill="#cfe0fb">auto HTTPS</text>
<text x="325" y="210" class="s" text-anchor="middle" fill="#cfe0fb">sole public port</text>
<!-- Authentik -->
<text x="460" y="110" class="h">IDENTITY · SSO</text>
<rect x="460" y="124" width="150" height="118" rx="10" fill="url(#ak)"/>
<text x="535" y="166" class="t" font-size="16" font-weight="700" text-anchor="middle">Authentik</text>
<text x="535" y="188" class="s" text-anchor="middle" fill="#d6ecdf">forward_auth</text>
<text x="535" y="204" class="s" text-anchor="middle" fill="#d6ecdf">OIDC · MFA</text>
<text x="535" y="220" class="s" text-anchor="middle" fill="#d6ecdf">gates everything</text>
<!-- flows -->
<path class="flow" d="M190 150 H250" marker-end="url(#arr)"/>
<path class="dash" d="M190 216 C 220 216, 220 360, 110 360"/>
<path class="flow" d="M400 183 H460" marker-end="url(#arr)"/>
<path class="flow" d="M610 183 H680" marker-end="url(#arr)"/>
<!-- service tiers -->
<text x="680" y="110" class="h">SERVICES — behind SSO</text>
<g>
<rect x="680" y="124" width="480" height="58" rx="10" fill="#13294f" stroke="#4a9fe2" stroke-opacity=".3"/>
<text x="694" y="146" class="h" fill="#5f7bb0">CORE BUSINESS</text>
<text x="694" y="168" class="b">Odoo 19 · Nextcloud · Stalwart Mail · Forgejo · Vaultwarden</text>
<rect x="680" y="192" width="480" height="58" rx="10" fill="#13294f" stroke="#4a9fe2" stroke-opacity=".3"/>
<text x="694" y="214" class="h" fill="#5f7bb0">FINANCE &amp; OPS</text>
<text x="694" y="236" class="b">Firefly III · Enable Banking · Paperless · n8n · Uptime Kuma</text>
<rect x="680" y="260" width="480" height="72" rx="10" fill="#13294f" stroke="#9b8cf0" stroke-opacity=".4"/>
<text x="694" y="282" class="h" fill="#8a7ce0">AI &amp; INTELLIGENCE</text>
<text x="694" y="304" class="b">LiteLLM · Open-WebUI · Langfuse · Atlas Brain (15-min cycle)</text>
<text x="694" y="322" class="s">local Ollama → Groq/Cerebras (free) → Claude (paid) · NATS event bus</text>
<rect x="680" y="342" width="480" height="58" rx="10" fill="#13294f" stroke="#e0a234" stroke-opacity=".4"/>
<text x="694" y="364" class="h" fill="#c9921f">FLEET &amp; DESKTOP</text>
<text x="694" y="386" class="b">MeshCentral · Webtop Linux desktop · POS terminals · heartbeats</text>
</g>
<!-- Atlas Brain cycle -->
<text x="40" y="300" class="h">ATLAS BRAIN · every 15 min</text>
<rect x="40" y="314" width="360" height="96" rx="10" fill="#101f42" stroke="#9b8cf0" stroke-opacity=".4"/>
<text x="56" y="340" class="b">📧 7 mailboxes → 🏢 Odoo CRM → 🏦 bank feed</text>
<text x="56" y="362" class="s">↓ atlas-state.json</text>
<text x="56" y="382" class="b">🤖 LLM synthesis → daily brief</text>
<text x="56" y="400" class="s">→ Today · Money · Inbox · Pipeline panels</text>
<!-- managed sites -->
<text x="40" y="452" class="h">11 MANAGED SITES</text>
<rect x="40" y="466" width="1120" height="58" rx="10" fill="#0e1d3c" stroke="#4a9fe2" stroke-opacity=".25"/>
<text x="56" y="490" class="b">Your own brand sites + any client WordPress sites you host</text>
<text x="56" y="510" class="s">each in an isolated Docker stack — all fronted by Caddy</text>
<!-- footer rule -->
<rect x="40" y="560" width="1120" height="44" rx="10" fill="#0c1830"/>
<text x="60" y="588" class="s" fill="#7fa8d8">🔒 Public services pass Authentik forward_auth · root-level (SSH, remote desktop) is Tailscale-only · secrets chmod 600 · no bare basic-auth on the public internet</text>
</svg>