atlas-os/assets/header.svg
Atlas Developer 8c1efe6e30 feat: Atlas OS v2.0 — space-grade animated README, full productified repo
- assets/header.svg: animated SVG header (twinkling stars, orbiting service dots,
  Atlas A logo with glow, float/pulse animations, corner accents)
- README.md: animated banner, full 39-app service catalog, Mermaid architecture,
  AI stack table, tech stack, quick-deploy, repo structure, security model
- ARCHITECTURE.md: one-box philosophy, 5-tier service layers, data flow diagram,
  Caddy SSO pattern, AI mesh topology, Docker Compose topology
- SERVICES.md: all 55 containers + 20 systemd services documented
- CHANGELOG.md: full build history from v0.5 to v2.0
- assets/logo.svg: Atlas A logo with gradient
- deploy/install.sh: one-command installer (Docker + Caddy + Tailscale + stacks)
- deploy/compose/atlas-core.yml: Authentik + Nextcloud + Stalwart + Forgejo + Vaultwarden
- deploy/caddy/Caddyfile.template: Authentik SSO pattern, sanitized
- deploy/README.md: full deployment guide
- server/: sanitized atlas_brain.py, cockpit_shim.py, intelligence.py, meridian.py,
  atlas_router_api.py, cli-atlas.py (all secrets stripped, env var patterns)
- server/systemd/: 6 atlas-* service unit files
- server/README.md: deployment and configuration guide

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

165 lines
8.9 KiB
XML

<svg width="1200" height="400" viewBox="0 0 1200 400" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="bg" cx="50%" cy="45%">
<stop offset="0%" stop-color="#0d1528"/>
<stop offset="55%" stop-color="#08101e"/>
<stop offset="100%" stop-color="#020408"/>
</radialGradient>
<radialGradient id="neb1" cx="25%" cy="55%">
<stop offset="0%" stop-color="#2d1a5e" stop-opacity="0.45"/>
<stop offset="100%" stop-color="#2d1a5e" stop-opacity="0"/>
</radialGradient>
<radialGradient id="neb2" cx="75%" cy="40%">
<stop offset="0%" stop-color="#0e3a6e" stop-opacity="0.38"/>
<stop offset="100%" stop-color="#0e3a6e" stop-opacity="0"/>
</radialGradient>
<radialGradient id="neb3" cx="50%" cy="50%">
<stop offset="0%" stop-color="#1a2e5e" stop-opacity="0.28"/>
<stop offset="100%" stop-color="#1a2e5e" stop-opacity="0"/>
</radialGradient>
<radialGradient id="logoglow" cx="50%" cy="50%">
<stop offset="0%" stop-color="#e0a234" stop-opacity="0.22"/>
<stop offset="100%" stop-color="#e0a234" stop-opacity="0"/>
</radialGradient>
<filter id="gf" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="5" result="b"/>
<feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
<filter id="sf">
<feGaussianBlur stdDeviation="1.2"/>
</filter>
<style>
@keyframes t1{0%,100%{opacity:.15}50%{opacity:.95}}
@keyframes t2{0%,100%{opacity:.6}40%{opacity:.1}80%{opacity:.9}}
@keyframes t3{0%,100%{opacity:.3}60%{opacity:1}}
@keyframes t4{0%,100%{opacity:.8}25%{opacity:.2}75%{opacity:.7}}
@keyframes orb1{from{transform:rotate(0deg) translateX(100px) rotate(0deg)}to{transform:rotate(360deg) translateX(100px) rotate(-360deg)}}
@keyframes orb2{from{transform:rotate(72deg) translateX(100px) rotate(-72deg)}to{transform:rotate(432deg) translateX(100px) rotate(-432deg)}}
@keyframes orb3{from{transform:rotate(144deg) translateX(100px) rotate(-144deg)}to{transform:rotate(504deg) translateX(100px) rotate(-504deg)}}
@keyframes orb4{from{transform:rotate(30deg) translateX(148px) rotate(-30deg)}to{transform:rotate(390deg) translateX(148px) rotate(-390deg)}}
@keyframes orb5{from{transform:rotate(210deg) translateX(148px) rotate(-210deg)}to{transform:rotate(570deg) translateX(148px) rotate(-570deg)}}
@keyframes pulse{0%,100%{opacity:.7}50%{opacity:1}}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
@keyframes glow{0%,100%{opacity:.55}50%{opacity:.9}}
.s1{animation:t1 3.1s ease-in-out infinite}
.s2{animation:t2 4.7s ease-in-out infinite}
.s3{animation:t3 2.3s ease-in-out infinite}
.s4{animation:t4 5.9s ease-in-out infinite}
.o1{animation:orb1 22s linear infinite;transform-origin:600px 195px}
.o2{animation:orb2 22s linear infinite;transform-origin:600px 195px}
.o3{animation:orb3 22s linear infinite;transform-origin:600px 195px}
.o4{animation:orb4 38s linear infinite;transform-origin:600px 195px}
.o5{animation:orb5 38s linear infinite;transform-origin:600px 195px}
.lg{animation:pulse 4s ease-in-out infinite}
.ti{animation:float 6s ease-in-out infinite}
.gl{animation:glow 3s ease-in-out infinite}
</style>
</defs>
<!-- Space background -->
<rect width="1200" height="400" fill="url(#bg)"/>
<!-- Nebulae -->
<ellipse cx="270" cy="220" rx="480" ry="260" fill="url(#neb1)"/>
<ellipse cx="950" cy="180" rx="420" ry="240" fill="url(#neb2)"/>
<ellipse cx="600" cy="200" rx="320" ry="200" fill="url(#neb3)"/>
<!-- Stars layer 1 -->
<circle class="s1" cx="45" cy="28" r="0.9" fill="#fff"/>
<circle class="s3" cx="112" cy="61" r="1.2" fill="#fff"/>
<circle class="s2" cx="78" cy="145" r="0.7" fill="#cdf"/>
<circle class="s4" cx="23" cy="190" r="1.0" fill="#fff"/>
<circle class="s1" cx="167" cy="47" r="0.8" fill="#ddf"/>
<circle class="s3" cx="204" cy="312" r="1.3" fill="#fff"/>
<circle class="s2" cx="55" cy="342" r="0.9" fill="#fff"/>
<circle class="s4" cx="130" cy="375" r="0.7" fill="#ccf"/>
<circle class="s1" cx="310" cy="19" r="1.1" fill="#fff"/>
<circle class="s2" cx="388" cy="55" r="0.8" fill="#ddf"/>
<circle class="s3" cx="340" cy="352" r="1.0" fill="#fff"/>
<circle class="s1" cx="275" cy="280" r="0.7" fill="#fff"/>
<circle class="s4" cx="95" cy="88" r="1.4" fill="#fff"/>
<circle class="s2" cx="188" cy="220" r="0.9" fill="#ccf"/>
<circle class="s3" cx="450" cy="20" r="1.2" fill="#fff"/>
<circle class="s1" cx="520" cy="38" r="0.8" fill="#ddf"/>
<circle class="s4" cx="490" cy="365" r="1.1" fill="#fff"/>
<circle class="s2" cx="415" cy="390" r="0.7" fill="#fff"/>
<circle class="s3" cx="355" cy="160" r="1.0" fill="#ccf"/>
<circle class="s1" cx="240" cy="130" r="0.9" fill="#fff"/>
<circle class="s2" cx="680" cy="25" r="1.2" fill="#fff"/>
<circle class="s3" cx="740" cy="48" r="0.8" fill="#ddf"/>
<circle class="s1" cx="810" cy="19" r="1.0" fill="#fff"/>
<circle class="s4" cx="870" cy="62" r="1.3" fill="#fff"/>
<circle class="s2" cx="935" cy="34" r="0.7" fill="#ccf"/>
<circle class="s3" cx="990" cy="88" r="1.1" fill="#fff"/>
<circle class="s1" cx="1055" cy="45" r="0.9" fill="#ddf"/>
<circle class="s4" cx="1120" cy="28" r="1.2" fill="#fff"/>
<circle class="s2" cx="1165" cy="110" r="0.8" fill="#fff"/>
<circle class="s3" cx="1080" cy="170" r="1.0" fill="#ccf"/>
<circle class="s1" cx="1140" cy="250" r="0.7" fill="#fff"/>
<circle class="s4" cx="1010" cy="300" r="1.3" fill="#fff"/>
<circle class="s2" cx="940" cy="360" r="0.9" fill="#ddf"/>
<circle class="s3" cx="820" cy="385" r="1.1" fill="#fff"/>
<circle class="s1" cx="750" cy="340" r="0.8" fill="#fff"/>
<circle class="s4" cx="680" cy="370" r="1.0" fill="#ccf"/>
<circle class="s2" cx="1180" cy="350" r="0.7" fill="#fff"/>
<circle class="s3" cx="1100" cy="390" r="1.2" fill="#fff"/>
<!-- Bright accent stars -->
<circle class="s3" cx="152" cy="52" r="1.8" fill="#fff" filter="url(#sf)"/>
<circle class="s1" cx="1048" cy="128" r="1.6" fill="#fff" filter="url(#sf)"/>
<circle class="s4" cx="380" cy="320" r="1.5" fill="#e0e8ff" filter="url(#sf)"/>
<circle class="s2" cx="870" cy="310" r="1.7" fill="#fff" filter="url(#sf)"/>
<circle class="s3" cx="60" cy="295" r="1.5" fill="#f0f4ff" filter="url(#sf)"/>
<!-- Center region stars -->
<circle class="s2" cx="445" cy="185" r="0.8" fill="#fff"/>
<circle class="s1" cx="412" cy="240" r="1.0" fill="#ccf"/>
<circle class="s4" cx="755" cy="170" r="0.9" fill="#fff"/>
<circle class="s3" cx="788" cy="228" r="0.7" fill="#ddf"/>
<circle class="s1" cx="505" cy="320" r="1.1" fill="#fff"/>
<circle class="s2" cx="700" cy="325" r="0.8" fill="#fff"/>
<!-- Orbit rings -->
<circle cx="600" cy="195" r="100" fill="none" stroke="#e0a234" stroke-width="0.6" stroke-opacity="0.18"/>
<circle cx="600" cy="195" r="148" fill="none" stroke="#4a9fe2" stroke-width="0.5" stroke-opacity="0.12"/>
<!-- Logo glow halo -->
<ellipse class="gl" cx="600" cy="195" rx="115" ry="80" fill="url(#logoglow)"/>
<!-- Atlas A logo -->
<g class="lg" filter="url(#gf)">
<path d="M600 118 L662 218 L634 218 L626 198 L574 198 L566 218 L538 218 Z" fill="#e0a234"/>
<path d="M600 143 L619 192 L581 192 Z" fill="#08101e"/>
</g>
<!-- Orbiting service dots inner ring -->
<circle class="o1" cx="600" cy="195" r="5" fill="#4ec98a" opacity="0.9"/>
<circle class="o2" cx="600" cy="195" r="4.5" fill="#4a9fe2" opacity="0.9"/>
<circle class="o3" cx="600" cy="195" r="5" fill="#9b8cf0" opacity="0.9"/>
<!-- Outer ring -->
<circle class="o4" cx="600" cy="195" r="4" fill="#e2655f" opacity="0.85"/>
<circle class="o5" cx="600" cy="195" r="4.5" fill="#e0a234" opacity="0.85"/>
<!-- Title -->
<g class="ti">
<text x="600" y="302" text-anchor="middle"
font-family="-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif"
font-size="48" font-weight="700" letter-spacing="14" fill="#e8edf7">ATLAS OS</text>
</g>
<!-- Subtitle -->
<text x="600" y="336" text-anchor="middle"
font-family="-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif"
font-size="13" letter-spacing="4.5" fill="#6c7a9c">YOUR BUSINESS · ONE BOX · BEYOND LIMITS</text>
<!-- Decorative line -->
<line x1="390" y1="360" x2="810" y2="360" stroke="#e0a234" stroke-width="0.5" stroke-opacity="0.3"/>
<!-- Corner accents -->
<line x1="20" y1="20" x2="60" y2="20" stroke="#e0a234" stroke-width="0.8" stroke-opacity="0.4"/>
<line x1="20" y1="20" x2="20" y2="50" stroke="#e0a234" stroke-width="0.8" stroke-opacity="0.4"/>
<line x1="1180" y1="20" x2="1140" y2="20" stroke="#e0a234" stroke-width="0.8" stroke-opacity="0.4"/>
<line x1="1180" y1="20" x2="1180" y2="50" stroke="#e0a234" stroke-width="0.8" stroke-opacity="0.4"/>
<line x1="20" y1="380" x2="60" y2="380" stroke="#e0a234" stroke-width="0.8" stroke-opacity="0.4"/>
<line x1="20" y1="380" x2="20" y2="350" stroke="#e0a234" stroke-width="0.8" stroke-opacity="0.4"/>
<line x1="1180" y1="380" x2="1140" y2="380" stroke="#e0a234" stroke-width="0.8" stroke-opacity="0.4"/>
<line x1="1180" y1="380" x2="1180" y2="350" stroke="#e0a234" stroke-width="0.8" stroke-opacity="0.4"/>
</svg>