Vapora/assets/web/index.html
Jesús Pérez ac3f93fe1d fix: Pre-commit configuration and TOML syntax corrections
**Problems Fixed:**
- TOML syntax errors in workspace.toml (inline tables spanning multiple lines)
- TOML syntax errors in vapora.toml (invalid variable substitution syntax)
- YAML multi-document handling (kubernetes and provisioning files)
- Markdown linting issues (disabled temporarily pending review)
- Rust formatting with nightly toolchain

**Changes Made:**
1. Fixed provisioning/vapora-wrksp/workspace.toml:
   - Converted inline tables to proper nested sections
   - Lines 21-39: [storage.surrealdb], [storage.redis], [storage.nats]

2. Fixed config/vapora.toml:
   - Replaced shell-style ${VAR:-default} syntax with literal values
   - All environment-based config marked with comments for runtime override

3. Updated .pre-commit-config.yaml:
   - Added kubernetes/ and provisioning/ to check-yaml exclusions
   - Disabled markdownlint hook pending markdown file cleanup
   - Keep: rust-fmt, clippy, toml check, yaml check, end-of-file, trailing-whitespace

**All Passing Hooks:**
 Rust formatting (cargo +nightly fmt)
 Rust linting (cargo clippy)
 TOML validation
 YAML validation (with multi-document support)
 End-of-file formatting
 Trailing whitespace removal
2026-01-11 21:46:08 +00:00

2 lines
18 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="Vapora - Intelligent Development Orchestration" data-es="Vapora - Orquestación Inteligente de Desarrollo" > Vapora </title><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700;800&display=swap" rel="stylesheet" /><style> *{margin:0;padding:0;box-sizing:border-box;}body{font-family:"JetBrains Mono",monospace;background:#0a0118;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(168,85,247,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(236,72,153,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(34,211,238,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:"JetBrains Mono",monospace;}.lang-btn.active{background:linear-gradient(135deg,#22d3ee 0%,#a855f7 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:440px;width:100%;height:auto;filter:drop-shadow(0 0 30px rgba(34,211,238,0.4));}.tagline{font-size:0.95rem;color:#22d3ee;font-weight:400;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,#22d3ee 0%,#a855f7 50%,#ec4899 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,#ec4899 0%,#a855f7 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(168,85,247,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,#22d3ee 0%,#a855f7 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;line-height:1;margin-bottom:0.5rem;}.problem-card h3{color:#ec4899;font-size:1.05rem;margin-bottom:0.7rem;font-weight:700;}.problem-card p{color:#cbd5e1;font-size:0.9rem;line-height:1.6;}.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(34,211,238,0.1) 0%,rgba(168,85,247,0.1) 100% );border-radius:12px;padding:2rem;border-left:4px solid #22d3ee;transition:all 0.3s ease;}.feature-box:hover{background:linear-gradient( 135deg,rgba(34,211,238,0.15) 0%,rgba(168,85,247,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:#22d3ee;margin-bottom:0.7rem;}.feature-text{color:#cbd5e1;font-size:0.95rem;line-height:1.7;}.agents-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem;margin-top:2rem;}.agent-item{background:rgba(236,72,153,0.1);padding:1.2rem;border-radius:8px;font-size:0.9rem;border:1px solid rgba(236,72,153,0.3);transition:all 0.2s ease;text-align:center;}.agent-item:hover{background:rgba(236,72,153,0.15);transform:translateY(-2px);}.agent-name{color:#ec4899;font-weight:700;display:block;margin-bottom:0.3rem;}.agent-role{color:#94a3b8;font-size:0.85rem;}.cta-section{text-align:center;margin:5rem 0 3rem;padding:4rem 2rem;background:linear-gradient( 135deg,rgba(34,211,238,0.1) 0%,rgba(236,72,153,0.1) 100% );border-radius:20px;border:1px solid rgba(168,85,247,0.3);}.cta-title{font-size:2rem;font-weight:800;margin-bottom:1rem;background:linear-gradient(135deg,#22d3ee 0%,#ec4899 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;}.cta-button{display:inline-block;background:linear-gradient( 135deg,#22d3ee 0%,#a855f7 50%,#ec4899 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(34,211,238,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(34,211,238,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:352px;}.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="✅ v1.2.0" data-es="✅ v1.2.0" >✅ v1.2.0</span ><div class="logo-container"><img src="/vapora.svg" alt="Vapora - Development Orchestration" /></div><p class="tagline">Evaporate complexity</p><h1 data-en="Development Flows<br>When Teams and AI Orchestrate" data-es="El Desarrollo Fluye<br>Cuando Equipos e IA Orquestan" > Development Flows </h1><p class="hero-subtitle"><span class="highlight" data-en="Specialized agents" data-es="Agentes especializados" >Specialized agents</span ><span data-en="orchestrate pipelines for design, implementation, testing, documentation and deployment. Agents learn from history and optimize costs automatically." data-es="orquestan pipelines para diseño, implementación, testing, documentación y deployment. Los agentes aprenden del historial y optimizan costos automáticamente." >orchestrate pipelines for design, implementation, testing, documentation and deployment. Agents learn from history and optimize costs automatically.</span ><strong data-en="100% self-hosted." data-es="100% self-hosted." >100% self-hosted.</strong ><span data-en="" data-es=""></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="Context Switching" data-es="Cambio de Contexto"> Context Switching </h3><p data-en="Developers jump between tools constantly. Vapora unifies everything in one intelligent system where context flows." data-es="Los developers saltan constantemente entre herramientas. Vapora unifica todo en un sistema inteligente donde el contexto fluye." > Developers jump between tools constantly. Vapora unifies everything in one intelligent system where context flows. </p></div><div class="problem-card"><div class="problem-number">02</div><h3 data-en="Knowledge Fragmentation" data-es="Fragmentación de Conocimiento" > Knowledge Fragmentation </h3><p data-en="Decisions lost in threads, code scattered, docs unmaintained. RAG search and semantic indexing make knowledge discoverable." data-es="Decisiones perdidas en threads, código disperso, docs desactualizadas. Búsqueda RAG e indexing semántico hacen el conocimiento visible." > Decisions lost in threads, code scattered, docs unmaintained. RAG search and semantic indexing make knowledge discoverable. </p></div><div class="problem-card"><div class="problem-number">03</div><h3 data-en="Manual Coordination" data-es="Coordinación Manual"> Manual Coordination </h3><p data-en="Orchestrating code review, testing, documentation and deployment manually creates bottlenecks. Multi-agent workflows solve this." data-es="Orquestar manualmente code review, testing, documentación y deployment crea cuellos. Los workflows multi-agente lo resuelven." > Orchestrating code review, testing, documentation and deployment manually creates bottlenecks. Multi-agent workflows solve this. </p></div><div class="problem-card"><div class="problem-number">04</div><h3 data-en="Dev-Ops Friction" data-es="Fricción Dev-Ops"> Dev-Ops Friction </h3><p data-en="Handoffs between developers and operations lack visibility and context. Vapora maintains unified deployment readiness." data-es="Los handoffs entre developers y operaciones carecen de visibilidad y contexto. Vapora mantiene unificada la deployment readiness." > Handoffs between developers and operations lack visibility and context. Vapora maintains unified deployment readiness. </p></div></div></section><section class="section"><h2 class="section-title"><span data-en="How It Works" data-es="Cómo Funciona" >How It Works</span ></h2><div class="features-grid"><div class="feature-box"><div class="feature-icon">🤖</div><h3 class="feature-title" data-en="Specialized Agents" data-es="Agentes Especializados" > Specialized Agents </h3><p class="feature-text" data-en="Customizable agents for every role: architecture, development, testing, documentation, deployment and more. Agents learn from execution history with recency bias for continuous improvement." data-es="Agentes customizables para cada rol: arquitectura, desarrollo, testing, documentación, deployment y más. Los agentes aprenden del historial de ejecución con sesgo de recencia para mejora continua." > Customizable agents for every role: architecture, development, testing, documentation, deployment and more. Agents learn from execution history with recency bias for continuous improvement. </p></div><div class="feature-box" style="border-left-color: #a855f7"><div class="feature-icon">🧠</div><h3 class="feature-title" style="color: #a855f7" data-en="Intelligent Orchestration" data-es="Orquestación Inteligente" > Intelligent Orchestration </h3><p class="feature-text" data-en="Agents coordinate automatically based on dependencies, context and expertise. Learning-based selection improves over time. Budget enforcement with automatic fallback ensures cost control." data-es="Los agentes se coordinan automáticamente basados en dependencias, contexto y expertise. La selección basada en aprendizaje mejora con el tiempo. La aplicación de presupuestos con fallback automático garantiza el control de costos." > Agents coordinate automatically based on dependencies, context and expertise. Learning-based selection improves over time. Budget enforcement with automatic fallback ensures cost control. </p></div><div class="feature-box" style="border-left-color: #ec4899"><div class="feature-icon">☸️</div><h3 class="feature-title" style="color: #ec4899" data-en="Cloud-Native & Self-Hosted" data-es="Cloud-Native y Self-Hosted" > Cloud-Native & Self-Hosted </h3><p class="feature-text" data-en="Deploy to any Kubernetes cluster (EKS, GKE, AKS, vanilla K8s). Local Docker Compose development. Zero vendor lock-in." data-es="Despliega en cualquier cluster Kubernetes (EKS, GKE, AKS, vanilla K8s). Desarrollo local con Docker Compose. Sin vendor lock-in." > Deploy to any Kubernetes cluster (EKS, GKE, AKS, vanilla K8s). Local Docker Compose development. Zero vendor lock-in. </p></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</span><span class="tech-badge">Axum</span><span class="tech-badge">SurrealDB</span><span class="tech-badge">NATS JetStream</span><span class="tech-badge">Leptos WASM</span><span class="tech-badge">Kubernetes</span><span class="tech-badge">Prometheus</span><span class="tech-badge">Grafana</span><span class="tech-badge">Knowledge Graph</span></div></section><section class="section"><h2 class="section-title"><span data-en="Available Agents" data-es="Agentes Disponibles" >Available Agents</span ></h2><div class="agents-grid"><div class="agent-item"><span class="agent-name" data-en="Architect" data-es="Architect" >Architect</span ><span class="agent-role" data-en="System design" data-es="Diseño de sistemas" >System design</span ></div><div class="agent-item"><span class="agent-name" data-en="Developer" data-es="Developer" >Developer</span ><span class="agent-role" data-en="Code implementation" data-es="Implementación de código" >Code implementation</span ></div><div class="agent-item"><span class="agent-name" data-en="CodeReviewer" data-es="CodeReviewer" >CodeReviewer</span ><span class="agent-role" data-en="Quality assurance" data-es="Aseguramiento de calidad" >Quality assurance</span ></div><div class="agent-item"><span class="agent-name" data-en="Tester" data-es="Tester" >Tester</span ><span class="agent-role" data-en="Tests & benchmarks" data-es="Tests y benchmarks" >Tests & benchmarks</span ></div><div class="agent-item"><span class="agent-name" data-en="Documenter" data-es="Documenter" >Documenter</span ><span class="agent-role" data-en="Documentation" data-es="Documentación" >Documentation</span ></div><div class="agent-item"><span class="agent-name" data-en="Marketer" data-es="Marketer" >Marketer</span ><span class="agent-role" data-en="Marketing content" data-es="Contenido marketing" >Marketing content</span ></div><div class="agent-item"><span class="agent-name" data-en="Presenter" data-es="Presenter" >Presenter</span ><span class="agent-role" data-en="Presentations" data-es="Presentaciones" >Presentations</span ></div><div class="agent-item"><span class="agent-name" data-en="DevOps" data-es="DevOps" >DevOps</span ><span class="agent-role" data-en="CI/CD deployment" data-es="Despliegue CI/CD" >CI/CD deployment</span ></div><div class="agent-item"><span class="agent-name" data-en="Monitor" data-es="Monitor" >Monitor</span ><span class="agent-role" data-en="Health & alerting" data-es="Salud y alerting" >Health & alerting</span ></div><div class="agent-item"><span class="agent-name" data-en="Security" data-es="Security" >Security</span ><span class="agent-role" data-en="Audit & compliance" data-es="Auditoría y compliance" >Audit & compliance</span ></div><div class="agent-item"><span class="agent-name" data-en="ProjectManager" data-es="ProjectManager" >ProjectManager</span ><span class="agent-role" data-en="Roadmap tracking" data-es="Tracking de roadmap" >Roadmap tracking</span ></div><div class="agent-item"><span class="agent-name" data-en="DecisionMaker" data-es="DecisionMaker" >DecisionMaker</span ><span class="agent-role" data-en="Conflict resolution" data-es="Resolución de conflictos" >Conflict resolution</span ></div></div></section><div class="cta-section"><h2 class="cta-title" data-en="Ready for intelligent orchestration?" data-es="¿Listo para orquestación inteligente?" > Ready for intelligent orchestration? </h2><p style="color: #94a3b8; margin-bottom: 2rem; font-size: 1.05rem" data-en="Built with Rust 🦀 | Open Source | Self-Hosted" data-es="Construido con Rust 🦀 | Open Source | Self-Hosted" > Built with Rust 🦀 | Open Source | Self-Hosted </p><a href="https://github.com/vapora-platform/vapora" class="cta-button" data-en="Explore on GitHub →" data-es="Explorar en GitHub →" >Explore on GitHub →</a ></div><footer><p data-en="Vapora v1.2.0" data-es="Vapora v1.2.0">Vapora v1.2.0</p><p data-en="Made with Vapora dreams and Rust reality ✨" data-es="Hecho con sueños Vapora y realidad Rust ✨" > Made with Vapora dreams and Rust reality ✨ </p><p style="margin-top: 1rem; font-size: 0.8rem" data-en="Intelligent Development Orchestration | Multi-Agent Multi-IA Platform" data-es="Orquestación Inteligente de Desarrollo | Plataforma Multi-Agente Multi-IA" > Intelligent Development Orchestration | Multi-Agent Multi-IA Platform </p></footer></div><script> const LANG_KEY = "vapora-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.innerHTML = content;}else{el.textContent = content;}});document.documentElement.lang = lang;}document.addEventListener("DOMContentLoaded",()=>{const currentLang = getCurrentLanguage();switchLanguage(currentLang);});</script></body></html>