316 lines
21 KiB
XML
316 lines
21 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1400 1020">
|
|
<defs>
|
|
<style>
|
|
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap');
|
|
text { font-family: 'Inter', sans-serif; }
|
|
.mono { font-family: 'JetBrains Mono', monospace; }
|
|
.title { font-size: 28px; font-weight: 700; fill: #0f172a; }
|
|
.subtitle { font-size: 14px; font-weight: 400; fill: #64748b; }
|
|
.section-title { font-size: 16px; font-weight: 700; }
|
|
.label { font-size: 12px; font-weight: 600; fill: #1e293b; }
|
|
.label-sm { font-size: 10px; font-weight: 500; fill: #64748b; }
|
|
.label-mono { font-size: 11px; font-weight: 500; fill: #334155; font-family: 'JetBrains Mono', monospace; }
|
|
.badge { font-size: 9px; font-weight: 700; }
|
|
</style>
|
|
<linearGradient id="grad-cyan-violet-w" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#06b6d4;stop-opacity:0.06"/>
|
|
<stop offset="100%" style="stop-color:#8b5cf6;stop-opacity:0.02"/>
|
|
</linearGradient>
|
|
<linearGradient id="grad-card-cyan-w" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#06b6d4;stop-opacity:0.06"/>
|
|
<stop offset="100%" style="stop-color:#06b6d4;stop-opacity:0.01"/>
|
|
</linearGradient>
|
|
<linearGradient id="grad-card-violet-w" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#8b5cf6;stop-opacity:0.06"/>
|
|
<stop offset="100%" style="stop-color:#8b5cf6;stop-opacity:0.01"/>
|
|
</linearGradient>
|
|
<linearGradient id="grad-card-emerald-w" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#10b981;stop-opacity:0.06"/>
|
|
<stop offset="100%" style="stop-color:#10b981;stop-opacity:0.01"/>
|
|
</linearGradient>
|
|
<linearGradient id="grad-card-amber-w" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#f59e0b;stop-opacity:0.06"/>
|
|
<stop offset="100%" style="stop-color:#f59e0b;stop-opacity:0.01"/>
|
|
</linearGradient>
|
|
<linearGradient id="grad-header-w" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
<stop offset="0%" style="stop-color:#0891b2;stop-opacity:1"/>
|
|
<stop offset="50%" style="stop-color:#7c3aed;stop-opacity:1"/>
|
|
<stop offset="100%" style="stop-color:#059669;stop-opacity:1"/>
|
|
</linearGradient>
|
|
<linearGradient id="grad-emerald-cyan-w" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
<stop offset="0%" style="stop-color:#10b981;stop-opacity:0.06"/>
|
|
<stop offset="100%" style="stop-color:#06b6d4;stop-opacity:0.02"/>
|
|
</linearGradient>
|
|
<filter id="glow-sm-w"><feGaussianBlur stdDeviation="0.5" result="b"/><feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge></filter>
|
|
<filter id="shadow-w"><feDropShadow dx="0" dy="1" stdDeviation="2" flood-color="#000000" flood-opacity="0.08"/></filter>
|
|
</defs>
|
|
|
|
<!-- Background -->
|
|
<rect width="1400" height="1020" fill="#ffffff"/>
|
|
<rect width="1400" height="1020" fill="url(#grad-cyan-violet-w)" opacity="0.5"/>
|
|
|
|
<!-- Header -->
|
|
<text x="700" y="42" class="title" text-anchor="middle">SYNTAXIS Architecture</text>
|
|
<text x="700" y="62" class="subtitle" text-anchor="middle">Systematic Orchestration, Perfectly Arranged</text>
|
|
<line x1="400" y1="72" x2="1000" y2="72" stroke="url(#grad-header-w)" stroke-width="1" opacity="0.3"/>
|
|
|
|
<!-- USER INTERFACES -->
|
|
<g transform="translate(50, 90)">
|
|
<rect width="1300" height="160" rx="12" fill="url(#grad-card-cyan-w)" stroke="#0891b2" stroke-width="0.6" opacity="0.9" filter="url(#shadow-w)"/>
|
|
<text x="20" y="28" class="section-title" fill="#0891b2">User Interfaces</text>
|
|
<rect x="180" y="8" width="36" height="16" rx="4" fill="#0891b2" opacity="0.1"/>
|
|
<text x="198" y="20" class="badge" fill="#0891b2" text-anchor="middle">4</text>
|
|
|
|
<g transform="translate(30, 45)">
|
|
<rect width="280" height="100" rx="8" fill="#f8fafc" stroke="#0891b2" stroke-width="0.5" opacity="0.9"/>
|
|
<text x="140" y="24" class="label" text-anchor="middle" fill="#0891b2">CLI</text>
|
|
<text x="140" y="42" class="label-mono" text-anchor="middle">syntaxis-cli</text>
|
|
<text x="140" y="60" class="label-sm" text-anchor="middle">clap structured commands</text>
|
|
<text x="140" y="76" class="label-sm" text-anchor="middle">Automation & CI/CD</text>
|
|
<rect x="95" y="84" width="90" height="12" rx="3" fill="#0891b2" opacity="0.1"/>
|
|
<text x="140" y="93" class="badge" fill="#0891b2" text-anchor="middle">ACTIVE</text>
|
|
</g>
|
|
|
|
<g transform="translate(340, 45)">
|
|
<rect width="280" height="100" rx="8" fill="#f8fafc" stroke="#7c3aed" stroke-width="0.5" opacity="0.9"/>
|
|
<text x="140" y="24" class="label" text-anchor="middle" fill="#7c3aed">TUI</text>
|
|
<text x="140" y="42" class="label-mono" text-anchor="middle">syntaxis-tui</text>
|
|
<text x="140" y="60" class="label-sm" text-anchor="middle">ratatui + vim keys (hjkl)</text>
|
|
<text x="140" y="76" class="label-sm" text-anchor="middle">Interactive & SSH-friendly</text>
|
|
<rect x="95" y="84" width="90" height="12" rx="3" fill="#7c3aed" opacity="0.1"/>
|
|
<text x="140" y="93" class="badge" fill="#7c3aed" text-anchor="middle">ACTIVE</text>
|
|
</g>
|
|
|
|
<g transform="translate(650, 45)">
|
|
<rect width="280" height="100" rx="8" fill="#f8fafc" stroke="#059669" stroke-width="0.5" opacity="0.9"/>
|
|
<text x="140" y="24" class="label" text-anchor="middle" fill="#059669">Dashboard</text>
|
|
<text x="140" y="42" class="label-mono" text-anchor="middle">Leptos WASM (CSR)</text>
|
|
<text x="140" y="60" class="label-sm" text-anchor="middle">Trunk + UnoCSS build</text>
|
|
<text x="140" y="76" class="label-sm" text-anchor="middle">Real-time & Responsive</text>
|
|
<rect x="95" y="84" width="90" height="12" rx="3" fill="#059669" opacity="0.1"/>
|
|
<text x="140" y="93" class="badge" fill="#059669" text-anchor="middle">ACTIVE</text>
|
|
</g>
|
|
|
|
<g transform="translate(960, 45)">
|
|
<rect width="280" height="100" rx="8" fill="#f8fafc" stroke="#d97706" stroke-width="0.5" opacity="0.9"/>
|
|
<text x="140" y="24" class="label" text-anchor="middle" fill="#d97706">REST API</text>
|
|
<text x="140" y="42" class="label-mono" text-anchor="middle">syntaxis-api (axum)</text>
|
|
<text x="140" y="60" class="label-sm" text-anchor="middle">Tower middleware + WebSocket</text>
|
|
<text x="140" y="76" class="label-sm" text-anchor="middle">Auth, Rate Limit, Metrics</text>
|
|
<rect x="95" y="84" width="90" height="12" rx="3" fill="#d97706" opacity="0.1"/>
|
|
<text x="140" y="93" class="badge" fill="#d97706" text-anchor="middle">ACTIVE</text>
|
|
</g>
|
|
</g>
|
|
|
|
<!-- Connection arrows -->
|
|
<g filter="url(#glow-sm-w)">
|
|
<line x1="220" y1="255" x2="420" y2="310" stroke="#0891b2" stroke-width="0.8" opacity="0.3" stroke-dasharray="4,4"/>
|
|
<line x1="530" y1="255" x2="560" y2="310" stroke="#7c3aed" stroke-width="0.8" opacity="0.3" stroke-dasharray="4,4"/>
|
|
<line x1="840" y1="255" x2="750" y2="310" stroke="#059669" stroke-width="0.8" opacity="0.3" stroke-dasharray="4,4"/>
|
|
<line x1="1150" y1="255" x2="900" y2="310" stroke="#d97706" stroke-width="0.8" opacity="0.3" stroke-dasharray="4,4"/>
|
|
</g>
|
|
|
|
<!-- CORE ENGINE -->
|
|
<g transform="translate(50, 310)">
|
|
<rect width="860" height="290" rx="12" fill="url(#grad-card-violet-w)" stroke="#7c3aed" stroke-width="0.6" opacity="0.9" filter="url(#shadow-w)"/>
|
|
<text x="20" y="28" class="section-title" fill="#7c3aed">Core Engine</text>
|
|
<text x="140" y="28" class="label-mono" fill="#94a3b8">syntaxis-core</text>
|
|
|
|
<g transform="translate(20, 45)">
|
|
<rect width="250" height="110" rx="8" fill="#f8fafc" stroke="#7c3aed" stroke-width="0.4" opacity="0.9"/>
|
|
<text x="125" y="22" class="label" text-anchor="middle" fill="#7c3aed">Domain Models</text>
|
|
<line x1="20" y1="30" x2="230" y2="30" stroke="#7c3aed" stroke-width="0.2" opacity="0.3"/>
|
|
<text x="20" y="48" class="label-mono">Project</text><text x="100" y="48" class="label-sm">id, name, metadata</text>
|
|
<text x="20" y="64" class="label-mono">Phase</text><text x="100" y="64" class="label-sm">create/devel/pub/arch</text>
|
|
<text x="20" y="80" class="label-mono">Task</text><text x="100" y="80" class="label-sm">state, priority, audit</text>
|
|
<text x="20" y="96" class="label-mono">Template</text><text x="100" y="96" class="label-sm">reusable structures</text>
|
|
</g>
|
|
|
|
<g transform="translate(290, 45)">
|
|
<rect width="250" height="110" rx="8" fill="#f8fafc" stroke="#0891b2" stroke-width="0.4" opacity="0.9"/>
|
|
<text x="125" y="22" class="label" text-anchor="middle" fill="#0891b2">Phase Lifecycle</text>
|
|
<line x1="20" y1="30" x2="230" y2="30" stroke="#0891b2" stroke-width="0.2" opacity="0.3"/>
|
|
<rect x="15" y="42" width="55" height="20" rx="4" fill="#0891b2" opacity="0.1"/>
|
|
<text x="42" y="56" class="badge" fill="#0891b2" text-anchor="middle">CREATE</text>
|
|
<text x="78" y="48" class="badge" fill="#94a3b8">→</text>
|
|
<rect x="85" y="42" width="50" height="20" rx="4" fill="#7c3aed" opacity="0.1"/>
|
|
<text x="110" y="56" class="badge" fill="#7c3aed" text-anchor="middle">DEVEL</text>
|
|
<text x="143" y="48" class="badge" fill="#94a3b8">→</text>
|
|
<rect x="150" y="42" width="50" height="20" rx="4" fill="#059669" opacity="0.1"/>
|
|
<text x="175" y="56" class="badge" fill="#059669" text-anchor="middle">PUBLISH</text>
|
|
<rect x="165" y="72" width="60" height="20" rx="4" fill="#d97706" opacity="0.1"/>
|
|
<text x="195" y="86" class="badge" fill="#d97706" text-anchor="middle">ARCHIVE</text>
|
|
<text x="125" y="104" class="label-sm" text-anchor="middle">State transitions with audit trail</text>
|
|
</g>
|
|
|
|
<g transform="translate(560, 45)">
|
|
<rect width="280" height="110" rx="8" fill="#f8fafc" stroke="#059669" stroke-width="0.4" opacity="0.9"/>
|
|
<text x="140" y="22" class="label" text-anchor="middle" fill="#059669">Business Logic</text>
|
|
<line x1="20" y1="30" x2="260" y2="30" stroke="#059669" stroke-width="0.2" opacity="0.3"/>
|
|
<text x="20" y="48" class="label-mono">Audit</text><text x="120" y="48" class="label-sm">Full change history & rollback</text>
|
|
<text x="20" y="64" class="label-mono">Checklist</text><text x="120" y="64" class="label-sm">Phase-based verification</text>
|
|
<text x="20" y="80" class="label-mono">Security</text><text x="120" y="80" class="label-sm">Auth & access control</text>
|
|
<text x="20" y="96" class="label-mono">Config</text><text x="120" y="96" class="label-sm">TOML + Nickel driven</text>
|
|
</g>
|
|
|
|
<g transform="translate(20, 170)">
|
|
<rect width="820" height="50" rx="8" fill="#f8fafc" stroke="#0891b2" stroke-width="0.2" opacity="0.7"/>
|
|
<text x="20" y="20" class="label-sm" fill="#0891b2">Quality</text>
|
|
<rect x="70" y="8" width="100" height="16" rx="4" fill="#059669" opacity="0.08"/>
|
|
<text x="120" y="20" class="badge" fill="#059669" text-anchor="middle">632+ TESTS</text>
|
|
<rect x="180" y="8" width="110" height="16" rx="4" fill="#0891b2" opacity="0.08"/>
|
|
<text x="235" y="20" class="badge" fill="#0891b2" text-anchor="middle">ZERO UNSAFE</text>
|
|
<rect x="300" y="8" width="110" height="16" rx="4" fill="#7c3aed" opacity="0.08"/>
|
|
<text x="355" y="20" class="badge" fill="#7c3aed" text-anchor="middle">NO UNWRAP()</text>
|
|
<rect x="420" y="8" width="90" height="16" rx="4" fill="#d97706" opacity="0.08"/>
|
|
<text x="465" y="20" class="badge" fill="#d97706" text-anchor="middle">100% DOCS</text>
|
|
<rect x="520" y="8" width="80" height="16" rx="4" fill="#059669" opacity="0.08"/>
|
|
<text x="560" y="20" class="badge" fill="#059669" text-anchor="middle">CLIPPY 0W</text>
|
|
<text x="20" y="40" class="label-sm" fill="#94a3b8">thiserror | Result<T> | #![forbid(unsafe_code)] | cargo fmt | cargo audit</text>
|
|
</g>
|
|
|
|
<g transform="translate(20, 230)">
|
|
<text x="0" y="12" class="label-sm" fill="#94a3b8">Test distribution:</text>
|
|
<text x="120" y="12" class="label-mono" style="font-size:9px">core:173</text>
|
|
<text x="200" y="12" class="label-mono" style="font-size:9px">tui-lib:262</text>
|
|
<text x="290" y="12" class="label-mono" style="font-size:9px">api-lib:93</text>
|
|
<text x="370" y="12" class="label-mono" style="font-size:9px">vapora:57</text>
|
|
<text x="440" y="12" class="label-mono" style="font-size:9px">dashboard:52</text>
|
|
<text x="530" y="12" class="label-mono" style="font-size:9px">shared:33</text>
|
|
<text x="600" y="12" class="label-mono" style="font-size:9px">tui:10</text>
|
|
<text x="660" y="12" class="label-mono" style="font-size:9px">dash-shared:4</text>
|
|
</g>
|
|
</g>
|
|
|
|
<!-- VAPORA SST -->
|
|
<g transform="translate(940, 310)">
|
|
<rect width="360" height="290" rx="12" fill="url(#grad-card-amber-w)" stroke="#d97706" stroke-width="0.6" opacity="0.9" filter="url(#shadow-w)"/>
|
|
<text x="20" y="28" class="section-title" fill="#d97706">VAPORA SST</text>
|
|
<text x="140" y="28" class="label-mono" fill="#94a3b8">syntaxis-vapora</text>
|
|
|
|
<g transform="translate(20, 45)">
|
|
<rect width="320" height="90" rx="8" fill="#f8fafc" stroke="#d97706" stroke-width="0.4" opacity="0.9"/>
|
|
<text x="160" y="22" class="label" text-anchor="middle" fill="#d97706">Orchestration Adapter</text>
|
|
<line x1="20" y1="30" x2="300" y2="30" stroke="#d97706" stroke-width="0.2" opacity="0.3"/>
|
|
<text x="20" y="48" class="label-sm">Agent triggering on task state changes</text>
|
|
<text x="20" y="64" class="label-sm">Phase-based workflow orchestration</text>
|
|
<text x="20" y="80" class="label-sm">Enterprise audit & rollback support</text>
|
|
</g>
|
|
|
|
<g transform="translate(20, 150)">
|
|
<rect width="320" height="70" rx="8" fill="#f8fafc" stroke="#d97706" stroke-width="0.4" opacity="0.9"/>
|
|
<text x="160" y="22" class="label" text-anchor="middle" fill="#d97706">Event Streaming</text>
|
|
<line x1="20" y1="30" x2="300" y2="30" stroke="#d97706" stroke-width="0.2" opacity="0.3"/>
|
|
<text x="20" y="48" class="label-mono">NATS</text>
|
|
<text x="80" y="48" class="label-sm">KOGRAL & SYNTAXIS_SOURCE streams</text>
|
|
<text x="20" y="64" class="label-sm">Real-time federation between services</text>
|
|
</g>
|
|
|
|
<rect x="100" y="235" width="160" height="18" rx="4" fill="#d97706" opacity="0.08"/>
|
|
<text x="180" y="248" class="badge" fill="#d97706" text-anchor="middle">57 TESTS | ACTIVE</text>
|
|
</g>
|
|
|
|
<!-- PERSISTENCE LAYER -->
|
|
<g transform="translate(50, 620)">
|
|
<rect width="1250" height="160" rx="12" fill="url(#grad-card-emerald-w)" stroke="#059669" stroke-width="0.6" opacity="0.9" filter="url(#shadow-w)"/>
|
|
<text x="20" y="28" class="section-title" fill="#059669">Persistence Layer</text>
|
|
<text x="180" y="28" class="label-mono" fill="#94a3b8">Database trait abstraction</text>
|
|
|
|
<g transform="translate(30, 45)">
|
|
<rect width="350" height="95" rx="8" fill="#f8fafc" stroke="#059669" stroke-width="0.4" opacity="0.9"/>
|
|
<text x="175" y="22" class="label" text-anchor="middle" fill="#059669">SQLite (Default)</text>
|
|
<line x1="20" y1="30" x2="330" y2="30" stroke="#059669" stroke-width="0.2" opacity="0.3"/>
|
|
<text x="20" y="48" class="label-mono">sqlx async</text><text x="140" y="48" class="label-sm">Connection pooling + WAL mode</text>
|
|
<text x="20" y="64" class="label-sm">Prepared statements | Indexed queries | Batch ops</text>
|
|
<text x="20" y="82" class="label-sm" fill="#94a3b8">Best for: Solo dev, small teams, local</text>
|
|
</g>
|
|
|
|
<g transform="translate(420, 45)">
|
|
<rect width="380" height="95" rx="8" fill="#f8fafc" stroke="#7c3aed" stroke-width="0.4" opacity="0.9"/>
|
|
<text x="190" y="22" class="label" text-anchor="middle" fill="#7c3aed">SurrealDB 2.3</text>
|
|
<line x1="20" y1="30" x2="360" y2="30" stroke="#7c3aed" stroke-width="0.2" opacity="0.3"/>
|
|
<text x="20" y="48" class="label-mono">40+ operations</text><text x="160" y="48" class="label-sm">Type-safe async | JSON binding</text>
|
|
<text x="20" y="64" class="label-sm">In-Memory | File (RocksDB) | Server | Docker | K8s</text>
|
|
<text x="20" y="82" class="label-sm" fill="#94a3b8">Best for: Teams, distributed, enterprise</text>
|
|
</g>
|
|
|
|
<g transform="translate(840, 45)">
|
|
<rect width="380" height="95" rx="8" fill="#f8fafc" stroke="#0891b2" stroke-width="0.4" opacity="0.9"/>
|
|
<text x="190" y="22" class="label" text-anchor="middle" fill="#0891b2">Configuration</text>
|
|
<line x1="20" y1="30" x2="360" y2="30" stroke="#0891b2" stroke-width="0.2" opacity="0.3"/>
|
|
<text x="20" y="48" class="label-mono">TOML + Nickel</text><text x="160" y="48" class="label-sm">Runtime backend selection</text>
|
|
<text x="20" y="64" class="label-sm">database-default.toml | database-surrealdb.toml</text>
|
|
<text x="20" y="82" class="label-sm" fill="#94a3b8">Switch via: cp configs/database-*.toml configs/database.toml</text>
|
|
</g>
|
|
</g>
|
|
|
|
<!-- Arrows core to persistence -->
|
|
<g filter="url(#glow-sm-w)">
|
|
<line x1="480" y1="600" x2="350" y2="665" stroke="#059669" stroke-width="0.8" opacity="0.25" stroke-dasharray="4,4"/>
|
|
<line x1="480" y1="600" x2="660" y2="665" stroke="#7c3aed" stroke-width="0.8" opacity="0.25" stroke-dasharray="4,4"/>
|
|
<line x1="700" y1="600" x2="1080" y2="665" stroke="#0891b2" stroke-width="0.8" opacity="0.25" stroke-dasharray="4,4"/>
|
|
</g>
|
|
|
|
<!-- SHARED LIBRARIES -->
|
|
<g transform="translate(50, 800)">
|
|
<rect width="1250" height="100" rx="12" fill="url(#grad-emerald-cyan-w)" stroke="#0891b2" stroke-width="0.4" opacity="0.7" filter="url(#shadow-w)"/>
|
|
<text x="20" y="28" class="section-title" fill="#0891b2">Shared Libraries</text>
|
|
|
|
<g transform="translate(30, 40)">
|
|
<rect width="380" height="45" rx="6" fill="#f8fafc" stroke="#0891b2" stroke-width="0.3" opacity="0.8"/>
|
|
<text x="15" y="18" class="label-mono" fill="#0891b2">shared-api-lib</text>
|
|
<text x="15" y="35" class="label-sm">REST utilities, request/response helpers (93 tests)</text>
|
|
</g>
|
|
|
|
<g transform="translate(440, 40)">
|
|
<rect width="380" height="45" rx="6" fill="#f8fafc" stroke="#7c3aed" stroke-width="0.3" opacity="0.8"/>
|
|
<text x="15" y="18" class="label-mono" fill="#7c3aed">rust-tui</text>
|
|
<text x="15" y="35" class="label-sm">TUI utilities, ratatui helpers (262 tests)</text>
|
|
</g>
|
|
|
|
<g transform="translate(850, 40)">
|
|
<rect width="380" height="45" rx="6" fill="#f8fafc" stroke="#059669" stroke-width="0.3" opacity="0.8"/>
|
|
<text x="15" y="18" class="label-mono" fill="#059669">tools-shared</text>
|
|
<text x="15" y="35" class="label-sm">Configuration, utilities, helpers (33 tests)</text>
|
|
</g>
|
|
</g>
|
|
|
|
<!-- Infrastructure sidebar -->
|
|
<g transform="translate(1310, 310)">
|
|
<rect width="80" height="580" rx="8" fill="#f8fafc" stroke="#cbd5e1" stroke-width="0.3" opacity="0.6"/>
|
|
<text x="40" y="20" class="label-sm" text-anchor="middle" fill="#94a3b8">Infra</text>
|
|
<g transform="translate(10, 50)">
|
|
<rect width="60" height="22" rx="4" fill="#0891b2" opacity="0.06"/><text x="30" y="15" class="badge" fill="#0891b2" text-anchor="middle">tokio</text>
|
|
</g>
|
|
<g transform="translate(10, 82)">
|
|
<rect width="60" height="22" rx="4" fill="#7c3aed" opacity="0.06"/><text x="30" y="15" class="badge" fill="#7c3aed" text-anchor="middle">axum</text>
|
|
</g>
|
|
<g transform="translate(10, 114)">
|
|
<rect width="60" height="22" rx="4" fill="#059669" opacity="0.06"/><text x="30" y="15" class="badge" fill="#059669" text-anchor="middle">sqlx</text>
|
|
</g>
|
|
<g transform="translate(10, 146)">
|
|
<rect width="60" height="22" rx="4" fill="#d97706" opacity="0.06"/><text x="30" y="15" class="badge" fill="#d97706" text-anchor="middle">serde</text>
|
|
</g>
|
|
<g transform="translate(10, 178)">
|
|
<rect width="60" height="22" rx="4" fill="#0891b2" opacity="0.06"/><text x="30" y="15" class="badge" fill="#0891b2" text-anchor="middle">clap</text>
|
|
</g>
|
|
<g transform="translate(10, 210)">
|
|
<rect width="60" height="22" rx="4" fill="#7c3aed" opacity="0.06"/><text x="30" y="15" class="badge" fill="#7c3aed" text-anchor="middle">ratatui</text>
|
|
</g>
|
|
<g transform="translate(10, 242)">
|
|
<rect width="60" height="22" rx="4" fill="#059669" opacity="0.06"/><text x="30" y="15" class="badge" fill="#059669" text-anchor="middle">leptos</text>
|
|
</g>
|
|
<g transform="translate(10, 274)">
|
|
<rect width="60" height="22" rx="4" fill="#d97706" opacity="0.06"/><text x="30" y="15" class="badge" fill="#d97706" text-anchor="middle">tower</text>
|
|
</g>
|
|
<g transform="translate(10, 306)">
|
|
<rect width="60" height="22" rx="4" fill="#0891b2" opacity="0.06"/><text x="30" y="15" class="badge" fill="#0891b2" text-anchor="middle">nats</text>
|
|
</g>
|
|
<g transform="translate(10, 338)">
|
|
<rect width="60" height="22" rx="4" fill="#7c3aed" opacity="0.06"/><text x="30" y="15" class="badge" fill="#7c3aed" text-anchor="middle">nickel</text>
|
|
</g>
|
|
</g>
|
|
|
|
<!-- Footer -->
|
|
<text x="700" y="1005" class="label-sm" text-anchor="middle" fill="#94a3b8">SYNTAXIS v0.x | Rust 2021 (MSRV 1.75+) | 10K+ LOC | 632+ tests | Production Beta</text>
|
|
</svg>
|