stratumiops/assets/web/index.html
Jesús Pérez 1680d80a3d
Some checks failed
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (push) Has been cancelled
Nickel Type Check / Nickel Type Checking (push) Has been cancelled
chore: Init repo, add docs
2026-01-22 22:15:19 +00:00

1 line
23 KiB
HTML

<!doctype html><html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title data-en="StratumIOps - Intelligent Infrastructure Operations" data-es="StratumIOps - Operaciones Inteligentes de Infraestructura" > StratumIOps </title><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&display=swap" rel="stylesheet" /><style> *{margin:0;padding:0;box-sizing:border-box;}body{font-family:"Inter",-apple-system,BlinkMacSystemFont,sans-serif;background:#0F172A;color:#ffffff;overflow-x:hidden;}.gradient-bg{position:fixed;top:0;left:0;width:100%;height:100%;z-index:-1;background:radial-gradient( circle at 20% 50%,rgba(99,102,241,0.15) 0%,transparent 50% ),radial-gradient( circle at 80% 80%,rgba(34,211,238,0.15) 0%,transparent 50% ),radial-gradient( circle at 40% 90%,rgba(79,70,229,0.1) 0%,transparent 50% );}.language-toggle{position:fixed;top:2rem;right:2rem;z-index:100;display:flex;gap:0.5rem;background:rgba(255,255,255,0.05);border:1px solid rgba(99,102,241,0.3);border-radius:20px;padding:0.3rem 0.3rem;}.lang-btn{background:transparent;border:none;color:#94a3b8;padding:0.5rem 1rem;border-radius:18px;cursor:pointer;font-weight:700;font-size:0.85rem;text-transform:uppercase;transition:all 0.3s ease;font-family:"Inter",sans-serif;}.lang-btn.active{background:linear-gradient(135deg,#6366F1 0%,#22D3EE 100%);color:#fff;}.lang-btn:hover{color:#22D3EE;}.container{max-width:1200px;margin:0 auto;padding:2rem;position:relative;}header{text-align:center;padding:5rem 0 4rem;animation:fadeInUp 0.8s ease-out;}@keyframes fadeInUp{from{opacity:0;transform:translateY(30px);}to{opacity:1;transform:translateY(0);}}.status-badge{display:inline-block;background:rgba(34,211,238,0.2);border:1px solid #22D3EE;color:#22D3EE;padding:0.5rem 1.5rem;border-radius:50px;font-size:0.85rem;font-weight:700;margin-bottom:1.5rem;}.logo-container{margin-bottom:2rem;}.logo-container img{max-width:500px;width:100%;height:auto;filter:drop-shadow(0 0 30px rgba(99,102,241,0.4));}.tagline{font-size:0.95rem;color:#22D3EE;font-weight:600;letter-spacing:0.1em;text-transform:uppercase;margin-bottom:1rem;}h1{font-size:2.8rem;font-weight:800;line-height:1.2;margin-bottom:1.5rem;background:linear-gradient( 135deg,#6366F1 0%,#22D3EE 50%,#06B6D4 100% );-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;}.hero-subtitle{font-size:1.15rem;color:#cbd5e1;max-width:800px;margin:0 auto 2rem;line-height:1.8;}.highlight{color:#22D3EE;font-weight:700;}.section{margin:4rem 0;animation:fadeInUp 0.8s ease-out;}.section-title{font-size:2rem;font-weight:800;margin-bottom:2rem;color:#22D3EE;text-align:center;}.section-title span{background:linear-gradient(135deg,#6366F1 0%,#22D3EE 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;}.problems-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1.5rem;margin-top:2rem;}.problem-card{background:rgba(255,255,255,0.03);border:1px solid rgba(99,102,241,0.3);border-radius:12px;padding:2rem;transition:all 0.3s ease;position:relative;overflow:hidden;}.problem-card:hover{transform:translateY(-5px);background:rgba(255,255,255,0.05);border-color:rgba(34,211,238,0.5);}.problem-number{font-size:2rem;font-weight:800;background:linear-gradient(135deg,#6366F1 0%,#22D3EE 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;line-height:1;margin-bottom:0.5rem;}.problem-card h3{color:#6366F1;font-size:1.05rem;margin-bottom:0.7rem;font-weight:700;}.problem-card p{color:#cbd5e1;font-size:0.9rem;line-height:1.6;}.problem-card ul{color:#cbd5e1;font-size:0.9rem;line-height:1.6;list-style:none;padding:0;margin:0;}.problem-card ul li{padding-left:1.2rem;margin-bottom:0.5rem;position:relative;}.problem-card ul li:before{content:"•";color:#6366F1;font-weight:bold;position:absolute;left:0;}.tech-stack{display:flex;flex-wrap:wrap;gap:1rem;margin-top:2rem;justify-content:center;}.tech-badge{background:rgba(34,211,238,0.15);border:1px solid #22D3EE;padding:0.5rem 1rem;border-radius:20px;font-size:0.8rem;color:#22D3EE;font-weight:700;}.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:2rem;margin-top:2rem;}.feature-box{background:linear-gradient( 135deg,rgba(99,102,241,0.1) 0%,rgba(34,211,238,0.1) 100% );border-radius:12px;padding:2rem;border-left:4px solid #6366F1;transition:all 0.3s ease;}.feature-box:hover{background:linear-gradient( 135deg,rgba(99,102,241,0.15) 0%,rgba(34,211,238,0.15) 100% );transform:translateY(-3px);}.feature-icon{font-size:2.5rem;margin-bottom:1rem;}.feature-title{font-size:1.15rem;font-weight:700;color:#6366F1;margin-bottom:0.7rem;}.feature-text{color:#cbd5e1;font-size:0.95rem;line-height:1.7;}.feature-text.feature-text{list-style:none;padding:0;margin:0;}.feature-text li{padding-left:1.2rem;margin-bottom:0.6rem;position:relative;}.feature-text li:before{content:"▸";color:#22D3EE;font-weight:bold;position:absolute;left:0;}.components-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem;margin-top:2rem;}.component-item{background:rgba(99,102,241,0.1);padding:1.2rem;border-radius:8px;font-size:0.9rem;border:1px solid rgba(99,102,241,0.3);transition:all 0.2s ease;text-align:center;}.component-item:hover{background:rgba(99,102,241,0.15);transform:translateY(-2px);}.component-name{color:#6366F1;font-weight:700;display:block;margin-bottom:0.3rem;}.component-role{color:#94a3b8;font-size:0.85rem;}.cta-section{text-align:center;margin:5rem 0 3rem;padding:4rem 2rem;background:linear-gradient( 135deg,rgba(99,102,241,0.1) 0%,rgba(34,211,238,0.1) 100% );border-radius:20px;border:1px solid rgba(99,102,241,0.3);}.cta-title{font-size:2rem;font-weight:800;margin-bottom:1rem;background:linear-gradient(135deg,#6366F1 0%,#22D3EE 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;}.cta-button{display:inline-block;background:linear-gradient( 135deg,#6366F1 0%,#4F46E5 50%,#22D3EE 100% );color:#fff;padding:1.1rem 2.8rem;border-radius:50px;text-decoration:none;font-weight:800;font-size:1rem;transition:all 0.3s ease;box-shadow:0 10px 30px rgba(99,102,241,0.3);text-transform:uppercase;letter-spacing:0.05em;border:none;cursor:pointer;}.cta-button:hover{transform:translateY(-3px) scale(1.05);box-shadow:0 20px 50px rgba(99,102,241,0.5);}footer{text-align:center;padding:3rem 0 2rem;color:#64748b;border-top:1px solid rgba(255,255,255,0.1);margin-top:4rem;font-size:0.9rem;}footer p:first-child{font-weight:700;color:#94a3b8;}footer p:last-child{margin-top:0.5rem;font-size:0.85rem;}.hidden{display:none;}@media (max-width:768px){h1{font-size:2rem;}.hero-subtitle{font-size:1rem;}.logo-container img{max-width:320px;}.section-title{font-size:1.6rem;}.cta-title{font-size:1.6rem;}.language-toggle{top:1rem;right:1rem;}}</style></head><body><div class="gradient-bg"></div><div class="language-toggle"><button class="lang-btn active" data-lang="en" onclick="switchLanguage('en')" > EN </button><button class="lang-btn" data-lang="es" onclick="switchLanguage('es')"> ES </button></div><div class="container"><header><span class="status-badge" data-en="✅ v0.1.0" data-es="✅ v0.1.0" >✅ v0.1.0</span ><div class="logo-container"><img src="/stratumiops.svg" alt="StratumIOps - Infrastructure Operations" /></div><p class="tagline">Infrastructure Operations Ecosystem</p><h1 data-en="Five Projects<br>One Integrated Ecosystem" data-es="Cinco Proyectos<br>Un Ecosistema Integrado" > Five Projects </h1><p class="hero-subtitle"><span class="highlight" data-en="Infrastructure operations" data-es="Operaciones de infraestructura" >Infrastructure operations</span ><span data-en=", AI agent orchestration, knowledge management, secrets management, and configuration generation." data-es=", orquestación de agentes IA, gestión de conocimiento, gestión de secretos, y generación de configuración." >, AI agent orchestration, knowledge management, secrets management, and configuration generation. </span><br><span><strong data-en="100% Rust. Zero compromises." data-es="100% Rust. Sin compromisos." >100% Rust. Zero compromises.</strong ></span></p></header><section class="section"><h2 class="section-title"><span data-en="The 4 Problems It Solves" data-es="Los 4 Problemas que Resuelve" >The 4 Problems It Solves</span ></h2><div class="problems-grid"><div class="problem-card"><div class="problem-number">01</div><h3 data-en="Scattered Knowledge" data-es="Conocimiento Disperso"> Scattered Knowledge </h3><ul data-en="<li>Decisions in Slack</li><li>Guidelines in wikis</li><li>Patterns in docs—all disconnected</li><li>Kogral unifies with git-native markdown + MCP</li>" data-es="<li>Decisiones en Slack</li><li>Guías en wikis</li><li>Patrones en docs—todo desconectado</li><li>Kogral unifica con markdown git-native + MCP</li>" ><li>Decisions in Slack</li><li>Guidelines in wikis</li><li>Patterns in docs—all disconnected</li><li>Kogral unifies with git-native markdown + MCP</li></ul></div><div class="problem-card"><div class="problem-number">02</div><h3 data-en="Uncontrolled LLM Costs" data-es="Costos LLM sin Control" > Uncontrolled LLM Costs </h3><ul data-en="<li>No visibility on AI spending per team</li><li>No budget limits or controls</li><li>Vapora: real-time budgets</li><li>Automatic fallback to cheaper providers</li><li>Expertise-based agent routing</li>" data-es="<li>Sin visibilidad en gasto IA por equipo</li><li>Sin límites o controles de presupuesto</li><li>Vapora: presupuestos en tiempo real</li><li>Fallback automático a proveedores baratos</li><li>Routing basado en expertise</li>" ><li>No visibility on AI spending per team</li><li>No budget limits or controls</li><li>Vapora: real-time budgets</li><li>Automatic fallback to cheaper providers</li><li>Expertise-based agent routing</li></ul></div><div class="problem-card"><div class="problem-number">03</div><h3 data-en="Fragile YAML Configuration" data-es="Configuración YAML Frágil"> Fragile YAML Configuration </h3><ul data-en="<li>Runtime errors from untyped config</li><li>No validation before deployment</li><li>Provisioning: Nickel with pre-runtime validation</li><li>TypeDialog: forms with contract validation</li>" data-es="<li>Errores de runtime por config sin tipos</li><li>Sin validación antes del deployment</li><li>Provisioning: Nickel con validación pre-runtime</li><li>TypeDialog: formularios con validación de contratos</li>" ><li>Runtime errors from untyped config</li><li>No validation before deployment</li><li>Provisioning: Nickel with pre-runtime validation</li><li>TypeDialog: forms with contract validation</li></ul></div><div class="problem-card"><div class="problem-number">04</div><h3 data-en="Static Cryptography" data-es="Criptografía Estática"> Static Cryptography </h3><ul data-en="<li>No preparation for quantum threats</li><li>Locked into single crypto library</li><li>SecretumVault: production post-quantum crypto</li><li>ML-KEM-768, ML-DSA-65 (NIST FIPS 203/204)</li><li>4 pluggable backends (OpenSSL, OQS, AWS-LC, RustCrypto)</li>" data-es="<li>Sin preparación para amenazas cuánticas</li><li>Bloqueado en una biblioteca cripto</li><li>SecretumVault: cripto post-cuántico en producción</li><li>ML-KEM-768, ML-DSA-65 (NIST FIPS 203/204)</li><li>4 backends intercambiables (OpenSSL, OQS, AWS-LC, RustCrypto)</li>" ><li>No preparation for quantum threats</li><li>Locked into single crypto library</li><li>SecretumVault: production post-quantum crypto</li><li>ML-KEM-768, ML-DSA-65 (NIST FIPS 203/204)</li><li>4 pluggable backends (OpenSSL, OQS, AWS-LC, RustCrypto)</li></ul></div></div></section><section class="section"><h2 class="section-title"><span data-en="Ecosystem Projects" data-es="Proyectos del Ecosistema" >Ecosystem Projects</span ></h2><div class="features-grid" style="grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));"><div class="feature-box"><div class="feature-icon">🤖</div><h3 class="feature-title" data-en="Vapora" data-es="Vapora" > Vapora </h3><ul class="feature-text" data-en="<li>AI agent orchestration with learning</li><li>Agents improve from experience</li><li>Automatic budget fallback</li><li>NATS JetStream coordination</li><li>13 crates, 218 tests, 50K LOC</li>" data-es="<li>Orquestación de agentes IA con aprendizaje</li><li>Agentes mejoran con experiencia</li><li>Fallback automático de presupuesto</li><li>Coordinación NATS JetStream</li><li>13 crates, 218 tests, 50K LOC</li>" ><li>AI agent orchestration with learning</li><li>Agents improve from experience</li><li>Automatic budget fallback</li><li>NATS JetStream coordination</li><li>13 crates, 218 tests, 50K LOC</li></ul></div><div class="feature-box" style="border-left-color: #22D3EE"><div class="feature-icon">🧠</div><h3 class="feature-title" style="color: #22D3EE" data-en="Kogral" data-es="Kogral" > Kogral </h3><ul class="feature-text" data-en="<li>Knowledge graph with MCP for Claude Code</li><li>6 node types: Notes, ADRs, Guidelines, Patterns, Journals, Executions</li><li>Git-native markdown storage</li><li>Semantic search with embeddings</li><li>3 crates, 56 tests, 15K LOC</li>" data-es="<li>Grafo de conocimiento con MCP para Claude Code</li><li>6 tipos de nodos: Notas, ADRs, Guías, Patrones, Diarios, Ejecuciones</li><li>Almacenamiento markdown git-native</li><li>Búsqueda semántica con embeddings</li><li>3 crates, 56 tests, 15K LOC</li>" ><li>Knowledge graph with MCP for Claude Code</li><li>6 node types: Notes, ADRs, Guidelines, Patterns, Journals, Executions</li><li>Git-native markdown storage</li><li>Semantic search with embeddings</li><li>3 crates, 56 tests, 15K LOC</li></ul></div><div class="feature-box" style="border-left-color: #06B6D4"><div class="feature-icon">📋</div><h3 class="feature-title" style="color: #06B6D4" data-en="TypeDialog" data-es="TypeDialog" > TypeDialog </h3><ul class="feature-text" data-en="<li>6 backends: CLI, TUI, Web, AI, Agent, Prov-gen</li><li>One TOML definition for all interfaces</li><li>Nickel contract validation</li><li>Conditional fields & repeating groups</li><li>8 crates, 3,818 tests, 90K LOC</li>" data-es="<li>6 backends: CLI, TUI, Web, IA, Agente, Prov-gen</li><li>Una definición TOML para todas las interfaces</li><li>Validación de contratos Nickel</li><li>Campos condicionales y grupos repetibles</li><li>8 crates, 3,818 tests, 90K LOC</li>" ><li>6 backends: CLI, TUI, Web, AI, Agent, Prov-gen</li><li>One TOML definition for all interfaces</li><li>Nickel contract validation</li><li>Conditional fields & repeating groups</li><li>8 crates, 3,818 tests, 90K LOC</li></ul></div><div class="feature-box" style="border-left-color: #4F46E5"><div class="feature-icon">☁️</div><h3 class="feature-title" style="color: #4F46E5" data-en="Provisioning" data-es="Provisioning" > Provisioning </h3><ul class="feature-text" data-en="<li>Declarative IaC with Nickel + AI-assisted generation</li><li>Multi-cloud: AWS, UpCloud, Local (LXD)</li><li>RAG with 1,200+ domain docs</li><li>MCP server for natural language queries</li><li>Orchestrator with automatic rollback</li><li>15+ crates, 218 tests, 40K LOC</li>" data-es="<li>IaC declarativa con Nickel + generación asistida por IA</li><li>Multi-cloud: AWS, UpCloud, Local (LXD)</li><li>RAG con 1,200+ docs de dominio</li><li>Servidor MCP para consultas en lenguaje natural</li><li>Orquestador con rollback automático</li><li>15+ crates, 218 tests, 40K LOC</li>" ><li>Declarative IaC with Nickel + AI-assisted generation</li><li>Multi-cloud: AWS, UpCloud, Local (LXD)</li><li>RAG with 1,200+ domain docs</li><li>MCP server for natural language queries</li><li>Orchestrator with automatic rollback</li><li>15+ crates, 218 tests, 40K LOC</li></ul></div><div class="feature-box" style="border-left-color: #7C3AED"><div class="feature-icon">🔒</div><h3 class="feature-title" style="color: #7C3AED" data-en="SecretumVault" data-es="SecretumVault" > SecretumVault </h3><ul class="feature-text" data-en="<li>Post-quantum crypto: ML-KEM-768, ML-DSA-65 (NIST FIPS 203/204)</li><li>4 crypto backends: OpenSSL, OQS, AWS-LC, RustCrypto</li><li>4 storage backends: Filesystem, etcd, SurrealDB, PostgreSQL</li><li>4 secrets engines: KV, Transit, PKI, Database</li><li>Shamir Secret Sharing for unsealing</li><li>1 crate, 50+ tests, 11K LOC</li>" data-es="<li>Cripto post-cuántico: ML-KEM-768, ML-DSA-65 (NIST FIPS 203/204)</li><li>4 backends cripto: OpenSSL, OQS, AWS-LC, RustCrypto</li><li>4 backends storage: Filesystem, etcd, SurrealDB, PostgreSQL</li><li>4 engines de secretos: KV, Transit, PKI, Database</li><li>Shamir Secret Sharing para unseal</li><li>1 crate, 50+ tests, 11K LOC</li>" ><li>Post-quantum crypto: ML-KEM-768, ML-DSA-65 (NIST FIPS 203/204)</li><li>4 crypto backends: OpenSSL, OQS, AWS-LC, RustCrypto</li><li>4 storage backends: Filesystem, etcd, SurrealDB, PostgreSQL</li><li>4 secrets engines: KV, Transit, PKI, Database</li><li>Shamir Secret Sharing for unsealing</li><li>1 crate, 50+ tests, 11K LOC</li></ul></div></div></section><section class="section"><h2 class="section-title"><span data-en="Technology Stack" data-es="Stack Tecnológico" >Technology Stack</span ></h2><div class="tech-stack"><span class="tech-badge">Rust Edition 2021</span><span class="tech-badge">Nickel</span><span class="tech-badge">Nushell</span><span class="tech-badge">SurrealDB</span><span class="tech-badge">NATS JetStream</span><span class="tech-badge">Axum</span><span class="tech-badge">Leptos WASM</span><span class="tech-badge">Ratatui TUI</span><span class="tech-badge">OpenTelemetry</span><span class="tech-badge">Prometheus</span><span class="tech-badge">etcd</span><span class="tech-badge">PostgreSQL</span><span class="tech-badge">OpenSSL</span><span class="tech-badge">OQS (Post-Quantum)</span><span class="tech-badge">Cedar Policy</span></div></section><section class="section"><h2 class="section-title"><span data-en="Ecosystem Metrics" data-es="Métricas del Ecosistema" >Ecosystem Metrics</span ></h2><div class="components-grid"><div class="component-item"><span class="component-name" data-en="40+ Rust Crates" data-es="40+ Crates Rust" >40+ Rust Crates</span ><span class="component-role" data-en="Modular architecture" data-es="Arquitectura modular" >Modular architecture</span ></div><div class="component-item"><span class="component-name" data-en="4,360+ Tests" data-es="4,360+ Tests" >4,360+ Tests</span ><span class="component-role" data-en="Quality assurance" data-es="Aseguramiento calidad" >Quality assurance</span ></div><div class="component-item"><span class="component-name" data-en="~206K LOC" data-es="~206K LOC" >~206K LOC</span ><span class="component-role" data-en="Production-ready code" data-es="Código listo producción" >Production-ready code</span ></div><div class="component-item"><span class="component-name" data-en="0 Clippy Warnings" data-es="0 Warnings Clippy" >0 Clippy Warnings</span ><span class="component-role" data-en="Code quality" data-es="Calidad de código" >Code quality</span ></div><div class="component-item"><span class="component-name" data-en="0 Unsafe Blocks" data-es="0 Bloques Unsafe" >0 Unsafe Blocks</span ><span class="component-role" data-en="Memory safety" data-es="Seguridad memoria" >Memory safety</span ></div><div class="component-item"><span class="component-name" data-en="100% Doc Coverage" data-es="100% Cobertura Doc" >100% Doc Coverage</span ><span class="component-role" data-en="Public APIs documented" data-es="APIs públicas documentadas" >Public APIs documented</span ></div><div class="component-item"><span class="component-name" data-en="4 Crypto Backends" data-es="4 Backends Cripto" >4 Crypto Backends</span ><span class="component-role" data-en="Cryptographic agility" data-es="Agilidad criptográfica" >Cryptographic agility</span ></div><div class="component-item"><span class="component-name" data-en="4 Storage Backends" data-es="4 Backends Storage" >4 Storage Backends</span ><span class="component-role" data-en="Flexible persistence" data-es="Persistencia flexible" >Flexible persistence</span ></div><div class="component-item"><span class="component-name" data-en="6 TypeDialog Backends" data-es="6 Backends TypeDialog" >6 TypeDialog Backends</span ><span class="component-role" data-en="Multi-interface forms" data-es="Formularios multi-interfaz" >Multi-interface forms</span ></div><div class="component-item"><span class="component-name" data-en="14+ MCP Tools" data-es="14+ Herramientas MCP" >14+ MCP Tools</span ><span class="component-role" data-en="Claude Code integration" data-es="Integración Claude Code" >Claude Code integration</span ></div><div class="component-item"><span class="component-name" data-en="Multi-Cloud" data-es="Multi-Cloud" >Multi-Cloud</span ><span class="component-role" data-en="AWS, UpCloud, Local" data-es="AWS, UpCloud, Local" >AWS, UpCloud, Local</span ></div><div class="component-item"><span class="component-name" data-en="Post-Quantum Ready" data-es="Listo Post-Cuántico" >Post-Quantum Ready</span ><span class="component-role" data-en="ML-KEM-768, ML-DSA-65" data-es="ML-KEM-768, ML-DSA-65" >ML-KEM-768, ML-DSA-65</span ></div></div></section><div class="cta-section"><h2 class="cta-title" data-en="Ready for integrated operations?" data-es="¿Listo para operaciones integradas?" > Ready for integrated operations? </h2><p style="color: #94a3b8; margin-bottom: 2rem; font-size: 1.05rem" data-en="5 Projects | 40+ Crates | 4,360+ Tests | 100% Rust 🦀" data-es="5 Proyectos | 40+ Crates | 4,360+ Tests | 100% Rust 🦀" > 5 Projects | 40+ Crates | 4,360+ Tests | 100% Rust 🦀 </p><a href="https://repo.jesusperez.pro/jesus/stratumiops" class="cta-button" data-en="Explore Ecosystem →" data-es="Explorar Ecosistema →" >Explore Ecosystem →</a ></div><footer><p data-en="StratumIOps v0.1.0" data-es="StratumIOps v0.1.0">StratumIOps v0.1.0</p><p data-en="Integrated ecosystem with Rust excellence ✨" data-es="Ecosistema integrado con excelencia Rust ✨" > Integrated ecosystem with Rust excellence ✨ </p><p style="margin-top: 1rem; font-size: 0.8rem" data-en="Infrastructure Operations | AI Orchestration | Knowledge Management | Secrets & Configuration" data-es="Operaciones Infraestructura | Orquestación IA | Gestión Conocimiento | Secretos y Configuración" > Infrastructure Operations | AI Orchestration | Knowledge Management | Secrets & Configuration </p></footer></div><script> const LANG_KEY = "stratumiops-lang";function getCurrentLanguage(){return localStorage.getItem(LANG_KEY)|| "en";}function switchLanguage(lang){localStorage.setItem(LANG_KEY,lang);document.querySelectorAll(".lang-btn").forEach((btn)=>{btn.classList.remove("active");if(btn.dataset.lang === lang){btn.classList.add("active");}});document.querySelectorAll("[data-en][data-es]").forEach((el)=>{const content = el.dataset[lang];if(el.tagName === "H1" || el.tagName === "H2" || el.tagName === "H3" || el.tagName === "UL"){el.innerHTML = content;}else{el.textContent = content;}});document.documentElement.lang = lang;}document.addEventListener("DOMContentLoaded",()=>{const currentLang = getCurrentLanguage();switchLanguage(currentLang);});</script></body></html>