From c48b9cdf4a0b78439b23bafa6fb1c280b264d1f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yuniel=20Acosta=20P=C3=A9rez?= <33158051+yacosta738@users.noreply.github.com> Date: Sun, 8 Mar 2026 23:08:57 +0100 Subject: [PATCH 1/4] docs(web): align marketing and docs with Corvus runtime identity --- .../content/docs/en/guides/architecture.md | 8 +- .../docs/en/guides/architecture/overview.md | 10 +- .../content/docs/en/guides/getting-started.md | 6 +- .../src/content/docs/en/guides/release.md | 4 +- .../apps/docs/src/content/docs/en/index.mdx | 22 +- .../content/docs/es/guides/architecture.md | 8 +- .../docs/es/guides/architecture/overview.md | 10 +- .../content/docs/es/guides/getting-started.md | 6 +- .../src/content/docs/es/guides/release.md | 4 +- .../apps/docs/src/content/docs/es/index.mdx | 22 +- .../src/layouts/MarketingLayout.astro | 2 +- .../web/apps/marketing/src/pages/index.astro | 311 +++++-- .../web/apps/marketing/src/styles/global.css | 865 +++++++++++++----- 13 files changed, 919 insertions(+), 359 deletions(-) diff --git a/clients/web/apps/docs/src/content/docs/en/guides/architecture.md b/clients/web/apps/docs/src/content/docs/en/guides/architecture.md index c92a390de..e258d0ba2 100644 --- a/clients/web/apps/docs/src/content/docs/en/guides/architecture.md +++ b/clients/web/apps/docs/src/content/docs/en/guides/architecture.md @@ -117,9 +117,9 @@ For a more detailed view of the architecture, see the following C4 diagrams: | Level | Diagram | Description | Diagram ID | |-----------------|----------------------------------------------------------------------------|---------------------------------------------------|-----------------------------------| -| C1 - Context | [System Context](/guides/architecture/diagrams/context/system-context.mmd) | High-level view of the system and external actors | `context/system-context.mmd` | -| C2 - Containers | [Main Containers](/guides/architecture/diagrams/container/system-containers.mmd) | Applications and services that compose Corvus | `container/system-containers.mmd` | -| C3 - Components | [Agent Core KMP](/guides/architecture/diagrams/component/agent-core-kmp.mmd) | Internal components of the core module | `component/agent-core-kmp.mmd` | -| - | [Module Dependencies](/guides/architecture/diagrams/module-dependencies.mmd) | Gradle dependency relationships | `module-dependencies.mmd` | +| C1 - Context | [System Context](./architecture/diagrams/context/system-context.mmd) | High-level view of the system and external actors | `context/system-context.mmd` | +| C2 - Containers | [Main Containers](./architecture/diagrams/container/system-containers.mmd) | Applications and services that compose Corvus | `container/system-containers.mmd` | +| C3 - Components | [Agent Core KMP](./architecture/diagrams/component/agent-core-kmp.mmd) | Internal components of the core module | `component/agent-core-kmp.mmd` | +| - | [Module Dependencies](./architecture/diagrams/module-dependencies.mmd) | Gradle dependency relationships | `module-dependencies.mmd` | See [Architecture Index](./overview/) for more details on how to visualize them. diff --git a/clients/web/apps/docs/src/content/docs/en/guides/architecture/overview.md b/clients/web/apps/docs/src/content/docs/en/guides/architecture/overview.md index 04671754b..15aab2f7b 100644 --- a/clients/web/apps/docs/src/content/docs/en/guides/architecture/overview.md +++ b/clients/web/apps/docs/src/content/docs/en/guides/architecture/overview.md @@ -12,7 +12,7 @@ Context, Container, Component, Code). Shows the Corvus system as a black box and its interactions with actors and external systems. -- **File**: [`context/system-context.mmd`](/guides/architecture/diagrams/context/system-context.mmd) +- **File**: [`context/system-context.mmd`](./diagrams/context/system-context.mmd) - **Format**: Mermaid - **Description**: High-level view of the complete system, including users (Developer, End User) and external systems (LLM Providers, Neo4j, Web Sources). @@ -22,8 +22,8 @@ Shows the Corvus system as a black box and its interactions with actors and exte Decomposes the system into main containers/applications and their interactions. - **Files**: - - [`container/system-containers.mmd`](/guides/architecture/diagrams/container/system-containers.mmd) (Mermaid) - - [`container/system-containers.puml`](/guides/architecture/diagrams/container/system-containers.puml) (PlantUML) + - [`container/system-containers.mmd`](./diagrams/container/system-containers.mmd) (Mermaid) + - [`container/system-containers.puml`](./diagrams/container/system-containers.puml) (PlantUML) - **Description**: Shows the main containers: Web Dashboard, Android App, iOS App, Agent Runtime, Rust Sidecar, and Graph DB. @@ -33,7 +33,7 @@ Decomposes individual containers into their internal components. ### Agent Core KMP -- **File**: [`component/agent-core-kmp.mmd`](/guides/architecture/diagrams/component/agent-core-kmp.mmd) +- **File**: [`component/agent-core-kmp.mmd`](./diagrams/component/agent-core-kmp.mmd) - **Description**: Internal components of the core module: Domain, Use Cases, Interfaces, and Infrastructure. @@ -41,7 +41,7 @@ Decomposes individual containers into their internal components. Additional diagram showing Gradle dependencies between modules. -- **File**: [`module-dependencies.mmd`](/guides/architecture/diagrams/module-dependencies.mmd) +- **File**: [`module-dependencies.mmd`](./diagrams/module-dependencies.mmd) - **Description**: Shows how clients depend on the shared core and external frameworks. ## How to Visualize diff --git a/clients/web/apps/docs/src/content/docs/en/guides/getting-started.md b/clients/web/apps/docs/src/content/docs/en/guides/getting-started.md index 46a90b72e..02a743c98 100644 --- a/clients/web/apps/docs/src/content/docs/en/guides/getting-started.md +++ b/clients/web/apps/docs/src/content/docs/en/guides/getting-started.md @@ -101,6 +101,6 @@ corvus --help ## Next Steps -- Review [Project Structure](../structure/). -- Check [Features Checklist](../features/). -- Continue with [Development](../development/). +- Review [Project Structure](./structure/). +- Check [Features Checklist](./features/). +- Continue with [Development](./development/). diff --git a/clients/web/apps/docs/src/content/docs/en/guides/release.md b/clients/web/apps/docs/src/content/docs/en/guides/release.md index 28b46173f..848658398 100644 --- a/clients/web/apps/docs/src/content/docs/en/guides/release.md +++ b/clients/web/apps/docs/src/content/docs/en/guides/release.md @@ -9,7 +9,7 @@ GitHub Actions. Before you can publish, ensure you have: -1. **GPG Key configured**: Follow the [GPG Setup Guide](../gpg-setup/) to create and configure your +1. **GPG Key configured**: Follow the [GPG Setup Guide](./gpg-setup.md) to create and configure your signing key 2. **Maven Central access**: Repository secrets configured: @@ -254,6 +254,6 @@ Use this checklist before publishing: ## See Also -- [GPG Setup Guide](../gpg-setup/) +- [GPG Setup Guide](./gpg-setup.md) - [GitHub Workflows](https://github.com/dallay/corvus/blob/main/.github/workflows/README.md) - [Contributing Guide](https://github.com/dallay/corvus/blob/main/.github/CONTRIBUTING.md) diff --git a/clients/web/apps/docs/src/content/docs/en/index.mdx b/clients/web/apps/docs/src/content/docs/en/index.mdx index e80800af7..9291e7697 100644 --- a/clients/web/apps/docs/src/content/docs/en/index.mdx +++ b/clients/web/apps/docs/src/content/docs/en/index.mdx @@ -1,9 +1,9 @@ --- title: Corvus -description: Reactive agent platform for always-on orchestration on the JVM. +description: Secure, pluggable documentation for the Rust-native runtime for autonomous AI agents. template: splash hero: - tagline: Build long-running, proactive agents with Kotlin, Spring Boot, Neo4j, Rust sidecars, and a transparent control panel. + tagline: Build autonomous AI agents with a secure, pluggable Rust-native runtime that stays small, fast, and portable. actions: - text: Get Started link: guides/getting-started/ @@ -21,17 +21,17 @@ import {Card, CardGrid, LinkCard} from '@astrojs/starlight/components'; ## Why Corvus? - - Kotlin + Spring Boot + Coroutines/WebFlux for non-blocking, always-on workflows. + + A small Rust binary with fast startup and low memory usage, built for laptops, servers, SBCs, and constrained environments. - - Knowledge-first architecture using Neo4j for connected context and durable memory. + + Pairing, sandboxing, workspace scoping, allowlists, and encrypted secrets are part of the default posture. - - High-performance binaries for scraping and secure sandbox operations. + + Swap providers, memory, tools, channels, tunnels, and runtime modes without rewriting your stack. - - Real-time observability through an Astro/Vue control surface and event streaming. + + Run Corvus natively or in Docker with one runtime for chat, gateway, daemon, integrations, and automation. @@ -45,6 +45,8 @@ import {Card, CardGrid, LinkCard} from '@astrojs/starlight/components'; href="guides/features/"/> + diff --git a/clients/web/apps/docs/src/content/docs/es/guides/architecture.md b/clients/web/apps/docs/src/content/docs/es/guides/architecture.md index 2ae7b41b2..398df9a91 100644 --- a/clients/web/apps/docs/src/content/docs/es/guides/architecture.md +++ b/clients/web/apps/docs/src/content/docs/es/guides/architecture.md @@ -118,10 +118,10 @@ Para una vista más detallada de la arquitectura, consulta los siguientes diagra | Nivel | Diagrama | Descripción | ID del Diagrama | |-------------------|-------------------------------------------------------------------------------------|----------------------------------------------------|-----------------------------------| -| C1 - Contexto | [Sistema Completo](/guides/architecture/diagrams/context/system-context.mmd) | Vista de alto nivel del sistema y actores externos | `context/system-context.mmd` | -| C2 - Contenedores | [Contenedores Principales](/guides/architecture/diagrams/container/system-containers.mmd) | Aplicaciones y servicios que componen Corvus | `container/system-containers.mmd` | -| C3 - Componentes | [Agent Core KMP](/guides/architecture/diagrams/component/agent-core-kmp.mmd) | Componentes internos del módulo core | `component/agent-core-kmp.mmd` | -| - | [Dependencias entre Módulos](/guides/architecture/diagrams/module-dependencies.mmd) | Relaciones de dependencia de Gradle | `module-dependencies.mmd` | +| C1 - Contexto | [Sistema Completo](./architecture/diagrams/context/system-context.mmd) | Vista de alto nivel del sistema y actores externos | `context/system-context.mmd` | +| C2 - Contenedores | [Contenedores Principales](./architecture/diagrams/container/system-containers.mmd) | Aplicaciones y servicios que componen Corvus | `container/system-containers.mmd` | +| C3 - Componentes | [Agent Core KMP](./architecture/diagrams/component/agent-core-kmp.mmd) | Componentes internos del módulo core | `component/agent-core-kmp.mmd` | +| - | [Dependencias entre Módulos](./architecture/diagrams/module-dependencies.mmd) | Relaciones de dependencia de Gradle | `module-dependencies.mmd` | Ver [Visión General de la Arquitectura](./overview/) para más detalles sobre cómo visualizarlos. diff --git a/clients/web/apps/docs/src/content/docs/es/guides/architecture/overview.md b/clients/web/apps/docs/src/content/docs/es/guides/architecture/overview.md index 5eb54e979..464f5eecd 100644 --- a/clients/web/apps/docs/src/content/docs/es/guides/architecture/overview.md +++ b/clients/web/apps/docs/src/content/docs/es/guides/architecture/overview.md @@ -12,7 +12,7 @@ Context, Container, Component, Code). Muestra el sistema Corvus como una caja negra y sus interacciones con actores y sistemas externos. -- **Archivo**: [`context/system-context.mmd`](/guides/architecture/diagrams/context/system-context.mmd) +- **Archivo**: [`context/system-context.mmd`](./diagrams/context/system-context.mmd) - **Formato**: Mermaid - **Descripción**: Vista de alto nivel del sistema completo, incluyendo usuarios (Developer, End User) y sistemas externos (LLM Providers, Neo4j, Fuentes Web). @@ -22,8 +22,8 @@ Muestra el sistema Corvus como una caja negra y sus interacciones con actores y Descompone el sistema en contenedores/aplicaciones principales y sus interacciones. - **Archivos**: - - [`container/system-containers.mmd`](/guides/architecture/diagrams/container/system-containers.mmd) (Mermaid) - - [`container/system-containers.puml`](/guides/architecture/diagrams/container/system-containers.puml) (PlantUML) + - [`container/system-containers.mmd`](./diagrams/container/system-containers.mmd) (Mermaid) + - [`container/system-containers.puml`](./diagrams/container/system-containers.puml) (PlantUML) - **Descripción**: Muestra los contenedores principales: Web Dashboard, Android App, iOS App, Agent Runtime, Rust Sidecar, y Graph DB. @@ -33,7 +33,7 @@ Descompone contenedores individuales en sus componentes internos. ### Agent Core KMP -- **Archivo**: [`component/agent-core-kmp.mmd`](/guides/architecture/diagrams/component/agent-core-kmp.mmd) +- **Archivo**: [`component/agent-core-kmp.mmd`](./diagrams/component/agent-core-kmp.mmd) - **Descripción**: Componentes internos del módulo core: Dominio, Casos de Uso, Interfaces e Infraestructura. @@ -41,7 +41,7 @@ Descompone contenedores individuales en sus componentes internos. Diagrama adicional mostrando las dependencias de Gradle entre módulos. -- **Archivo**: [`module-dependencies.mmd`](/guides/architecture/diagrams/module-dependencies.mmd) +- **Archivo**: [`module-dependencies.mmd`](./diagrams/module-dependencies.mmd) - **Descripción**: Muestra cómo los clientes dependen del core compartido y de frameworks externos. ## Cómo Visualizar diff --git a/clients/web/apps/docs/src/content/docs/es/guides/getting-started.md b/clients/web/apps/docs/src/content/docs/es/guides/getting-started.md index 89ebab95e..9b99f4a42 100644 --- a/clients/web/apps/docs/src/content/docs/es/guides/getting-started.md +++ b/clients/web/apps/docs/src/content/docs/es/guides/getting-started.md @@ -105,6 +105,6 @@ corvus --help ## Siguientes Pasos -- Revisa la [Estructura del Proyecto](../structure/). -- Consulta la [Lista de Funcionalidades](../features/). -- Continúa con [Desarrollo](../development/). +- Revisa la [Estructura del Proyecto](./structure/). +- Consulta la [Lista de Funcionalidades](./features/). +- Continúa con [Desarrollo](./development/). diff --git a/clients/web/apps/docs/src/content/docs/es/guides/release.md b/clients/web/apps/docs/src/content/docs/es/guides/release.md index 8b152c98d..0968323d4 100644 --- a/clients/web/apps/docs/src/content/docs/es/guides/release.md +++ b/clients/web/apps/docs/src/content/docs/es/guides/release.md @@ -9,7 +9,7 @@ usando GitHub Actions. Antes de poder publicar, asegúrate de tener: -1. **Clave GPG configurada**: Sigue la [Guía de Configuración GPG](../gpg-setup/) para crear y +1. **Clave GPG configurada**: Sigue la [Guía de Configuración GPG](./gpg-setup.md) para crear y configurar tu clave de firma 2. **Acceso a Maven Central**: Secrets del repositorio configurados: @@ -259,6 +259,6 @@ Usa este checklist antes de publicar: ## Ver También -- [Guía de Configuración GPG](../gpg-setup/) +- [Guía de Configuración GPG](./gpg-setup.md) - [GitHub Workflows](https://github.com/dallay/corvus/blob/main/.github/workflows/README.md) - [Guía de Contribución](https://github.com/dallay/corvus/blob/main/.github/CONTRIBUTING.md) diff --git a/clients/web/apps/docs/src/content/docs/es/index.mdx b/clients/web/apps/docs/src/content/docs/es/index.mdx index c75f1e980..157fc8463 100644 --- a/clients/web/apps/docs/src/content/docs/es/index.mdx +++ b/clients/web/apps/docs/src/content/docs/es/index.mdx @@ -1,9 +1,9 @@ --- title: Corvus -description: Plataforma reactiva de agentes siempre activos sobre JVM. +description: Documentacion segura y pluggable para el runtime Rust-native de agentes autonomos. template: splash hero: - tagline: Construye agentes proactivos y de larga duración con Kotlin, Spring Boot, Neo4j, sidecars en Rust y un panel transparente. + tagline: Construye agentes autonomos con un runtime Rust-native, seguro, pluggable, rapido y portable. actions: - text: Primeros Pasos link: guides/getting-started/ @@ -21,17 +21,17 @@ import {Card, CardGrid, LinkCard} from '@astrojs/starlight/components'; ## ¿Por qué Corvus? - - Kotlin + Spring Boot + Coroutines/WebFlux para flujos no bloqueantes y siempre activos. + + Un binario pequeño en Rust con arranque rapido y bajo consumo de memoria para laptops, servidores, SBCs y entornos limitados. - - Arquitectura orientada a conocimiento con Neo4j para contexto conectado y memoria durable. + + Pairing, sandboxing, aislamiento del workspace, allowlists y secretos cifrados forman parte de la postura por defecto. - - Binarios de alto rendimiento para scraping y operaciones seguras de sandbox. + + Cambia providers, memoria, tools, canales, tunnels y runtime modes sin reescribir tu stack. - - Observabilidad en tiempo real con Astro/Vue y streaming de eventos. + + Ejecuta Corvus en nativo o Docker con un solo runtime para chat, gateway, daemon, integraciones y automatizacion. @@ -46,6 +46,8 @@ import {Card, CardGrid, LinkCard} from '@astrojs/starlight/components'; href="guides/features/"/> + diff --git a/clients/web/apps/marketing/src/layouts/MarketingLayout.astro b/clients/web/apps/marketing/src/layouts/MarketingLayout.astro index 99b266f88..bf0b1262a 100644 --- a/clients/web/apps/marketing/src/layouts/MarketingLayout.astro +++ b/clients/web/apps/marketing/src/layouts/MarketingLayout.astro @@ -66,7 +66,7 @@ const ogImage = safeAbsoluteUrl(ogImageInput) ?? safeAbsoluteUrl("/og-image.png" - + {canonical && } {title} diff --git a/clients/web/apps/marketing/src/pages/index.astro b/clients/web/apps/marketing/src/pages/index.astro index 73b05e0ed..35672eb3b 100644 --- a/clients/web/apps/marketing/src/pages/index.astro +++ b/clients/web/apps/marketing/src/pages/index.astro @@ -1,105 +1,172 @@ --- import MarketingLayout from "../layouts/MarketingLayout.astro"; -const featureCards = [ +const conversionKeys = [ { - title: "Secure by Default", - body: "Pairing, sandboxed tools, explicit allowlists and workspace scoping are enabled from day one.", + title: "Lean by default", + body: "A small Rust binary, fast startup, and low memory usage make Corvus practical on laptops, servers, SBCs, and constrained edge hardware.", }, { - title: "Tiny Runtime", - body: "Small Rust core with fast cold-start and low memory usage to run on edge hardware.", + title: "Secure by design", + body: "Pairing, sandboxing, workspace scoping, allowlists, encrypted secrets, and controlled public exposure are built into the runtime from day one.", }, { - title: "Swappable Stack", - body: "Providers, channels, memory and tools are composable modules. Replace one layer without rewiring everything.", + title: "Pluggable at every layer", + body: "Providers, channels, tools, memory, tunnels, runtimes, and observability are trait-based and swappable, so your stack can evolve without rewrites.", }, { - title: "Production Signals", - body: "Built-in doctor/status flows and deployment-friendly service commands for predictable operations.", + title: "No vendor lock-in", + body: "Use OpenRouter, OpenAI-compatible endpoints, local setups, or custom integrations without rebuilding your agent architecture.", + }, + { + title: "Runs where you need it", + body: "Deploy natively or in Docker, from local-first development to secure remote gateway setups with tunnels and controlled exposure.", + }, + { + title: "Built for real agent workflows", + body: "Chat, gateway, daemon, memory, channels, scheduled tasks, integrations, and service management ship as one coherent runtime.", }, ]; const testimonials = [ { quote: - "We moved from heavy orchestration to Corvus in two sprints and cut infra cost without giving up reliability.", - author: "Platform Team, FinOps Startup", + "A small Rust binary, fast startup, low memory footprint, and a fully swappable architecture make Corvus practical as real agent infrastructure.", + author: "Architecture overview", }, { quote: - "The onboarding flow made rollout easy. New developers go from zero to first task in minutes.", - author: "Engineering Lead, Growth Studio", + "Pairing, sandboxing, allowlists, workspace scoping, and encrypted secrets are not optional extras. They are part of the default posture.", + author: "Security policy", }, { quote: - "Finally an AI runtime that behaves like software infrastructure, not a fragile demo stack.", - author: "CTO, B2B SaaS", + "Corvus ships with a 3.4MB optimized release build, boots in under 10ms, and supports 22+ providers with native or Docker runtime modes.", + author: "README benchmark snapshot", + }, +]; + +const faqGroups = [ + { + title: "Product and fit", + items: [ + { + question: "What is Corvus?", + points: [ + "Corvus is a Rust-native runtime for autonomous AI agents.", + "It combines model access, memory, tools, channels, and security controls into one portable system.", + "It is designed to behave like infrastructure, not a fragile demo stack.", + ], + ctaLabel: "Read the architecture", + ctaHref: "https://github.com/dallay/corvus", + }, + { + question: "Who is it for?", + points: [ + "Corvus fits developers, platform teams, and operators who want portable agent infrastructure.", + "It is a strong fit when security posture, runtime efficiency, and provider flexibility matter.", + "It helps teams avoid heavyweight stacks and unnecessary lock-in.", + ], + ctaLabel: "See the quick start", + ctaHref: "https://docs.profiletailors.com", + }, + ], + }, + { + title: "Security and operations", + items: [ + { + question: "How does Corvus protect data and tools?", + points: [ + "Pairing, sandboxing, workspace isolation, command allowlisting, and forbidden path protection are built in.", + "Gateway exposure is restrictive by default, with localhost binding and tunnel-aware controls.", + "Secrets can be encrypted locally and public access is never assumed.", + ], + ctaLabel: "Review security controls", + ctaHref: "https://docs.profiletailors.com", + }, + { + question: "Where can it run?", + points: [ + "Corvus runs as a native binary or in Docker.", + "It is built to stay practical across laptops, servers, SBCs, and constrained environments.", + "Its small binary size and fast startup make it viable beyond heavyweight cloud-only setups.", + ], + ctaLabel: "Explore runtime options", + ctaHref: "https://docs.profiletailors.com", + }, + ], }, ]; + +const hero = { + eyebrow: "RUST-NATIVE AGENT RUNTIME • SECURE BY DEFAULT • PORTABLE BY DESIGN", + title: "Run agents anywhere. Keep control everywhere.", + subtitle: + "Built in Rust, Corvus gives teams one runtime for chat, gateway, daemon, memory, channels, integrations, and secure execution, without the weight of a stitched-together stack.", + primaryCta: "Install Corvus", + secondaryCta: "Read the architecture", +}; ---
Corvus -
-

AUTONOMOUS INFRASTRUCTURE • RUST CORE • MULTI-CHANNEL

-

Ship AI operators that stay fast, secure, and online.

-

- Corvus gives your team an operational runtime for agents: strict defaults, tiny footprint, - and a distribution model that works from laptops to edge boxes. -

- +
+
+

{hero.eyebrow}

+

{hero.title}

+

{hero.subtitle}

+ +

Built for developers and teams who want agent infrastructure with strong defaults, real portability, and no unnecessary runtime weight.

+
-
- One-line installer - curl -fsSL https://profiletailors.com/install | bash - -
- -
-
- < 10ms - cold start target -
-
- < 5MB - runtime memory profile -
-
- 22+ - provider integrations -
+
-

PLATFORM

-

Designed for serious runtime work, not demos.

+

WHY TEAMS PICK CORVUS

+

Fast, secure, portable agent infrastructure without the usual baggage.

{ - featureCards.map((item) => ( + conversionKeys.map((item) => (

{item.title}

{item.body}

@@ -111,24 +178,24 @@ const testimonials = [
-

POSITIONING

-

Lean architecture with explicit tradeoffs.

+

WHY IT STANDS OUT

+

Agent infrastructure without the heavyweight stack.

-

Traditional agent stacks

+

What most stacks look like

    -
  • Large runtime overhead before first task
  • -
  • Security model bolted on later
  • -
  • Difficult to run on low-cost hardware
  • +
  • Heavy runtimes and slow startup
  • +
  • Tight coupling to one provider or framework
  • +
  • Weak default security around tools and file access
-

Corvus approach

+

What Corvus gives you

    -
  • Small binary footprint with quick startup
  • -
  • Pairing, allowlists and scoped tools by default
  • -
  • Portable runtime for local, cloud, and edge
  • +
  • Millisecond startup and tiny footprint
  • +
  • Provider, memory, tool, and channel portability
  • +
  • Secure-by-default pairing, sandboxing, and workspace scoping
@@ -136,8 +203,8 @@ const testimonials = [
-

CUSTOMER SIGNALS

-

Teams adopt Corvus for operational confidence.

+

PRODUCT PROOF

+

Built like infrastructure, not hype.

{ @@ -151,12 +218,44 @@ const testimonials = [
+
+
+

FAQ

+

Clear answers for teams evaluating a serious agent runtime.

+
+ +
+ { + faqGroups.map((group) => ( +
+

{group.title}

+
+ { + group.items.map((item) => ( +
+ {item.question} +
    + {item.points.map((point) =>
  • {point}
  • )} +
+ {item.ctaLabel} → +
+ )) + } +
+
+ )) + } +
+
+
-

Launch your first production-ready agent today.

-

Use the installer wizard, pick your provider, and onboard in minutes.

+

Start with one command. Scale without dragging extra runtime weight.

+

+ Install Corvus, run your first agent workflow, and keep control over models, memory, tools, and deployment from day one. +

@@ -166,41 +265,55 @@ const testimonials = [ diff --git a/clients/web/apps/marketing/src/styles/global.css b/clients/web/apps/marketing/src/styles/global.css index b5fb9334b..e9b6dcec4 100644 --- a/clients/web/apps/marketing/src/styles/global.css +++ b/clients/web/apps/marketing/src/styles/global.css @@ -1,25 +1,46 @@ /* ───────────────────────────────────────────────────────────── Corvus Marketing — Global Styles - Imports shared brand tokens from @corvus/shared + CLI-inspired dark terminal aesthetic with electric glow effects ───────────────────────────────────────────────────────────── */ @import "@corvus/shared/tokens.css"; +:root { + /* CTA accent — electric cyan-to-purple for primary actions */ + --landing-cta: #818cf8; + --landing-cta-hover: #a5b4fc; + --landing-cta-shadow: rgba(129, 140, 248, 0.3); + /* Terminal chrome */ + --term-chrome: rgba(129, 140, 248, 0.08); + --term-border: rgba(129, 140, 248, 0.12); + --term-green: #34d399; + --term-amber: #fbbf24; + --term-red: #f87171; + --grid-color: rgba(129, 140, 248, 0.04); + --scanline-opacity: 0.015; + --glow-purple: rgba(129, 140, 248, 0.15); + --glow-cyan: rgba(56, 189, 248, 0.12); +} + * { box-sizing: border-box; } +html { + scroll-behavior: smooth; +} + html, body { margin: 0; padding: 0; min-height: 100%; - background: - radial-gradient(circle at 15% -10%, #152033 0%, transparent 40%), - radial-gradient(circle at 80% 0%, #1a1044 0%, transparent 34%), var(--corvus-bg); + background: var(--corvus-bg); color: var(--corvus-text); font-family: var(--corvus-font-sans); letter-spacing: -0.01em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } a { @@ -34,9 +55,9 @@ h1, h2, h3 { margin: 0; - font-family: var(--corvus-font-sans); - font-weight: 800; - line-height: 1.1; + font-family: var(--corvus-font-heading); + font-weight: 700; + line-height: 1.05; letter-spacing: -0.03em; } @@ -46,7 +67,8 @@ p { ul { margin: 0; - padding-left: 1rem; + padding-left: 0; + list-style: none; color: var(--corvus-text-muted); } @@ -54,15 +76,55 @@ li + li { margin-top: 0.55rem; } -/* ── Backdrop ── */ +li::before { + content: "›"; + color: var(--corvus-accent); + margin-right: 0.6rem; + font-weight: 700; +} + +code { + font-family: var(--corvus-font-mono); +} + +/* ── Site Background — deep void with grid ── */ .site-backdrop { position: fixed; inset: 0; pointer-events: none; z-index: -1; background: - linear-gradient(130deg, rgba(56, 189, 248, 0.07), transparent 45%), - linear-gradient(310deg, rgba(129, 140, 248, 0.09), transparent 40%); + /* Dot grid pattern */ + radial-gradient(circle, rgba(129, 140, 248, 0.06) 1px, transparent 1px), + /* Ambient glow top-left */ + radial-gradient(ellipse 60% 40% at 10% -5%, rgba(56, 189, 248, 0.08), transparent), + /* Ambient glow top-right */ + radial-gradient(ellipse 50% 35% at 90% 0%, rgba(129, 140, 248, 0.06), transparent), + /* Ambient glow bottom center */ + radial-gradient(ellipse 80% 30% at 50% 105%, rgba(129, 140, 248, 0.04), transparent), + /* Base */ + var(--corvus-bg); + background-size: + 24px 24px, + 100% 100%, + 100% 100%, + 100% 100%, + 100% 100%; +} + +/* Subtle horizontal scanlines */ +.site-backdrop::after { + content: ""; + position: absolute; + inset: 0; + background: repeating-linear-gradient( + 0deg, + transparent, + transparent 2px, + rgba(129, 140, 248, var(--scanline-opacity)) 2px, + rgba(129, 140, 248, var(--scanline-opacity)) 4px + ); + pointer-events: none; } /* ── Layout Shell ── */ @@ -76,288 +138,356 @@ li + li { display: flex; justify-content: space-between; align-items: center; - gap: 1rem; + gap: 1.25rem; padding-top: 1.5rem; + padding-bottom: 1rem; + border-bottom: 1px solid var(--term-border); } /* ── Brand ── */ .brand { display: inline-flex; align-items: center; - gap: 0.65rem; + gap: 0.55rem; text-decoration: none; font-weight: 800; - letter-spacing: -0.03em; - background: var(--corvus-gradient-brand); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; + font-size: 0.88rem; + letter-spacing: 0.08em; + text-transform: uppercase; + font-family: var(--corvus-font-mono); + color: var(--corvus-text); } .brand-mark { - width: 14px; - height: 14px; - border-radius: 999px; - background: var(--corvus-gradient-brand); - box-shadow: 0 0 18px rgba(56, 189, 248, 0.55); + width: 20px; + height: 20px; + border-radius: 4px; flex-shrink: 0; - /* reset text fill for the mark itself */ - -webkit-text-fill-color: initial; } /* ── Nav ── */ nav { display: flex; flex-wrap: wrap; - gap: 1rem; + align-items: center; + gap: 0.25rem; } nav a { text-decoration: none; - font-size: 0.95rem; + font-size: 0.82rem; + font-weight: 500; + font-family: var(--corvus-font-mono); color: var(--corvus-text-muted); - transition: var(--corvus-transition); + padding: 0.5rem 0.85rem; + border-radius: 6px; + transition: all 0.2s ease; + letter-spacing: 0.02em; } -nav a:hover, -.inline-link:hover, -.back-link:hover { - color: var(--corvus-accent); +nav a:hover { + color: var(--corvus-accent-high); + background: rgba(129, 140, 248, 0.06); +} + +.btn-nav { + padding: 0.55rem 1rem; + font-size: 0.82rem; } /* ── Hero ── */ .hero { - padding-top: 4.5rem; - padding-bottom: 4.5rem; + padding-top: 5rem; + padding-bottom: 4rem; + position: relative; } .eyebrow { - font-size: 0.75rem; - letter-spacing: 0.16em; + font-size: 0.68rem; + letter-spacing: 0.2em; color: var(--corvus-accent); - font-weight: 700; + font-weight: 600; + font-family: var(--corvus-font-mono); + text-transform: uppercase; +} + +.hero-grid { + display: grid; + grid-template-columns: minmax(0, 1.5fr) minmax(240px, 0.5fr); + gap: 1.5rem; + align-items: start; +} + +.hero-copy { + max-width: 680px; +} + +.hero-rail { + display: grid; + gap: 0.5rem; + position: sticky; + top: 2rem; + align-content: start; + max-width: 320px; + justify-self: end; } .hero h1, .section h1 { + margin-top: 1.25rem; + font-size: clamp(3rem, 5.5vw, 5rem); + max-width: 14ch; + color: var(--corvus-text); + position: relative; +} + +/* Gradient underline on hero h1 */ +.hero h1::after { + content: ""; + display: block; + width: 3rem; + height: 3px; margin-top: 1rem; - font-size: clamp(2.2rem, 6vw, 4.45rem); - max-width: 17ch; - background: var(--corvus-gradient-hero-heading); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; + background: var(--corvus-gradient-brand); + border-radius: 2px; + box-shadow: 0 0 12px var(--glow-purple); } .subtitle { - margin-top: 1.25rem; - font-size: clamp(1rem, 2vw, 1.2rem); - line-height: 1.65; + margin-top: 1.5rem; + font-size: clamp(1rem, 1.5vw, 1.1rem); + line-height: 1.75; color: var(--corvus-text-muted); - max-width: 62ch; + max-width: 52ch; +} + +.hero-note { + margin-top: 1.25rem; + color: rgba(148, 163, 184, 0.7); + font-size: 0.85rem; + line-height: 1.6; + font-family: var(--corvus-font-mono); + padding-left: 1rem; + border-left: 2px solid var(--term-border); } .hero-actions { margin-top: 2rem; display: flex; flex-wrap: wrap; - gap: 0.85rem; + gap: 0.75rem; } /* ── Buttons ── */ .btn { text-decoration: none; - border-radius: var(--corvus-radius-md); - padding: 0.75rem 2rem; - border: 1.5px solid transparent; + border-radius: 6px; + padding: 0.75rem 1.25rem; + border: 1px solid transparent; font-weight: 600; - font-size: 0.95rem; - letter-spacing: -0.01em; - transition: var(--corvus-transition); + font-size: 0.85rem; + font-family: var(--corvus-font-mono); + letter-spacing: 0.02em; + transition: all 0.2s ease; + min-height: 44px; + display: inline-flex; + align-items: center; + justify-content: center; + cursor: pointer; } .btn-primary { - background: var(--corvus-gradient-brand); + background: var(--corvus-accent-strong); color: #fff; - border-color: transparent; - box-shadow: - 0 4px 20px rgba(56, 189, 248, 0.25), - inset 0 1px 0 rgba(255, 255, 255, 0.1); -} - -.btn-primary:hover { - transform: translateY(-2px); + border-color: var(--corvus-accent); box-shadow: - 0 8px 30px rgba(56, 189, 248, 0.35), - inset 0 1px 0 rgba(255, 255, 255, 0.15); + 0 0 20px var(--landing-cta-shadow), + 0 0 60px rgba(129, 140, 248, 0.1); + position: relative; } -.btn-ghost { - border-color: var(--corvus-glass-border); - color: var(--corvus-text); - background: var(--corvus-glass-bg); - backdrop-filter: blur(8px); +.btn-primary::before { + content: ""; + position: absolute; + inset: -1px; + border-radius: 7px; + background: var(--corvus-gradient-brand); + opacity: 0; + transition: opacity 0.3s ease; + z-index: -1; } -.btn-ghost:hover { - border-color: var(--corvus-accent); - background: rgba(56, 189, 248, 0.08); - transform: translateY(-2px); +.btn-primary:hover { + transform: translateY(-1px); + box-shadow: + 0 0 30px rgba(129, 140, 248, 0.4), + 0 0 80px rgba(129, 140, 248, 0.15); } -/* ── Command Card ── */ -.command-card { - margin-top: 2rem; - border-radius: var(--corvus-radius-lg); - border: 1px solid var(--corvus-line); - background: var(--corvus-glass-bg); - backdrop-filter: blur(12px); - padding: 1rem; - display: grid; - grid-template-columns: 1fr auto; - gap: 0.75rem; - align-items: center; +.btn-primary:hover::before { + opacity: 1; } -.command-card .label { - grid-column: span 2; +.btn-ghost { + border-color: var(--term-border); color: var(--corvus-text-muted); - font-size: 0.78rem; -} - -.command-card code { - display: block; - overflow-x: auto; - white-space: nowrap; - font-size: 0.93rem; - font-family: var(--corvus-font-mono); - color: var(--corvus-accent-high); -} - -.copy-btn { - border: 1px solid var(--corvus-line); - border-radius: var(--corvus-radius-sm); - background: var(--corvus-bg-panel-strong); - color: var(--corvus-text); - padding: 0.5rem 0.78rem; - font-weight: 600; - font-family: var(--corvus-font-sans); - cursor: pointer; - transition: var(--corvus-transition); + background: transparent; } -.copy-btn:hover { +.btn-ghost:hover { border-color: var(--corvus-accent); - background: rgba(56, 189, 248, 0.08); + color: var(--corvus-text); + background: rgba(129, 140, 248, 0.05); + transform: translateY(-1px); + box-shadow: 0 0 20px rgba(129, 140, 248, 0.08); } /* ── Metric Grid ── */ .metric-grid { - margin-top: 2rem; display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 0.8rem; + grid-template-columns: 1fr; + gap: 0.5rem; } .metric-grid article { - border: 1px solid var(--corvus-line); - border-radius: var(--corvus-radius-lg); - padding: 1.1rem; - background: var(--corvus-glass-bg); - backdrop-filter: blur(8px); - transition: var(--corvus-transition); + border: 1px solid var(--term-border); + border-radius: 6px; + padding: 1rem 0.85rem; + background: rgba(3, 5, 9, 0.6); + transition: all 0.25s ease; + position: relative; + overflow: hidden; +} + +.metric-grid article::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 1px; + background: var(--corvus-gradient-brand); + opacity: 0; + transition: opacity 0.3s ease; } .metric-grid article:hover { - border-color: rgba(56, 189, 248, 0.25); - transform: translateY(-2px); - box-shadow: var(--corvus-glass-shadow); + border-color: rgba(129, 140, 248, 0.25); + background: rgba(129, 140, 248, 0.03); +} + +.metric-grid article:hover::before { + opacity: 1; } .metric-grid strong { display: block; - font-family: var(--corvus-font-sans); - font-size: 1.4rem; - font-weight: 800; - background: var(--corvus-gradient-brand); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; + font-family: var(--corvus-font-mono); + font-size: 1.3rem; + font-weight: 700; + color: var(--corvus-accent-high); + letter-spacing: -0.02em; } .metric-grid span { color: var(--corvus-text-muted); - font-size: 0.92rem; + font-size: 0.78rem; + font-family: var(--corvus-font-mono); + letter-spacing: 0.01em; } /* ── Sections ── */ .section { - padding: 2rem 0 3.4rem; + padding: 4rem 0 4.5rem; + position: relative; +} + +/* Subtle top border for sections */ +.section::before { + content: ""; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: min(1120px, calc(100% - 2.5rem)); + height: 1px; + background: linear-gradient( + 90deg, + transparent, + var(--term-border) 20%, + var(--corvus-accent) 50%, + var(--term-border) 80%, + transparent + ); + opacity: 0.5; } .section-head { - margin-bottom: 1.2rem; + margin-bottom: 2.5rem; } .section-head h2 { - margin-top: 0.5rem; - font-size: clamp(1.5rem, 3vw, 2.6rem); + margin-top: 0.75rem; + font-size: clamp(1.8rem, 3vw, 2.8rem); max-width: 18ch; + color: var(--corvus-text); } /* ── Feature Grid / Cards ── */ .feature-grid { display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 0.9rem; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 0.75rem; } .feature-card { - padding: 1.75rem; - border-radius: var(--corvus-radius-lg); - border: 1px solid var(--corvus-glass-border); - background: var(--corvus-glass-bg); - backdrop-filter: blur(12px); - box-shadow: var(--corvus-glass-shadow); + padding: 1.5rem; + border-radius: 6px; + border: 1px solid var(--term-border); + background: rgba(3, 5, 9, 0.5); position: relative; overflow: hidden; - transition: var(--corvus-transition); + transition: all 0.25s ease; } -.feature-card::before { +/* Top accent line on feature cards */ +.feature-card::after { content: ""; position: absolute; - inset: 0; - background: var(--corvus-gradient-brand-subtle); + top: 0; + left: 0; + right: 0; + height: 1px; + background: var(--corvus-gradient-brand); opacity: 0; - transition: opacity 0.4s ease; - pointer-events: none; + transition: opacity 0.3s ease; } .feature-card:hover { - transform: translateY(-4px); - border-color: rgba(56, 189, 248, 0.25); - box-shadow: - 0 12px 40px rgba(0, 0, 0, 0.35), - 0 0 60px rgba(56, 189, 248, 0.08); + border-color: rgba(129, 140, 248, 0.2); + background: rgba(129, 140, 248, 0.03); + transform: translateY(-2px); } -.feature-card:hover::before { +.feature-card:hover::after { opacity: 1; } .feature-card h2, .feature-card h3 { - font-size: 1.18rem; + font-size: 1rem; font-weight: 700; - letter-spacing: -0.02em; + font-family: var(--corvus-font-sans); + letter-spacing: -0.01em; + color: var(--corvus-text); position: relative; z-index: 1; } .feature-card p { - margin-top: 0.6rem; - line-height: 1.6; + margin-top: 0.5rem; + line-height: 1.65; + font-size: 0.88rem; color: var(--corvus-text-muted); position: relative; z-index: 1; @@ -366,123 +496,326 @@ nav a:hover, .inline-link { margin-top: 0.8rem; display: inline-block; - color: var(--corvus-accent-high); + color: var(--corvus-accent); text-decoration: none; - font-weight: 700; + font-weight: 600; + font-family: var(--corvus-font-mono); + font-size: 0.82rem; +} + +.inline-link:hover { + color: var(--corvus-accent-high); } /* ── Comparison Grid ── */ .comparison-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 1rem; + gap: 0.75rem; } .comparison-grid article { - padding: 1.2rem; - border: 1px solid var(--corvus-line); - border-radius: var(--corvus-radius-lg); - background: var(--corvus-glass-bg); - backdrop-filter: blur(8px); + padding: 1.75rem; + border: 1px solid var(--term-border); + border-radius: 6px; + background: rgba(3, 5, 9, 0.5); + position: relative; +} + +/* "Before" card gets muted/red-ish left border */ +.comparison-grid article:first-child { + border-left: 2px solid rgba(248, 113, 113, 0.3); +} + +/* "After/Optimized" card gets accent left border */ +.comparison-grid article:last-child { + border-left: 2px solid rgba(129, 140, 248, 0.5); } .comparison-grid h2, .comparison-grid h3 { - margin-bottom: 0.75rem; + margin-bottom: 1rem; font-size: 1.15rem; + font-family: var(--corvus-font-sans); +} + +.comparison-grid li { + font-size: 0.9rem; + line-height: 1.6; +} + +/* Override list markers for comparison */ +.comparison-grid article:first-child li::before { + content: "×"; + color: var(--term-red); +} + +.comparison-grid article:last-child li::before { + content: "✓"; + color: var(--term-green); } /* ── Testimonials ── */ .testimonial-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 0.9rem; + gap: 0.75rem; } .testimonial-card { - border: 1px solid var(--corvus-line); - background: var(--corvus-glass-bg); - backdrop-filter: blur(8px); - border-radius: var(--corvus-radius-lg); - padding: 1.1rem; - transition: var(--corvus-transition); + border: 1px solid var(--term-border); + background: rgba(3, 5, 9, 0.5); + border-radius: 6px; + padding: 1.5rem; + transition: all 0.25s ease; + position: relative; +} + +/* Quote decoration */ +.testimonial-card::before { + content: "\201C"; + position: absolute; + top: 0.75rem; + right: 1rem; + font-size: 2.5rem; + font-family: var(--corvus-font-heading); + color: rgba(129, 140, 248, 0.12); + line-height: 1; } .testimonial-card:hover { - border-color: rgba(56, 189, 248, 0.2); - transform: translateY(-2px); + border-color: rgba(129, 140, 248, 0.2); + background: rgba(129, 140, 248, 0.03); } .testimonial-card p { color: var(--corvus-testimonial-text); - line-height: 1.6; + line-height: 1.7; + font-size: 0.9rem; + font-style: italic; } .testimonial-card span { - margin-top: 0.8rem; + margin-top: 1rem; display: inline-block; + color: var(--corvus-accent); + font-size: 0.78rem; + font-family: var(--corvus-font-mono); + font-weight: 500; + font-style: normal; +} + +/* ── FAQ ── */ +.faq-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0.75rem; +} + +.faq-group { + border: 1px solid var(--term-border); + border-radius: 6px; + background: rgba(3, 5, 9, 0.5); + padding: 1.5rem; +} + +.faq-group h3 { + font-size: 1.1rem; + margin-bottom: 1rem; + font-family: var(--corvus-font-sans); + font-weight: 700; + color: var(--corvus-text); + padding-bottom: 0.75rem; + border-bottom: 1px solid var(--term-border); +} + +.faq-list { + display: grid; + gap: 0.5rem; +} + +.faq-list details { + border: 1px solid var(--term-border); + border-radius: 4px; + padding: 0; + background: transparent; + transition: all 0.2s ease; +} + +.faq-list details[open] { + border-color: rgba(129, 140, 248, 0.2); + background: rgba(129, 140, 248, 0.02); +} + +.faq-list summary { + cursor: pointer; + font-weight: 600; + line-height: 1.4; + font-size: 0.88rem; + padding: 0.85rem 1rem; color: var(--corvus-text-muted); - font-size: 0.85rem; + transition: color 0.2s ease; + list-style: none; + display: flex; + align-items: center; + gap: 0.6rem; +} + +.faq-list summary::-webkit-details-marker { + display: none; +} + +/* Custom toggle indicator */ +.faq-list summary::before { + content: "›"; + font-family: var(--corvus-font-mono); + font-size: 1rem; + color: var(--corvus-accent); + transition: transform 0.2s ease; + flex-shrink: 0; + width: 1rem; + text-align: center; +} + +details[open] > summary::before { + transform: rotate(90deg); +} + +.faq-list summary:hover { + color: var(--corvus-text); +} + +.faq-list details > :not(summary) { + padding: 0 1rem 1rem 2.6rem; +} + +.faq-list ul { + margin-top: 0; + margin-bottom: 0; +} + +.faq-list li { + line-height: 1.65; + font-size: 0.88rem; +} + +.faq-list a { + margin-top: 0.8rem; + display: inline-block; + font-weight: 600; + font-family: var(--corvus-font-mono); + font-size: 0.8rem; + color: var(--corvus-accent); + text-decoration: none; + transition: color 0.2s ease; +} + +.faq-list a:hover { + color: var(--corvus-accent-high); } /* ── CTA Band ── */ .cta-band { - border: 1px solid var(--corvus-glass-border); - border-radius: var(--corvus-radius-xl); - background: var(--corvus-gradient-brand-subtle); - backdrop-filter: blur(12px); - padding: 1.6rem; + border: 1px solid var(--term-border); + border-radius: 8px; + background: rgba(3, 5, 9, 0.8); + padding: 3rem 2.5rem; + position: relative; + overflow: hidden; +} + +/* Glow orb behind CTA */ +.cta-band::before { + content: ""; + position: absolute; + width: 400px; + height: 400px; + right: -100px; + top: -100px; + border-radius: 50%; + background: radial-gradient(circle, rgba(129, 140, 248, 0.08), transparent 70%); + pointer-events: none; +} + +.cta-band::after { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 1px; + background: var(--corvus-gradient-brand); + opacity: 0.5; } .cta-band h2 { - font-size: clamp(1.5rem, 4vw, 2.45rem); + font-size: clamp(1.8rem, 3.5vw, 2.5rem); + max-width: 16ch; + position: relative; + z-index: 1; } .cta-band p { margin-top: 0.8rem; color: var(--corvus-text-muted); - line-height: 1.55; + line-height: 1.65; + max-width: 50ch; + font-size: 0.95rem; + position: relative; + z-index: 1; +} + +.cta-band .hero-actions { + position: relative; + z-index: 1; } /* ── Footer ── */ .footer { - padding: 1.8rem 0 2.5rem; + padding: 2rem 0 3rem; display: flex; justify-content: space-between; align-items: center; gap: 0.9rem; color: var(--corvus-text-muted); - font-size: 0.9rem; - border-top: 1px solid var(--corvus-line); + font-size: 0.8rem; + font-family: var(--corvus-font-mono); + border-top: 1px solid var(--term-border); } .footer div { display: flex; - gap: 0.8rem; + gap: 1rem; } -.footer a, -.back-link { +.footer a { color: var(--corvus-text-muted); text-decoration: none; - transition: var(--corvus-transition); + transition: color 0.2s ease; } -.footer a:hover, -.back-link:hover { +.footer a:hover { color: var(--corvus-accent); } .back-link { + color: var(--corvus-text-muted); + text-decoration: none; + transition: color 0.2s ease; margin-bottom: 0.9rem; display: inline-block; - font-weight: 700; + font-weight: 600; + font-family: var(--corvus-font-mono); +} + +.back-link:hover { + color: var(--corvus-accent); } /* ── Focus Styles ── */ :focus-visible { outline: 2px solid var(--corvus-accent); - outline-offset: 3px; + outline-offset: 2px; border-radius: 4px; } @@ -490,7 +823,7 @@ nav a:hover, @keyframes rise { from { opacity: 0; - transform: translateY(12px); + transform: translateY(16px); } to { opacity: 1; @@ -498,12 +831,53 @@ nav a:hover, } } +@keyframes glow-pulse { + 0%, + 100% { + opacity: 0.3; + } + 50% { + opacity: 0.6; + } +} + +@keyframes terminal-blink { + 0%, + 100% { + opacity: 1; + } + 50% { + opacity: 0; + } +} + @media (prefers-reduced-motion: no-preference) { - .hero, - .section, + .hero { + animation: rise 500ms ease both; + } + + .section { + animation: rise 500ms ease both; + animation-delay: 100ms; + } + .footer { - animation: rise 480ms ease both; + animation: rise 400ms ease both; + animation-delay: 200ms; } + + /* Staggered feature cards */ + .feature-card:nth-child(1) { animation: rise 400ms ease both; animation-delay: 50ms; } + .feature-card:nth-child(2) { animation: rise 400ms ease both; animation-delay: 100ms; } + .feature-card:nth-child(3) { animation: rise 400ms ease both; animation-delay: 150ms; } + .feature-card:nth-child(4) { animation: rise 400ms ease both; animation-delay: 200ms; } + .feature-card:nth-child(5) { animation: rise 400ms ease both; animation-delay: 250ms; } + .feature-card:nth-child(6) { animation: rise 400ms ease both; animation-delay: 300ms; } + + /* Staggered testimonial cards */ + .testimonial-card:nth-child(1) { animation: rise 400ms ease both; animation-delay: 50ms; } + .testimonial-card:nth-child(2) { animation: rise 400ms ease both; animation-delay: 100ms; } + .testimonial-card:nth-child(3) { animation: rise 400ms ease both; animation-delay: 150ms; } } /* ── View Transitions ── */ @@ -545,41 +919,110 @@ nav a:hover, /* ── Responsive ── */ @media (max-width: 960px) { - .feature-grid, + .shell { + width: min(100%, calc(100% - 1.5rem)); + } + + .topbar { + flex-direction: column; + align-items: flex-start; + gap: 1rem; + } + + .feature-grid { + grid-template-columns: 1fr; + } + .comparison-grid, .testimonial-row, - .metric-grid { + .metric-grid, + .faq-grid { grid-template-columns: 1fr; } + .hero-grid { + grid-template-columns: 1fr; + gap: 2rem; + } + + .hero-rail { + position: static; + max-width: 32rem; + } + .hero { padding-top: 3rem; + padding-bottom: 3rem; } - .command-card { - grid-template-columns: 1fr; + .hero::before { + display: none; } - .command-card .label { - grid-column: 1; + .hero h1, + .section h1 { + font-size: clamp(2.2rem, 10vw, 3.2rem); + max-width: 12ch; + } + + .subtitle, + .hero-note { + max-width: none; } .footer { flex-direction: column; align-items: flex-start; } + + nav { + justify-content: flex-start; + gap: 0.25rem; + } + + .btn, + .btn-nav { + width: 100%; + } + + .hero-actions { + flex-direction: column; + align-items: stretch; + } + + .cta-band { + padding: 2rem 1.5rem; + } + + .section-head h2 { + max-width: none; + } + + .metric-grid { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } +} + +@media (max-width: 480px) { + .metric-grid { + grid-template-columns: 1fr; + } } /* ── Reduced Motion ── */ @media (prefers-reduced-motion: reduce) { .btn, .btn-primary, - .btn-ghost { + .btn-ghost, + .feature-card, + .metric-grid article, + .testimonial-card { transition: none; } .btn-primary:hover, - .btn-ghost:hover { + .btn-ghost:hover, + .feature-card:hover { transform: none; } } From b974927ee38f6f499f6ade06742ca8f129e85054 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yuniel=20Acosta=20P=C3=A9rez?= <33158051+yacosta738@users.noreply.github.com> Date: Mon, 9 Mar 2026 07:44:18 +0100 Subject: [PATCH 2/4] fix(agent-runtime): remove duplicate test cfg attribute --- clients/agent-runtime/src/test_support.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/clients/agent-runtime/src/test_support.rs b/clients/agent-runtime/src/test_support.rs index dc259f8c6..2bdfb4aa5 100644 --- a/clients/agent-runtime/src/test_support.rs +++ b/clients/agent-runtime/src/test_support.rs @@ -1,5 +1,3 @@ -#![cfg(test)] - use crate::config::{Config, McpServerConfig}; use std::collections::BTreeMap; use tempfile::TempDir; From 70f4c0af6cc78f091a8e13726b31fd8e61e0296a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yuniel=20Acosta=20P=C3=A9rez?= <33158051+yacosta738@users.noreply.github.com> Date: Mon, 9 Mar 2026 07:44:44 +0100 Subject: [PATCH 3/4] docs(web): apply runtime docs and marketing review fixes --- .../diagrams/cargo-dependencies.mmd | 30 ++++++++++ .../diagrams/component/runtime-core.mmd | 31 +++++++++++ .../diagrams/container/runtime-containers.mmd | 38 +++++++++++++ .../container/runtime-containers.puml | 39 +++++++++++++ .../content/docs/en/guides/architecture.md | 8 +-- .../docs/en/guides/architecture/overview.md | 22 ++++---- .../apps/docs/src/content/docs/en/index.mdx | 2 +- .../content/docs/es/guides/architecture.md | 8 +-- .../docs/es/guides/architecture/overview.md | 22 ++++---- .../apps/docs/src/content/docs/es/index.mdx | 10 ++-- .../web/apps/marketing/src/pages/index.astro | 31 ++++++++--- .../web/apps/marketing/src/styles/global.css | 55 ++++++++++++++----- 12 files changed, 237 insertions(+), 59 deletions(-) create mode 100644 clients/web/apps/docs/public/guides/architecture/diagrams/cargo-dependencies.mmd create mode 100644 clients/web/apps/docs/public/guides/architecture/diagrams/component/runtime-core.mmd create mode 100644 clients/web/apps/docs/public/guides/architecture/diagrams/container/runtime-containers.mmd create mode 100644 clients/web/apps/docs/public/guides/architecture/diagrams/container/runtime-containers.puml diff --git a/clients/web/apps/docs/public/guides/architecture/diagrams/cargo-dependencies.mmd b/clients/web/apps/docs/public/guides/architecture/diagrams/cargo-dependencies.mmd new file mode 100644 index 000000000..305ea1aff --- /dev/null +++ b/clients/web/apps/docs/public/guides/architecture/diagrams/cargo-dependencies.mmd @@ -0,0 +1,30 @@ +--- +# Cargo Dependencies Diagram - Corvus Runtime +# Updated: 2026-03-09 +--- + +flowchart TB + subgraph WORKSPACE["Cargo Workspace"] + CORVUS["corvus\nCLI + runtime crate"]:::crate + ROBOT["robot-kit\nworkspace helper crate"]:::crate + end + + subgraph RUST_ECOSYSTEM["Rust Runtime Dependencies"] + TOKIO["tokio\nasync runtime"]:::dep + AXUM["axum\ngateway server"]:::dep + REQWEST["reqwest\nHTTP client"]:::dep + SQLITE["rusqlite\npersistent memory"]:::dep + SERDE["serde\nconfig + payloads"]:::dep + TRACE["tracing\nobservability"]:::dep + end + + CORVUS --> ROBOT + CORVUS --> TOKIO + CORVUS --> AXUM + CORVUS --> REQWEST + CORVUS --> SQLITE + CORVUS --> SERDE + CORVUS --> TRACE + + classDef crate fill:#818cf8,stroke:#5b67d8,stroke-width:2px,color:#fff + classDef dep fill:#38bdf8,stroke:#1d7ca8,stroke-width:2px,color:#001018 diff --git a/clients/web/apps/docs/public/guides/architecture/diagrams/component/runtime-core.mmd b/clients/web/apps/docs/public/guides/architecture/diagrams/component/runtime-core.mmd new file mode 100644 index 000000000..f2afe3d10 --- /dev/null +++ b/clients/web/apps/docs/public/guides/architecture/diagrams/component/runtime-core.mmd @@ -0,0 +1,31 @@ +--- +# C4 Component Diagram - Corvus Runtime Core +# Updated: 2026-03-09 +--- + +flowchart TB + CLI["CLI Commands\nagent, gateway, daemon, doctor"]:::entry + CHANNELS["Channel Adapters\nTelegram, Discord, Slack, WhatsApp, CLI"]:::component + PROVIDERS["Provider Registry\n22+ model providers"]:::component + MEMORY["Memory Layer\nSQLite, SurrealDB, Markdown"]:::component + TOOLS["Tool Runtime\nShell, file, memory, browser"]:::component + SECURITY["Security Policy\nPairing, allowlists, workspace scoping"]:::component + OBSERVE["Observability\nTracing, metrics, health"]:::component + CONFIG["Config + Identity\nTOML, OpenClaw, AIEOS"]:::component + LOOP["Agent Loop\nplanning, execution, supervision"]:::component + + CLI --> CONFIG + CLI --> LOOP + LOOP --> PROVIDERS + LOOP --> MEMORY + LOOP --> TOOLS + LOOP --> CHANNELS + LOOP --> SECURITY + LOOP --> OBSERVE + TOOLS --> SECURITY + CHANNELS --> SECURITY + PROVIDERS --> OBSERVE + MEMORY --> OBSERVE + + classDef entry fill:#818cf8,stroke:#5b67d8,stroke-width:2px,color:#fff + classDef component fill:#38bdf8,stroke:#1d7ca8,stroke-width:2px,color:#001018 diff --git a/clients/web/apps/docs/public/guides/architecture/diagrams/container/runtime-containers.mmd b/clients/web/apps/docs/public/guides/architecture/diagrams/container/runtime-containers.mmd new file mode 100644 index 000000000..6dcb045bf --- /dev/null +++ b/clients/web/apps/docs/public/guides/architecture/diagrams/container/runtime-containers.mmd @@ -0,0 +1,38 @@ +--- +# C4 Container Diagram - Corvus Runtime +# Updated: 2026-03-09 +--- + +flowchart TB + DEV["Developer"]:::person + USER["Channel User"]:::person + LLM["LLM Providers"]:::external + MSG["Messaging APIs"]:::external + TUNNEL["Tunnel Providers"]:::external + FS["Workspace Filesystem"]:::external + + subgraph CORVUS["Corvus Runtime"] + CLI["CLI Surface\nagent, onboard, doctor"]:::container + GATEWAY["Gateway\nwebhook and pairing server"]:::container + DAEMON["Daemon\nchannels, heartbeat, scheduler"]:::container + EXEC["Execution Runtime\nnative or Docker"]:::container + MEMORY["Memory Backends\nSQLite, SurrealDB, Markdown"]:::container + DASH["Operator Surfaces\ndocs, dashboard, marketing"]:::container + end + + DEV --> CLI + DEV --> DASH + USER --> GATEWAY + CLI --> DAEMON + CLI --> EXEC + DAEMON --> GATEWAY + DAEMON --> MEMORY + DAEMON --> EXEC + DAEMON --> LLM + DAEMON --> MSG + GATEWAY --> TUNNEL + EXEC --> FS + + classDef person fill:#c084fc,stroke:#7c3aed,stroke-width:2px,color:#fff + classDef container fill:#38bdf8,stroke:#1d7ca8,stroke-width:2px,color:#001018 + classDef external fill:#94a3b8,stroke:#475569,stroke-width:2px,color:#fff diff --git a/clients/web/apps/docs/public/guides/architecture/diagrams/container/runtime-containers.puml b/clients/web/apps/docs/public/guides/architecture/diagrams/container/runtime-containers.puml new file mode 100644 index 000000000..ca0a8baa5 --- /dev/null +++ b/clients/web/apps/docs/public/guides/architecture/diagrams/container/runtime-containers.puml @@ -0,0 +1,39 @@ +@startuml +' C4 Container Diagram - Corvus Runtime +' Updated: 2026-03-09 + +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/v2.13.0/C4_Container.puml + +LAYOUT_WITH_LEGEND() + +Person(developer, "Developer", "Configures and operates Corvus") +Person(channelUser, "Channel User", "Interacts through configured channels") + +System_Ext(llmProviders, "LLM Providers", "OpenRouter, Anthropic, OpenAI, and others") +System_Ext(messagingApis, "Messaging APIs", "Telegram, Discord, Slack, WhatsApp, Matrix") +System_Ext(tunnelProviders, "Tunnel Providers", "Cloudflare, Tailscale, ngrok") +System_Ext(workspaceFs, "Workspace Filesystem", "Scoped files and command execution") + +System_Boundary(corvus, "Corvus Runtime") { + Container(cli, "CLI Surface", "Rust + clap", "agent, onboard, doctor, status, and admin commands") + Container(gateway, "Gateway", "Rust + axum", "Pairing, webhooks, and authenticated runtime access") + Container(daemon, "Daemon", "Rust + tokio", "Channels, heartbeat, scheduling, and long-running orchestration") + Container(execution, "Execution Runtime", "Native or Docker", "Tool execution with security policy enforcement") + ContainerDb(memory, "Memory Backends", "SQLite / SurrealDB / Markdown", "Persistent runtime memory and recall") + Container(ops, "Operator Surfaces", "Astro web apps", "Documentation, dashboard, and marketing surfaces") +} + +Rel(developer, cli, "Uses") +Rel(developer, ops, "Reads and operates through") +Rel(channelUser, gateway, "Interacts through") +Rel(cli, daemon, "Starts and inspects") +Rel(cli, execution, "Triggers commands and tools through") +Rel(daemon, gateway, "Exposes runtime functionality via") +Rel(daemon, memory, "Reads and writes runtime memory") +Rel(daemon, execution, "Delegates tool execution to") +Rel(daemon, llmProviders, "Queries models from") +Rel(daemon, messagingApis, "Connects to") +Rel(gateway, tunnelProviders, "Can be exposed through") +Rel(execution, workspaceFs, "Reads and writes within scoped workspace") + +@enduml diff --git a/clients/web/apps/docs/src/content/docs/en/guides/architecture.md b/clients/web/apps/docs/src/content/docs/en/guides/architecture.md index e96bc31f1..0c674c96f 100644 --- a/clients/web/apps/docs/src/content/docs/en/guides/architecture.md +++ b/clients/web/apps/docs/src/content/docs/en/guides/architecture.md @@ -117,9 +117,9 @@ For a more detailed view of the architecture, see the following C4 diagrams: | Level | Diagram | Description | Diagram ID | |-----------------|----------------------------------------------------------------------------|---------------------------------------------------|-----------------------------------| -| C1 - Context | [System Context](./architecture/diagrams/context/system-context.mmd) | High-level view of the system and external actors | `context/system-context.mmd` | -| C2 - Containers | [Main Containers](./architecture/diagrams/container/system-containers.mmd) | Applications and services that compose Corvus | `container/system-containers.mmd` | -| C3 - Components | [Agent Core KMP](./architecture/diagrams/component/agent-core-kmp.mmd) | Internal components of the core module | `component/agent-core-kmp.mmd` | -| - | [Module Dependencies](./architecture/diagrams/module-dependencies.mmd) | Gradle dependency relationships | `module-dependencies.mmd` | +| C1 - Context | [System Context](./architecture/diagrams/context/system-context.mmd) | High-level view of the runtime and external actors | `context/system-context.mmd` | +| C2 - Containers | [Runtime Containers](./architecture/diagrams/container/runtime-containers.mmd) | Runtime services and operator surfaces | `container/runtime-containers.mmd` | +| C3 - Components | [Runtime Core](./architecture/diagrams/component/runtime-core.mmd) | Internal components of the runtime core | `component/runtime-core.mmd` | +| - | [Cargo Dependencies](./architecture/diagrams/cargo-dependencies.mmd) | Cargo workspace and runtime dependency flow | `cargo-dependencies.mmd` | See [Architecture Index](./architecture/overview.md) for more details on how to visualize them. diff --git a/clients/web/apps/docs/src/content/docs/en/guides/architecture/overview.md b/clients/web/apps/docs/src/content/docs/en/guides/architecture/overview.md index 15aab2f7b..2a7550ff3 100644 --- a/clients/web/apps/docs/src/content/docs/en/guides/architecture/overview.md +++ b/clients/web/apps/docs/src/content/docs/en/guides/architecture/overview.md @@ -22,27 +22,27 @@ Shows the Corvus system as a black box and its interactions with actors and exte Decomposes the system into main containers/applications and their interactions. - **Files**: - - [`container/system-containers.mmd`](./diagrams/container/system-containers.mmd) (Mermaid) - - [`container/system-containers.puml`](./diagrams/container/system-containers.puml) (PlantUML) -- **Description**: Shows the main containers: Web Dashboard, Android App, iOS App, Agent Runtime, - Rust Sidecar, and Graph DB. + - [`container/runtime-containers.mmd`](./diagrams/container/runtime-containers.mmd) (Mermaid) + - [`container/runtime-containers.puml`](./diagrams/container/runtime-containers.puml) (PlantUML) +- **Description**: Shows the runtime containers: CLI, gateway, daemon services, tool execution, + memory backends, and operator surfaces around Corvus. ## Level 3: Components Decomposes individual containers into their internal components. -### Agent Core KMP +### Runtime Core -- **File**: [`component/agent-core-kmp.mmd`](./diagrams/component/agent-core-kmp.mmd) -- **Description**: Internal components of the core module: Domain, Use Cases, Interfaces, and - Infrastructure. +- **File**: [`component/runtime-core.mmd`](./diagrams/component/runtime-core.mmd) +- **Description**: Internal components of the runtime core: config, agent loop, providers, + memory, tools, channels, security, and observability. ## Module Dependencies Additional diagram showing Gradle dependencies between modules. -- **File**: [`module-dependencies.mmd`](./diagrams/module-dependencies.mmd) -- **Description**: Shows how clients depend on the shared core and external frameworks. +- **File**: [`cargo-dependencies.mmd`](./diagrams/cargo-dependencies.mmd) +- **Description**: Shows the Cargo workspace layout and the runtime's primary Rust dependency flow. ## How to Visualize @@ -70,7 +70,7 @@ For `.puml` files: ```bash # Use PlantUML online or locally -plantuml -tpng diagrams/container/system-containers.puml +plantuml -tpng diagrams/container/runtime-containers.puml ``` ## Conventions diff --git a/clients/web/apps/docs/src/content/docs/en/index.mdx b/clients/web/apps/docs/src/content/docs/en/index.mdx index 9291e7697..6ed25b3e1 100644 --- a/clients/web/apps/docs/src/content/docs/en/index.mdx +++ b/clients/web/apps/docs/src/content/docs/en/index.mdx @@ -1,6 +1,6 @@ --- title: Corvus -description: Secure, pluggable documentation for the Rust-native runtime for autonomous AI agents. +description: Secure, pluggable Rust-native runtime for autonomous AI agents, with companion documentation. template: splash hero: tagline: Build autonomous AI agents with a secure, pluggable Rust-native runtime that stays small, fast, and portable. diff --git a/clients/web/apps/docs/src/content/docs/es/guides/architecture.md b/clients/web/apps/docs/src/content/docs/es/guides/architecture.md index d3ef7eada..f0fd078a8 100644 --- a/clients/web/apps/docs/src/content/docs/es/guides/architecture.md +++ b/clients/web/apps/docs/src/content/docs/es/guides/architecture.md @@ -118,10 +118,10 @@ Para una vista más detallada de la arquitectura, consulta los siguientes diagra | Nivel | Diagrama | Descripción | ID del Diagrama | |-------------------|-------------------------------------------------------------------------------------|----------------------------------------------------|-----------------------------------| -| C1 - Contexto | [Sistema Completo](./architecture/diagrams/context/system-context.mmd) | Vista de alto nivel del sistema y actores externos | `context/system-context.mmd` | -| C2 - Contenedores | [Contenedores Principales](./architecture/diagrams/container/system-containers.mmd) | Aplicaciones y servicios que componen Corvus | `container/system-containers.mmd` | -| C3 - Componentes | [Agent Core KMP](./architecture/diagrams/component/agent-core-kmp.mmd) | Componentes internos del módulo core | `component/agent-core-kmp.mmd` | -| - | [Dependencias entre Módulos](./architecture/diagrams/module-dependencies.mmd) | Relaciones de dependencia de Gradle | `module-dependencies.mmd` | +| C1 - Contexto | [Sistema Completo](./architecture/diagrams/context/system-context.mmd) | Vista de alto nivel del runtime y actores externos | `context/system-context.mmd` | +| C2 - Contenedores | [Contenedores del Runtime](./architecture/diagrams/container/runtime-containers.mmd) | Servicios del runtime y superficies operativas | `container/runtime-containers.mmd` | +| C3 - Componentes | [Núcleo del Runtime](./architecture/diagrams/component/runtime-core.mmd) | Componentes internos del núcleo del runtime | `component/runtime-core.mmd` | +| - | [Dependencias de Cargo](./architecture/diagrams/cargo-dependencies.mmd) | Flujo de dependencias del workspace Rust/Cargo | `cargo-dependencies.mmd` | Ver [Visión General de la Arquitectura](./architecture/overview.md) para más detalles sobre cómo visualizarlos. diff --git a/clients/web/apps/docs/src/content/docs/es/guides/architecture/overview.md b/clients/web/apps/docs/src/content/docs/es/guides/architecture/overview.md index 464f5eecd..54649c2f2 100644 --- a/clients/web/apps/docs/src/content/docs/es/guides/architecture/overview.md +++ b/clients/web/apps/docs/src/content/docs/es/guides/architecture/overview.md @@ -22,27 +22,27 @@ Muestra el sistema Corvus como una caja negra y sus interacciones con actores y Descompone el sistema en contenedores/aplicaciones principales y sus interacciones. - **Archivos**: - - [`container/system-containers.mmd`](./diagrams/container/system-containers.mmd) (Mermaid) - - [`container/system-containers.puml`](./diagrams/container/system-containers.puml) (PlantUML) -- **Descripción**: Muestra los contenedores principales: Web Dashboard, Android App, iOS App, Agent - Runtime, Rust Sidecar, y Graph DB. + - [`container/runtime-containers.mmd`](./diagrams/container/runtime-containers.mmd) (Mermaid) + - [`container/runtime-containers.puml`](./diagrams/container/runtime-containers.puml) (PlantUML) +- **Descripción**: Muestra los contenedores del runtime: CLI, gateway, servicios daemon, + ejecución de tools, backends de memoria y superficies operativas alrededor de Corvus. ## Nivel 3: Componentes Descompone contenedores individuales en sus componentes internos. -### Agent Core KMP +### Núcleo del Runtime -- **Archivo**: [`component/agent-core-kmp.mmd`](./diagrams/component/agent-core-kmp.mmd) -- **Descripción**: Componentes internos del módulo core: Dominio, Casos de Uso, Interfaces e - Infraestructura. +- **Archivo**: [`component/runtime-core.mmd`](./diagrams/component/runtime-core.mmd) +- **Descripción**: Componentes internos del núcleo del runtime: configuración, agent loop, + providers, memoria, tools, canales, seguridad y observabilidad. ## Dependencias entre Módulos Diagrama adicional mostrando las dependencias de Gradle entre módulos. -- **Archivo**: [`module-dependencies.mmd`](./diagrams/module-dependencies.mmd) -- **Descripción**: Muestra cómo los clientes dependen del core compartido y de frameworks externos. +- **Archivo**: [`cargo-dependencies.mmd`](./diagrams/cargo-dependencies.mmd) +- **Descripción**: Muestra la estructura del workspace Cargo y el flujo principal de dependencias Rust del runtime. ## Cómo Visualizar @@ -70,7 +70,7 @@ Para los archivos `.puml`: ```bash # Usar PlantUML online o local -plantuml -tpng diagrams/container/system-containers.puml +plantuml -tpng diagrams/container/runtime-containers.puml ``` ## Convenciones diff --git a/clients/web/apps/docs/src/content/docs/es/index.mdx b/clients/web/apps/docs/src/content/docs/es/index.mdx index 157fc8463..56b6b6297 100644 --- a/clients/web/apps/docs/src/content/docs/es/index.mdx +++ b/clients/web/apps/docs/src/content/docs/es/index.mdx @@ -1,9 +1,9 @@ --- title: Corvus -description: Documentacion segura y pluggable para el runtime Rust-native de agentes autonomos. +description: Documentación complementaria del runtime Rust-native, seguro y pluggable para agentes autónomos. template: splash hero: - tagline: Construye agentes autonomos con un runtime Rust-native, seguro, pluggable, rapido y portable. + tagline: Construye agentes autónomos con un runtime Rust-native, seguro, pluggable, rápido y portable. actions: - text: Primeros Pasos link: guides/getting-started/ @@ -22,7 +22,7 @@ import {Card, CardGrid, LinkCard} from '@astrojs/starlight/components'; - Un binario pequeño en Rust con arranque rapido y bajo consumo de memoria para laptops, servidores, SBCs y entornos limitados. + Un binario pequeño en Rust con arranque rápido y bajo consumo de memoria para laptops, servidores, SBCs y entornos limitados. Pairing, sandboxing, aislamiento del workspace, allowlists y secretos cifrados forman parte de la postura por defecto. @@ -31,7 +31,7 @@ import {Card, CardGrid, LinkCard} from '@astrojs/starlight/components'; Cambia providers, memoria, tools, canales, tunnels y runtime modes sin reescribir tu stack. - Ejecuta Corvus en nativo o Docker con un solo runtime para chat, gateway, daemon, integraciones y automatizacion. + Ejecuta Corvus en nativo o Docker con un solo runtime para chat, gateway, daemon, integraciones y automatización. @@ -46,7 +46,7 @@ import {Card, CardGrid, LinkCard} from '@astrojs/starlight/components'; href="guides/features/"/> - FAQ Docs - Install Corvus + Install Corvus @@ -132,9 +135,9 @@ const hero = {

{hero.eyebrow}

{hero.title}

{hero.subtitle}

-
- {hero.primaryCta} - {hero.secondaryCta} +

Built for developers and teams who want agent infrastructure with strong defaults, real portability, and no unnecessary runtime weight.

@@ -254,7 +257,7 @@ const hero = { Install Corvus, run your first agent workflow, and keep control over models, memory, tools, and deployment from day one.

@@ -265,7 +268,7 @@ const hero = { @@ -282,13 +285,23 @@ const hero = { ...detail, }; + let previous = []; + try { const raw = window.localStorage.getItem(metricsKey); - const previous = raw ? JSON.parse(raw) : []; + if (raw) { + const parsed = JSON.parse(raw); + previous = Array.isArray(parsed) ? parsed : []; + } + } catch { + previous = []; + } + + try { previous.push(payload); window.localStorage.setItem(metricsKey, JSON.stringify(previous.slice(-100))); } catch { - return; + // Ignore persistence failures and still emit the analytics event. } window.dispatchEvent(new CustomEvent("corvus:analytics", { detail: payload })); diff --git a/clients/web/apps/marketing/src/styles/global.css b/clients/web/apps/marketing/src/styles/global.css index e9b6dcec4..f7bfd7522 100644 --- a/clients/web/apps/marketing/src/styles/global.css +++ b/clients/web/apps/marketing/src/styles/global.css @@ -93,8 +93,8 @@ code { inset: 0; pointer-events: none; z-index: -1; + /* Dot grid pattern */ background: - /* Dot grid pattern */ radial-gradient(circle, rgba(129, 140, 248, 0.06) 1px, transparent 1px), /* Ambient glow top-left */ radial-gradient(ellipse 60% 40% at 10% -5%, rgba(56, 189, 248, 0.08), transparent), @@ -867,17 +867,44 @@ details[open] > summary::before { } /* Staggered feature cards */ - .feature-card:nth-child(1) { animation: rise 400ms ease both; animation-delay: 50ms; } - .feature-card:nth-child(2) { animation: rise 400ms ease both; animation-delay: 100ms; } - .feature-card:nth-child(3) { animation: rise 400ms ease both; animation-delay: 150ms; } - .feature-card:nth-child(4) { animation: rise 400ms ease both; animation-delay: 200ms; } - .feature-card:nth-child(5) { animation: rise 400ms ease both; animation-delay: 250ms; } - .feature-card:nth-child(6) { animation: rise 400ms ease both; animation-delay: 300ms; } + .feature-card:nth-child(1) { + animation: rise 400ms ease both; + animation-delay: 50ms; + } + .feature-card:nth-child(2) { + animation: rise 400ms ease both; + animation-delay: 100ms; + } + .feature-card:nth-child(3) { + animation: rise 400ms ease both; + animation-delay: 150ms; + } + .feature-card:nth-child(4) { + animation: rise 400ms ease both; + animation-delay: 200ms; + } + .feature-card:nth-child(5) { + animation: rise 400ms ease both; + animation-delay: 250ms; + } + .feature-card:nth-child(6) { + animation: rise 400ms ease both; + animation-delay: 300ms; + } /* Staggered testimonial cards */ - .testimonial-card:nth-child(1) { animation: rise 400ms ease both; animation-delay: 50ms; } - .testimonial-card:nth-child(2) { animation: rise 400ms ease both; animation-delay: 100ms; } - .testimonial-card:nth-child(3) { animation: rise 400ms ease both; animation-delay: 150ms; } + .testimonial-card:nth-child(1) { + animation: rise 400ms ease both; + animation-delay: 50ms; + } + .testimonial-card:nth-child(2) { + animation: rise 400ms ease both; + animation-delay: 100ms; + } + .testimonial-card:nth-child(3) { + animation: rise 400ms ease both; + animation-delay: 150ms; + } } /* ── View Transitions ── */ @@ -955,10 +982,6 @@ details[open] > summary::before { padding-bottom: 3rem; } - .hero::before { - display: none; - } - .hero h1, .section h1 { font-size: clamp(2.2rem, 10vw, 3.2rem); @@ -1011,6 +1034,10 @@ details[open] > summary::before { /* ── Reduced Motion ── */ @media (prefers-reduced-motion: reduce) { + html { + scroll-behavior: auto; + } + .btn, .btn-primary, .btn-ghost, From dfbb2f245f161c898b36290fca3484415c8db8c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yuniel=20Acosta=20P=C3=A9rez?= <33158051+yacosta738@users.noreply.github.com> Date: Mon, 9 Mar 2026 08:18:02 +0100 Subject: [PATCH 4/4] docs(web): align docs urls and cargo diagram semantics --- .../diagrams/cargo-dependencies.mmd | 4 +- .../docs/en/guides/architecture/overview.md | 2 +- .../docs/es/guides/architecture/overview.md | 2 +- .../web/apps/marketing/src/pages/index.astro | 39 ++++++++++++++----- .../web/apps/marketing/src/styles/global.css | 2 +- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/clients/web/apps/docs/public/guides/architecture/diagrams/cargo-dependencies.mmd b/clients/web/apps/docs/public/guides/architecture/diagrams/cargo-dependencies.mmd index 305ea1aff..bd54d69cc 100644 --- a/clients/web/apps/docs/public/guides/architecture/diagrams/cargo-dependencies.mmd +++ b/clients/web/apps/docs/public/guides/architecture/diagrams/cargo-dependencies.mmd @@ -18,7 +18,8 @@ flowchart TB TRACE["tracing\nobservability"]:::dep end - CORVUS --> ROBOT + NOTE_WORKSPACE["corvus-robot-kit is a workspace member\nsee clients/agent-runtime/Cargo.toml"]:::note + ROBOT -. workspace member .- NOTE_WORKSPACE CORVUS --> TOKIO CORVUS --> AXUM CORVUS --> REQWEST @@ -28,3 +29,4 @@ flowchart TB classDef crate fill:#818cf8,stroke:#5b67d8,stroke-width:2px,color:#fff classDef dep fill:#38bdf8,stroke:#1d7ca8,stroke-width:2px,color:#001018 + classDef note fill:#111827,stroke:#64748b,stroke-dasharray: 4 4,color:#e5eefc diff --git a/clients/web/apps/docs/src/content/docs/en/guides/architecture/overview.md b/clients/web/apps/docs/src/content/docs/en/guides/architecture/overview.md index 2a7550ff3..313f6091f 100644 --- a/clients/web/apps/docs/src/content/docs/en/guides/architecture/overview.md +++ b/clients/web/apps/docs/src/content/docs/en/guides/architecture/overview.md @@ -39,7 +39,7 @@ Decomposes individual containers into their internal components. ## Module Dependencies -Additional diagram showing Gradle dependencies between modules. +Additional diagram showing Cargo dependencies between workspace modules. - **File**: [`cargo-dependencies.mmd`](./diagrams/cargo-dependencies.mmd) - **Description**: Shows the Cargo workspace layout and the runtime's primary Rust dependency flow. diff --git a/clients/web/apps/docs/src/content/docs/es/guides/architecture/overview.md b/clients/web/apps/docs/src/content/docs/es/guides/architecture/overview.md index 54649c2f2..bcffdcd0e 100644 --- a/clients/web/apps/docs/src/content/docs/es/guides/architecture/overview.md +++ b/clients/web/apps/docs/src/content/docs/es/guides/architecture/overview.md @@ -39,7 +39,7 @@ Descompone contenedores individuales en sus componentes internos. ## Dependencias entre Módulos -Diagrama adicional mostrando las dependencias de Gradle entre módulos. +Diagrama adicional mostrando las dependencias de Cargo entre módulos del workspace. - **Archivo**: [`cargo-dependencies.mmd`](./diagrams/cargo-dependencies.mmd) - **Descripción**: Muestra la estructura del workspace Cargo y el flujo principal de dependencias Rust del runtime. diff --git a/clients/web/apps/marketing/src/pages/index.astro b/clients/web/apps/marketing/src/pages/index.astro index e24167459..9a79f76de 100644 --- a/clients/web/apps/marketing/src/pages/index.astro +++ b/clients/web/apps/marketing/src/pages/index.astro @@ -1,6 +1,27 @@ --- +import { PORTS, resolveSiteUrl } from "@corvus/shared/env"; +import { loadEnv } from "vite"; import MarketingLayout from "../layouts/MarketingLayout.astro"; +const DEFAULT_DOCS_DEV_URL = `http://localhost:${PORTS.DOCS}`; +const DEFAULT_DOCS_PROD_URL = "https://docs.profiletailors.com"; + +const mode = process.env.NODE_ENV || "production"; +const env = loadEnv(mode, process.cwd(), ""); +const docsBaseUrl = resolveSiteUrl({ + env, + primaryKey: "DOCS_URL", + localDefault: DEFAULT_DOCS_DEV_URL, + productionDefault: DEFAULT_DOCS_PROD_URL, + genericKeys: ["SITE_URL"], + providerKeys: { + cloudflare: "CF_PAGES_URL", + vercel: "VERCEL_URL", + netlify: "URL", + }, + isProdLike: mode === "production", +}); + const conversionKeys = [ { title: "Lean by default", @@ -46,8 +67,8 @@ const testimonials = [ }, ]; -const installUrl = "https://docs.profiletailors.com/en/guides/getting-started/"; -const architectureUrl = "https://docs.profiletailors.com/en/guides/architecture/"; +const installUrl = `${docsBaseUrl}/en/guides/getting-started/`; +const architectureUrl = `${docsBaseUrl}/en/guides/architecture/`; const faqGroups = [ { @@ -71,7 +92,7 @@ const faqGroups = [ "It helps teams avoid heavyweight stacks and unnecessary lock-in.", ], ctaLabel: "See the quick start", - ctaHref: "https://docs.profiletailors.com", + ctaHref: installUrl, }, ], }, @@ -86,7 +107,7 @@ const faqGroups = [ "Secrets can be encrypted locally and public access is never assumed.", ], ctaLabel: "Review security controls", - ctaHref: "https://docs.profiletailors.com", + ctaHref: docsBaseUrl, }, { question: "Where can it run?", @@ -96,7 +117,7 @@ const faqGroups = [ "Its small binary size and fast startup make it viable beyond heavyweight cloud-only setups.", ], ctaLabel: "Explore runtime options", - ctaHref: "https://docs.profiletailors.com", + ctaHref: docsBaseUrl, }, ], }, @@ -123,7 +144,7 @@ const hero = { @@ -138,7 +159,7 @@ const hero = {

Built for developers and teams who want agent infrastructure with strong defaults, real portability, and no unnecessary runtime weight.

@@ -258,7 +279,7 @@ const hero = {

@@ -266,7 +287,7 @@ const hero = {