From 5b26533284d26106ced0ebf671c1c56a7237f757 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 20:41:16 +0200 Subject: [PATCH 01/46] docs: highlight AI use cases across introduction, quickstart, and how-it-works - introduction.mdx: reposition as "Kubernetes control plane for humans and AI agents", lead with two-ways-to-work section (AI vs Platform), add 6 use case cards matching the solutions page strategy (AI Prompt Deployment, AI Dev Environments, Ephemeral, GitOps, Migrate to K8s, Simplify K8s) - quickstart.mdx: promote "Deploy with AI Agent" as the featured top-of-page path, add "AI Dev & Remote Environments" as a second AI card, include a "How Qovery fits into your workflow" section showing all four interfaces - how-it-works.mdx: update tagline to AI-first framing, add dedicated section explaining how AI agents interact via Agent Skill and MCP Server, surface AI interfaces first in the interfaces list, add two-workflow steps (AI vs Platform) Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/how-it-works.mdx | 69 ++++-- docs/getting-started/introduction.mdx | 174 ++++++++++++---- docs/getting-started/quickstart.mdx | 288 ++++++++++++++++---------- 3 files changed, 365 insertions(+), 166 deletions(-) diff --git a/docs/getting-started/how-it-works.mdx b/docs/getting-started/how-it-works.mdx index f357933..14ab013 100644 --- a/docs/getting-started/how-it-works.mdx +++ b/docs/getting-started/how-it-works.mdx @@ -1,20 +1,40 @@ --- title: "How Qovery Works" -description: "Understand the architecture behind Qovery's DevOps Automation Platform" +description: "Understand the architecture behind Qovery — the Kubernetes control plane for humans and AI agents" --- ## The Big Picture -Qovery extends Kubernetes into a **production-ready super orchestrator** that manages not just containers, but your entire cloud infrastructure—databases, storage, serverless functions, and more—all orchestrated through Kubernetes. +Qovery is **the Kubernetes control plane for humans and AI agents** — running entirely on your own cloud infrastructure. + +Whether a developer deploys via the console, an AI agent deploys via the Agent Skill, or a platform engineer manages clusters via Terraform, they all drive the same control plane. One consistent model, every interface. Qovery Architecture - Five products running on Kubernetes across multiple cloud providers Qovery Architecture - Five products running on Kubernetes across multiple cloud providers +## How AI Agents Interact with Qovery + +AI coding agents (Claude Code, Cursor, OpenCode, and 30+ others) interact with Qovery through two complementary interfaces: + + + + **Takes your source code → deploys it on Qovery** + + The AI agent analyzes your project, generates a Dockerfile, provisions databases, configures environment variables, and deploys — all autonomously. No Kubernetes knowledge required from the developer. + + + **Manages existing infrastructure via natural language** + + Once deployed, use the Qovery MCP Server to query environments, troubleshoot deployments, scale services, and manage infrastructure — all through conversation. + + + ## Why Kubernetes? -Kubernetes was designed for infrastructure operators—not developers. Qovery bridges this gap by adding: +Kubernetes was designed for infrastructure operators — not developers, and certainly not AI agents. Qovery bridges this gap by adding: - **Developer Experience** - Deploy without Kubernetes expertise +- **AI Agent Interface** - Agent Skill and MCP Server for autonomous operations - **Production Readiness** - Security, monitoring, and compliance built-in - **Multi-Cloud** - Works on AWS, GCP, Azure, Scaleway, on-premise - **Universal Orchestration** - Manages containers, databases, Terraform, and more @@ -58,13 +78,14 @@ Unlike traditional PaaS (Heroku, Platform.sh), Qovery runs on **your own cloud a ### 1. Multiple Interfaces -Work with Qovery through your preferred method: +Work with Qovery through your preferred method — all driving the same control plane: +- **[AI Agent Skill](/getting-started/quickstart/ai-agent)** - Deploy from Claude Code, Cursor, or any AI coding tool +- **[MCP Server](/copilot/mcp-server)** - Manage infrastructure via natural language - **Web Console** - Visual interface for teams - **[CLI](/cli/overview)** - Command-line for developers - **[Terraform](/terraform/overview)** - Infrastructure as Code - **[API](/api/overview)** - Programmatic control -- **[MCP Server](/copilot/mcp-server)** - AI agent integration ### 2. Production-Ready Features @@ -92,7 +113,29 @@ Manage **any cloud resource** from Kubernetes: This means **one control plane** for your entire cloud infrastructure. -## The Workflow +## Two Workflows + +### With an AI Agent (Recommended for New Users) + + + + Run `curl -fsSL https://skill.qovery.com/install.sh | bash` in your terminal + + + + Launch Claude Code, Cursor, OpenCode, or any compatible tool + + + + Say "Deploy my application with Qovery" — the agent handles everything from Dockerfile to running deployment + + + + Use the Qovery MCP Server to monitor, troubleshoot, and operate your infrastructure via natural language + + + +### With the Platform (Console / CLI / Terraform) @@ -100,7 +143,7 @@ This means **one control plane** for your entire cloud infrastructure. - Set app settings, variables, resources + Set app settings, variables, and resources via the Console or Terraform @@ -108,15 +151,18 @@ This means **one control plane** for your entire cloud infrastructure. - Track metrics, scale, optimize—all from one interface + Track metrics, scale, optimize — all from one interface ## Next Steps - - Deploy your first app in 15 minutes + + From code to deployed in ~10 minutes + + + Browse every deployment path Learn essential terminology @@ -124,7 +170,4 @@ This means **one control plane** for your entire cloud infrastructure. Deep dive into all five products - - Explore all configuration options - diff --git a/docs/getting-started/introduction.mdx b/docs/getting-started/introduction.mdx index ccacd76..8f4c594 100644 --- a/docs/getting-started/introduction.mdx +++ b/docs/getting-started/introduction.mdx @@ -1,39 +1,142 @@ --- title: "Introduction" -description: "Welcome to Qovery - Enterprise Kubernetes Management Platform" +description: "Qovery — The Kubernetes control plane for humans and AI agents. Deploy apps without DevOps expertise." mode: "wide" --- ## Welcome to Qovery -Qovery is an **Enterprise Kubernetes Management Platform** that helps teams operate Kubernetes clusters reliably and consistently at scale, while enabling developers to deploy applications through safe, self-service workflows. +Qovery is **the Kubernetes control plane for humans and AI agents** — running on your own cloud infrastructure. -Instead of replacing Kubernetes or existing tools, Qovery provides a **central control plane** that standardises cluster operations, integrates with your cloud and ecosystem, and encodes operational best practices into the platform. - -Developers ship faster. Platform and DevOps teams retain control. +Whether you're a developer describing what you want to deploy in plain English, a platform team standardising operations at scale, or an AI agent autonomously provisioning environments, Qovery is the single control plane that makes it happen. - - Self-service platform for deploying apps without waiting for DevOps + + Let Claude Code, Cursor, or any AI agent deploy your app end-to-end — Dockerfile, database, env vars, and all - Runs on your own AWS, GCP, Azure, or Scaleway—you maintain full control + Runs on your own AWS, GCP, Azure, or Scaleway — you maintain full control and direct billing - - Built on Kubernetes with production-ready best practices + + Developers ship to production without waiting for DevOps. Platform teams keep governance and control. - - Automatic deployments on every Git push + + Console, CLI, Terraform, API, and AI agents — all driving the same control plane -## What You Can Do With Qovery +--- -Qovery provides a unified platform to **manage Kubernetes clusters, environments, and application delivery** across your own cloud infrastructure. +## Two Ways to Work with Qovery -From provisioning infrastructure to deploying applications, monitoring performance, optimizing costs, and securing your workloads—everything you need to run production applications on your own cloud infrastructure. +### The New Way — Deploy with AI -### Provision - Infrastructure Management +Non-developers and AI-first teams can deploy production-grade apps without ever touching Kubernetes configuration. + + + + **From prompt to production in minutes** + + Install the Qovery Agent Skill in Claude Code, Cursor, OpenCode, or any compatible AI tool. Describe what you want — the agent analyzes your codebase, creates a Dockerfile, provisions databases, sets env vars, and deploys automatically. + + → **Install the Qovery Skill** + + + + **Isolated environments for humans and AI agents** + + Each developer and each AI agent gets their own ephemeral environment. Spin up, experiment, tear down — no shared state, no conflicts, no infrastructure knowledge required. + + → **Explore Dev Environments** + + + + **Manage existing infrastructure with natural language** + + Once deployed, use the Qovery MCP Server or Console Copilot to monitor, troubleshoot, scale, and operate your infrastructure — all through conversation. + + → **Explore the Copilot** + + + +### The Platform Way — Full Control + +For platform engineers, DevOps teams, and power users who want direct control over every configuration. + + + + Visual UI for full platform management + + + Command-line for developers and automation + + + Infrastructure as Code, version-controlled + + + Programmatic control for integrations + + + +--- + +## Use Cases + + + + **Non-developers ship to production** + + A product manager, designer, or junior dev describes the app they want. The AI agent handles the entire deployment pipeline — code analysis, Dockerfile generation, database provisioning, and Kubernetes deployment. + + **Who it's for:** developers preferring AI-first workflows, non-technical builders, rapid prototyping + + + + **Isolated environments for every human and agent** + + Each contributor — human or AI — gets their own fully isolated environment. No more "it works on my machine." Every environment is ephemeral, reproducible, and disposable. + + **Who it's for:** distributed teams, AI coding workflows, dev/test isolation + + + + **A full-stack environment for every pull request** + + Open a PR → get a live environment with your app, databases, and services running. Share the URL, review, merge. Environment is auto-deleted on merge. + + **Who it's for:** QA teams, product reviews, feature testing, stakeholder demos + + + + **Git-driven deployments with full audit trail** + + Every deployment is triggered by a Git event and traceable. AI agents can open PRs and trigger deployments — all under the same governance model as human engineers. + + **Who it's for:** platform teams, regulated industries, compliance requirements + + + + **Move from any platform without the Kubernetes learning curve** + + Migrating from Heroku, Render, Railway, Fly.io, or a custom setup? Qovery gives you production-grade Kubernetes without requiring your team to become Kubernetes experts. + + **Who it's for:** teams outgrowing PaaS platforms, cost-optimization migrations + + + + **Let platform teams focus on high-value work** + + Qovery encodes Kubernetes best practices into the platform — upgrades, node scaling, security policies, cost optimization. Platform engineers configure once; developers self-serve forever. + + **Who it's for:** platform engineering teams, DevOps standardisation + + + +--- + +## What You Can Do With Qovery + +### Provision — Infrastructure Management @@ -53,9 +156,14 @@ From provisioning infrastructure to deploying applications, monitoring performan -### Deploy - Application Deployment +### Deploy — Application Deployment + + **Deploy with Claude Code, Cursor, OpenCode** + + Install the Qovery skill, ask your AI agent to deploy. It analyzes your code, creates Dockerfiles, provisions databases, and deploys automatically — no Kubernetes knowledge needed + **All Languages & Frameworks** @@ -66,34 +174,24 @@ From provisioning infrastructure to deploying applications, monitoring performan Prometheus, Grafana, Elasticsearch, Redis, or any Helm chart from public or private repositories - - **Preview Environments** + + **Auto-deploy on Git push** - Auto-deploy on Git push. Environment per PR. Dev → Staging → Prod pipelines. Zero downtime deployments + Environment per PR. Dev → Staging → Prod pipelines. Zero downtime deployments **Service Orchestration** Deploy dozens of services with Kubernetes. Service mesh, load balancing, centralized configuration - - **REST, GraphQL, gRPC** - - Load balancing, auto-scaling, custom domains, automatic SSL. Monitor with real-time logs and metrics - **Cron & Lifecycle Jobs** Scheduled tasks, background workers, database migrations, seeding, pre/post-deployment hooks - - **Deploy with Claude Code, Cursor, OpenCode** - - Install the Qovery skill, ask your AI agent to deploy. It analyzes your code, creates Dockerfiles, provisions databases, and deploys automatically - -### Observe - Monitoring & Logging +### Observe — Monitoring & Logging @@ -119,7 +217,7 @@ From provisioning infrastructure to deploying applications, monitoring performan -### Optimize - Cost & Performance +### Optimize — Cost & Performance @@ -139,7 +237,7 @@ From provisioning infrastructure to deploying applications, monitoring performan -### Secure - Security & Compliance +### Secure — Security & Compliance @@ -168,8 +266,11 @@ From provisioning infrastructure to deploying applications, monitoring performan ## What's Next? - - Deploy your first app in 15 minutes + + From code to deployed in ~10 minutes — no Kubernetes required + + + Browse every deployment path and find your fit Understand the architecture @@ -177,7 +278,4 @@ From provisioning infrastructure to deploying applications, monitoring performan Learn essential terminology - - Deep dive into all five products - diff --git a/docs/getting-started/quickstart.mdx b/docs/getting-started/quickstart.mdx index 4106e6d..fb5899f 100644 --- a/docs/getting-started/quickstart.mdx +++ b/docs/getting-started/quickstart.mdx @@ -1,35 +1,96 @@ --- title: "Get Started with Qovery" -description: "Deploy your first app in 15 minutes. No Kubernetes knowledge required." +description: "Deploy your first app in minutes — with an AI agent, or through the console. No Kubernetes expertise required." mode: "wide" --- -**New to Qovery?** Start by choosing your use case below. We'll guide you through creating a cluster (the prerequisite) and then walk you through the complete setup for your specific scenario. +**New to Qovery?** Choose your path below. The AI Agent path is the fastest way to get from code to a running deployment — no Kubernetes knowledge needed. -## Choose Your Use Case +--- + +## The AI-First Path — Fastest Way to Deploy + + + **Use Claude Code, Cursor, OpenCode, or any AI coding agent** + + Install one command. Ask your agent to deploy. It does everything: + - Analyzes your codebase and detects the language/framework + - Creates a production-ready Dockerfile if one is missing + - Provisions databases (container for dev, managed RDS/Cloud SQL for production) + - Sets up environment variables, health checks, and deployment stages + - Deploys to Kubernetes and watches for failures — auto-fixing where it can + + **Perfect for:** developers who prefer AI-first workflows, non-technical builders, rapid prototyping, or anyone who doesn't want to learn Kubernetes + + **Time:** ~10 minutes | **Tools:** Claude Code, Cursor, OpenCode, VS Code Copilot, Gemini CLI, 30+ more | **Kubernetes knowledge:** none required + + → **Install the Qovery Agent Skill** + + +--- -Select the scenario that best matches your needs: +## All Deployment Paths + +Choose the scenario that best matches your needs: - - **Explore Qovery without cloud costs** + + **Fastest path from code to production** Perfect for: - - **First-time users** exploring the platform - - **Local development** and testing - - **Learning** Qovery features risk-free - - **Proof of concepts** before production + - **AI-first workflows** — describe what you want, the agent does the rest + - **Non-developers** who want to ship without Kubernetes knowledge + - **Rapid prototyping** — from source code to deployed in minutes + - **Any language or framework** — the agent creates Dockerfiles for you + + What the agent handles: + - Codebase analysis, Dockerfile generation, database provisioning + - Environment variables, health checks, deployment stages + - Deployment via CLI + API or Terraform, failure auto-fix + + **Time:** ~10 minutes | **Cost:** Cloud infra only + + → **Install the Qovery Skill** + + + + **Isolated environments for humans and AI agents** + + Perfect for: + - **Teams** where each developer or agent needs their own environment + - **Vibe coding** — let an AI agent spin up, test, and tear down environments + - **No shared state** — every environment is independent and disposable + - **Reproducible dev setups** on cloud infrastructure What you get: - - Free local k3s cluster on your laptop - - Full Qovery feature access - - No cloud account or credit card needed + - An ephemeral, full-stack environment per user or agent + - No conflicts, no "works on my machine" + - Instant clone from a reference environment - **Time:** ~15 minutes | **Cost:** Free + **Time:** ~10 minutes | **Cost:** Pay only while active - → **Path: Docker Desktop** + → **Set Up Dev Environments** + + + + **A live environment for every pull request** + + Perfect for: + - **Preview environments** auto-created on every PR + - **QA testing** with fully isolated stacks + - **Stakeholder demos** without touching production + - **Feature sign-off** before merging + + Your journey: + 1. Create a managed cluster (AWS/GCP/Azure/Scaleway) — ~30 min + 2. Follow the ephemeral environment guide + 3. Open a PR → environment auto-created with unique URL + + **Time:** ~45 minutes setup | **Per PR:** Automatic + + → **Complete Guide Available** @@ -41,33 +102,33 @@ Select the scenario that best matches your needs: - **API services** (REST, GraphQL, gRPC) - **Microservices** architectures - **Your journey:** - 1. Create a managed cluster (AWS/GCP/Azure/Scaleway) - ~30 min + Your journey: + 1. Create a managed cluster (AWS/GCP/Azure/Scaleway) — ~30 min 2. Follow the complete production setup guide - 3. Deploy your first application with auto-scaling & monitoring + 3. Deploy with auto-scaling, monitoring, and zero-downtime **Time:** ~45 minutes total | **Expertise:** None required → **Complete Guide Available** - - **Temporary environments for every pull request** + + **Explore Qovery without cloud costs** Perfect for: - - **Preview environments** for each PR/branch - - **QA testing** with isolated environments - - **Feature testing** before merging to main - - **Demo environments** for stakeholders + - **First-time users** exploring the platform + - **Local development** and testing + - **Learning** Qovery features risk-free + - **Proof of concepts** before production - **Your journey:** - 1. Create a managed cluster (AWS/GCP/Azure/Scaleway) - ~30 min - 2. Follow the ephemeral environment setup guide - 3. Enable auto-preview for automatic PR environments + What you get: + - Free local k3s cluster on your laptop + - Full Qovery feature access + - No cloud account or credit card needed - **Time:** ~45 minutes setup | **Per PR:** Automatic + **Time:** ~15 minutes | **Cost:** Free - → **Complete Guide Available** + → **Path: Docker Desktop** @@ -79,34 +140,35 @@ Select the scenario that best matches your needs: - **On-premise or hybrid** infrastructure - **Custom networking** and security configs - **Your journey:** + Your journey: 1. Prepare your existing Kubernetes cluster (or create one) 2. Follow the BYOK integration guide - 3. Connect Qovery to your cluster with full control + 3. Connect Qovery with full control retained **Time:** ~20 minutes | **Control:** Complete → **Bring Your Own Cluster (BYOK)** + - - **Use Claude Code, Cursor, OpenCode, or any AI coding agent** - - Perfect for: - - **Developers** who prefer working in their terminal or IDE - - **AI-first workflows** — describe what you want, the agent does the rest - - **Quick prototyping** — from source code to deployed in minutes - - **Zero Kubernetes knowledge** required +--- - What the agent does for you: - - Analyzes your codebase and creates Dockerfiles if missing - - Provisions databases (container for dev, managed for production) - - Sets up environment variables, health checks, and deployment stages - - Deploys via CLI + API or Terraform and watches for failures +## How Qovery Fits Into Your Workflow - **Time:** ~10 minutes | **Tools:** Claude Code, Cursor, OpenCode, VS Code Copilot, Gemini CLI, 30+ more +Qovery is the **single control plane** that connects all your interfaces — AI agents, console, CLI, Terraform, and API — to the same underlying Kubernetes infrastructure running on your cloud. - → **Install the Qovery Skill** + + + Deploy from Claude Code, Cursor, or any AI tool + + + Manage infrastructure via natural language + + + Visual UI for full platform control + + + Command-line, IaC, and programmatic access @@ -115,28 +177,62 @@ Select the scenario that best matches your needs: ## Detailed Use Case Comparison - - **Use Case: Local Development & Exploration** + + **Use Case: Deploy from Your AI Coding Tool** **Best for:** - - Developers new to Qovery wanting to explore features - - Teams evaluating Qovery for adoption - - Students and learners practicing DevOps - - Building POCs before cloud deployment + - Developers and non-developers who prefer natural language over configuration files + - AI-first workflows where agents do the heavy lifting + - Rapidly deploying from existing codebases + - Anyone who wants to skip Kubernetes entirely - **What you can do:** - - Deploy apps, databases, and jobs locally - - Test GitOps workflows with GitHub/GitLab - - Practice Qovery CLI and Console - - Experiment with environment configurations - - Learn Kubernetes concepts without cloud costs + **What the AI agent does for you:** + - Detects language, framework, ports, and database requirements from your code + - Generates a production-ready Dockerfile if one is missing (12+ frameworks) + - Asks: dev or production? Which database? CLI+API or Terraform? + - Provisions a cluster if needed (AWS, GCP, Azure, Scaleway) + - Deploys the app and watches for failures — auto-fixing build errors, health check issues, port mismatches - **Limitations:** - - Runs on laptop (limited resources) - - Not for production workloads - - Single-node cluster + **Compatible tools:** Claude Code, Cursor, OpenCode, VS Code Copilot, Gemini CLI, Roo Code, Goose, Amp, Kiro, and 30+ more - **Path:** Docker Desktop | **Time:** 15 min | **Cost:** Free + **Path:** Install the Qovery Skill | **Time:** ~10 min | **Cost:** Cloud infra only + + + + **Use Case: Ephemeral Environments per Developer or Agent** + + **Best for:** + - Teams where developers need isolated, reproducible environments + - AI coding workflows where each agent needs its own sandbox + - Avoiding shared state and "works on my machine" issues + - Vibe coding — spin up, experiment, destroy, repeat + + **How it works:** + - Clone a reference environment in seconds + - Each environment is fully isolated — own database, own services, own config + - AI agents can autonomously create and destroy environments + - Pay only for what's active; sleep mode cuts costs during off-hours + + **Path:** Install the Qovery Skill | **Time:** ~10 min | **Cost:** Pay while active + + + + **Use Case: Temporary Environments for Testing & Review** + + **Best for:** + - Preview environments for every pull request + - QA teams testing features in isolation + - Product managers reviewing features before release + - Stakeholder demos without affecting production + + **How it works after setup:** + 1. Open pull request in GitHub/GitLab + 2. Qovery auto-creates preview environment + 3. Get unique URL (e.g., `pr-123.preview.example.com`) + 4. Test, review, and iterate + 5. Merge PR → environment auto-deleted + + [→ View Complete Ephemeral Environment Guide](/guides/use-cases/ephemeral-environment) @@ -147,7 +243,6 @@ Select the scenario that best matches your needs: - High-traffic web applications - RESTful/GraphQL/gRPC APIs - Microservices architectures - - Production workloads requiring 99.9% uptime **Complete Journey:** @@ -163,44 +258,25 @@ Select the scenario that best matches your needs: - Configure managed databases with automatic backups - Add custom domains with automatic SSL - Enable zero-downtime deployments - - Set up monitoring (Datadog or Qovery Observe) [→ View Complete Production Guide](/guides/use-cases/production-environment-management) - - **Use Case: Temporary Environments for Testing & Review** + + **Use Case: Local Development & Exploration** **Best for:** - - Preview environments for every pull request - - QA teams testing features in isolation - - Product managers reviewing features before release - - Stakeholder demos without affecting production - - Short-lived environments for testing - - **Complete Journey:** - - **Step 1: Create Your Cluster (Prerequisite)** - - Choose your cloud provider (AWS/GCP/Azure/Scaleway) - - Qovery sets up the infrastructure - - Time: ~30 minutes - - **Step 2: Follow the Ephemeral Environment Guide** - - Enable auto-preview environments - - Configure automatic PR environment creation - - Set up full-stack previews (app + database) - - Configure automatic cleanup on PR close - - Share unique URLs with your team - - Cost-effective: only pay when environments are active + - Developers new to Qovery wanting to explore features + - Teams evaluating Qovery for adoption + - Building POCs before cloud deployment - **How it works after setup:** - 1. Open pull request in GitHub/GitLab - 2. Qovery auto-creates preview environment - 3. Get unique URL to access (e.g., `pr-123.preview.example.com`) - 4. Test, review, and iterate - 5. Merge PR → Environment auto-deleted + **What you can do:** + - Deploy apps, databases, and jobs locally + - Test GitOps workflows with GitHub/GitLab + - Practice Qovery CLI and Console + - Learn Kubernetes concepts without cloud costs - [→ View Complete Ephemeral Environment Guide](/guides/use-cases/ephemeral-environment) + **Path:** Docker Desktop | **Time:** 15 min | **Cost:** Free @@ -210,24 +286,7 @@ Select the scenario that best matches your needs: - Organizations with existing Kubernetes clusters - Regulated industries (Healthcare, Finance, Government) - Companies with strict compliance (HIPAA, PCI-DSS, SOC2) - - On-premise or air-gapped environments - - Hybrid cloud architectures - - Teams with dedicated platform/SRE engineers - - **Complete Journey:** - - **Step 1: Prepare Your Cluster (Prerequisite)** - - Use your existing Kubernetes 1.24+ cluster, OR - - Create a new cluster on any platform (AWS, GCP, Azure, DigitalOcean, OVH, Civo, on-premise) - - Ensure kubectl access and proper permissions - - Time: Depends on your setup - - **Step 2: Follow the BYOK Integration Guide** - - Install Qovery agent on your cluster - - Configure custom networking and security policies - - Set up your monitoring and logging - - Define autoscaling rules - - Maintain complete control over infrastructure + - On-premise or hybrid cloud architectures **You manage:** - Kubernetes cluster provisioning and upgrades @@ -237,10 +296,9 @@ Select the scenario that best matches your needs: **Qovery provides:** - Developer-friendly UI and CLI - GitOps workflows and CI/CD - - Environment management + - Environment management and AI-driven operations - Application deployment and monitoring [→ View BYOK Integration Guide](/installation/kubernetes) - From 2cae2c4f6fbdb68db3ef325c5dacfd06a5638ab2 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 20:43:57 +0200 Subject: [PATCH 02/46] docs: remove use case duplication, add color accent to AI cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - introduction.mdx: supprime la section Use Cases en doublon (déjà dans quickstart), condense les capabilities en 6 cards concises, ajoute color="#642DFF" (violet Qovery) sur toutes les cards IA pour les faire ressortir visuellement - quickstart.mdx: ajoute color="#642DFF" sur les cards AI Agent Skill, AI Dev Environments, MCP Server, et la card featured en haut de page Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/introduction.mdx | 193 ++++---------------------- docs/getting-started/quickstart.mdx | 10 +- 2 files changed, 34 insertions(+), 169 deletions(-) diff --git a/docs/getting-started/introduction.mdx b/docs/getting-started/introduction.mdx index 8f4c594..c4ec3b6 100644 --- a/docs/getting-started/introduction.mdx +++ b/docs/getting-started/introduction.mdx @@ -11,14 +11,14 @@ Qovery is **the Kubernetes control plane for humans and AI agents** — running Whether you're a developer describing what you want to deploy in plain English, a platform team standardising operations at scale, or an AI agent autonomously provisioning environments, Qovery is the single control plane that makes it happen. - + Let Claude Code, Cursor, or any AI agent deploy your app end-to-end — Dockerfile, database, env vars, and all Runs on your own AWS, GCP, Azure, or Scaleway — you maintain full control and direct billing - - Developers ship to production without waiting for DevOps. Platform teams keep governance and control. + + Developers and non-developers ship to production without waiting for DevOps. Platform teams keep governance. Console, CLI, Terraform, API, and AI agents — all driving the same control plane @@ -34,7 +34,7 @@ Whether you're a developer describing what you want to deploy in plain English, Non-developers and AI-first teams can deploy production-grade apps without ever touching Kubernetes configuration. - + **From prompt to production in minutes** Install the Qovery Agent Skill in Claude Code, Cursor, OpenCode, or any compatible AI tool. Describe what you want — the agent analyzes your codebase, creates a Dockerfile, provisions databases, sets env vars, and deploys automatically. @@ -42,7 +42,7 @@ Non-developers and AI-first teams can deploy production-grade apps without ever → **Install the Qovery Skill** - + **Isolated environments for humans and AI agents** Each developer and each AI agent gets their own ephemeral environment. Spin up, experiment, tear down — no shared state, no conflicts, no infrastructure knowledge required. @@ -50,7 +50,7 @@ Non-developers and AI-first teams can deploy production-grade apps without ever → **Explore Dev Environments** - + **Manage existing infrastructure with natural language** Once deployed, use the Qovery MCP Server or Console Copilot to monitor, troubleshoot, scale, and operate your infrastructure — all through conversation. @@ -80,185 +80,50 @@ For platform engineers, DevOps teams, and power users who want direct control ov --- -## Use Cases - - - - **Non-developers ship to production** - - A product manager, designer, or junior dev describes the app they want. The AI agent handles the entire deployment pipeline — code analysis, Dockerfile generation, database provisioning, and Kubernetes deployment. - - **Who it's for:** developers preferring AI-first workflows, non-technical builders, rapid prototyping - - - - **Isolated environments for every human and agent** - - Each contributor — human or AI — gets their own fully isolated environment. No more "it works on my machine." Every environment is ephemeral, reproducible, and disposable. - - **Who it's for:** distributed teams, AI coding workflows, dev/test isolation - - - - **A full-stack environment for every pull request** - - Open a PR → get a live environment with your app, databases, and services running. Share the URL, review, merge. Environment is auto-deleted on merge. - - **Who it's for:** QA teams, product reviews, feature testing, stakeholder demos - - - - **Git-driven deployments with full audit trail** - - Every deployment is triggered by a Git event and traceable. AI agents can open PRs and trigger deployments — all under the same governance model as human engineers. - - **Who it's for:** platform teams, regulated industries, compliance requirements - - - - **Move from any platform without the Kubernetes learning curve** - - Migrating from Heroku, Render, Railway, Fly.io, or a custom setup? Qovery gives you production-grade Kubernetes without requiring your team to become Kubernetes experts. - - **Who it's for:** teams outgrowing PaaS platforms, cost-optimization migrations - - - - **Let platform teams focus on high-value work** - - Qovery encodes Kubernetes best practices into the platform — upgrades, node scaling, security policies, cost optimization. Platform engineers configure once; developers self-serve forever. - - **Who it's for:** platform engineering teams, DevOps standardisation - - - ---- - ## What You Can Do With Qovery -### Provision — Infrastructure Management - - - - **Clusters on Any Cloud** - - AWS EKS, Google GKE, Azure AKS, Scaleway Kapsule. Production-ready in 30 minutes with BYOK* support - - - **PostgreSQL, MySQL, MongoDB, Redis** - - Automated backups, replicas, high availability. Managed by your cloud provider with one-click setup - - - **Terraform Integration** - - Provision S3 buckets, RDS instances, CloudFront, load balancers, VPCs, and networking infrastructure - - - -### Deploy — Application Deployment - - - - **Deploy with Claude Code, Cursor, OpenCode** - - Install the Qovery skill, ask your AI agent to deploy. It analyzes your code, creates Dockerfiles, provisions databases, and deploys automatically — no Kubernetes knowledge needed - - - **All Languages & Frameworks** - - Node.js, Python, Go, Java, PHP, Ruby, .NET. Build from Dockerfile or deploy pre-built containers - - - **Deploy Complex Applications** - - Prometheus, Grafana, Elasticsearch, Redis, or any Helm chart from public or private repositories - - - **Auto-deploy on Git push** - - Environment per PR. Dev → Staging → Prod pipelines. Zero downtime deployments - - - **Service Orchestration** - - Deploy dozens of services with Kubernetes. Service mesh, load balancing, centralized configuration - - - **Cron & Lifecycle Jobs** - - Scheduled tasks, background workers, database migrations, seeding, pre/post-deployment hooks - - - -### Observe — Monitoring & Logging +A single platform covering the full lifecycle of your cloud applications — from cluster provisioning to deployment, observability, cost optimization, and security. - - **Complete Observability Included** - - 📊 **Metrics:** CPU, memory, disk, network usage per service + + **Managed Kubernetes on any cloud** - 📝 **Logs:** Real-time application logs (stdout/stderr), build logs, search and filter - - ⚙️ **Events:** Kubernetes events tracking (pod restarts, failures, scaling) - - 📜 **History:** Full deployment history and status tracking - - ✨ **No setup required** - Available immediately for all services + AWS EKS, GKE, AKS, Scaleway Kapsule — production-ready in 30 minutes. Or connect your existing cluster (BYOK). Includes managed databases, Terraform modules, and networking. - - **Connect Your Monitoring Tools** - Integrate with your existing observability stack: - - **Datadog** - Full platform integration - - **Custom solutions** - Prometheus, Grafana, ELK - - **Webhooks** - Send deployment events to any endpoint - - + + **Any app, any language, any workflow** -### Optimize — Cost & Performance + GitOps-based deployment for containers, Helm charts, background jobs, and cron jobs. Preview environments per PR. Zero-downtime rollouts. AI agent deployment supported natively. + - - - **Save Up to 60% on Infrastructure** + + **Built-in observability, no setup required** - Karpenter intelligent provisioning (AWS EKS). Spot instances for non-production. Sleep mode for dev/staging environments + Real-time logs, CPU/memory metrics, Kubernetes events, and full deployment history — all correlated in one view. Integrates with Datadog, Prometheus, and Grafana. - - **Scale Based on CPU** - Horizontal pod auto-scaling based on CPU usage. Automatic load balancing across replicas - - - **Right-Size Your Apps** + + **Save up to 60% on infrastructure costs** - Monitor resource usage to optimize container sizes. Set CPU and memory limits per service + Karpenter intelligent provisioning, spot instances for non-production, sleep mode for dev/staging, and right-sizing recommendations. - - -### Secure — Security & Compliance - - - **SOC2, GDPR, HIPAA, DORA, HDS** + + **Enterprise compliance out of the box** - Enterprise compliance built-in. Audit logs. Security best practices by default + SOC2, GDPR, HIPAA, DORA, HDS. Secrets management, RBAC, SSO, network isolation, automatic SSL/TLS, and full audit logs. - - **Secrets & Access Control** - Secrets management with Doppler or External Secrets. RBAC for team permissions. SSO. Network isolation. Automatic SSL/TLS - - - **Full Control & Transparency** + + **Automated cluster maintenance** - Runs on your cloud account. kubectl access. No vendor lock-in. BYOK* support. Direct cloud billing + Qovery handles Kubernetes version upgrades, node patching, and security updates — no manual intervention required. -*BYOK = Bring Your Own Kubernetes - Connect your existing Kubernetes cluster to Qovery +*BYOK = Bring Your Own Kubernetes — connect your existing Kubernetes cluster to Qovery --- @@ -266,11 +131,11 @@ For platform engineers, DevOps teams, and power users who want direct control ov ## What's Next? - + From code to deployed in ~10 minutes — no Kubernetes required - Browse every deployment path and find your fit + Browse every deployment path and choose your fit Understand the architecture diff --git a/docs/getting-started/quickstart.mdx b/docs/getting-started/quickstart.mdx index fb5899f..0f721cb 100644 --- a/docs/getting-started/quickstart.mdx +++ b/docs/getting-started/quickstart.mdx @@ -12,7 +12,7 @@ mode: "wide" ## The AI-First Path — Fastest Way to Deploy - + **Use Claude Code, Cursor, OpenCode, or any AI coding agent** Install one command. Ask your agent to deploy. It does everything: @@ -36,7 +36,7 @@ mode: "wide" Choose the scenario that best matches your needs: - + **Fastest path from code to production** Perfect for: @@ -55,7 +55,7 @@ Choose the scenario that best matches your needs: → **Install the Qovery Skill** - + **Isolated environments for humans and AI agents** Perfect for: @@ -158,10 +158,10 @@ Choose the scenario that best matches your needs: Qovery is the **single control plane** that connects all your interfaces — AI agents, console, CLI, Terraform, and API — to the same underlying Kubernetes infrastructure running on your cloud. - + Deploy from Claude Code, Cursor, or any AI tool - + Manage infrastructure via natural language From 70929c9d6572dd00fb25658144d376873243e98c Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 20:47:33 +0200 Subject: [PATCH 03/46] docs: add purple gradient background to AI sections via CSS class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - custom.css: ajoute la classe .ai-section avec fond dégradé rgba(100,45,255) et bordure violette, avec variante dark mode - introduction.mdx: wrapper "The New Way — Deploy with AI" dans .ai-section - quickstart.mdx: wrapper la card hero IA et les deux cards AI-Powered Paths dans .ai-section ; restructure "All Deployment Paths" en deux sous-sections "AI-Powered Paths" (avec fond) et "Platform Paths" (neutre) Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 19 +++++++++++++++++++ docs/getting-started/introduction.mdx | 4 ++++ docs/getting-started/quickstart.mdx | 14 +++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/docs/custom.css b/docs/custom.css index d375b6a..1bd5e73 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -587,6 +587,25 @@ html[data-theme="dark"] img[src*="/logos/secure-logo-only.svg"], hue-rotate(202deg) brightness(103%) contrast(100%); } +/* AI Section Highlight — fond dégradé violet pour mettre en avant les use cases IA */ +.ai-section { + background: linear-gradient(135deg, rgba(100, 45, 255, 0.09) 0%, rgba(100, 45, 255, 0.03) 100%); + border: 1px solid rgba(100, 45, 255, 0.22); + border-radius: 16px; + padding: 28px 28px 20px; + margin: 8px 0 24px; +} + +.ai-section h3 { + margin-top: 0 !important; +} + +html[class*="dark"] .ai-section, +html[data-theme="dark"] .ai-section { + background: linear-gradient(135deg, rgba(100, 45, 255, 0.18) 0%, rgba(100, 45, 255, 0.06) 100%); + border-color: rgba(100, 45, 255, 0.38); +} + /* Remove duplicate page titles */ /* Mintlify shows the title from frontmatter in both header and as H1 */ article > h1:first-of-type, diff --git a/docs/getting-started/introduction.mdx b/docs/getting-started/introduction.mdx index c4ec3b6..ea45ade 100644 --- a/docs/getting-started/introduction.mdx +++ b/docs/getting-started/introduction.mdx @@ -29,6 +29,8 @@ Whether you're a developer describing what you want to deploy in plain English, ## Two Ways to Work with Qovery +
+ ### The New Way — Deploy with AI Non-developers and AI-first teams can deploy production-grade apps without ever touching Kubernetes configuration. @@ -59,6 +61,8 @@ Non-developers and AI-first teams can deploy production-grade apps without ever +
+ ### The Platform Way — Full Control For platform engineers, DevOps teams, and power users who want direct control over every configuration. diff --git a/docs/getting-started/quickstart.mdx b/docs/getting-started/quickstart.mdx index 0f721cb..a286d35 100644 --- a/docs/getting-started/quickstart.mdx +++ b/docs/getting-started/quickstart.mdx @@ -10,6 +10,8 @@ mode: "wide" --- +
+ ## The AI-First Path — Fastest Way to Deploy @@ -29,11 +31,15 @@ mode: "wide" → **Install the Qovery Agent Skill** +
+ --- ## All Deployment Paths -Choose the scenario that best matches your needs: +### AI-Powered Paths + +
@@ -73,7 +79,13 @@ Choose the scenario that best matches your needs: → **Set Up Dev Environments** + +
+ +### Platform Paths + + **A live environment for every pull request** From 566ce7ae708b996cc7ae70bf0bc3fc24de812bd3 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 20:55:41 +0200 Subject: [PATCH 04/46] docs: add Agent Skills directory page inspired by Railway's agent directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nouvelle page getting-started/quickstart/agent-skills présentant les 8 skills Qovery (qovery-onboard, deploy, troubleshoot, optimize, speedup, preview, builder-env, builder-portal) sous forme de cards avec description, features, et tags — style "agent directory" inspiré de railway.com/agents. Inclut : tableau de compatibilité 14 outils × skills, section "Why Qovery for agents?" (8 value props), et étapes d'installation avec exemples de prompts. Ajout de la page dans docs.json sous Installation après ai-agent. Co-Authored-By: Claude Sonnet 4.6 --- docs/docs.json | 1 + .../quickstart/agent-skills.mdx | 280 ++++++++++++++++++ 2 files changed, 281 insertions(+) create mode 100644 docs/getting-started/quickstart/agent-skills.mdx diff --git a/docs/docs.json b/docs/docs.json index bb472ed..bd82834 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -66,6 +66,7 @@ "getting-started/quickstart/docker-desktop", "getting-started/quickstart/cloud", "getting-started/quickstart/ai-agent", + "getting-started/quickstart/agent-skills", { "group": "Managed Cluster", "pages": [ diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx new file mode 100644 index 0000000..555b1be --- /dev/null +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -0,0 +1,280 @@ +--- +title: "Qovery Agent Skills" +description: "Deploy to Kubernetes with your favorite AI coding agent. Eight skills. 30+ tools. One install command." +mode: "wide" +--- + +
+ +Deploy production-grade apps to Kubernetes by talking to your AI coding agent — no DevOps expertise required. The Qovery Agent Skills extend any compatible AI tool with the ability to provision infrastructure, deploy applications, debug failures, and manage environments autonomously. + +```bash +curl -fsSL https://skill.qovery.com/install.sh | bash +``` + +Eight skills are installed at once. Your agent picks the right one based on what you ask. + +
+ +--- + +## The Eight Skills + + + + **Your personal cloud architect** + +
+ + Asks about your role, experience, cloud provider, and constraints — then recommends the optimal cluster configuration, security settings, and deployment method for your situation. + + **Key features:** + - Evaluates your team's profile and recommends the right path + - Guides through cloud account setup (AWS, GCP, Azure, Scaleway) + - Configures cluster, org, and access controls step by step + - Hands off to `qovery-deploy` once infrastructure is ready + + `Setup` `Onboarding` +
+ + + **From source code to running app** + +
+ + Analyzes your codebase, generates a production Dockerfile if missing, provisions databases, configures environment variables, and deploys to Kubernetes — via CLI+API or Terraform. + + **Key features:** + - Framework detection: Node.js, Next.js, React, Python, Go, Java, Ruby, PHP, .NET + - Dev vs production mode: container DB or managed RDS/Cloud SQL + - Environment variables with aliases, interpolation, and overrides + - Watches deployment and auto-fixes build errors, port mismatches, OOM + + `Deployment` `Core` +
+ + + **Systematic diagnosis for deployment failures** + +
+ + Runs an 8-layer diagnostic sequence and matches against 20+ error patterns — covering build failures, crashes, connectivity issues, health check timeouts, and performance problems. + + **Key features:** + - 8-layer diagnostic: build → image → config → startup → health → network → scaling → logs + - 20+ error pattern library with known fixes + - Distinguishes between code issues (needs your fix) and infra issues (auto-fixed) + - Outputs a structured incident report with remediation steps + + `Debug` `Operations` +
+ + + **Cut your cloud bill with data-driven analysis** + +
+ + Analyzes resource consumption across 7 dimensions and generates a detailed cost report with specific savings recommendations — exportable as CSV. + + **Key features:** + - 7-dimension analysis: right-sizing, autoscaling, DB modes, scheduling, cluster, builds, external + - Identifies over-provisioned services and recommends target sizes + - Spot instance and sleep mode opportunities for non-production + - CSV export for stakeholder reporting + + `Cost` `Operations` +
+ + + **Find and fix slow deployments** + +
+ + Measures your full deployment pipeline timeline, identifies bottlenecks, and classifies responsibility — user code vs infrastructure configuration — with concrete fixes. + + **Key features:** + - End-to-end pipeline timing: build → push → schedule → start → health check + - Dockerfile layer optimization (cache ordering, multi-stage builds) + - Build cache configuration for faster CI + - Startup time and health check threshold tuning + + `Performance` `Deployment` +
+ + + **Preview environments for every pull request** + +
+ + Detects or creates a blueprint environment, then automatically clones it for each PR with a unique URL — including databases and dependent services. Configurable auto-shutdown. + + **Key features:** + - Auto-create a full-stack preview (app + DB) for each PR + - Unique URL per environment (e.g. `pr-123.preview.example.com`) + - Auto-shutdown after merge or configurable TTL + - Works with GitHub, GitLab, and Bitbucket + + `Preview` `GitOps` +
+ + + **Self-service environments for non-technical teams** + +
+ + Lets product managers, designers, and junior developers spin up their own full environments in VS Code, Claude Code, or OpenCode — with built-in RBAC so they can't break production. + + **Key features:** + - Non-developers get their own isolated environment via AI agent + - RBAC controls: builders can deploy but can't touch cluster config + - Clones from a reference environment with safe defaults + - Works in VS Code + Copilot, Claude Code, and OpenCode + + `Self-service` `Teams` +
+ + + **A web portal for environment provisioning** + +
+ + Generates and deploys a Vite + React + Express web portal — SSO login, one-click environment creation, and a visual dashboard for your team to manage their environments without touching the CLI. + + **Key features:** + - AI agent generates and deploys the portal for you + - SSO login for your team + - One-click environment creation and deletion + - Visual dashboard — no CLI, no console access needed for end users + + `Portal` `Teams` +
+
+ +--- + +## Compatible Tools + +The Qovery Agent Skills follow the [Agent Skills](https://agentskills.io) open standard. The installer places skills in all discovery paths automatically — no manual configuration. + +| Tool | Type | Skills supported | +|------|------|-----------------| +| **Claude Code** | Terminal | All 8 | +| **OpenCode** | Terminal | All 8 | +| **Gemini CLI** | Terminal | All 8 | +| **Cursor** | IDE | All 8 | +| **VS Code Copilot** | IDE Extension | All 8 | +| **Roo Code** | IDE Extension | All 8 | +| **Kiro** | IDE | All 8 | +| **Junie (JetBrains)** | IDE | All 8 | +| **Goose** | Standalone | All 8 | +| **Amp** | Standalone | All 8 | +| **OpenHands** | Standalone | All 8 | +| **OpenAI Codex** | Standalone | All 8 | +| **Mistral Vibe** | Standalone | All 8 | +| **TRAE** | Standalone | All 8 | + +Any other tool that discovers skills from `.claude/skills/`, `.config/opencode/skills/`, or `.agents/skills/` directories is also compatible. + +--- + +## Why Qovery for AI agents? + + + + Skills deploy to **your own AWS, GCP, Azure, or Scaleway** account. No shared infrastructure, no data leaving your environment. Direct cloud billing. + + + + Every action taken by an AI agent is logged in Qovery's audit log — what changed, when, and by which agent. Compliance-ready from day one. + + + + Agents respect your Qovery permission model. A builder agent can deploy apps but can't touch cluster configuration. Governance without friction. + + + + Environments are created and destroyed in minutes. Agents spin up, test, and tear down without leaving orphan resources or manual cleanup. + + + + Sleep mode, spot instances, and right-sizing are built into the skills. Agents don't over-provision — they follow the same cost guardrails as your platform team. + + + + `qovery-deploy` and `qovery-troubleshoot` watch deployments and auto-fix common failures — port mismatches, missing env vars, health check timeouts — without waiting for a human. + + + + All skills are MIT-licensed and open source. Fork them, customize them, add your own. The skills are just files — readable and auditable by your team. + + + + One command installs all skills across every compatible tool on your machine. No per-tool configuration, no manual file management. + + + +--- + +## Install + + + + ```bash + curl -fsSL https://skill.qovery.com/install.sh | bash + ``` + + Skills are installed to all compatible discovery paths on your machine automatically. + + + + Launch Claude Code, Cursor, OpenCode, or any of the 30+ compatible tools. No additional configuration needed. + + + + The agent loads the right skill automatically based on what you ask: + + ``` + # To onboard a new project: + Set up Qovery for my project + + # To deploy: + Deploy my application with Qovery + + # To debug: + Troubleshoot my failing deployment with Qovery + + # To optimize costs: + Analyze my Qovery infrastructure costs + + # To set up preview environments: + Create preview environments for my PRs with Qovery + ``` + + + + +To install for the current project only (instead of globally): +```bash +curl -fsSL https://skill.qovery.com/install.sh | bash -s -- --project +``` +To update to the latest version, re-run the install command. + + +--- + +## Next Steps + + + + Step-by-step guide to your first AI-driven deployment + + + Manage deployed infrastructure via natural language + + + View source, contribute, or fork the skills + + + Version-controlled infrastructure as code + + From c5a24d20d7a030943734ea0cc453aa61a064bf8f Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 20:57:33 +0200 Subject: [PATCH 05/46] =?UTF-8?q?docs:=20remove=20color=20prop=20from=20al?= =?UTF-8?q?l=20AI=20cards=20=E2=80=94=20restore=20default=20icon=20colors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/introduction.mdx | 12 ++++++------ docs/getting-started/quickstart.mdx | 10 +++++----- docs/getting-started/quickstart/agent-skills.mdx | 6 +++--- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/getting-started/introduction.mdx b/docs/getting-started/introduction.mdx index ea45ade..0fef876 100644 --- a/docs/getting-started/introduction.mdx +++ b/docs/getting-started/introduction.mdx @@ -11,13 +11,13 @@ Qovery is **the Kubernetes control plane for humans and AI agents** — running Whether you're a developer describing what you want to deploy in plain English, a platform team standardising operations at scale, or an AI agent autonomously provisioning environments, Qovery is the single control plane that makes it happen. - + Let Claude Code, Cursor, or any AI agent deploy your app end-to-end — Dockerfile, database, env vars, and all Runs on your own AWS, GCP, Azure, or Scaleway — you maintain full control and direct billing - + Developers and non-developers ship to production without waiting for DevOps. Platform teams keep governance. @@ -36,7 +36,7 @@ Whether you're a developer describing what you want to deploy in plain English, Non-developers and AI-first teams can deploy production-grade apps without ever touching Kubernetes configuration. - + **From prompt to production in minutes** Install the Qovery Agent Skill in Claude Code, Cursor, OpenCode, or any compatible AI tool. Describe what you want — the agent analyzes your codebase, creates a Dockerfile, provisions databases, sets env vars, and deploys automatically. @@ -44,7 +44,7 @@ Non-developers and AI-first teams can deploy production-grade apps without ever → **Install the Qovery Skill** - + **Isolated environments for humans and AI agents** Each developer and each AI agent gets their own ephemeral environment. Spin up, experiment, tear down — no shared state, no conflicts, no infrastructure knowledge required. @@ -52,7 +52,7 @@ Non-developers and AI-first teams can deploy production-grade apps without ever → **Explore Dev Environments** - + **Manage existing infrastructure with natural language** Once deployed, use the Qovery MCP Server or Console Copilot to monitor, troubleshoot, scale, and operate your infrastructure — all through conversation. @@ -135,7 +135,7 @@ A single platform covering the full lifecycle of your cloud applications — fro ## What's Next? - + From code to deployed in ~10 minutes — no Kubernetes required diff --git a/docs/getting-started/quickstart.mdx b/docs/getting-started/quickstart.mdx index a286d35..359b5f3 100644 --- a/docs/getting-started/quickstart.mdx +++ b/docs/getting-started/quickstart.mdx @@ -14,7 +14,7 @@ mode: "wide" ## The AI-First Path — Fastest Way to Deploy - + **Use Claude Code, Cursor, OpenCode, or any AI coding agent** Install one command. Ask your agent to deploy. It does everything: @@ -42,7 +42,7 @@ mode: "wide"
- + **Fastest path from code to production** Perfect for: @@ -61,7 +61,7 @@ mode: "wide" → **Install the Qovery Skill** - + **Isolated environments for humans and AI agents** Perfect for: @@ -170,10 +170,10 @@ mode: "wide" Qovery is the **single control plane** that connects all your interfaces — AI agents, console, CLI, Terraform, and API — to the same underlying Kubernetes infrastructure running on your cloud. - + Deploy from Claude Code, Cursor, or any AI tool - + Manage infrastructure via natural language diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index 555b1be..04f986d 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -21,7 +21,7 @@ Eight skills are installed at once. Your agent picks the right one based on what ## The Eight Skills - + **Your personal cloud architect**
@@ -37,7 +37,7 @@ Eight skills are installed at once. Your agent picks the right one based on what `Setup` `Onboarding`
- + **From source code to running app**
@@ -265,7 +265,7 @@ To update to the latest version, re-run the install command. ## Next Steps - + Step-by-step guide to your first AI-driven deployment From 480df625e4f85cf21e1d2a807d636b50f421d185 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:01:43 +0200 Subject: [PATCH 06/46] docs: redesign ai-agent page inspired by Railway's agent directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Hero section avec tagline fort + install command dans .ai-section - Compatible Tools : tabs par catégorie (Terminal / IDE / Standalone) avec une Card par outil — nom, éditeur, description courte, tags de catégorie - What the Skill Does : Steps détaillées à la place d'une liste numérotée - Supported Frameworks : CardGroup 3 colonnes avec icônes langage - Try These Prompts : blocs de code individuels au lieu d'une liste italique - How It Compares : tableau épuré + Info block Skill vs MCP Server - Install : répété en bas avec Steps claires + Tip project-only - Next Steps : lien vers la nouvelle page agent-skills en premier Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/ai-agent.mdx | 351 +++++++++++++------ 1 file changed, 250 insertions(+), 101 deletions(-) diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 439f840..5dce7bd 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -1,169 +1,318 @@ --- title: "Deploy with AI Agent" description: "Use Claude Code, Cursor, OpenCode, or any AI coding agent to deploy your application on Qovery with a single prompt." +mode: "wide" --- -Install the Qovery Agent Skill and let your AI coding agent deploy your application end-to-end — from analyzing your codebase to a running deployment on Kubernetes. No Kubernetes knowledge required. +
- -**Skill vs MCP Server — what's the difference?** +# Deploy to Kubernetes with your favorite AI coding agent. -- **Qovery Agent Skill** (this page) = **Forward engineering.** Takes your source code and deploys it on Qovery. The AI agent analyzes your project, creates Dockerfiles, provisions databases, sets up environment variables, and deploys everything. -- **[Qovery MCP Server](/copilot/mcp-server)** = **Operations.** Manages existing infrastructure. Query environments, troubleshoot deployments, monitor services. +Autonomous software development now has the infrastructure to match. -Both can be used together: use the skill to deploy, then the MCP Server to manage. - +Install the Qovery Agent Skill. Tell your agent what you want. It handles everything — from analyzing your code to a live deployment on Kubernetes. + +```bash +curl -fsSL https://skill.qovery.com/install.sh | bash +``` + +**No Kubernetes knowledge required.** No Dockerfile needed. No API token setup. No cluster required upfront. + +
--- -## Install the Skill +## Compatible Tools + +The Qovery Agent Skill follows the [Agent Skills](https://agentskills.io) open standard. One install command drops the skill into every compatible tool on your machine automatically. + + + + + + **Anthropic** + + AI coding agent in your terminal. Native skill discovery from `.claude/skills/`. + + `Terminal` `Recommended` + + + **OpenCode** + + Open-source terminal AI agent. Discovers skills from `.config/opencode/skills/`. + + `Terminal` `Open source` + + + **Google** + + Gemini-powered terminal agent. Full skill support via `.agents/skills/`. + + `Terminal` + + + + + + + + **Anysphere** + + AI-first code editor. Inline agent with full skill support. + + `IDE` + + + **Microsoft / GitHub** + + GitHub Copilot in VS Code. Agent mode with skill discovery. + + `IDE Extension` + + + **Roo** + + VS Code extension with autonomous coding capabilities. + + `IDE Extension` + + + **Amazon** + + AI-powered IDE by Amazon. Supports Agent Skills standard. + + `IDE` + + + **JetBrains** + + AI agent integrated into all JetBrains IDEs. + + `IDE Extension` + + + + + + + + **Block** + + Open-source autonomous AI agent. Discovers skills from `.agents/skills/`. + + `Standalone` `Open source` + + + **Sourcegraph** + + Agentic coding assistant for complex tasks. -One command installs the skill globally for all your projects: + `Standalone` + + + **All Hands AI** + + Open-source software development agent. + + `Standalone` `Open source` + + + **OpenAI** + + Cloud-based coding agent with full skill discovery. + + `Standalone` `Cloud` + + + **Mistral** + + Mistral-powered coding agent. + + `Standalone` + + + **ByteDance** + + AI coding assistant with autonomous agent capabilities. + + `Standalone` + + + + + +Any other tool that discovers skills from `.claude/skills/`, `.config/opencode/skills/`, or `.agents/skills/` directories is also compatible. + +--- + +## What the Skill Does + +When you ask your agent to deploy, it runs through a complete deployment workflow autonomously: - - ```bash - curl -fsSL https://skill.qovery.com/install.sh | bash - ``` + + Reads your project structure, detects language, framework, open ports, database dependencies, and existing environment variables. No manual input needed. + - This installs the skill to all compatible tool directories automatically. No manual configuration needed. + + Generates a production-ready multi-stage Dockerfile for your stack. Templates available for Node.js, Next.js, React/Vite, Python, Go, Java, Ruby, PHP, and .NET. Custom Dockerfile generated for any other framework. - - Launch Claude Code, Cursor, OpenCode, VS Code Copilot, Gemini CLI, or any compatible tool. + + Dev or production? Which database engine? CLI+API path or Terraform? A few targeted questions — no YAML, no config files to write. - - ``` - Deploy my application with Qovery - ``` + + Creates a cluster on AWS, GCP, Azure, or Scaleway if none exists. Provisions databases in container mode (dev/test) or managed mode like AWS RDS (production). Sets up environment variables with aliases, interpolation, and overrides — no duplication. + - The agent loads the skill automatically and guides you through the entire process. + + Deploys via CLI+API (quick path) or Terraform provider (production). Monitors the rollout and **auto-fixes failures** — build errors, port mismatches, health check timeouts, missing env vars, OOM restarts. Fixes Qovery configuration automatically; asks before touching your code. - -To install for the current project only (instead of globally), run: -```bash -curl -fsSL https://skill.qovery.com/install.sh | bash -s -- --project -``` -To update to the latest version, re-run the install command. - - --- -## Compatible Tools +## Supported Frameworks + +Production-ready Dockerfile templates included for: + + + + Express · Fastify · NestJS + + + SSR with standalone output + + + SPA served via nginx + + + Flask · Django · FastAPI + + + net/http · Gin · Echo · Fiber + + + Spring Boot (Maven & Gradle) + + + Rails + + + Laravel + + + ASP.NET Core + + -The Qovery Agent Skill follows the [Agent Skills](https://agentskills.io) open standard and works with 30+ AI coding tools. The installer places the skill in all discovery paths automatically. - -| Tool | Supported | -|------|-----------| -| **Claude Code** | Yes | -| **Cursor** | Yes | -| **OpenCode** | Yes | -| **VS Code Copilot** | Yes | -| **Gemini CLI** | Yes | -| Roo Code | Yes | -| Goose | Yes | -| Amp | Yes | -| Kiro | Yes | -| Junie (JetBrains) | Yes | -| OpenHands | Yes | -| OpenAI Codex | Yes | -| Mistral Vibe | Yes | -| TRAE | Yes | - -And any other tool that discovers skills from `.claude/skills/` or `.agents/skills/` directories. +Any other framework? The agent generates a custom Dockerfile from your project structure. --- -## What the Skill Does +## Try These Prompts -When you tell your AI agent to deploy, the skill guides it through a complete deployment workflow: +Open your AI coding tool after installing the skill and try: -1. **Analyzes your codebase** — detects language, framework, ports, database needs, environment variables -2. **Creates a Dockerfile** if one is missing — production-ready multi-stage templates for Node.js, Next.js, React, Vite, Python, Go, Java, Ruby, PHP, .NET -3. **Asks the right questions** — dev vs production, database type, deployment method -4. **Sets up infrastructure** — cluster creation from scratch if needed (AWS, GCP, Azure, Scaleway) -5. **Deploys via CLI + API** (quick path) or **Terraform provider** (recommended for production) -6. **Provisions databases** — container mode for dev/test, managed mode (e.g. AWS RDS) for production, or Terraform services for RDS Aurora -7. **Sets up environment variables** using aliases, interpolation, and overrides — no duplication -8. **Handles Helm charts, Terraform modules, lifecycle jobs, and cron jobs** -9. **Watches deployments and auto-fixes failures** — diagnoses build errors, port mismatches, health check failures, missing env vars, and OOM issues. Fixes Qovery configuration automatically; asks for permission before modifying your code +``` +Deploy my application with Qovery +``` ---- +``` +Set up Qovery for my project and deploy to staging +``` -## What You Need +``` +Deploy this to Kubernetes with a PostgreSQL database +``` -**Qovery account** — [Sign up at console.qovery.com](https://console.qovery.com) (free to start) -**Git repository** connected to Qovery (GitHub, GitLab, or Bitbucket) +``` +Create a Qovery Terraform configuration for my app +``` -That's it. The skill handles everything else: -- **No API token needed upfront** — the skill generates one via the Qovery CLI -- **No cluster needed upfront** — the skill guides you through cluster creation if you don't have one -- **No Dockerfile needed** — the skill creates one if missing -- **No Kubernetes knowledge needed** — the skill configures health checks, ports, deployment stages, and resource limits +``` +Set up preview environments for my pull requests +``` --- ## How It Compares -| | Console (Manual) | AI Agent Skill | MCP Server | +| | Console | AI Agent Skill | MCP Server | |---|---|---|---| | **Purpose** | Full control via web UI | Fastest path from code to deployed | Manage existing infrastructure | -| **Creates Dockerfiles** | No | Yes, for 12+ frameworks | No | -| **Provisions databases** | Manual configuration | Automatic (asks dev vs prod) | No | -| **Sets up env vars** | Manual per variable | Automatic with aliases and overrides | No | -| **Deployment method** | Console UI | CLI + API or Terraform | N/A | +| **Creates Dockerfiles** | No | Yes, 12+ frameworks | No | +| **Provisions databases** | Manual | Automatic (asks dev vs prod) | No | +| **Sets up env vars** | Manual per variable | Automatic with aliases & overrides | No | | **Monitors & fixes failures** | Manual log inspection | Automatic diagnosis and auto-fix | Query-based | -| **Best for** | Experienced users, fine-tuning | Developers deploying from code | Day-2 operations | +| **Best for** | Experienced users, fine-tuning | Deploying from source code | Day-2 operations | ---- + +**Skill vs MCP Server** — the Skill deploys (forward engineering). The MCP Server operates existing infrastructure. Use both together: Skill to deploy, MCP Server to manage. -## Supported Frameworks +[→ Qovery MCP Server](/copilot/mcp-server) + + +--- -The skill includes production-ready Dockerfile templates for: +## Prerequisites -| Language | Frameworks | -|----------|-----------| -| **Node.js** | Express, Fastify, NestJS | -| **Next.js** | SSR with standalone output | -| **React / Vite** | SPA served via nginx | -| **Python** | Flask, Django, FastAPI | -| **Go** | Any (net/http, Gin, Echo, Fiber, etc.) | -| **Java** | Spring Boot (Maven and Gradle) | -| **Ruby** | Rails | -| **PHP** | Laravel | -| **.NET** | ASP.NET Core | +**Qovery account** — [Sign up at console.qovery.com](https://console.qovery.com) (free to start) +**Git repository** connected to Qovery (GitHub, GitLab, or Bitbucket) -If your framework is not listed, the agent creates a custom Dockerfile based on your project structure. +Everything else is handled by the skill: +- **No API token needed upfront** — generated via the Qovery CLI during onboarding +- **No cluster needed upfront** — the skill guides you through cluster creation +- **No Dockerfile needed** — created automatically for 12+ frameworks +- **No Kubernetes knowledge needed** — health checks, ports, stages, and resource limits are all configured automatically --- -## Example Prompts +## Install + + + + ```bash + curl -fsSL https://skill.qovery.com/install.sh | bash + ``` + + Installs to all compatible tool directories automatically. No manual configuration. + + + + Launch Claude Code, Cursor, OpenCode, or any compatible tool. The skill is discovered automatically. + -Once the skill is installed, try any of these prompts with your AI coding agent: + + ``` + Deploy my application with Qovery + ``` + + -- *"Deploy my application with Qovery"* -- *"Set up Qovery for my project"* -- *"Deploy this to Kubernetes with Qovery"* -- *"Create a Qovery Terraform configuration for my app"* -- *"I need a production deployment with a PostgreSQL database"* + +**Project-only install** (current directory only): +```bash +curl -fsSL https://skill.qovery.com/install.sh | bash -s -- --project +``` +**Update to latest:** re-run the install command. + --- ## Next Steps + + Deploy, troubleshoot, optimize, preview — explore every skill + Manage deployed infrastructure from your AI agent Version-controlled infrastructure as code - - Monitor, debug, and manage from the terminal - View, contribute, or fork on GitHub From 93f524ebb114712e70c693c65ac824de5ac81e4a Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:06:25 +0200 Subject: [PATCH 07/46] docs: add real brand logos to ai-agent compatible tools section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Télécharge 14 logos (SVG + PNG) dans docs/images/logos/ai-tools/ : anthropic, googlegemini, cursor, githubcopilot, jetbrains, bytedance (SVG) opencode, goose, amp, openhands, openai, mistral, roocode, kiro (PNG) - Remplace les icônes Font Awesome génériques par les vrais logos dans les Cards de la section Compatible Tools (tabs Terminal / IDE / Standalone) - custom.css : ajoute filtre dark mode (invert) pour les SVGs noirs (anthropic, cursor, githubcopilot, jetbrains) Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 12 ++++++++ docs/getting-started/quickstart/ai-agent.mdx | 28 +++++++++---------- docs/images/logos/ai-tools/amp.png | Bin 0 -> 1595 bytes docs/images/logos/ai-tools/anthropic.svg | 1 + docs/images/logos/ai-tools/bytedance.svg | 1 + docs/images/logos/ai-tools/cursor.svg | 1 + docs/images/logos/ai-tools/githubcopilot.svg | 1 + docs/images/logos/ai-tools/googlegemini.svg | 1 + docs/images/logos/ai-tools/goose.png | Bin 0 -> 1577 bytes docs/images/logos/ai-tools/jetbrains.svg | 1 + docs/images/logos/ai-tools/kiro.png | Bin 0 -> 1522 bytes docs/images/logos/ai-tools/mistral.png | Bin 0 -> 1137 bytes docs/images/logos/ai-tools/openai.png | Bin 0 -> 4081 bytes docs/images/logos/ai-tools/opencode.png | Bin 0 -> 11938 bytes docs/images/logos/ai-tools/openhands.png | Bin 0 -> 1576 bytes docs/images/logos/ai-tools/roocode.png | Bin 0 -> 1517 bytes 16 files changed, 32 insertions(+), 14 deletions(-) create mode 100644 docs/images/logos/ai-tools/amp.png create mode 100644 docs/images/logos/ai-tools/anthropic.svg create mode 100644 docs/images/logos/ai-tools/bytedance.svg create mode 100644 docs/images/logos/ai-tools/cursor.svg create mode 100644 docs/images/logos/ai-tools/githubcopilot.svg create mode 100644 docs/images/logos/ai-tools/googlegemini.svg create mode 100644 docs/images/logos/ai-tools/goose.png create mode 100644 docs/images/logos/ai-tools/jetbrains.svg create mode 100644 docs/images/logos/ai-tools/kiro.png create mode 100644 docs/images/logos/ai-tools/mistral.png create mode 100644 docs/images/logos/ai-tools/openai.png create mode 100644 docs/images/logos/ai-tools/opencode.png create mode 100644 docs/images/logos/ai-tools/openhands.png create mode 100644 docs/images/logos/ai-tools/roocode.png diff --git a/docs/custom.css b/docs/custom.css index 1bd5e73..9135ee9 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -587,6 +587,18 @@ html[data-theme="dark"] img[src*="/logos/secure-logo-only.svg"], hue-rotate(202deg) brightness(103%) contrast(100%); } +/* AI Tools logos — invert black SVGs in dark mode */ +html[class*="dark"] img[src*="/ai-tools/anthropic.svg"], +html[data-theme="dark"] img[src*="/ai-tools/anthropic.svg"], +html[class*="dark"] img[src*="/ai-tools/cursor.svg"], +html[data-theme="dark"] img[src*="/ai-tools/cursor.svg"], +html[class*="dark"] img[src*="/ai-tools/githubcopilot.svg"], +html[data-theme="dark"] img[src*="/ai-tools/githubcopilot.svg"], +html[class*="dark"] img[src*="/ai-tools/jetbrains.svg"], +html[data-theme="dark"] img[src*="/ai-tools/jetbrains.svg"] { + filter: brightness(0) invert(1); +} + /* AI Section Highlight — fond dégradé violet pour mettre en avant les use cases IA */ .ai-section { background: linear-gradient(135deg, rgba(100, 45, 255, 0.09) 0%, rgba(100, 45, 255, 0.03) 100%); diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 5dce7bd..7ef8b1d 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -29,21 +29,21 @@ The Qovery Agent Skill follows the [Agent Skills](https://agentskills.io) open s - + **Anthropic** AI coding agent in your terminal. Native skill discovery from `.claude/skills/`. `Terminal` `Recommended` - + **OpenCode** Open-source terminal AI agent. Discovers skills from `.config/opencode/skills/`. `Terminal` `Open source` - + **Google** Gemini-powered terminal agent. Full skill support via `.agents/skills/`. @@ -55,35 +55,35 @@ The Qovery Agent Skill follows the [Agent Skills](https://agentskills.io) open s - + **Anysphere** AI-first code editor. Inline agent with full skill support. `IDE` - + **Microsoft / GitHub** GitHub Copilot in VS Code. Agent mode with skill discovery. `IDE Extension` - + **Roo** VS Code extension with autonomous coding capabilities. `IDE Extension` - + **Amazon** AI-powered IDE by Amazon. Supports Agent Skills standard. `IDE` - + **JetBrains** AI agent integrated into all JetBrains IDEs. @@ -95,42 +95,42 @@ The Qovery Agent Skill follows the [Agent Skills](https://agentskills.io) open s - + **Block** Open-source autonomous AI agent. Discovers skills from `.agents/skills/`. `Standalone` `Open source` - + **Sourcegraph** Agentic coding assistant for complex tasks. `Standalone` - + **All Hands AI** Open-source software development agent. `Standalone` `Open source` - + **OpenAI** Cloud-based coding agent with full skill discovery. `Standalone` `Cloud` - + **Mistral** Mistral-powered coding agent. `Standalone` - + **ByteDance** AI coding assistant with autonomous agent capabilities. diff --git a/docs/images/logos/ai-tools/amp.png b/docs/images/logos/ai-tools/amp.png new file mode 100644 index 0000000000000000000000000000000000000000..c955e41c6eb41e82bbce96e9242a82211bd23541 GIT binary patch literal 1595 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&i985rwk9xiQ)7k$FJ>P@YTz_CtYVadK((2Ih)xZbjv(9t!{b#_B}A- ze{elcdOo{(e|o>&GfD1Y8s#9r-`+5}@3U0dHG|*3O{-a=-dsF>>}cQn<#%m(3 zo6##fW3y-5P3Av2$1BguJxm07yhVL&xnoUE%p0-WO5I0vUa!3*F>m8A&+q@g*Pfrp n_+b9$bov!(fA|;}{{LU_R!3Bv>!mxeQeg0O^>bP0l+XkKKiC(Z literal 0 HcmV?d00001 diff --git a/docs/images/logos/ai-tools/anthropic.svg b/docs/images/logos/ai-tools/anthropic.svg new file mode 100644 index 0000000..88dc745 --- /dev/null +++ b/docs/images/logos/ai-tools/anthropic.svg @@ -0,0 +1 @@ +Anthropic \ No newline at end of file diff --git a/docs/images/logos/ai-tools/bytedance.svg b/docs/images/logos/ai-tools/bytedance.svg new file mode 100644 index 0000000..3cb4c78 --- /dev/null +++ b/docs/images/logos/ai-tools/bytedance.svg @@ -0,0 +1 @@ +ByteDance \ No newline at end of file diff --git a/docs/images/logos/ai-tools/cursor.svg b/docs/images/logos/ai-tools/cursor.svg new file mode 100644 index 0000000..14085aa --- /dev/null +++ b/docs/images/logos/ai-tools/cursor.svg @@ -0,0 +1 @@ +Cursor \ No newline at end of file diff --git a/docs/images/logos/ai-tools/githubcopilot.svg b/docs/images/logos/ai-tools/githubcopilot.svg new file mode 100644 index 0000000..fc0d041 --- /dev/null +++ b/docs/images/logos/ai-tools/githubcopilot.svg @@ -0,0 +1 @@ +GitHub Copilot \ No newline at end of file diff --git a/docs/images/logos/ai-tools/googlegemini.svg b/docs/images/logos/ai-tools/googlegemini.svg new file mode 100644 index 0000000..e15e53c --- /dev/null +++ b/docs/images/logos/ai-tools/googlegemini.svg @@ -0,0 +1 @@ +Google Gemini \ No newline at end of file diff --git a/docs/images/logos/ai-tools/goose.png b/docs/images/logos/ai-tools/goose.png new file mode 100644 index 0000000000000000000000000000000000000000..6b7d4919f66ee61701928ef05f1e805d640a2ccf GIT binary patch literal 1577 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&i985rwk9xqUoI3f%`2d=MeBs#YlVUn>UWE!e%L#FVErqX{D=KR$^Z3o3q-ECs8zUQC$ z`;G9rGu?NU&;IoIv-NrHg6C87r0SC!SvE2Y9pUp3uvTz<(=ej>M%`G-yq%T$favZ(HIS85sWm-*-mi VjQj4`bYK<0;OXk;vd$@?2>{ZS5W)Ze literal 0 HcmV?d00001 diff --git a/docs/images/logos/ai-tools/jetbrains.svg b/docs/images/logos/ai-tools/jetbrains.svg new file mode 100644 index 0000000..f3fa841 --- /dev/null +++ b/docs/images/logos/ai-tools/jetbrains.svg @@ -0,0 +1 @@ +JetBrains \ No newline at end of file diff --git a/docs/images/logos/ai-tools/kiro.png b/docs/images/logos/ai-tools/kiro.png new file mode 100644 index 0000000000000000000000000000000000000000..2c309f2ea84cf803822655e4d870cca3dba437ca GIT binary patch literal 1522 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&i985rwk9x2#E8Oqvzu;*7mt;L_1;;lHEE}1Hj_`R1jBfyKhp#WAE}&YQco-Lj!F$3GgE zA6Gq;cj1s%46CltrOsB39}P#gbZ+ffuW;jb&g65a!WFV|gSZzpDs&ymO5DCd;Aqz3 z7j`M1H+=8Q(Q^HM{mjlY1~qmY-p>Cod#?PwN&D@x+o`J={;$?u8Y5A~DY5$I1?~eg zI9Zq)9TWsO2v7@jtECz*Z@IfS?S*W@mYP~3w1AZ~ZL=;(KCJCtqUNmU`crS- zp8tK`<-cECU+$~fe#$TT@}4h&nQ;}%zt1_!f8ERS=WK=b5d=L7bz#CTbFSy5$4pkg zUTRah@6?*S^4+KAJX>k?+vZn}sgBpoSC+Hh^d2e-czL?;aZ=>X9TBNlKBmoO-dXgu zY^vo|8Pn8N&rfKJ5eQV|(8w)MU)1}?+&TY){9E>D=k*&z?%rMI^HpYRs^Pxo5Lfd< z=f57=?3}+rM*V!%qURa2ZaS+H6>$y<8K>V}(AGH_H`lORe!tddf4enCuQ&GZUv2dK z;nnG@&qP-KkD9snN7#SI_N8F^7VYce_QnD?ALq6Sy|uWqoqR?(#`C3-_8zii%Ztz zi;G`xl>Rnt>FfsO;y+)%7Uh55yYTuCapEI*!QA`ni%+ke#(w|4&gcDnAVafkU;j3@ zTWyq{^UQktYTLz8v+nE9k-XaLBq2$+HkdU-<@IE60!~g%~n`X_JGyPdGuqa{hboFyt=akR{0A@|5-2eap literal 0 HcmV?d00001 diff --git a/docs/images/logos/ai-tools/openai.png b/docs/images/logos/ai-tools/openai.png new file mode 100644 index 0000000000000000000000000000000000000000..5c8532ab525b15d74b2c5d6acc6d808e0f4abe71 GIT binary patch literal 4081 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 Xw@l1GOTN;rJcG$S3j>_KTjGBJc8Jt- literal 0 HcmV?d00001 diff --git a/docs/images/logos/ai-tools/opencode.png b/docs/images/logos/ai-tools/opencode.png new file mode 100644 index 0000000000000000000000000000000000000000..eadf67be6c0beb88a3a19451e639ab5998da341a GIT binary patch literal 11938 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 D<`QfM literal 0 HcmV?d00001 diff --git a/docs/images/logos/ai-tools/openhands.png b/docs/images/logos/ai-tools/openhands.png new file mode 100644 index 0000000000000000000000000000000000000000..b75715cb49df638a886f3d594c3235b0d9a51bcb GIT binary patch literal 1576 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&i985rwk9xAm9q-$HJ|)rp7VqMOEkhC=k|PLfAI3(IynY|<{ONhN$e^evJ(`_ z9GYm$x&4YUJ}2h;D^8KO&o@>b3jef;S?CC#hk&($*kEZd^ym4-4`%Z>(mK596|Y$A*|1jb!`)-0>*swq{Oxmu?L&3j_w0{y z<7l45usDVG=^Ae7p>0(R^HV`7{DU?y?ypM!5b4*sTPL?#{exi5F($fYG`NFkoT1_N z95Q=*X~(mehqbps!Mon@*ehO!{pU{8uORy&&cN{h Z|Cw-&nGKynn}Ia|gQu&X%Q~loCICDd37P-^ literal 0 HcmV?d00001 diff --git a/docs/images/logos/ai-tools/roocode.png b/docs/images/logos/ai-tools/roocode.png new file mode 100644 index 0000000000000000000000000000000000000000..1939edf6a53c6066ea715f385032e0f9c257f1cd GIT binary patch literal 1517 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&i985rwk9xKJ4gX)vn5p0J|6TQWCI;;e*$E0|4ox>0Ig{8` zMmdy*!SPL=@2{ud)bXpfdA~dShi}~7`5T^H-T9`0Wh1lD5k3zAYX!&Q$;mU`T+QBa zdL(#tSjS^u>g0Rt&u@x6Z8PutUF{2xy8r)o YyC=T4wZHKpuo!3XboFyt=akR{0OzXd&;S4c literal 0 HcmV?d00001 From 5d931fde0a3d46d4ef3aabc081f94f908088a24c Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:07:49 +0200 Subject: [PATCH 08/46] docs: deduplicate ai-agent and agent-skills pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ai-agent.mdx : supprime la section Supported Frameworks (appartient à agent-skills) et la section Install en doublon en bas de page (déjà dans le hero). La page reste : hero install, outils par tabs avec logos, workflow steps, prompts, tableau comparatif, prérequis. - agent-skills.mdx : supprime le tableau Compatible Tools (14 lignes) et la section Install détaillée — remplacés par un lien vers ai-agent. La page reste : 8 skills en cards, Why Qovery for agents, next steps. Rôles clairs : ai-agent = entry point (comment démarrer), agent-skills = référence (que fait chaque skill). Co-Authored-By: Claude Sonnet 4.6 --- .../quickstart/agent-skills.mdx | 148 +++--------------- docs/getting-started/quickstart/ai-agent.mdx | 70 --------- 2 files changed, 23 insertions(+), 195 deletions(-) diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index 04f986d..1835900 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -1,18 +1,18 @@ --- title: "Qovery Agent Skills" -description: "Deploy to Kubernetes with your favorite AI coding agent. Eight skills. 30+ tools. One install command." +description: "Eight skills that give your AI coding agent the ability to deploy, troubleshoot, optimize, and manage Kubernetes infrastructure." mode: "wide" ---
-Deploy production-grade apps to Kubernetes by talking to your AI coding agent — no DevOps expertise required. The Qovery Agent Skills extend any compatible AI tool with the ability to provision infrastructure, deploy applications, debug failures, and manage environments autonomously. +The Qovery Agent Skills extend any compatible AI tool with Kubernetes superpowers. Install once, and your agent picks the right skill automatically based on what you ask. ```bash curl -fsSL https://skill.qovery.com/install.sh | bash ``` -Eight skills are installed at once. Your agent picks the right one based on what you ask. +→ [Setup guide and compatible tools](/getting-started/quickstart/ai-agent)
@@ -21,14 +21,11 @@ Eight skills are installed at once. Your agent picks the right one based on what ## The Eight Skills - + **Your personal cloud architect** -
+ Asks about your role, experience, cloud provider, and constraints — then recommends the optimal cluster configuration, security settings, and deployment method. - Asks about your role, experience, cloud provider, and constraints — then recommends the optimal cluster configuration, security settings, and deployment method for your situation. - - **Key features:** - Evaluates your team's profile and recommends the right path - Guides through cloud account setup (AWS, GCP, Azure, Scaleway) - Configures cluster, org, and access controls step by step @@ -40,11 +37,8 @@ Eight skills are installed at once. Your agent picks the right one based on what **From source code to running app** -
- - Analyzes your codebase, generates a production Dockerfile if missing, provisions databases, configures environment variables, and deploys to Kubernetes — via CLI+API or Terraform. + Analyzes your codebase, generates a production Dockerfile if missing, provisions databases, configures environment variables, and deploys to Kubernetes. - **Key features:** - Framework detection: Node.js, Next.js, React, Python, Go, Java, Ruby, PHP, .NET - Dev vs production mode: container DB or managed RDS/Cloud SQL - Environment variables with aliases, interpolation, and overrides @@ -56,14 +50,11 @@ Eight skills are installed at once. Your agent picks the right one based on what **Systematic diagnosis for deployment failures** -
- Runs an 8-layer diagnostic sequence and matches against 20+ error patterns — covering build failures, crashes, connectivity issues, health check timeouts, and performance problems. - **Key features:** - 8-layer diagnostic: build → image → config → startup → health → network → scaling → logs - 20+ error pattern library with known fixes - - Distinguishes between code issues (needs your fix) and infra issues (auto-fixed) + - Distinguishes code issues (your fix) from infra issues (auto-fixed) - Outputs a structured incident report with remediation steps `Debug` `Operations` @@ -72,11 +63,8 @@ Eight skills are installed at once. Your agent picks the right one based on what **Cut your cloud bill with data-driven analysis** -
- Analyzes resource consumption across 7 dimensions and generates a detailed cost report with specific savings recommendations — exportable as CSV. - **Key features:** - 7-dimension analysis: right-sizing, autoscaling, DB modes, scheduling, cluster, builds, external - Identifies over-provisioned services and recommends target sizes - Spot instance and sleep mode opportunities for non-production @@ -88,11 +76,8 @@ Eight skills are installed at once. Your agent picks the right one based on what **Find and fix slow deployments** -
+ Measures your full deployment pipeline timeline, identifies bottlenecks, and classifies responsibility — user code vs infrastructure — with concrete fixes. - Measures your full deployment pipeline timeline, identifies bottlenecks, and classifies responsibility — user code vs infrastructure configuration — with concrete fixes. - - **Key features:** - End-to-end pipeline timing: build → push → schedule → start → health check - Dockerfile layer optimization (cache ordering, multi-stage builds) - Build cache configuration for faster CI @@ -104,11 +89,8 @@ Eight skills are installed at once. Your agent picks the right one based on what **Preview environments for every pull request** -
- - Detects or creates a blueprint environment, then automatically clones it for each PR with a unique URL — including databases and dependent services. Configurable auto-shutdown. + Detects or creates a blueprint environment, then clones it for each PR with a unique URL — including databases and dependent services. - **Key features:** - Auto-create a full-stack preview (app + DB) for each PR - Unique URL per environment (e.g. `pr-123.preview.example.com`) - Auto-shutdown after merge or configurable TTL @@ -120,13 +102,10 @@ Eight skills are installed at once. Your agent picks the right one based on what **Self-service environments for non-technical teams** -
+ Lets product managers, designers, and junior developers spin up their own full environments — with RBAC so they can't break production. - Lets product managers, designers, and junior developers spin up their own full environments in VS Code, Claude Code, or OpenCode — with built-in RBAC so they can't break production. - - **Key features:** - Non-developers get their own isolated environment via AI agent - - RBAC controls: builders can deploy but can't touch cluster config + - RBAC controls: builders deploy apps, can't touch cluster config - Clones from a reference environment with safe defaults - Works in VS Code + Copilot, Claude Code, and OpenCode @@ -136,15 +115,12 @@ Eight skills are installed at once. Your agent picks the right one based on what **A web portal for environment provisioning** -
- - Generates and deploys a Vite + React + Express web portal — SSO login, one-click environment creation, and a visual dashboard for your team to manage their environments without touching the CLI. + Generates and deploys a Vite + React + Express web portal — SSO login, one-click environment creation, and a visual dashboard for your team. - **Key features:** - AI agent generates and deploys the portal for you - SSO login for your team - One-click environment creation and deletion - - Visual dashboard — no CLI, no console access needed for end users + - Visual dashboard — no CLI, no console access needed `Portal` `Teams`
@@ -152,31 +128,6 @@ Eight skills are installed at once. Your agent picks the right one based on what --- -## Compatible Tools - -The Qovery Agent Skills follow the [Agent Skills](https://agentskills.io) open standard. The installer places skills in all discovery paths automatically — no manual configuration. - -| Tool | Type | Skills supported | -|------|------|-----------------| -| **Claude Code** | Terminal | All 8 | -| **OpenCode** | Terminal | All 8 | -| **Gemini CLI** | Terminal | All 8 | -| **Cursor** | IDE | All 8 | -| **VS Code Copilot** | IDE Extension | All 8 | -| **Roo Code** | IDE Extension | All 8 | -| **Kiro** | IDE | All 8 | -| **Junie (JetBrains)** | IDE | All 8 | -| **Goose** | Standalone | All 8 | -| **Amp** | Standalone | All 8 | -| **OpenHands** | Standalone | All 8 | -| **OpenAI Codex** | Standalone | All 8 | -| **Mistral Vibe** | Standalone | All 8 | -| **TRAE** | Standalone | All 8 | - -Any other tool that discovers skills from `.claude/skills/`, `.config/opencode/skills/`, or `.agents/skills/` directories is also compatible. - ---- - ## Why Qovery for AI agents? @@ -193,7 +144,7 @@ Any other tool that discovers skills from `.claude/skills/`, `.config/opencode/s
- Environments are created and destroyed in minutes. Agents spin up, test, and tear down without leaving orphan resources or manual cleanup. + Environments spin up and tear down in minutes. Agents don't leave orphan resources — sleep mode and TTL policies handle cleanup automatically. @@ -201,80 +152,27 @@ Any other tool that discovers skills from `.claude/skills/`, `.config/opencode/s - `qovery-deploy` and `qovery-troubleshoot` watch deployments and auto-fix common failures — port mismatches, missing env vars, health check timeouts — without waiting for a human. + `qovery-deploy` and `qovery-troubleshoot` watch deployments and auto-fix common failures — no waiting for a human to intervene. - All skills are MIT-licensed and open source. Fork them, customize them, add your own. The skills are just files — readable and auditable by your team. + All skills are MIT-licensed. Fork them, customize them, add your own. The skills are just files — readable and auditable by your team. + + [→ github.com/Qovery/qovery-skills](https://github.com/Qovery/qovery-skills) - One command installs all skills across every compatible tool on your machine. No per-tool configuration, no manual file management. + One command installs all 8 skills across every compatible tool on your machine. No per-tool configuration, no manual file management.
--- -## Install - - - - ```bash - curl -fsSL https://skill.qovery.com/install.sh | bash - ``` - - Skills are installed to all compatible discovery paths on your machine automatically. - - - - Launch Claude Code, Cursor, OpenCode, or any of the 30+ compatible tools. No additional configuration needed. - - - - The agent loads the right skill automatically based on what you ask: - - ``` - # To onboard a new project: - Set up Qovery for my project - - # To deploy: - Deploy my application with Qovery - - # To debug: - Troubleshoot my failing deployment with Qovery - - # To optimize costs: - Analyze my Qovery infrastructure costs - - # To set up preview environments: - Create preview environments for my PRs with Qovery - ``` - - - - -To install for the current project only (instead of globally): -```bash -curl -fsSL https://skill.qovery.com/install.sh | bash -s -- --project -``` -To update to the latest version, re-run the install command. - - ---- - -## Next Steps - - - Step-by-step guide to your first AI-driven deployment - - - Manage deployed infrastructure via natural language - - - View source, contribute, or fork the skills + + Install the skill and deploy your first app - - Version-controlled infrastructure as code + + View, contribute, or fork on GitHub diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 7ef8b1d..6f5067c 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -173,44 +173,6 @@ When you ask your agent to deploy, it runs through a complete deployment workflo --- -## Supported Frameworks - -Production-ready Dockerfile templates included for: - - - - Express · Fastify · NestJS - - - SSR with standalone output - - - SPA served via nginx - - - Flask · Django · FastAPI - - - net/http · Gin · Echo · Fiber - - - Spring Boot (Maven & Gradle) - - - Rails - - - Laravel - - - ASP.NET Core - - - -Any other framework? The agent generates a custom Dockerfile from your project structure. - ---- - ## Try These Prompts Open your AI coding tool after installing the skill and try: @@ -269,38 +231,6 @@ Everything else is handled by the skill: --- -## Install - - - - ```bash - curl -fsSL https://skill.qovery.com/install.sh | bash - ``` - - Installs to all compatible tool directories automatically. No manual configuration. - - - - Launch Claude Code, Cursor, OpenCode, or any compatible tool. The skill is discovered automatically. - - - - ``` - Deploy my application with Qovery - ``` - - - - -**Project-only install** (current directory only): -```bash -curl -fsSL https://skill.qovery.com/install.sh | bash -s -- --project -``` -**Update to latest:** re-run the install command. - - ---- - ## Next Steps From ee0b01835938a51ed77a6e85441dbf552868cbcc Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:11:51 +0200 Subject: [PATCH 09/46] docs: replace amp.png with amp.svg (currentColor, dark mode compatible) Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/ai-agent.mdx | 2 +- docs/images/logos/ai-tools/amp.png | Bin 1595 -> 0 bytes docs/images/logos/ai-tools/amp.svg | 1 + docs/images/logos/ai-tools/googlegemini.svg | 2 +- 4 files changed, 3 insertions(+), 2 deletions(-) delete mode 100644 docs/images/logos/ai-tools/amp.png create mode 100644 docs/images/logos/ai-tools/amp.svg diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 6f5067c..051a24b 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -102,7 +102,7 @@ The Qovery Agent Skill follows the [Agent Skills](https://agentskills.io) open s `Standalone` `Open source`
- + **Sourcegraph** Agentic coding assistant for complex tasks. diff --git a/docs/images/logos/ai-tools/amp.png b/docs/images/logos/ai-tools/amp.png deleted file mode 100644 index c955e41c6eb41e82bbce96e9242a82211bd23541..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1595 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&i985rwk9xiQ)7k$FJ>P@YTz_CtYVadK((2Ih)xZbjv(9t!{b#_B}A- ze{elcdOo{(e|o>&GfD1Y8s#9r-`+5}@3U0dHG|*3O{-a=-dsF>>}cQn<#%m(3 zo6##fW3y-5P3Av2$1BguJxm07yhVL&xnoUE%p0-WO5I0vUa!3*F>m8A&+q@g*Pfrp n_+b9$bov!(fA|;}{{LU_R!3Bv>!mxeQeg0O^>bP0l+XkKKiC(Z diff --git a/docs/images/logos/ai-tools/amp.svg b/docs/images/logos/ai-tools/amp.svg new file mode 100644 index 0000000..c2dfe36 --- /dev/null +++ b/docs/images/logos/ai-tools/amp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/logos/ai-tools/googlegemini.svg b/docs/images/logos/ai-tools/googlegemini.svg index e15e53c..62681df 100644 --- a/docs/images/logos/ai-tools/googlegemini.svg +++ b/docs/images/logos/ai-tools/googlegemini.svg @@ -1 +1 @@ -Google Gemini \ No newline at end of file +Gemini \ No newline at end of file From ffc5173eb193b15999612bd073c860d5bfa29247 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:16:02 +0200 Subject: [PATCH 10/46] docs: replace kiro.png with kiro.svg Co-Authored-By: Claude Sonnet 4.6 --- docs/images/logos/ai-tools/kiro.png | Bin 1522 -> 0 bytes docs/images/logos/ai-tools/kiro.svg | 11 +++++++++++ 2 files changed, 11 insertions(+) delete mode 100644 docs/images/logos/ai-tools/kiro.png create mode 100644 docs/images/logos/ai-tools/kiro.svg diff --git a/docs/images/logos/ai-tools/kiro.png b/docs/images/logos/ai-tools/kiro.png deleted file mode 100644 index 2c309f2ea84cf803822655e4d870cca3dba437ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1522 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&i985rwk9x2#E8Oqvzu;*7mt;L_1;;lHEE}1Hj_`R1jB + + + + + + + + + + From 59802173b312e47aabfa514dda5a1c593ac06caf Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:16:09 +0200 Subject: [PATCH 11/46] docs: update kiro icon path from .png to .svg in ai-agent.mdx Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/ai-agent.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 051a24b..1473797 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -76,7 +76,7 @@ The Qovery Agent Skill follows the [Agent Skills](https://agentskills.io) open s `IDE Extension` - + **Amazon** AI-powered IDE by Amazon. Supports Agent Skills standard. From 8bd7f1a9d51c35c7dfcfe79496105f0814073145 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:16:50 +0200 Subject: [PATCH 12/46] docs: replace openai.png with openai.svg Co-Authored-By: Claude Sonnet 4.6 --- docs/images/logos/ai-tools/anthropic.svg | 2 +- docs/images/logos/ai-tools/goose.png | Bin 1577 -> 96976 bytes docs/images/logos/ai-tools/jetbrains.svg | 2 +- docs/images/logos/ai-tools/openai.png | Bin 4081 -> 0 bytes docs/images/logos/ai-tools/openai.svg | 2 ++ 5 files changed, 4 insertions(+), 2 deletions(-) delete mode 100644 docs/images/logos/ai-tools/openai.png create mode 100644 docs/images/logos/ai-tools/openai.svg diff --git a/docs/images/logos/ai-tools/anthropic.svg b/docs/images/logos/ai-tools/anthropic.svg index 88dc745..831452b 100644 --- a/docs/images/logos/ai-tools/anthropic.svg +++ b/docs/images/logos/ai-tools/anthropic.svg @@ -1 +1 @@ -Anthropic \ No newline at end of file + \ No newline at end of file diff --git a/docs/images/logos/ai-tools/goose.png b/docs/images/logos/ai-tools/goose.png index 6b7d4919f66ee61701928ef05f1e805d640a2ccf..caf53c84c981364c6129e25675b86cc93ec98a89 100644 GIT binary patch literal 96976 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

2!Nssdyj(U4XI~uKp}+QgVMMjAp-pEFP5eqzG~n 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 N{(Y8vbN7%g{}+ghfBpaf literal 1577 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&i985rwk9xqUoI3f%`2d=MeBs#YlVUn>UWE!e%L#FVErqX{D=KR$^Z3o3q-ECs8zUQC$ z`;G9rGu?NU&;IoIv-NrHg6C87r0SC!SvE2Y9pUp3uvTz<(=ej>M%`G-yq%T$favZ(HIS85sWm-*-mi VjQj4`bYK<0;OXk;vd$@?2>{ZS5W)Ze diff --git a/docs/images/logos/ai-tools/jetbrains.svg b/docs/images/logos/ai-tools/jetbrains.svg index f3fa841..b8c5d9a 100644 --- a/docs/images/logos/ai-tools/jetbrains.svg +++ b/docs/images/logos/ai-tools/jetbrains.svg @@ -1 +1 @@ -JetBrains \ No newline at end of file + \ No newline at end of file diff --git a/docs/images/logos/ai-tools/openai.png b/docs/images/logos/ai-tools/openai.png deleted file mode 100644 index 5c8532ab525b15d74b2c5d6acc6d808e0f4abe71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4081 zcmcha_ct4C8^_gnYSxNft7al-6-BjLkJ{B5AvW=tMODS#6(do!MOs>F#0VmxR?HgZ z5fnA6sa0)>y%M$Fyg$7E!u!L0-{-o=IoG+)xj)zUoA%Jch>Km6oq>UY%f#5gioOo~ zcd#oR942H~9& zJ_rmrURYsQw7WxO#4~mN5~i;G9%R&Fa$|T{@T>o9M)o92;=;3!47B6r<>h4e=)E|C zWPFPS6r9W~h>}j|gBiOKg!%q2A?@ZNlYxhD@@ee(+1YK*zvrnpZroVwTzUm21wMXU z4<_w7vGN|fm-kco9tkI-(dg;v>C@O+^~9{W;J7$f0Lu=O3$Nt-voc>~agcvh5|5|7 z=6(L-0Qs&QlpLm-@-@oU7SI>k`usH5`R~jGjaQHwh z0V=?XGT*^EgBIAZKX)7ty)pRi6-+F>hV# zi-JIM7L|a=L=_j`Jo$7eQulMYK-7I`^{|%*Oi?Jw6SIrE{H-<=itsMroTC)b4hZ3m%qZv z^eoFe>cD2YKk`bUL{%x0S|^#gaZR37H|(_>Y!t2|^Q5UvA=h2&C-s@(3cyBbg)()g zz3n_pSM3%dq}|FswgnM-8ny z>OIJV2=MbiYIkux2_ok!p@NWC%Hv+F1pCImW+rVb$mil3dkHQ2&%Z;o1hks3wdT0t zHRK2(r|-?)CMd&HNNQ7dKA}ntm!6oyR(}Sq8`5Uph^z&%CoU!+cuYJc%Vcv^(i>=Z zEU#bRoCUfX1Gx}o68(Lf=69;geAkFmeRm=XJZk?^Wz68Scynz?=i9e$rF#{tNI8sC z?R3cnp6E*##VnKsIb4D1WQ7hQsK?w#=Y?%C?4!|HS7u#+WBB|prMG|by0`0CEln$< zgrt*>J))$w3HZIkthK>0{V!isf3B{k{kgYB3|+71d~UnXn|wu@u+IKls&JV^;`m|J z(G4^%q(FoGeLnE9En4$d1vs`c%A`U|R_r^FuL+%8Xm%FzbG}usS3Hke$qr~w9V7<% zv#kvQe^TkZ;90S2>|XVf2Gh2UBBri9l4o}0da`2zUYmtWls^=ejNl%h^kV^_ipSfq zpnlR}%=s~O>nJ({WZx0~4vY1w7rA=b<~JzyA!5X!7r^0@vj$WQJq{xH2`5kb!NbB* ztUjiX?=LQ1@JUwrLh)&lglXiok^}c=Ej;|l(HUlTKDSinHbN_k3@rhuKE{IwQb*d( zg11R(t<+uP%LF3sdXu2*o=IBjWTP_Zt9~c-Rg~C+%}i#f@TQLxj>?^!XjYe~%IC zOsO%wd>jz2gm*;4jW#&J`yayDv&EiAqN8;0_%ONH<#s7_8;+gP7IF0)<*8XF3h0BKgIRNGF3Agq3TgN+ z2-JC}H^*uuL5Vv6&?io*T#|!$wM$3GE*+73&l3Zd;D)S(kgaqgYb7+IAZoSrVGgE) zQFZUi7PNIV3xyHmgOR+`dUu=mk61xCYH)7aY>nb^_Dcn0xbivjd;BqE_E>=t}n@r--i#>@yKc!c(@N;2dVa*mD?VLNd z5J*J{jC?c&lS7clyREU!l2$B^>2?4+)e_ajWtPKJrNt<6pRlQ0N`NQrX#aLbgHU`)<)B9(hJ zBuui$%%eTE^M@Z6=4>vd^hnRF9rJu_-MqN}=g(T~&ZM74%O_P*9TB(q@1Kq>%Y$dA zK7Fc(Cg9VN9KC!+gNs2yowUWE*Pnka?x}B9s9A<u zUqrzxL#YyGBq2nVZEJUHYfIWbm#%e_$2 zf#TLP{9J8$Wjksym8d&7Q!tsxYcpkWf3w@j%G2KBgLiavbVz3^ZiQnnftjz0_G3x1 zs7w?u1I+2ZqzN!Zf=Mcx+dT>sVca*^V&dZBcFrBmH7Z^J+P+64pXUl)87W8bSAosQ zQB&}M9kLySMZ_e=o4(7UoPTY|P&JU#%8jpcZ z>_~CJ^^7Dg`P|KzDr}-_Z{ENhMgQAw^F^LU?+KH5a_w=p8*KHv`cUAd9csW|@~kI; zX6t<6?wMygGU?FdJ-eRE_57~YV|UK7w_BHi*;AVem4DGw2>p2YBvm!HFHhFh!;lh? zW&}j)3&pbVknlIkm)S&vmQ)E%&@4cVBWzD2|G~qk8?-)rLBCzZnwI;C#=acqabhf-l`-ju3K5L+;wDK;K`!e*2ik$Lao0*=7nZwIf06ngWUYx7 zG&MDi#i5+<5azcMDkqkQ%>9(&4v$YyUX4}ahrRfpLY%-Qnc>=ELvp^c$)9d`g|^<%LCeN5LblNT^! z<<;uJ(H|t!$dP}z1;XDvu)234t#Y+@7eZM?$o7sS?DbjE8NTY+cFI^zw%pCF2fOG zHt%^Ncpb#2!_3} zV@?X;5VMFdnWr!g`yM<4B3bO?@7)SZz~=7ccVsrVl(<>}I9?9yG&hX_1Lmy2)eOZb zTrsy3*w_ZVFn+B2Ic9~eC&k)Z_~%81X(u_lispkd*aHw|(fn@iEI&j--Yo#~t4jOy zTQE9C@VBy8zrC;u)XXndeAuc?V=o`MYGY_lX!%2<(MWg;d6s1N@bK`i%_7W*(D2^L z;o)I;dIvU?PN}V9373=DQbqRS9#wij4!jD@#VigWO49-~S*f>@o$&c@F2G(7Ae+NU z?|f5NI`+!N0gDs7Kum<%%^{T!2Ihv~PO~TRqYy~CO7s1iD*#eN{2gGjC;IddI1J&`ru*+#1 zOP$}of5!r*?QhymH@FK?P!*_(o+Y~MhrBeG8=AQO{%`}bcX5pR>A=vxo}aO`rpAcw zGCVrly`k0T37ggI;`*s3zp6rd=RYX|ZL;~nW3|}8c(V$H|6WJvh~%Gj-!X!M`2ms6 z?N-P~Vggq0vC;*Fh1@C64({26E>G9GE@qe@*-?o1TgU%%g4`x@tkS!>=SO?qJ0@A) z<}8AwmtT@*2{UHT6(PJc(>AkBiF7}^5W@5~BdRZ}3wBKw59MS73;v(Nb4dn<^YhZt Xw@l1GOTN;rJcG$S3j>_KTjGBJc8Jt- diff --git a/docs/images/logos/ai-tools/openai.svg b/docs/images/logos/ai-tools/openai.svg new file mode 100644 index 0000000..3b4eff9 --- /dev/null +++ b/docs/images/logos/ai-tools/openai.svg @@ -0,0 +1,2 @@ + +OpenAI icon \ No newline at end of file From 79d0ad9221b50e75f57691ca5488dc373b249066 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:16:59 +0200 Subject: [PATCH 13/46] docs: update openai icon path from .png to .svg in ai-agent.mdx Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/ai-agent.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 1473797..7e3ff34 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -116,7 +116,7 @@ The Qovery Agent Skill follows the [Agent Skills](https://agentskills.io) open s `Standalone` `Open source` - + **OpenAI** Cloud-based coding agent with full skill discovery. From 548048f335d861dd55e242ce8c4d2a619674381d Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:17:40 +0200 Subject: [PATCH 14/46] docs: replace opencode.png with opencode.svg Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/ai-agent.mdx | 2 +- docs/images/logos/ai-tools/opencode.png | Bin 11938 -> 0 bytes docs/images/logos/ai-tools/opencode.svg | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 docs/images/logos/ai-tools/opencode.png create mode 100644 docs/images/logos/ai-tools/opencode.svg diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 7e3ff34..8487071 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -36,7 +36,7 @@ The Qovery Agent Skill follows the [Agent Skills](https://agentskills.io) open s `Terminal` `Recommended` - + **OpenCode** Open-source terminal AI agent. Discovers skills from `.config/opencode/skills/`. diff --git a/docs/images/logos/ai-tools/opencode.png b/docs/images/logos/ai-tools/opencode.png deleted file mode 100644 index eadf67be6c0beb88a3a19451e639ab5998da341a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11938 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 D<`QfM diff --git a/docs/images/logos/ai-tools/opencode.svg b/docs/images/logos/ai-tools/opencode.svg new file mode 100644 index 0000000..b79140a --- /dev/null +++ b/docs/images/logos/ai-tools/opencode.svg @@ -0,0 +1 @@ + \ No newline at end of file From c79497921b21bf5b0eebe477282bcd67dbf4ab8f Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:20:23 +0200 Subject: [PATCH 15/46] docs: invert goose, amp, openai logos to white in dark mode Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/custom.css b/docs/custom.css index 9135ee9..5fda9bc 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -595,7 +595,13 @@ html[data-theme="dark"] img[src*="/ai-tools/cursor.svg"], html[class*="dark"] img[src*="/ai-tools/githubcopilot.svg"], html[data-theme="dark"] img[src*="/ai-tools/githubcopilot.svg"], html[class*="dark"] img[src*="/ai-tools/jetbrains.svg"], -html[data-theme="dark"] img[src*="/ai-tools/jetbrains.svg"] { +html[data-theme="dark"] img[src*="/ai-tools/jetbrains.svg"], +html[class*="dark"] img[src*="/ai-tools/amp.svg"], +html[data-theme="dark"] img[src*="/ai-tools/amp.svg"], +html[class*="dark"] img[src*="/ai-tools/openai.svg"], +html[data-theme="dark"] img[src*="/ai-tools/openai.svg"], +html[class*="dark"] img[src*="/ai-tools/goose.png"], +html[data-theme="dark"] img[src*="/ai-tools/goose.png"] { filter: brightness(0) invert(1); } From c6f67d36924fb0d32ded9753b9cb897934433524 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:22:32 +0200 Subject: [PATCH 16/46] docs: remove jetbrains.svg, use jetbrains.png, clean up CSS Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 2 -- docs/getting-started/quickstart/ai-agent.mdx | 2 +- docs/images/logos/ai-tools/jetbrains.png | Bin 0 -> 6246 bytes docs/images/logos/ai-tools/jetbrains.svg | 1 - docs/images/logos/ai-tools/openhands.png | Bin 1576 -> 21247 bytes docs/images/logos/ai-tools/roocode.png | Bin 1517 -> 1683 bytes 6 files changed, 1 insertion(+), 4 deletions(-) create mode 100644 docs/images/logos/ai-tools/jetbrains.png delete mode 100644 docs/images/logos/ai-tools/jetbrains.svg diff --git a/docs/custom.css b/docs/custom.css index 5fda9bc..e41c1a6 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -594,8 +594,6 @@ html[class*="dark"] img[src*="/ai-tools/cursor.svg"], html[data-theme="dark"] img[src*="/ai-tools/cursor.svg"], html[class*="dark"] img[src*="/ai-tools/githubcopilot.svg"], html[data-theme="dark"] img[src*="/ai-tools/githubcopilot.svg"], -html[class*="dark"] img[src*="/ai-tools/jetbrains.svg"], -html[data-theme="dark"] img[src*="/ai-tools/jetbrains.svg"], html[class*="dark"] img[src*="/ai-tools/amp.svg"], html[data-theme="dark"] img[src*="/ai-tools/amp.svg"], html[class*="dark"] img[src*="/ai-tools/openai.svg"], diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 8487071..316d071 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -83,7 +83,7 @@ The Qovery Agent Skill follows the [Agent Skills](https://agentskills.io) open s `IDE` - + **JetBrains** AI agent integrated into all JetBrains IDEs. diff --git a/docs/images/logos/ai-tools/jetbrains.png b/docs/images/logos/ai-tools/jetbrains.png new file mode 100644 index 0000000000000000000000000000000000000000..d90216a450d1e62e29d15d88d89a4f9452b34aa3 GIT binary patch literal 6246 zcmdT|cT`j9x4kkbf&z*IN^gT8L=YlGqy$A^22=zLy#$aVL0YH+0c4axK^{ZzZ9t_4 z5kyJ?Lk}Pzy$c8^y%$4y-;FbCxz>Ac&HKIe{`rN)O76YiIcM*4_P6g%LhszxU}oZC zf*^?bm!EIwLJ*xH{D1ryI770H9|3Oy)<5gsf}n@zAt>-y2>J?61%8Ggk4q3VhlQZ4 z@ep*@CAmUJ5nQ0RyLRgu1QkE`qv}L~<0E)ojq6b1d!8@g;Fy(`#trBY{!6cZ0bgcx z`Pm2$K`iy~|B)C87H*KM`j;Em?s^X`jt2b4ClCMG)$K|<+c!O$We1~ z^p6Fan5~npUQyUnUXOHir9IB;3tb4uG`41kMb%e+?oFw;CwSW(k7W~3YNZIZwK26| z34y2Y5{{ngA01Sqr@!H8WNVj0PTQzy&~$qjHM+aC_nDxWpAlk2L7U6oMDO~MyLpcQ zg#SJ-l?cre6{$I=e_ly39_!p-CpGAL@{R{Yan7%9b-JI(eqCl_k4d#GuZLzwMqU< zIRD$x!L#}f!#|BK&_-7%Tt$Oa0%EEi@QzC*biAE1K{a%rjpj)ex3PjmK+|ImO|tmw zBSlp2+o#e4ti|vt!=A$9h@hjLt;V?iO_QLC>>4(ZXkq2%mD)_#zL=pwHC(M#>lZLp_2??1*X!@$7=mbcOpH+=0{P(9{!WrV&t}9bYUv>fH%YvUe^`zL&{e>>MrEShNwTpUM3? zqts<_5HCkuqvoq<(B)mB75)0txi4&jyiCWo;kskfY=SAF+sdM#A?X@6?6--ZZ(?I8 zjIp5oU81#N*CaXSy zODWkhkpr_-63t>Wbl2Q`8ZPDWNCW`6M9lrs(EUcJx7%e62`$i!F<-WusPgU%?+6#4 zJAm3k)W-x+A@veGd?lNVqDe>9PQlx7*Ovz?mcvg-U8)#kbHA=m8%gk2=CP6HO5P2HS7txdS&))k7ykmfy_Q%N}H3o9^9!CbqEIqr#DgSDJMOUj+ zI{RBwYy?{638~$`Bz&Qfi~Vr6sEjUU|9l>;q2^I^&)yS4Fh4|?Tm#9%x@3mLrW3S& z?UXLjQF4T-Bb~+qW?N+@cVp9oS;k$A*N1K44hZM%otEgdWK950vtel2fD2a%A-9k$ ze}F^ODL-3;dWVaAcC1r?AuE0Q=w9_<-@x5CREQ?DmdQ1NltVduDBPRq-_cI=SBu!- zIiVcoFReZDwDj4RxH`VNL<_bi?YUEn_MfD8%lt{3UZiMs+oC@9!d)k~vp{Pf_o`>n z=*(msW2_2pA3H7#12kLy(pclO7$O^sW%MgaXpiLtt?qBlEmv&Tbv=v$y&|BuYUVA@ zahf1%byv7yb&77h{VL^v&M&3c64a8%!tD3aZ?vj_W}e-KtvW^!)1KmPJbw)d6jHdM z`u5<1ih5Ny8=_#%LrMk+x}xuy`OZMn5GyyLmQD0eb8fJ1>8_CQ`sfoZCuw(U05sb@ z`(n2+x{Gk7l?~xq?tM^T}ymE2v`#Q49eFtwkxDYt3jR@QT zFGH07+MiVBgFq2OCrp-W1Uo%PP43(2n&vMeRy}O_kVc>L@nuzD2>Nd$D>eG=<(YOJ zY4j>zpGX0ViFgLU+IAn7{+v9 zBN=8}Z5EphxPsYdI`dG;o3ikDFn04BTjQZ&X~pysMf+1rT|5N{L4eT6w0a_QtIpZ@ zQH)sKbZtd>3oka*ajt{$TMHjge9!%q$)CpTp{a0+$954-b%ZcBy@8i&tMpZ=ud8V*) z5%*x(T`QyT$Am2xAImdq(S-NNG=3}??Yp)xvY?Sw|G0t2UDZ@gadj?Sifkw2c}^93 z1hHFk$7vL`wvI2s^S3qYoxJ|GIgHHT-bG=fJAwV>K?>h)WV~eDjadG&V`eX&Ccz|Q zCG)pPt}idoD4)tUwP&ut*b?3|fn7XRrsPulB)(%iIz9jwyK%nVy=3q}7U|>yydtH< z#fm+A_t11^>g=C5<1TKe>a89eYZCCjo~2T%MS!QiKbb@N5U*oZBeW5QkYr^-1b%gt zOrrKL26XLaM?cGY%3pfCdeC5r417&?XLa9Mv6TE~%s8iYSTkDh;&oPB!^jX>Hn@iF z%6Xa@7wJeghds+o95)r>($AQ+8IdD2PHS^r#~x9%6J}8F<8_RAz`2{lHZ3}Au{IpI z(m~CwXVwQzAMZs<6?M*0Lv<vwALuI19(8{-LplOld_xkY~-W5k8#;!F}|N$Gz7YU=eqszzsbWQTJ~ zqfLMq$cHpm=YG3Ty}r=g$f_Q@rICy$Vo2z$Vtwt}$v1~}_0!jaj=EQ_^X&~r+0D+H z_t{Smp6(?}B@|WJd@Wp#P*+}7h}$#W4Ia9OQN{u5aSx*1KL^j96W3ub4X9$p7?~$V zN;w~Pwa(binwPtXVcaq@d9<(D&FAvO54@RTQ9X{pK34GRXl^8t`dW_o%a*nNU8A71GLZ9>r|XC zF>_6v;-PQ&G$qKU)MMQ9C>`k3w_!?fRSUgC5;P{3UjV|JC!mUp z#7x%&V876vG?OBJC&J)K@HGAM)E+QhT&^>q}pl`woCT z2))#}uU4)IJUZ~}r=Fz=-t8fvFKBc3H%2%z>Gdoo*v`zF0p|Y`60Mk+6(ge0;vDk> zlsE9F7P2j0%Xt9-f-CMtA1cutEgvCynyzL})}WoW{GA!dRoddVyVPBzh@~|#i@l(c z0q7HiL=Q+8zw$|=^+C^ERw$r@hPq?3pA|)RJO-D{x~#ct25cKjFRP+-n4+tu)}O%L zR?5|#8OPC&+0@tJY-g11Lwg$-IiP%Oc0JWI<=uR`2uwbrQk#bo0ecAK(c-OvOu7gJ z4W;w7ht?Kzx5E@3@=y-u%xLq!B{Q`@#a&3Kp*6LsT9k*PMJxC)dh3wz&PN~L_hVkt zS+1jj?0N>Pt1T177qs#Tw}}we#+%qn@k+{20JoMvb^$FPD)WnQ|6#V#S^x<_E?%AB zO_Kw@1I?{Ao65Qr(?k@7n0|nAs+hE-sU)?cqAeS2XQ(G

=R-%#t>*EXoJ()*a3` z^!=wxpKQ1wY-o%a86~ag86{E?cLo6&4pn@e-wY1l=FF^=2eq@;?OEUuOF<{*ETxG)6^2rXNYvML?$g&0`pX1 zPLS7$zOli&cuGpu4T4kxWEQzx~RZQy)}v0B|y!d!`}HESZ>Hugx( zByVU~zqZqmPvr%m4Wf5JTa~?)%YwSzingf`ePDyw>egz;OuXREEXZF|?7LjQGSJip zz8ME{-3vWbmcG12&;rv;=Zgztji_!q3CO>^roQ{RzH^`w0XA>o)k*Ow?Zyz#y*oQ08X`Zy~T?v)7u)DCwvXNqpI$e|sXfRqqpe$jgk zEg3U5Ip9eT02UX~I3JR9=G&3dU7LfRrHq*e-wsC&)SQNu21an-B6~~&aMW;aPi0%$ zv3_Hdt(@}1)w{Rbxxq6z^bBc{S%r6VY2r@=UmKxk+urx~ZYmTyT|Np>a4c(KK5>t< zJqIKn`uXJ~ujJ{~#kI%NR^qQ{lKia(Bua!~64Meo4bAmA#R`rvIEp96!`RqClz`RaDfRK-ZYFUCp$!2B%B*@4VHxme?>bs z>=1TIYI{keZ9B}v+92k))|tGZ!$~)IDjdtsxouuce2!z^NL&wf(^j8Ci9ShGD4@~y z5y+}q2D%na9Ne(VfXn>aB)s+ma(XA?CbNZ{H48jU@%+i(lTD}$Q+B2Yf5?N%E(?4T zr}>Q)kkm*syQQo4@G724XZ04=b{>BIl&jf3%{(C26 za=4v^60lWTBF9{@)r74nku!DHdM7N-MdV=M^d~t8!Yd!d_5-d+`%Nq3fpR~_PcMp4 zH2Sxvr`zK$r+sR1U8BB}Ro5QsixaVyL@A`|t)Peec(lj;F zod3{rOTiiSSJ+mQ?CEJeWN^e{D&>_=6rBHasnA+c=H0YJc~WtmL;f|XK*Fx1XJO>0zXwPYa}E=6+SQXf-{So%_g($fP2ZNaS!{pF&_-Lb z0VX`9c4Jr{gV4Dl;oykFQtn>h9xfZH4h+4wB75(>;fgww)VPFXgvsctkLb&I#_9Td z?(6vn3@hfz(NkaJCjfPuM zQumdeIKXnn?L_09c2d$=WzCt3O-lZsIF`2=!17tA!hKhRdwc#DTygi_`GD;+Y74W$ zBP}?r#3xU1u1<@uultvTEODW&_kOz%Ho(g0#j4)6v%(bgy_rR$XEu>&i;zD!d>X|ud?kN+UB*<&GF_Zu>VluOES* z^A?jhi^+&z@5U7Uc4)erWqdq0 zS=m)!3uW=aZ|EkNQnQ;tu3skat%%Ye=2WOBB4WcrxK6XiI0&YH?_`*6Axe>05(Rkf;`w#IgDZhfQvkr>)1#C39{Jk \ No newline at end of file diff --git a/docs/images/logos/ai-tools/openhands.png b/docs/images/logos/ai-tools/openhands.png index b75715cb49df638a886f3d594c3235b0d9a51bcb..799c7ee7392f97f50eb6b91a35aa6c74c6ba0ae9 100644 GIT binary patch literal 21247 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%0D=A z!AJWD@1g^QNSTH$=|p_=emHjqtpyA7U;O32mH+;K{%ehvEZZjjNnI z=C?HmtXco!e_59OfByf--?-Z}^@BvxARU%{RJClzeD^ph4neom7k;#xS>Y`J^9g=% zt=wd?qa*W}c5 zzw#wGdcRi6D!gS0NNC{!=EZ~f0Of`GWeSi6;CYu&2t@~}2l^MG&qpR6pa6*}E>2vSbNgT@CN2BdE#3VdGCZ+RX-d=qxAV41J?hNvsUl0-(0e1?gq-=vu(LpR(>>dje z0IqZH=@%R5m>kI6s3;_Ye2!tnCOj&j&JKuYxI2gkBwn5BUc7;<$so1uq&2|xI4U09 z-F~pnL417wvAcVfe?$k$o6lc(SI(R*LOL6RL={>YBv#=8u-nAWz(;M*T zxarp@By+)%Mv_Sc8>~SPhQWcgZu+iU8XcB_z`#0$yo{Agzv&4LydS~ZGz!S!fK%I% zL`Xq+RLo1cGsq+oCO`Y>uK4(T_rl!KyD%w4HmBM-VAl}X+2|+AjBnCf79|q*V;ETP zX72o4Z>`I|c+-X$NhK5w5rK6Gf?{p$<6fu)>rg@hV~}Lmuatxb$fUeD=Oj|{_1yu) z2&~GsCU2D&`1`#O%F65S$CPwc(UCG1S_mQWkV%B@$5vE=1OlWtyzZt?$<(bk^*+WL zh_73U6Ra)O#-)7!cN@dhASkYU^t+y8f$zcRD>tKIB<<3sCOj%~DHF3YNdSluTzC*8 zxFDM*NGg#5fq`8FL`K9HI$aKu0`n4?!>gqdAk{Gn{nJ?+C?4vtB<1>5NW!ElJSrBY z%>4*b`Jx5MTo566+uI=w>=f|%Sg3XxuqCmZD1QA>YH?7|5xN{C9Wp7a`=ZEiBSGm% zDL6XP08$qoAd|?$FIpf#`gaMHAc08f2f}4y;?o2Fck|5j%BHMXT^A4#6aa#vvMM9a z96t!sNn>v#l3zE`&6nOt{9Se!$&;E1L^x z6q)eiY{PL*c=3{Ul1aJ7U6!=2*|x7&bT?W+Cglr#S<*T|d2D|H=Rybp^TJSb%xe|J zMvIy69xqB-CoPX_54?W45JHBLNtvK{S<x6Feg}f-d zhzS{oTo{V+bzGLKIU8K3$hM#w1}6+ooD@#*HXY}L?gk+iRO=i!TQcUyJFpI666}hU>r+R#Hr0Z{ zV|y~;#p#Pq_c$-5*eHY$;*(6Su65H=Zot|~A*IMzU4PpVu1RK4c#KcwhRm+Np9!f8 zb_*T3DmJ)#AS51;qc9^^*SSiJG$nVTkgG1ns$3Nt)#r&LC_MC37iBKxg_#T4jOrqX z(C7%~4-k?fl_1IFsvw!{`#3a3-&-7OQm#Ek-*H7KE`mYf;f6smQeCKRqmWWuR58(I zA%rxYNx3RSWXRjDx=w-ghJK;hw+N|4~~)cX5P5G93NYgcxJb|oQ% zkRecb#6z`1=(jAZT|w6OJ^ecgA5^=DLay4D)%(lBT?Qe9kTIa}NS|!r<4T-t_VH#E j>u;|N9E1=;h#CJGtw=#5rHuX@00000NkvXXu0mjfkaacx literal 1576 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&i985rwk9xAm9q-$HJ|)rp7VqMOEkhC=k|PLfAI3(IynY|<{ONhN$e^evJ(`_ z9GYm$x&4YUJ}2h;D^8KO&o@>b3jef;S?CC#hk&($*kEZd^ym4-4`%Z>(mK596|Y$A*|1jb!`)-0>*swq{Oxmu?L&3j_w0{y z<7l45usDVG=^Ae7p>0(R^HV`7{DU?y?ypM!5b4*sTPL?#{exi5F($fYG`NFkoT1_N z95Q=*X~(mehqbps!Mon@*ehO!{pU{8uORy&&cN{h Z|Cw-&nGKynn}Ia|gQu&X%Q~loCICDd37P-^ diff --git a/docs/images/logos/ai-tools/roocode.png b/docs/images/logos/ai-tools/roocode.png index 1939edf6a53c6066ea715f385032e0f9c257f1cd..ca261069d809d2b04975ce3342e2373d158f253b 100644 GIT binary patch literal 1683 zcmV;E25k9>P)8wQK~#90?VWjhf-nrmQBk~aJm&4@_y39$Eh02P@0LFK{W*2? zU7MIDX%_?tf*=TjAP9mW2!bF8f*=TjAP9mW2!bF8f*=TjAPr_Tn%N$LR)&XGs};{D zw#T83$+7k3GU(eLix#G>Z^qrw_JC9~XcbvZ#f`E*c5NAiYf50kp(kjR&(FHG20kW8 zb2$mjM)dsPkNRPX(=OHb;`g!P{DtS_V-ERb+5~BqTt@j?^Rc!8^8%Y7V3cQ8k>UFT zQ?0{hX3}94n6PIH2R7vGPB@z`hrSmq;Xu0V9|i=}apD#DqAnb`rf-Z4$tWdU2nkGB zY|D*u^?BFcpcrr@7h!=3aalO9&EB&$tEd3C3DUsf!1C)IL*ueC#7vOlNQVR8FOO|V zdm&+hH2H9#pL@+#1TJZUG>7vl{oV823p+ak6__B+?)3h0*yn#dvLSE|4^f^ZM&A^F zXd(5pga)UNyJ>x^YyF_qV%XVGi%36aosBjVtfFU7pkWhCG3IQ{n;>CnNMOHyD7rA? zY2}ZyCz8ZlN9K(2@(b}`eyt3 z2iQlVAIx%!kFR=nbd&xSLPI)#l9n$6*!IT&Su!3o|Zf%rTr!dBA$LkA=cj=ZBWhfz%p&!^JD$T`Q-gORTAngVyp|L zCTJR~nopn8HdqSv!`!lfiG5LXa{x+dfHi{7X3{;654_X%VV4UCqw?l;DPp)(NKa$l z+02q@`;~g~jtY2ntke>H;53qL)Uewd$MS#f3-leUe5Kwh6QadwByEdIo($@H63H!# z0^chmlYq}^r;p4=&STM9cAtLLu*=_gm{OHi~@Z{pip$tVBTwjrzVsk9d}rSQno zW-Yx^ccME5X@y7D&Q7Ts_*G6{5Qs;R9G$D;8|NA;XF>F9`ONhc!IgSZak43FZ+nBs zeHn92CZE0pfu6-b4JWr|lc?X__U428BHmw115}~@qli;q$G~Bca5$Sqn{InF|9RZk zyVUFV1W$~GG0*&2=}&*o@hXbMPsB~@g%Oy&v|}(UY^c86fvhU{y_hpFDb&{3WC9k2 zrrMeHz>+anQQou%gF+V$_DaB@u;I7Y)Nh8R3V#kzuh8a^R~6K56BRXz*rQgV?Ey+t zr?A1n454O=DBD8e05uBjULK%?YK7|id(Bg=P&TFJ0+k9a9jjMMv)B!4;rFF+;R97T^(}S-vWuR@Zoq#Q@+Bors+qnx6eM~V zyHTNycd;8?IQ1@eqY9_~#covL)W6uRm|gU4EBvI_$@q=^^QH)bAP9mW2!bF8f*=Tj dAP9n#@(z literal 1517 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&i985rwk9xKJ4gX)vn5p0J|6TQWCI;;e*$E0|4ox>0Ig{8` zMmdy*!SPL=@2{ud)bXpfdA~dShi}~7`5T^H-T9`0Wh1lD5k3zAYX!&Q$;mU`T+QBa zdL(#tSjS^u>g0Rt&u@x6Z8PutUF{2xy8r)o YyC=T4wZHKpuo!3XboFyt=akR{0OzXd&;S4c From 275ab65a6fe7cd58c088b168f34631e9df13794d Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:22:54 +0200 Subject: [PATCH 17/46] docs: keep anthropic logo color unchanged in dark mode Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/custom.css b/docs/custom.css index e41c1a6..b7eb48f 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -588,8 +588,6 @@ html[data-theme="dark"] img[src*="/logos/secure-logo-only.svg"], } /* AI Tools logos — invert black SVGs in dark mode */ -html[class*="dark"] img[src*="/ai-tools/anthropic.svg"], -html[data-theme="dark"] img[src*="/ai-tools/anthropic.svg"], html[class*="dark"] img[src*="/ai-tools/cursor.svg"], html[data-theme="dark"] img[src*="/ai-tools/cursor.svg"], html[class*="dark"] img[src*="/ai-tools/githubcopilot.svg"], From ea2d6850e6ea2b6608ad6da834d762a7f0b00ed5 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:23:48 +0200 Subject: [PATCH 18/46] docs: replace anthropic logo with wand icon on qovery-onboard skill card Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/agent-skills.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index 1835900..9762371 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -21,7 +21,7 @@ curl -fsSL https://skill.qovery.com/install.sh | bash ## The Eight Skills - + **Your personal cloud architect** Asks about your role, experience, cloud provider, and constraints — then recommends the optimal cluster configuration, security settings, and deployment method. From 4079a3cd9f6bdbe95c161c306bf1dc102ac238d1 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Wed, 6 May 2026 21:32:18 +0200 Subject: [PATCH 19/46] docs: terminal prompts, nav restructure, move workflow to agent-skills MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docs.json : crée un groupe "Deploy with AI" dédié (ai-agent + agent-skills) séparé du groupe "Installation" (docker-desktop, cloud, clusters, byok) - custom.css : ajoute composant .terminal-window avec barre de titre, dots rouge/jaune/vert, corps monospace, classes .terminal-prompt / .terminal-success / .terminal-sep / .terminal-cursor avec animation blink - ai-agent.mdx : remplace les blocs de code plats par un vrai terminal animé montrant les prompts + réponses du skill ; ajoute une card lien vers agent-skills juste après ; supprime "What the Skill Does" (déplacé) - agent-skills.mdx : ajoute section "How Deployment Works" avec les 5 Steps (déplacées depuis ai-agent) ; ajoute un prompt terminal dans chaque skill card pour montrer comment le déclencher Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 97 +++++++++++++++++++ docs/docs.json | 9 +- .../quickstart/agent-skills.mdx | 62 +++++++++++- docs/getting-started/quickstart/ai-agent.mdx | 77 ++++++--------- 4 files changed, 194 insertions(+), 51 deletions(-) diff --git a/docs/custom.css b/docs/custom.css index b7eb48f..4ff12a5 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -601,6 +601,103 @@ html[data-theme="dark"] img[src*="/ai-tools/goose.png"] { filter: brightness(0) invert(1); } +/* Terminal window component */ +.terminal-window { + background: #0d1117; + border-radius: 10px; + overflow: hidden; + margin: 16px 0 24px; + box-shadow: 0 4px 24px rgba(0, 0, 0, 0.25); +} + +.terminal-bar { + background: #161b22; + padding: 10px 16px; + display: flex; + align-items: center; + border-bottom: 1px solid #21262d; +} + +.terminal-dots { + display: flex; + gap: 6px; + margin-right: 12px; +} + +.terminal-dot { + width: 12px; + height: 12px; + border-radius: 50%; + flex-shrink: 0; +} + +.terminal-dot-red { background: #ff5f57; } +.terminal-dot-yellow { background: #febc2e; } +.terminal-dot-green { background: #28c840; } + +.terminal-title-bar { + flex: 1; + text-align: center; + color: #6e7681; + font-size: 12px; + font-family: 'Roboto Mono', monospace; + margin-right: 54px; /* équilibre les dots */ +} + +.terminal-body { + padding: 20px 24px; + font-family: 'Roboto Mono', monospace; + font-size: 13px; + line-height: 1.8; + color: #e6edf3; +} + +.terminal-prompt { + display: block; + margin: 4px 0; +} + +.terminal-prompt::before { + content: '$ '; + color: #642DFF; + font-weight: 700; +} + +.terminal-output { + display: block; + color: #8b949e; + padding-left: 14px; + margin: 2px 0; +} + +.terminal-success { + display: block; + color: #3fb950; + padding-left: 14px; + margin: 2px 0; +} + +.terminal-sep { + border: none; + border-top: 1px solid #21262d; + margin: 14px 0; +} + +@keyframes blink-cursor { + 0%, 50% { opacity: 1; } + 51%, 100% { opacity: 0; } +} + +.terminal-cursor { + display: inline-block; + width: 7px; + height: 13px; + background: #e6edf3; + animation: blink-cursor 1s step-end infinite; + vertical-align: text-bottom; + margin-left: 2px; +} + /* AI Section Highlight — fond dégradé violet pour mettre en avant les use cases IA */ .ai-section { background: linear-gradient(135deg, rgba(100, 45, 255, 0.09) 0%, rgba(100, 45, 255, 0.03) 100%); diff --git a/docs/docs.json b/docs/docs.json index bd82834..c5da57b 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -60,13 +60,18 @@ "getting-started/quickstart", "getting-started/how-it-works", "getting-started/basic-concepts", + { + "group": "Deploy with AI", + "pages": [ + "getting-started/quickstart/ai-agent", + "getting-started/quickstart/agent-skills" + ] + }, { "group": "Installation", "pages": [ "getting-started/quickstart/docker-desktop", "getting-started/quickstart/cloud", - "getting-started/quickstart/ai-agent", - "getting-started/quickstart/agent-skills", { "group": "Managed Cluster", "pages": [ diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index 9762371..94d581b 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -18,6 +18,34 @@ curl -fsSL https://skill.qovery.com/install.sh | bash --- +## How Deployment Works + +When you ask your agent to deploy, `qovery-deploy` runs through a complete workflow autonomously: + + + + Reads your project structure, detects language, framework, open ports, database dependencies, and existing environment variables. No manual input needed. + + + + Generates a production-ready multi-stage Dockerfile for your stack — Node.js, Next.js, React/Vite, Python, Go, Java, Ruby, PHP, .NET. Custom Dockerfile for any other framework. + + + + Dev or production? Which database engine? CLI+API path or Terraform? A few targeted questions — no YAML, no config files to write manually. + + + + Creates a cluster on AWS, GCP, Azure, or Scaleway if none exists. Provisions databases in container mode (dev) or managed mode like AWS RDS (production). Sets up environment variables with aliases, interpolation, and overrides. + + + + Monitors the rollout and **auto-fixes failures** — build errors, port mismatches, health check timeouts, missing env vars, OOM restarts. Fixes Qovery configuration automatically; asks before touching your code. + + + +--- + ## The Eight Skills @@ -32,6 +60,10 @@ curl -fsSL https://skill.qovery.com/install.sh | bash - Hands off to `qovery-deploy` once infrastructure is ready `Setup` `Onboarding` + + ``` + > Set up Qovery for my project + ``` @@ -45,12 +77,16 @@ curl -fsSL https://skill.qovery.com/install.sh | bash - Watches deployment and auto-fixes build errors, port mismatches, OOM `Deployment` `Core` + + ``` + > Deploy my application with Qovery + ``` **Systematic diagnosis for deployment failures** - Runs an 8-layer diagnostic sequence and matches against 20+ error patterns — covering build failures, crashes, connectivity issues, health check timeouts, and performance problems. + Runs an 8-layer diagnostic sequence and matches against 20+ error patterns — build failures, crashes, connectivity issues, health check timeouts. - 8-layer diagnostic: build → image → config → startup → health → network → scaling → logs - 20+ error pattern library with known fixes @@ -58,6 +94,10 @@ curl -fsSL https://skill.qovery.com/install.sh | bash - Outputs a structured incident report with remediation steps `Debug` `Operations` + + ``` + > Troubleshoot my failing deployment + ``` @@ -71,6 +111,10 @@ curl -fsSL https://skill.qovery.com/install.sh | bash - CSV export for stakeholder reporting `Cost` `Operations` + + ``` + > Optimize my Qovery infrastructure costs + ``` @@ -84,6 +128,10 @@ curl -fsSL https://skill.qovery.com/install.sh | bash - Startup time and health check threshold tuning `Performance` `Deployment` + + ``` + > My deployments are slow, find the bottleneck + ``` @@ -97,6 +145,10 @@ curl -fsSL https://skill.qovery.com/install.sh | bash - Works with GitHub, GitLab, and Bitbucket `Preview` `GitOps` + + ``` + > Set up preview environments for my pull requests + ``` @@ -110,6 +162,10 @@ curl -fsSL https://skill.qovery.com/install.sh | bash - Works in VS Code + Copilot, Claude Code, and OpenCode `Self-service` `Teams` + + ``` + > Create a builder environment for my team + ``` @@ -123,6 +179,10 @@ curl -fsSL https://skill.qovery.com/install.sh | bash - Visual dashboard — no CLI, no console access needed `Portal` `Teams` + + ``` + > Generate a self-service portal for my team + ``` diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 316d071..69b0b52 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -145,57 +145,38 @@ Any other tool that discovers skills from `.claude/skills/`, `.config/opencode/s --- -## What the Skill Does - -When you ask your agent to deploy, it runs through a complete deployment workflow autonomously: - - - - Reads your project structure, detects language, framework, open ports, database dependencies, and existing environment variables. No manual input needed. - - - - Generates a production-ready multi-stage Dockerfile for your stack. Templates available for Node.js, Next.js, React/Vite, Python, Go, Java, Ruby, PHP, and .NET. Custom Dockerfile generated for any other framework. - - - - Dev or production? Which database engine? CLI+API path or Terraform? A few targeted questions — no YAML, no config files to write. - - - - Creates a cluster on AWS, GCP, Azure, or Scaleway if none exists. Provisions databases in container mode (dev/test) or managed mode like AWS RDS (production). Sets up environment variables with aliases, interpolation, and overrides — no duplication. - - - - Deploys via CLI+API (quick path) or Terraform provider (production). Monitors the rollout and **auto-fixes failures** — build errors, port mismatches, health check timeouts, missing env vars, OOM restarts. Fixes Qovery configuration automatically; asks before touching your code. - - - ---- - ## Try These Prompts -Open your AI coding tool after installing the skill and try: - -``` -Deploy my application with Qovery -``` - -``` -Set up Qovery for my project and deploy to staging -``` - -``` -Deploy this to Kubernetes with a PostgreSQL database -``` - -``` -Create a Qovery Terraform configuration for my app -``` +Open your AI coding tool and try any of these: + +

+
+
+
+
+
+
+
claude — qovery-deploy
+
+
+ Deploy my application with Qovery + ✓ Node.js detected — generating Dockerfile + ✓ PostgreSQL provisioned (container mode) + ✓ Deployed to staging — https://my-app.preview.qovery.io +
+ Set up preview environments for my pull requests +
+ Deploy this to Kubernetes with a PostgreSQL database +
+ Optimize my Qovery infrastructure costs +
+ Troubleshoot my failing deployment +
+
-``` -Set up preview environments for my pull requests -``` + + `qovery-deploy` · `qovery-preview` · `qovery-optimize` · `qovery-troubleshoot` · and 4 more → + --- From 316c522ac8a2f407d6c6c67588bc99f69ef22fe9 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 13:53:49 +0200 Subject: [PATCH 20/46] docs: drastically cut card content per CEO feedback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed bullet lists, "Perfect for" blocks, and verbose descriptions. Each card now has 1-2 lines max — sharper, less AI-generated feel. Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/introduction.mdx | 118 ++----- docs/getting-started/quickstart.mdx | 296 ++---------------- .../quickstart/agent-skills.mdx | 145 ++------- docs/getting-started/quickstart/ai-agent.mdx | 152 +++------ 4 files changed, 122 insertions(+), 589 deletions(-) diff --git a/docs/getting-started/introduction.mdx b/docs/getting-started/introduction.mdx index 0fef876..fb3e0f1 100644 --- a/docs/getting-started/introduction.mdx +++ b/docs/getting-started/introduction.mdx @@ -1,150 +1,88 @@ --- title: "Introduction" -description: "Qovery — The Kubernetes control plane for humans and AI agents. Deploy apps without DevOps expertise." +description: "The Kubernetes control plane for humans and AI agents — on your own cloud." mode: "wide" --- ## Welcome to Qovery -Qovery is **the Kubernetes control plane for humans and AI agents** — running on your own cloud infrastructure. +Qovery is the **Kubernetes control plane for humans and AI agents** — running on your own AWS, GCP, Azure, or Scaleway. -Whether you're a developer describing what you want to deploy in plain English, a platform team standardising operations at scale, or an AI agent autonomously provisioning environments, Qovery is the single control plane that makes it happen. - - - - Let Claude Code, Cursor, or any AI agent deploy your app end-to-end — Dockerfile, database, env vars, and all - - - Runs on your own AWS, GCP, Azure, or Scaleway — you maintain full control and direct billing - - - Developers and non-developers ship to production without waiting for DevOps. Platform teams keep governance. - - - Console, CLI, Terraform, API, and AI agents — all driving the same control plane - - +Describe what you want to deploy. An AI agent handles the rest. Or use the console, CLI, Terraform, or API. Everything drives the same control plane. --- -## Two Ways to Work with Qovery +## Two Ways to Work
-### The New Way — Deploy with AI - -Non-developers and AI-first teams can deploy production-grade apps without ever touching Kubernetes configuration. +### Deploy with AI — the new way - **From prompt to production in minutes** - - Install the Qovery Agent Skill in Claude Code, Cursor, OpenCode, or any compatible AI tool. Describe what you want — the agent analyzes your codebase, creates a Dockerfile, provisions databases, sets env vars, and deploys automatically. - - → **Install the Qovery Skill** + Tell your AI agent to deploy. It analyzes your code, writes the Dockerfile, provisions the database, and ships to Kubernetes. - - **Isolated environments for humans and AI agents** - - Each developer and each AI agent gets their own ephemeral environment. Spin up, experiment, tear down — no shared state, no conflicts, no infrastructure knowledge required. - - → **Explore Dev Environments** + Every developer and AI agent gets their own isolated environment. Spin up, experiment, tear down. - - - **Manage existing infrastructure with natural language** - - Once deployed, use the Qovery MCP Server or Console Copilot to monitor, troubleshoot, scale, and operate your infrastructure — all through conversation. - - → **Explore the Copilot** + + Manage deployed infrastructure through conversation — monitor, troubleshoot, scale.
-### The Platform Way — Full Control - -For platform engineers, DevOps teams, and power users who want direct control over every configuration. +### The platform — full control - - Visual UI for full platform management - - - Command-line for developers and automation - - - Infrastructure as Code, version-controlled - - - Programmatic control for integrations - + Visual UI + Command-line + Infrastructure as Code + Programmatic access --- -## What You Can Do With Qovery +## What Qovery Covers -A single platform covering the full lifecycle of your cloud applications — from cluster provisioning to deployment, observability, cost optimization, and security. - - + - **Managed Kubernetes on any cloud** - - AWS EKS, GKE, AKS, Scaleway Kapsule — production-ready in 30 minutes. Or connect your existing cluster (BYOK). Includes managed databases, Terraform modules, and networking. + Managed Kubernetes on AWS, GCP, Azure, Scaleway. Ready in 30 min. BYOK supported. - - **Any app, any language, any workflow** - - GitOps-based deployment for containers, Helm charts, background jobs, and cron jobs. Preview environments per PR. Zero-downtime rollouts. AI agent deployment supported natively. + Any language, any framework. GitOps, preview environments, zero-downtime rollouts. - - **Built-in observability, no setup required** - - Real-time logs, CPU/memory metrics, Kubernetes events, and full deployment history — all correlated in one view. Integrates with Datadog, Prometheus, and Grafana. + Real-time logs, metrics, Kubernetes events. No setup required. - - **Save up to 60% on infrastructure costs** - - Karpenter intelligent provisioning, spot instances for non-production, sleep mode for dev/staging, and right-sizing recommendations. + Spot instances, sleep mode, right-sizing. Up to 60% cost savings. - - **Enterprise compliance out of the box** - - SOC2, GDPR, HIPAA, DORA, HDS. Secrets management, RBAC, SSO, network isolation, automatic SSL/TLS, and full audit logs. + SOC2, GDPR, HIPAA, DORA. RBAC, SSO, secrets management, audit logs. - - **Automated cluster maintenance** - - Qovery handles Kubernetes version upgrades, node patching, and security updates — no manual intervention required. + Automated version upgrades and node patching. No manual intervention. - -*BYOK = Bring Your Own Kubernetes — connect your existing Kubernetes cluster to Qovery - +BYOK = Bring Your Own Kubernetes — connect your existing cluster to Qovery --- -## What's Next? +## Get Started - From code to deployed in ~10 minutes — no Kubernetes required + From code to deployed in ~10 minutes - - Browse every deployment path and choose your fit + + Choose your deployment path Understand the architecture - Learn essential terminology + Essential terminology diff --git a/docs/getting-started/quickstart.mdx b/docs/getting-started/quickstart.mdx index 359b5f3..3c33b88 100644 --- a/docs/getting-started/quickstart.mdx +++ b/docs/getting-started/quickstart.mdx @@ -1,316 +1,68 @@ --- title: "Get Started with Qovery" -description: "Deploy your first app in minutes — with an AI agent, or through the console. No Kubernetes expertise required." +description: "Choose your deployment path." mode: "wide" --- - -**New to Qovery?** Choose your path below. The AI Agent path is the fastest way to get from code to a running deployment — no Kubernetes knowledge needed. - - ---- - -
- -## The AI-First Path — Fastest Way to Deploy - - - **Use Claude Code, Cursor, OpenCode, or any AI coding agent** - - Install one command. Ask your agent to deploy. It does everything: - - Analyzes your codebase and detects the language/framework - - Creates a production-ready Dockerfile if one is missing - - Provisions databases (container for dev, managed RDS/Cloud SQL for production) - - Sets up environment variables, health checks, and deployment stages - - Deploys to Kubernetes and watches for failures — auto-fixing where it can - - **Perfect for:** developers who prefer AI-first workflows, non-technical builders, rapid prototyping, or anyone who doesn't want to learn Kubernetes - - **Time:** ~10 minutes | **Tools:** Claude Code, Cursor, OpenCode, VS Code Copilot, Gemini CLI, 30+ more | **Kubernetes knowledge:** none required - - → **Install the Qovery Agent Skill** - - -
- ---- - -## All Deployment Paths - -### AI-Powered Paths +## AI-Powered Paths
- **Fastest path from code to production** - - Perfect for: - - **AI-first workflows** — describe what you want, the agent does the rest - - **Non-developers** who want to ship without Kubernetes knowledge - - **Rapid prototyping** — from source code to deployed in minutes - - **Any language or framework** — the agent creates Dockerfiles for you - - What the agent handles: - - Codebase analysis, Dockerfile generation, database provisioning - - Environment variables, health checks, deployment stages - - Deployment via CLI + API or Terraform, failure auto-fix + Tell your agent to deploy. It handles Dockerfile, database, env vars, and Kubernetes — automatically. - **Time:** ~10 minutes | **Cost:** Cloud infra only - - → **Install the Qovery Skill** + **~10 min** · Claude Code, Cursor, OpenCode, 30+ tools - - **Isolated environments for humans and AI agents** - - Perfect for: - - **Teams** where each developer or agent needs their own environment - - **Vibe coding** — let an AI agent spin up, test, and tear down environments - - **No shared state** — every environment is independent and disposable - - **Reproducible dev setups** on cloud infrastructure - - What you get: - - An ephemeral, full-stack environment per user or agent - - No conflicts, no "works on my machine" - - Instant clone from a reference environment - - **Time:** ~10 minutes | **Cost:** Pay only while active + Each developer or AI agent gets their own isolated environment. Clone, use, destroy. - → **Set Up Dev Environments** + **~10 min** · Pay only while active
-### Platform Paths +## Platform Paths - - **A live environment for every pull request** + + A full-stack environment auto-created for every pull request. Deleted on merge. - Perfect for: - - **Preview environments** auto-created on every PR - - **QA testing** with fully isolated stacks - - **Stakeholder demos** without touching production - - **Feature sign-off** before merging - - Your journey: - 1. Create a managed cluster (AWS/GCP/Azure/Scaleway) — ~30 min - 2. Follow the ephemeral environment guide - 3. Open a PR → environment auto-created with unique URL - - **Time:** ~45 minutes setup | **Per PR:** Automatic - - → **Complete Guide Available** + **~45 min setup** · Automatic per PR - - **Deploy scalable applications to production** + Deploy scalable applications with auto-scaling, managed databases, and zero-downtime rollouts. - Perfect for: - - **SaaS platforms** with multi-tenant architecture - - **Web applications** needing auto-scaling - - **API services** (REST, GraphQL, gRPC) - - **Microservices** architectures - - Your journey: - 1. Create a managed cluster (AWS/GCP/Azure/Scaleway) — ~30 min - 2. Follow the complete production setup guide - 3. Deploy with auto-scaling, monitoring, and zero-downtime - - **Time:** ~45 minutes total | **Expertise:** None required - - → **Complete Guide Available** + **~45 min** · AWS, GCP, Azure, Scaleway - - **Explore Qovery without cloud costs** + Free local k3s cluster on your laptop. Full Qovery features, no cloud account needed. - Perfect for: - - **First-time users** exploring the platform - - **Local development** and testing - - **Learning** Qovery features risk-free - - **Proof of concepts** before production - - What you get: - - Free local k3s cluster on your laptop - - Full Qovery feature access - - No cloud account or credit card needed - - **Time:** ~15 minutes | **Cost:** Free - - → **Path: Docker Desktop** + **~15 min** · Free + + Connect an existing Kubernetes cluster. Full compliance, custom networking, BYOK. - - **Full control over infrastructure** - - Perfect for: - - **Existing Kubernetes clusters** to connect - - **Compliance requirements** (HIPAA, PCI-DSS, custom) - - **On-premise or hybrid** infrastructure - - **Custom networking** and security configs - - Your journey: - 1. Prepare your existing Kubernetes cluster (or create one) - 2. Follow the BYOK integration guide - 3. Connect Qovery with full control retained - - **Time:** ~20 minutes | **Control:** Complete - - → **Bring Your Own Cluster (BYOK)** + **~20 min** · Complete control --- -## How Qovery Fits Into Your Workflow - -Qovery is the **single control plane** that connects all your interfaces — AI agents, console, CLI, Terraform, and API — to the same underlying Kubernetes infrastructure running on your cloud. +## Every Interface, One Control Plane - Deploy from Claude Code, Cursor, or any AI tool + Deploy from your AI tool - - Manage infrastructure via natural language + + Manage via natural language - Visual UI for full platform control + Visual UI - - Command-line, IaC, and programmatic access + + Code & automation - ---- - -## Detailed Use Case Comparison - - - - **Use Case: Deploy from Your AI Coding Tool** - - **Best for:** - - Developers and non-developers who prefer natural language over configuration files - - AI-first workflows where agents do the heavy lifting - - Rapidly deploying from existing codebases - - Anyone who wants to skip Kubernetes entirely - - **What the AI agent does for you:** - - Detects language, framework, ports, and database requirements from your code - - Generates a production-ready Dockerfile if one is missing (12+ frameworks) - - Asks: dev or production? Which database? CLI+API or Terraform? - - Provisions a cluster if needed (AWS, GCP, Azure, Scaleway) - - Deploys the app and watches for failures — auto-fixing build errors, health check issues, port mismatches - - **Compatible tools:** Claude Code, Cursor, OpenCode, VS Code Copilot, Gemini CLI, Roo Code, Goose, Amp, Kiro, and 30+ more - - **Path:** Install the Qovery Skill | **Time:** ~10 min | **Cost:** Cloud infra only - - - - **Use Case: Ephemeral Environments per Developer or Agent** - - **Best for:** - - Teams where developers need isolated, reproducible environments - - AI coding workflows where each agent needs its own sandbox - - Avoiding shared state and "works on my machine" issues - - Vibe coding — spin up, experiment, destroy, repeat - - **How it works:** - - Clone a reference environment in seconds - - Each environment is fully isolated — own database, own services, own config - - AI agents can autonomously create and destroy environments - - Pay only for what's active; sleep mode cuts costs during off-hours - - **Path:** Install the Qovery Skill | **Time:** ~10 min | **Cost:** Pay while active - - - - **Use Case: Temporary Environments for Testing & Review** - - **Best for:** - - Preview environments for every pull request - - QA teams testing features in isolation - - Product managers reviewing features before release - - Stakeholder demos without affecting production - - **How it works after setup:** - 1. Open pull request in GitHub/GitLab - 2. Qovery auto-creates preview environment - 3. Get unique URL (e.g., `pr-123.preview.example.com`) - 4. Test, review, and iterate - 5. Merge PR → environment auto-deleted - - [→ View Complete Ephemeral Environment Guide](/guides/use-cases/ephemeral-environment) - - - - **Use Case: SaaS, Web Apps, APIs, Microservices** - - **Best for:** - - SaaS platforms with paying customers - - High-traffic web applications - - RESTful/GraphQL/gRPC APIs - - Microservices architectures - - **Complete Journey:** - - **Step 1: Create Your Cluster (Prerequisite)** - - Choose your cloud provider (AWS/GCP/Azure/Scaleway) - - Qovery provisions managed Kubernetes for you - - Multi-AZ for high availability - - Time: ~30 minutes - - **Step 2: Follow the Production Guide** - - Deploy Node.js, Python, Go, Java, PHP, Ruby, .NET apps - - Set up auto-scaling based on traffic - - Configure managed databases with automatic backups - - Add custom domains with automatic SSL - - Enable zero-downtime deployments - - [→ View Complete Production Guide](/guides/use-cases/production-environment-management) - - - - **Use Case: Local Development & Exploration** - - **Best for:** - - Developers new to Qovery wanting to explore features - - Teams evaluating Qovery for adoption - - Building POCs before cloud deployment - - **What you can do:** - - Deploy apps, databases, and jobs locally - - Test GitOps workflows with GitHub/GitLab - - Practice Qovery CLI and Console - - Learn Kubernetes concepts without cloud costs - - **Path:** Docker Desktop | **Time:** 15 min | **Cost:** Free - - - - **Use Case: Existing Clusters, Compliance, On-Premise** - - **Best for:** - - Organizations with existing Kubernetes clusters - - Regulated industries (Healthcare, Finance, Government) - - Companies with strict compliance (HIPAA, PCI-DSS, SOC2) - - On-premise or hybrid cloud architectures - - **You manage:** - - Kubernetes cluster provisioning and upgrades - - Infrastructure security and networking - - Backup and disaster recovery - - **Qovery provides:** - - Developer-friendly UI and CLI - - GitOps workflows and CI/CD - - Environment management and AI-driven operations - - Application deployment and monitoring - - [→ View BYOK Integration Guide](/installation/kubernetes) - - diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index 94d581b..5b7ecf1 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -1,18 +1,18 @@ --- title: "Qovery Agent Skills" -description: "Eight skills that give your AI coding agent the ability to deploy, troubleshoot, optimize, and manage Kubernetes infrastructure." +description: "Eight skills that give your AI agent the ability to deploy, troubleshoot, optimize, and manage Kubernetes infrastructure." mode: "wide" ---
-The Qovery Agent Skills extend any compatible AI tool with Kubernetes superpowers. Install once, and your agent picks the right skill automatically based on what you ask. +Eight skills. One install. Your agent picks the right one automatically. ```bash curl -fsSL https://skill.qovery.com/install.sh | bash ``` -→ [Setup guide and compatible tools](/getting-started/quickstart/ai-agent) +→ [Compatible tools and setup guide](/getting-started/quickstart/ai-agent)
@@ -20,27 +20,23 @@ curl -fsSL https://skill.qovery.com/install.sh | bash ## How Deployment Works -When you ask your agent to deploy, `qovery-deploy` runs through a complete workflow autonomously: +When you ask your agent to deploy, `qovery-deploy` runs through this workflow autonomously: - Reads your project structure, detects language, framework, open ports, database dependencies, and existing environment variables. No manual input needed. + Detects language, framework, ports, database needs, and environment variables. - - Generates a production-ready multi-stage Dockerfile for your stack — Node.js, Next.js, React/Vite, Python, Go, Java, Ruby, PHP, .NET. Custom Dockerfile for any other framework. + Production-ready multi-stage template for your stack. Custom-generated for any other framework. - - Dev or production? Which database engine? CLI+API path or Terraform? A few targeted questions — no YAML, no config files to write manually. + Dev or production? Which database? CLI+API or Terraform? A few questions — no YAML to write. - - Creates a cluster on AWS, GCP, Azure, or Scaleway if none exists. Provisions databases in container mode (dev) or managed mode like AWS RDS (production). Sets up environment variables with aliases, interpolation, and overrides. + Cluster if needed, databases in container or managed mode, env vars with aliases and overrides. - - Monitors the rollout and **auto-fixes failures** — build errors, port mismatches, health check timeouts, missing env vars, OOM restarts. Fixes Qovery configuration automatically; asks before touching your code. + Monitors the rollout. Auto-fixes build errors, port mismatches, health check failures. Asks before touching your code. @@ -50,16 +46,7 @@ When you ask your agent to deploy, `qovery-deploy` runs through a complete workf - **Your personal cloud architect** - - Asks about your role, experience, cloud provider, and constraints — then recommends the optimal cluster configuration, security settings, and deployment method. - - - Evaluates your team's profile and recommends the right path - - Guides through cloud account setup (AWS, GCP, Azure, Scaleway) - - Configures cluster, org, and access controls step by step - - Hands off to `qovery-deploy` once infrastructure is ready - - `Setup` `Onboarding` + Guided setup — evaluates your stack, recommends the right cluster config, and walks you through onboarding step by step. ``` > Set up Qovery for my project @@ -67,16 +54,7 @@ When you ask your agent to deploy, `qovery-deploy` runs through a complete workf - **From source code to running app** - - Analyzes your codebase, generates a production Dockerfile if missing, provisions databases, configures environment variables, and deploys to Kubernetes. - - - Framework detection: Node.js, Next.js, React, Python, Go, Java, Ruby, PHP, .NET - - Dev vs production mode: container DB or managed RDS/Cloud SQL - - Environment variables with aliases, interpolation, and overrides - - Watches deployment and auto-fixes build errors, port mismatches, OOM - - `Deployment` `Core` + From source code to running app — Dockerfile, database, env vars, deployment, and auto-fix on failure. ``` > Deploy my application with Qovery @@ -84,16 +62,7 @@ When you ask your agent to deploy, `qovery-deploy` runs through a complete workf - **Systematic diagnosis for deployment failures** - - Runs an 8-layer diagnostic sequence and matches against 20+ error patterns — build failures, crashes, connectivity issues, health check timeouts. - - - 8-layer diagnostic: build → image → config → startup → health → network → scaling → logs - - 20+ error pattern library with known fixes - - Distinguishes code issues (your fix) from infra issues (auto-fixed) - - Outputs a structured incident report with remediation steps - - `Debug` `Operations` + 8-layer diagnostic against 20+ error patterns. Outputs a structured report with fixes. ``` > Troubleshoot my failing deployment @@ -101,16 +70,7 @@ When you ask your agent to deploy, `qovery-deploy` runs through a complete workf - **Cut your cloud bill with data-driven analysis** - - Analyzes resource consumption across 7 dimensions and generates a detailed cost report with specific savings recommendations — exportable as CSV. - - - 7-dimension analysis: right-sizing, autoscaling, DB modes, scheduling, cluster, builds, external - - Identifies over-provisioned services and recommends target sizes - - Spot instance and sleep mode opportunities for non-production - - CSV export for stakeholder reporting - - `Cost` `Operations` + Analyzes costs across 7 dimensions. Recommends right-sizing, spot instances, sleep mode. CSV export. ``` > Optimize my Qovery infrastructure costs @@ -118,16 +78,7 @@ When you ask your agent to deploy, `qovery-deploy` runs through a complete workf - **Find and fix slow deployments** - - Measures your full deployment pipeline timeline, identifies bottlenecks, and classifies responsibility — user code vs infrastructure — with concrete fixes. - - - End-to-end pipeline timing: build → push → schedule → start → health check - - Dockerfile layer optimization (cache ordering, multi-stage builds) - - Build cache configuration for faster CI - - Startup time and health check threshold tuning - - `Performance` `Deployment` + Measures full pipeline timing, finds bottlenecks, fixes Dockerfile layers and build cache. ``` > My deployments are slow, find the bottleneck @@ -135,16 +86,7 @@ When you ask your agent to deploy, `qovery-deploy` runs through a complete workf - **Preview environments for every pull request** - - Detects or creates a blueprint environment, then clones it for each PR with a unique URL — including databases and dependent services. - - - Auto-create a full-stack preview (app + DB) for each PR - - Unique URL per environment (e.g. `pr-123.preview.example.com`) - - Auto-shutdown after merge or configurable TTL - - Works with GitHub, GitLab, and Bitbucket - - `Preview` `GitOps` + Full-stack preview environment per PR — app, database, unique URL. Auto-deleted on merge. ``` > Set up preview environments for my pull requests @@ -152,16 +94,7 @@ When you ask your agent to deploy, `qovery-deploy` runs through a complete workf - **Self-service environments for non-technical teams** - - Lets product managers, designers, and junior developers spin up their own full environments — with RBAC so they can't break production. - - - Non-developers get their own isolated environment via AI agent - - RBAC controls: builders deploy apps, can't touch cluster config - - Clones from a reference environment with safe defaults - - Works in VS Code + Copilot, Claude Code, and OpenCode - - `Self-service` `Teams` + Self-service environments for non-technical teams — with RBAC so they can't touch production. ``` > Create a builder environment for my team @@ -169,16 +102,7 @@ When you ask your agent to deploy, `qovery-deploy` runs through a complete workf - **A web portal for environment provisioning** - - Generates and deploys a Vite + React + Express web portal — SSO login, one-click environment creation, and a visual dashboard for your team. - - - AI agent generates and deploys the portal for you - - SSO login for your team - - One-click environment creation and deletion - - Visual dashboard — no CLI, no console access needed - - `Portal` `Teams` + Generates and deploys a web portal — SSO login, one-click environments, no CLI needed. ``` > Generate a self-service portal for my team @@ -192,37 +116,22 @@ When you ask your agent to deploy, `qovery-deploy` runs through a complete workf - Skills deploy to **your own AWS, GCP, Azure, or Scaleway** account. No shared infrastructure, no data leaving your environment. Direct cloud billing. + Deploys to your own AWS, GCP, Azure, or Scaleway. Direct billing, no shared infra. - - Every action taken by an AI agent is logged in Qovery's audit log — what changed, when, and by which agent. Compliance-ready from day one. + Every agent action logged — what changed, when, by which agent. - - Agents respect your Qovery permission model. A builder agent can deploy apps but can't touch cluster configuration. Governance without friction. + Agents respect your permission model. Builders deploy, can't touch cluster config. - - Environments spin up and tear down in minutes. Agents don't leave orphan resources — sleep mode and TTL policies handle cleanup automatically. + Environments up and down in minutes. Sleep mode and TTL handle cleanup. - - - Sleep mode, spot instances, and right-sizing are built into the skills. Agents don't over-provision — they follow the same cost guardrails as your platform team. - - - - `qovery-deploy` and `qovery-troubleshoot` watch deployments and auto-fix common failures — no waiting for a human to intervene. + + Auto-fixes common failures. No waiting for a human. - - All skills are MIT-licensed. Fork them, customize them, add your own. The skills are just files — readable and auditable by your team. - - [→ github.com/Qovery/qovery-skills](https://github.com/Qovery/qovery-skills) - - - - One command installs all 8 skills across every compatible tool on your machine. No per-tool configuration, no manual file management. + MIT-licensed. Fork, customize, extend. [github.com/Qovery/qovery-skills](https://github.com/Qovery/qovery-skills) @@ -230,9 +139,9 @@ When you ask your agent to deploy, `qovery-deploy` runs through a complete workf - Install the skill and deploy your first app + Install and deploy your first app - - View, contribute, or fork on GitHub + + View or fork on GitHub diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 69b0b52..b3d0431 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -1,22 +1,24 @@ --- title: "Deploy with AI Agent" -description: "Use Claude Code, Cursor, OpenCode, or any AI coding agent to deploy your application on Qovery with a single prompt." +description: "Tell your AI coding agent to deploy. It handles everything — from your code to a live Kubernetes deployment." mode: "wide" ---
-# Deploy to Kubernetes with your favorite AI coding agent. - -Autonomous software development now has the infrastructure to match. - -Install the Qovery Agent Skill. Tell your agent what you want. It handles everything — from analyzing your code to a live deployment on Kubernetes. +# Deploy to Kubernetes with your AI agent. ```bash curl -fsSL https://skill.qovery.com/install.sh | bash ``` -**No Kubernetes knowledge required.** No Dockerfile needed. No API token setup. No cluster required upfront. +Then open Claude Code, Cursor, OpenCode, or any compatible tool and say: + +``` +Deploy my application with Qovery +``` + +No Dockerfile. No Kubernetes knowledge. No cluster needed upfront.
@@ -24,131 +26,69 @@ curl -fsSL https://skill.qovery.com/install.sh | bash ## Compatible Tools -The Qovery Agent Skill follows the [Agent Skills](https://agentskills.io) open standard. One install command drops the skill into every compatible tool on your machine automatically. - - **Anthropic** - - AI coding agent in your terminal. Native skill discovery from `.claude/skills/`. - - `Terminal` `Recommended` + **Anthropic** · `Terminal` `Recommended` - **OpenCode** - - Open-source terminal AI agent. Discovers skills from `.config/opencode/skills/`. - - `Terminal` `Open source` + **OpenCode** · `Terminal` `Open source` - **Google** - - Gemini-powered terminal agent. Full skill support via `.agents/skills/`. - - `Terminal` + **Google** · `Terminal` - - **Anysphere** - - AI-first code editor. Inline agent with full skill support. - - `IDE` + **Anysphere** · `IDE` - **Microsoft / GitHub** - - GitHub Copilot in VS Code. Agent mode with skill discovery. - - `IDE Extension` + **GitHub** · `IDE Extension` - **Roo** - - VS Code extension with autonomous coding capabilities. - - `IDE Extension` + **Roo** · `IDE Extension` - **Amazon** - - AI-powered IDE by Amazon. Supports Agent Skills standard. - - `IDE` + **Amazon** · `IDE` - **JetBrains** - - AI agent integrated into all JetBrains IDEs. - - `IDE Extension` + **JetBrains** · `IDE Extension` - - **Block** - - Open-source autonomous AI agent. Discovers skills from `.agents/skills/`. - - `Standalone` `Open source` + **Block** · `Standalone` `Open source` - **Sourcegraph** - - Agentic coding assistant for complex tasks. - - `Standalone` + **Sourcegraph** · `Standalone` - **All Hands AI** - - Open-source software development agent. - - `Standalone` `Open source` + **All Hands AI** · `Standalone` `Open source` - **OpenAI** - - Cloud-based coding agent with full skill discovery. - - `Standalone` `Cloud` + **OpenAI** · `Standalone` - **Mistral** - - Mistral-powered coding agent. - - `Standalone` + **Mistral** · `Standalone` - **ByteDance** - - AI coding assistant with autonomous agent capabilities. - - `Standalone` + **ByteDance** · `Standalone` -Any other tool that discovers skills from `.claude/skills/`, `.config/opencode/skills/`, or `.agents/skills/` directories is also compatible. +Any tool discovering skills from `.claude/skills/`, `.config/opencode/skills/`, or `.agents/skills/` is compatible. --- ## Try These Prompts -Open your AI coding tool and try any of these: -
@@ -161,20 +101,18 @@ Open your AI coding tool and try any of these:
Deploy my application with Qovery ✓ Node.js detected — generating Dockerfile - ✓ PostgreSQL provisioned (container mode) - ✓ Deployed to staging — https://my-app.preview.qovery.io + ✓ PostgreSQL provisioned + ✓ Deployed → https://my-app.preview.qovery.io
Set up preview environments for my pull requests
- Deploy this to Kubernetes with a PostgreSQL database -
Optimize my Qovery infrastructure costs
Troubleshoot my failing deployment
- + `qovery-deploy` · `qovery-preview` · `qovery-optimize` · `qovery-troubleshoot` · and 4 more → @@ -184,31 +122,27 @@ Open your AI coding tool and try any of these: | | Console | AI Agent Skill | MCP Server | |---|---|---|---| -| **Purpose** | Full control via web UI | Fastest path from code to deployed | Manage existing infrastructure | | **Creates Dockerfiles** | No | Yes, 12+ frameworks | No | -| **Provisions databases** | Manual | Automatic (asks dev vs prod) | No | -| **Sets up env vars** | Manual per variable | Automatic with aliases & overrides | No | -| **Monitors & fixes failures** | Manual log inspection | Automatic diagnosis and auto-fix | Query-based | -| **Best for** | Experienced users, fine-tuning | Deploying from source code | Day-2 operations | +| **Provisions databases** | Manual | Automatic | No | +| **Monitors & fixes failures** | Manual | Auto-fix | Query-based | +| **Best for** | Fine-tuning | Deploying from code | Day-2 ops | -**Skill vs MCP Server** — the Skill deploys (forward engineering). The MCP Server operates existing infrastructure. Use both together: Skill to deploy, MCP Server to manage. - -[→ Qovery MCP Server](/copilot/mcp-server) +The Skill deploys. The MCP Server operates. Use both together. [→ MCP Server](/copilot/mcp-server) --- ## Prerequisites -**Qovery account** — [Sign up at console.qovery.com](https://console.qovery.com) (free to start) -**Git repository** connected to Qovery (GitHub, GitLab, or Bitbucket) +**Qovery account** — [console.qovery.com](https://console.qovery.com) (free to start) +**Git repository** — GitHub, GitLab, or Bitbucket + + +**Project-only install:** `curl -fsSL https://skill.qovery.com/install.sh | bash -s -- --project` -Everything else is handled by the skill: -- **No API token needed upfront** — generated via the Qovery CLI during onboarding -- **No cluster needed upfront** — the skill guides you through cluster creation -- **No Dockerfile needed** — created automatically for 12+ frameworks -- **No Kubernetes knowledge needed** — health checks, ports, stages, and resource limits are all configured automatically +**Update:** re-run the install command. + --- @@ -216,15 +150,15 @@ Everything else is handled by the skill: - Deploy, troubleshoot, optimize, preview — explore every skill + Deploy, troubleshoot, optimize, preview - - Manage deployed infrastructure from your AI agent + + Manage infrastructure from your AI agent - Version-controlled infrastructure as code + Infrastructure as Code - View, contribute, or fork on GitHub + Fork or contribute From e2da9a685a6731de2aff11b5ef0e9a74920a99a4 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:11:45 +0200 Subject: [PATCH 21/46] docs: skills selector with Prompt component + copy button in hero terminal Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 115 ++++++++++++++- .../quickstart/agent-skills.mdx | 137 +++++++++--------- docs/getting-started/quickstart/ai-agent.mdx | 39 ++++- 3 files changed, 217 insertions(+), 74 deletions(-) diff --git a/docs/custom.css b/docs/custom.css index 4ff12a5..66f98ba 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -641,7 +641,28 @@ html[data-theme="dark"] img[src*="/ai-tools/goose.png"] { color: #6e7681; font-size: 12px; font-family: 'Roboto Mono', monospace; - margin-right: 54px; /* équilibre les dots */ +} + +.terminal-copy { + background: transparent; + border: none; + color: #6e7681; + cursor: pointer; + padding: 4px 6px; + border-radius: 4px; + display: flex; + align-items: center; + transition: color 0.15s, background 0.15s; + flex-shrink: 0; +} + +.terminal-copy:hover { + color: #e6edf3; + background: rgba(255, 255, 255, 0.08); +} + +.terminal-copy-success { + color: #3fb950 !important; } .terminal-body { @@ -698,6 +719,98 @@ html[data-theme="dark"] img[src*="/ai-tools/goose.png"] { margin-left: 2px; } +/* Skills Selector */ +.skill-radio { + position: absolute; + opacity: 0; + pointer-events: none; + width: 0; + height: 0; +} + +.skills-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 8px; + margin-bottom: 16px; +} + +@media (max-width: 640px) { + .skills-grid { grid-template-columns: repeat(2, 1fr); } +} + +.skill-card { + padding: 12px 14px; + border: 1px solid #e5e7eb; + border-radius: 8px; + cursor: pointer; + transition: border-color 0.15s, background 0.15s; + display: flex; + flex-direction: column; + gap: 3px; + user-select: none; +} + +html.dark .skill-card, +html[data-theme="dark"] .skill-card { + border-color: rgba(255, 255, 255, 0.1); +} + +.skill-card:hover { + border-color: rgba(100, 45, 255, 0.5); + background: rgba(100, 45, 255, 0.05); +} + +.skill-card-name { + font-size: 12px; + font-weight: 600; + color: #111827; + font-family: 'Roboto Mono', monospace; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +html.dark .skill-card-name, +html[data-theme="dark"] .skill-card-name { + color: #e6edf3; +} + +.skill-card-desc { + font-size: 11px; + color: #6b7280; + line-height: 1.35; +} + +html.dark .skill-card-desc, +html[data-theme="dark"] .skill-card-desc { + color: #8b949e; +} + +/* Selected card highlight */ +#sk-onboard:checked ~ .skills-grid label[for="sk-onboard"], +#sk-deploy:checked ~ .skills-grid label[for="sk-deploy"], +#sk-troubleshoot:checked ~ .skills-grid label[for="sk-troubleshoot"], +#sk-optimize:checked ~ .skills-grid label[for="sk-optimize"], +#sk-speedup:checked ~ .skills-grid label[for="sk-speedup"], +#sk-preview:checked ~ .skills-grid label[for="sk-preview"], +#sk-builder-env:checked ~ .skills-grid label[for="sk-builder-env"], +#sk-builder-portal:checked ~ .skills-grid label[for="sk-builder-portal"] { + border-color: #642DFF; + background: rgba(100, 45, 255, 0.1); +} + +/* Prompt display — hide all, show selected */ +.skills-prompt-wrap > div { display: none; } +#sk-onboard:checked ~ .skills-prompt-wrap .sp-onboard { display: block; } +#sk-deploy:checked ~ .skills-prompt-wrap .sp-deploy { display: block; } +#sk-troubleshoot:checked ~ .skills-prompt-wrap .sp-troubleshoot { display: block; } +#sk-optimize:checked ~ .skills-prompt-wrap .sp-optimize { display: block; } +#sk-speedup:checked ~ .skills-prompt-wrap .sp-speedup { display: block; } +#sk-preview:checked ~ .skills-prompt-wrap .sp-preview { display: block; } +#sk-builder-env:checked ~ .skills-prompt-wrap .sp-builder-env { display: block; } +#sk-builder-portal:checked ~ .skills-prompt-wrap .sp-builder-portal { display: block; } + /* AI Section Highlight — fond dégradé violet pour mettre en avant les use cases IA */ .ai-section { background: linear-gradient(135deg, rgba(100, 45, 255, 0.09) 0%, rgba(100, 45, 255, 0.03) 100%); diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index 5b7ecf1..d7097a7 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -44,71 +44,78 @@ When you ask your agent to deploy, `qovery-deploy` runs through this workflow au ## The Eight Skills - - - Guided setup — evaluates your stack, recommends the right cluster config, and walks you through onboarding step by step. - - ``` - > Set up Qovery for my project - ``` - - - - From source code to running app — Dockerfile, database, env vars, deployment, and auto-fix on failure. - - ``` - > Deploy my application with Qovery - ``` - - - - 8-layer diagnostic against 20+ error patterns. Outputs a structured report with fixes. - - ``` - > Troubleshoot my failing deployment - ``` - - - - Analyzes costs across 7 dimensions. Recommends right-sizing, spot instances, sleep mode. CSV export. - - ``` - > Optimize my Qovery infrastructure costs - ``` - - - - Measures full pipeline timing, finds bottlenecks, fixes Dockerfile layers and build cache. - - ``` - > My deployments are slow, find the bottleneck - ``` - - - - Full-stack preview environment per PR — app, database, unique URL. Auto-deleted on merge. - - ``` - > Set up preview environments for my pull requests - ``` - - - - Self-service environments for non-technical teams — with RBAC so they can't touch production. - - ``` - > Create a builder environment for my team - ``` - - - - Generates and deploys a web portal — SSO login, one-click environments, no CLI needed. - - ``` - > Generate a self-service portal for my team - ``` - - +
+ + + + + + + + + +
+ + + + + + + + +
+ +
+
+ Set up Qovery for my project +
+
+ Deploy my application with Qovery +
+
+ Troubleshoot my failing deployment +
+
+ Optimize my Qovery infrastructure costs +
+
+ My deployments are slow, find the bottleneck +
+
+ Set up preview environments for my pull requests +
+
+ Create a builder environment for my team +
+
+ Generate a self-service portal for my team +
+
+
--- diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index b3d0431..e208ca6 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -8,15 +8,43 @@ mode: "wide" # Deploy to Kubernetes with your AI agent. +**Qovery account** — [console.qovery.com](https://console.qovery.com) (free to start) +**Git repository** — GitHub, GitLab, or Bitbucket + ```bash curl -fsSL https://skill.qovery.com/install.sh | bash ``` Then open Claude Code, Cursor, OpenCode, or any compatible tool and say: -``` -Deploy my application with Qovery -``` +
+
+
+
+
+
+
+
claude
+ +
+
+ Deploy my application with Qovery +
+
No Dockerfile. No Kubernetes knowledge. No cluster needed upfront. @@ -133,11 +161,6 @@ The Skill deploys. The MCP Server operates. Use both together. [→ MCP Server]( --- -## Prerequisites - -**Qovery account** — [console.qovery.com](https://console.qovery.com) (free to start) -**Git repository** — GitHub, GitLab, or Bitbucket - **Project-only install:** `curl -fsSL https://skill.qovery.com/install.sh | bash -s -- --project` From 4bd4d43eb9f6bd20cbd454694ebe272e81a547a1 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:16:41 +0200 Subject: [PATCH 22/46] docs: replace Prompt component with custom terminal + Open in Cursor button Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 52 ++++++++--- .../quickstart/agent-skills.mdx | 90 ++++++++++++++----- 2 files changed, 109 insertions(+), 33 deletions(-) diff --git a/docs/custom.css b/docs/custom.css index 66f98ba..85f14f9 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -800,16 +800,48 @@ html[data-theme="dark"] .skill-card-desc { background: rgba(100, 45, 255, 0.1); } -/* Prompt display — hide all, show selected */ -.skills-prompt-wrap > div { display: none; } -#sk-onboard:checked ~ .skills-prompt-wrap .sp-onboard { display: block; } -#sk-deploy:checked ~ .skills-prompt-wrap .sp-deploy { display: block; } -#sk-troubleshoot:checked ~ .skills-prompt-wrap .sp-troubleshoot { display: block; } -#sk-optimize:checked ~ .skills-prompt-wrap .sp-optimize { display: block; } -#sk-speedup:checked ~ .skills-prompt-wrap .sp-speedup { display: block; } -#sk-preview:checked ~ .skills-prompt-wrap .sp-preview { display: block; } -#sk-builder-env:checked ~ .skills-prompt-wrap .sp-builder-env { display: block; } -#sk-builder-portal:checked ~ .skills-prompt-wrap .sp-builder-portal { display: block; } +/* All skill prompts hidden by default */ +.sk-prompt { display: none; } + +/* Show only the selected prompt */ +#sk-onboard:checked ~ .skills-terminal .sk-prompt-onboard { display: block; } +#sk-deploy:checked ~ .skills-terminal .sk-prompt-deploy { display: block; } +#sk-troubleshoot:checked ~ .skills-terminal .sk-prompt-troubleshoot { display: block; } +#sk-optimize:checked ~ .skills-terminal .sk-prompt-optimize { display: block; } +#sk-speedup:checked ~ .skills-terminal .sk-prompt-speedup { display: block; } +#sk-preview:checked ~ .skills-terminal .sk-prompt-preview { display: block; } +#sk-builder-env:checked ~ .skills-terminal .sk-prompt-builder-env { display: block; } +#sk-builder-portal:checked ~ .skills-terminal .sk-prompt-builder-portal { display: block; } + +/* Terminal action buttons (right side of bar) */ +.terminal-actions { + display: flex; + align-items: center; + gap: 6px; + margin-left: auto; +} + +.terminal-open-cursor { + display: flex; + align-items: center; + gap: 5px; + background: transparent; + border: 1px solid rgba(255, 255, 255, 0.15); + color: #c9d1d9; + font-size: 11px; + padding: 3px 10px; + border-radius: 5px; + cursor: pointer; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + transition: border-color 0.15s, color 0.15s; + white-space: nowrap; + text-decoration: none; +} + +.terminal-open-cursor:hover { + border-color: rgba(255, 255, 255, 0.35); + color: #e6edf3; +} /* AI Section Highlight — fond dégradé violet pour mettre en avant les use cases IA */ .ai-section { diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index d7097a7..5eefee2 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -89,30 +89,74 @@ When you ask your agent to deploy, `qovery-deploy` runs through this workflow au
-
-
- Set up Qovery for my project +
+
+
+
+
+
+
+
claude
+
+ + +
-
- Deploy my application with Qovery -
-
- Troubleshoot my failing deployment -
-
- Optimize my Qovery infrastructure costs -
-
- My deployments are slow, find the bottleneck -
-
- Set up preview environments for my pull requests -
-
- Create a builder environment for my team -
-
- Generate a self-service portal for my team +
+ Set up Qovery for my project + Deploy my application with Qovery + Troubleshoot my failing deployment + Optimize my Qovery infrastructure costs + My deployments are slow, find the bottleneck + Set up preview environments for my pull requests + Create a builder environment for my team + Generate a self-service portal for my team
From 8ca6a20fdf9cc45ab0b94ff090996c64b0789f1d Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:20:32 +0200 Subject: [PATCH 23/46] docs: fix Cursor deep link URL scheme (prompt?text= not composer?query=) Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/agent-skills.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index 5eefee2..065ac39 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -113,7 +113,7 @@ When you ask your agent to deploy, `qovery-deploy` runs through this workflow au }; const checked = document.querySelector('input[name="qovery-skill"]:checked'); const text = checked ? prompts[checked.id] : ''; - if (text) window.open(`cursor://anysphere.cursor-deeplink/composer?query=${encodeURIComponent(text)}`, '_blank'); + if (text) window.open(`cursor://anysphere.cursor-deeplink/prompt?text=${encodeURIComponent(text)}`, '_blank'); }} > From fa9381a65a660f8db0425ffb8f3760f8f0c5434c Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:26:12 +0200 Subject: [PATCH 24/46] docs: fix prompts from GitHub, accordion for deployment steps, Cursor button style Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 23 +++-- .../quickstart/agent-skills.mdx | 86 +++++++++---------- 2 files changed, 57 insertions(+), 52 deletions(-) diff --git a/docs/custom.css b/docs/custom.css index 85f14f9..86009a2 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -824,23 +824,28 @@ html[data-theme="dark"] .skill-card-desc { .terminal-open-cursor { display: flex; align-items: center; - gap: 5px; - background: transparent; - border: 1px solid rgba(255, 255, 255, 0.15); - color: #c9d1d9; + gap: 6px; + background: #2a2a2e; + border: 1px solid rgba(255, 255, 255, 0.1); + color: #ffffff; font-size: 11px; - padding: 3px 10px; - border-radius: 5px; + font-weight: 500; + padding: 4px 10px; + border-radius: 6px; cursor: pointer; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; - transition: border-color 0.15s, color 0.15s; + transition: background 0.15s; white-space: nowrap; text-decoration: none; } .terminal-open-cursor:hover { - border-color: rgba(255, 255, 255, 0.35); - color: #e6edf3; + background: #3a3a3e; +} + +.terminal-open-cursor img { + filter: brightness(0) invert(1); + flex-shrink: 0; } /* AI Section Highlight — fond dégradé violet pour mettre en avant les use cases IA */ diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index 065ac39..1ad78ad 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -18,27 +18,27 @@ curl -fsSL https://skill.qovery.com/install.sh | bash --- -## How Deployment Works - -When you ask your agent to deploy, `qovery-deploy` runs through this workflow autonomously: - - - - Detects language, framework, ports, database needs, and environment variables. - - - Production-ready multi-stage template for your stack. Custom-generated for any other framework. - - - Dev or production? Which database? CLI+API or Terraform? A few questions — no YAML to write. - - - Cluster if needed, databases in container or managed mode, env vars with aliases and overrides. - - - Monitors the rollout. Auto-fixes build errors, port mismatches, health check failures. Asks before touching your code. - - + + When you ask your agent to deploy, `qovery-deploy` runs through this workflow autonomously: + + + + Detects language, framework, ports, database needs, and environment variables. + + + Production-ready multi-stage template for your stack. Custom-generated for any other framework. + + + Dev or production? Which database? CLI+API or Terraform? A few questions — no YAML to write. + + + Cluster if needed, databases in container or managed mode, env vars with aliases and overrides. + + + Monitors the rollout. Auto-fixes build errors, port mismatches, health check failures. Asks before touching your code. + + + --- @@ -102,21 +102,21 @@ When you ask your agent to deploy, `qovery-deploy` runs through this workflow au className="terminal-open-cursor" onClick={() => { const prompts = { - 'sk-onboard': 'Set up Qovery for my project', + 'sk-onboard': "I'm new to Qovery, help me get started", 'sk-deploy': 'Deploy my application with Qovery', - 'sk-troubleshoot': 'Troubleshoot my failing deployment', - 'sk-optimize': 'Optimize my Qovery infrastructure costs', - 'sk-speedup': 'My deployments are slow, find the bottleneck', - 'sk-preview': 'Set up preview environments for my pull requests', - 'sk-builder-env': 'Create a builder environment for my team', - 'sk-builder-portal': 'Generate a self-service portal for my team', + 'sk-troubleshoot': 'My deployment is failing', + 'sk-optimize': 'Optimize my Qovery costs', + 'sk-speedup': 'My deployments are slow', + 'sk-preview': 'Set up preview environments for my project', + 'sk-builder-env': 'Set up builder environments for non-tech teams', + 'sk-builder-portal': 'Generate a builder portal for my team', }; const checked = document.querySelector('input[name="qovery-skill"]:checked'); const text = checked ? prompts[checked.id] : ''; if (text) window.open(`cursor://anysphere.cursor-deeplink/prompt?text=${encodeURIComponent(text)}`, '_blank'); }} > - + Open in Cursor
- Set up Qovery for my project + I'm new to Qovery, help me get started Deploy my application with Qovery - Troubleshoot my failing deployment - Optimize my Qovery infrastructure costs - My deployments are slow, find the bottleneck - Set up preview environments for my pull requests - Create a builder environment for my team - Generate a self-service portal for my team + My deployment is failing + Optimize my Qovery costs + My deployments are slow + Set up preview environments for my project + Set up builder environments for non-tech teams + Generate a builder portal for my team
From b2bfdb2e279c3bc9dc56bbfc44ecd4e59b972eb7 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:27:06 +0200 Subject: [PATCH 25/46] docs: flatten compatible tools grid, remove Try These Prompts, link to agent-skills Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/ai-agent.mdx | 129 +++++++------------ 1 file changed, 45 insertions(+), 84 deletions(-) diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index e208ca6..20f68da 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -54,93 +54,54 @@ No Dockerfile. No Kubernetes knowledge. No cluster needed upfront. ## Compatible Tools - - - - - **Anthropic** · `Terminal` `Recommended` - - - **OpenCode** · `Terminal` `Open source` - - - **Google** · `Terminal` - - - - - - - **Anysphere** · `IDE` - - - **GitHub** · `IDE Extension` - - - **Roo** · `IDE Extension` - - - **Amazon** · `IDE` - - - **JetBrains** · `IDE Extension` - - - - - - - **Block** · `Standalone` `Open source` - - - **Sourcegraph** · `Standalone` - - - **All Hands AI** · `Standalone` `Open source` - - - **OpenAI** · `Standalone` - - - **Mistral** · `Standalone` - - - **ByteDance** · `Standalone` - - - - + + + **Anthropic** · `Terminal` `Recommended` + + + **OpenCode** · `Terminal` `Open source` + + + **Google** · `Terminal` + + + **Anysphere** · `IDE` + + + **GitHub** · `IDE Extension` + + + **Roo** · `IDE Extension` + + + **Amazon** · `IDE` + + + **JetBrains** · `IDE Extension` + + + **Block** · `Standalone` `Open source` + + + **Sourcegraph** · `Standalone` + + + **All Hands AI** · `Standalone` `Open source` + + + **OpenAI** · `Standalone` + + + **Mistral** · `Standalone` + + + **ByteDance** · `Standalone` + + Any tool discovering skills from `.claude/skills/`, `.config/opencode/skills/`, or `.agents/skills/` is compatible. ---- - -## Try These Prompts - -
-
-
-
-
-
-
-
claude — qovery-deploy
-
-
- Deploy my application with Qovery - ✓ Node.js detected — generating Dockerfile - ✓ PostgreSQL provisioned - ✓ Deployed → https://my-app.preview.qovery.io -
- Set up preview environments for my pull requests -
- Optimize my Qovery infrastructure costs -
- Troubleshoot my failing deployment -
-
- - + `qovery-deploy` · `qovery-preview` · `qovery-optimize` · `qovery-troubleshoot` · and 4 more → From 6c51c9fd85f04b840fad8912c0aace58387c45a1 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:27:29 +0200 Subject: [PATCH 26/46] docs: move How Deployment Works accordion to ai-agent page Co-Authored-By: Claude Sonnet 4.6 --- .../quickstart/agent-skills.mdx | 22 ------------------- docs/getting-started/quickstart/ai-agent.mdx | 22 +++++++++++++++++++ 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index 1ad78ad..908c8d4 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -18,28 +18,6 @@ curl -fsSL https://skill.qovery.com/install.sh | bash --- - - When you ask your agent to deploy, `qovery-deploy` runs through this workflow autonomously: - - - - Detects language, framework, ports, database needs, and environment variables. - - - Production-ready multi-stage template for your stack. Custom-generated for any other framework. - - - Dev or production? Which database? CLI+API or Terraform? A few questions — no YAML to write. - - - Cluster if needed, databases in container or managed mode, env vars with aliases and overrides. - - - Monitors the rollout. Auto-fixes build errors, port mismatches, health check failures. Asks before touching your code. - - - - --- ## The Eight Skills diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 20f68da..0606df2 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -105,6 +105,28 @@ Any tool discovering skills from `.claude/skills/`, `.config/opencode/skills/`, `qovery-deploy` · `qovery-preview` · `qovery-optimize` · `qovery-troubleshoot` · and 4 more → + + When you ask your agent to deploy, `qovery-deploy` runs through this workflow autonomously: + + + + Detects language, framework, ports, database needs, and environment variables. + + + Production-ready multi-stage template for your stack. Custom-generated for any other framework. + + + Dev or production? Which database? CLI+API or Terraform? A few questions — no YAML to write. + + + Cluster if needed, databases in container or managed mode, env vars with aliases and overrides. + + + Monitors the rollout. Auto-fixes build errors, port mismatches, health check failures. Asks before touching your code. + + + + --- ## How It Compares From c25c9ff95199328d37458a883ff70a3680880968 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:27:55 +0200 Subject: [PATCH 27/46] docs: remove ai-section purple background from hero Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/ai-agent.mdx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 0606df2..71f8ced 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -4,8 +4,6 @@ description: "Tell your AI coding agent to deploy. It handles everything — fro mode: "wide" --- -
- # Deploy to Kubernetes with your AI agent. **Qovery account** — [console.qovery.com](https://console.qovery.com) (free to start) @@ -48,8 +46,6 @@ Then open Claude Code, Cursor, OpenCode, or any compatible tool and say: No Dockerfile. No Kubernetes knowledge. No cluster needed upfront. -
- --- ## Compatible Tools From 6ad339579d29a3fd5deb00a742ccd34028f09d67 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:30:10 +0200 Subject: [PATCH 28/46] docs: add install label before skills curl command Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/ai-agent.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 71f8ced..6116143 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -9,6 +9,8 @@ mode: "wide" **Qovery account** — [console.qovery.com](https://console.qovery.com) (free to start) **Git repository** — GitHub, GitLab, or Bitbucket +Install the Qovery skills in your project: + ```bash curl -fsSL https://skill.qovery.com/install.sh | bash ``` From c255b0aedc8495295c3e758eadff432131ee0104 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:32:23 +0200 Subject: [PATCH 29/46] docs: wrap install command in ai-section card with link to agent-skills Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/ai-agent.mdx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 6116143..e34bdb0 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -9,12 +9,18 @@ mode: "wide" **Qovery account** — [console.qovery.com](https://console.qovery.com) (free to start) **Git repository** — GitHub, GitLab, or Bitbucket -Install the Qovery skills in your project: +
+ +Eight skills. One install. Your agent picks the right one automatically. ```bash curl -fsSL https://skill.qovery.com/install.sh | bash ``` +→ [All eight skills](/getting-started/quickstart/agent-skills) + +
+ Then open Claude Code, Cursor, OpenCode, or any compatible tool and say:
From a67cb95446fc96ec69707e2372105808912601df Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:34:07 +0200 Subject: [PATCH 30/46] docs: fix double divider in agent-skills, reduce Open in Cursor button size Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 9 ++++++--- docs/getting-started/quickstart/agent-skills.mdx | 2 -- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/custom.css b/docs/custom.css index 86009a2..a6da69c 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -824,19 +824,20 @@ html[data-theme="dark"] .skill-card-desc { .terminal-open-cursor { display: flex; align-items: center; - gap: 6px; + gap: 5px; background: #2a2a2e; border: 1px solid rgba(255, 255, 255, 0.1); color: #ffffff; font-size: 11px; font-weight: 500; - padding: 4px 10px; - border-radius: 6px; + padding: 3px 8px; + border-radius: 5px; cursor: pointer; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; transition: background 0.15s; white-space: nowrap; text-decoration: none; + line-height: 1; } .terminal-open-cursor:hover { @@ -844,6 +845,8 @@ html[data-theme="dark"] .skill-card-desc { } .terminal-open-cursor img { + width: 12px; + height: 12px; filter: brightness(0) invert(1); flex-shrink: 0; } diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index 908c8d4..b9dc76d 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -18,8 +18,6 @@ curl -fsSL https://skill.qovery.com/install.sh | bash --- ---- - ## The Eight Skills
From 4ac0ba6253d2c1d753ae6eb25f57abf6bf20bdd3 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:35:12 +0200 Subject: [PATCH 31/46] docs: replace cursor img with inline SVG to fix button size Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 6 ------ docs/getting-started/quickstart/agent-skills.mdx | 4 +++- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/docs/custom.css b/docs/custom.css index a6da69c..885486b 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -844,12 +844,6 @@ html[data-theme="dark"] .skill-card-desc { background: #3a3a3e; } -.terminal-open-cursor img { - width: 12px; - height: 12px; - filter: brightness(0) invert(1); - flex-shrink: 0; -} /* AI Section Highlight — fond dégradé violet pour mettre en avant les use cases IA */ .ai-section { diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index b9dc76d..8e24c16 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -92,7 +92,9 @@ curl -fsSL https://skill.qovery.com/install.sh | bash if (text) window.open(`cursor://anysphere.cursor-deeplink/prompt?text=${encodeURIComponent(text)}`, '_blank'); }} > - + + + Open in Cursor
+
+ Guided setup — evaluates your stack, recommends the right cluster config, and walks you through onboarding step by step. + From source code to running app — Dockerfile, database, env vars, deployment, and auto-fix on failure. + 8-layer diagnostic against 20+ error patterns. Outputs a structured report with fixes. + Analyzes costs across 7 dimensions. Recommends right-sizing, spot instances, and sleep mode. CSV export. + Measures full pipeline timing, finds bottlenecks, fixes Dockerfile layers and build cache. + Full-stack preview environment per PR — app, database, unique URL. Auto-deleted on merge. + Self-service environments for non-technical teams — with RBAC so they can't touch production. + Generates and deploys a web portal — SSO login, one-click environments, no CLI needed. +
+
From 15dd8c4770299e3251d5a4eddcac9c4c23091a90 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:37:21 +0200 Subject: [PATCH 33/46] docs: make skill description more visible with purple left border and background Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/custom.css b/docs/custom.css index ecfe7e2..e3fe8f6 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -802,16 +802,21 @@ html[data-theme="dark"] .skill-card-desc { /* Skill description */ .skills-desc-wrap { - padding: 10px 2px 8px; - min-height: 36px; - font-size: 13px; - color: #6b7280; - line-height: 1.5; + padding: 12px 14px; + min-height: 44px; + font-size: 13.5px; + color: #374151; + line-height: 1.6; + border-left: 3px solid #642DFF; + background: rgba(100, 45, 255, 0.04); + border-radius: 0 6px 6px 0; + margin-bottom: 12px; } html.dark .skills-desc-wrap, html[data-theme="dark"] .skills-desc-wrap { - color: #8b949e; + color: #c9d1d9; + background: rgba(100, 45, 255, 0.08); } .sk-desc { display: none; } From 8f2ad49c8922a71a966aea6a7f4a00725a235c4d Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:39:00 +0200 Subject: [PATCH 34/46] docs: rename Eight Skills to Available Skills across pages Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/agent-skills.mdx | 2 +- docs/getting-started/quickstart/ai-agent.mdx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index b3b72e7..0d65242 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -18,7 +18,7 @@ curl -fsSL https://skill.qovery.com/install.sh | bash --- -## The Eight Skills +## Available Skills
diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index e34bdb0..057d0eb 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -17,7 +17,7 @@ Eight skills. One install. Your agent picks the right one automatically. curl -fsSL https://skill.qovery.com/install.sh | bash ``` -→ [All eight skills](/getting-started/quickstart/agent-skills) +→ [All skills](/getting-started/quickstart/agent-skills)
@@ -159,7 +159,7 @@ The Skill deploys. The MCP Server operates. Use both together. [→ MCP Server]( ## Next Steps - + Deploy, troubleshoot, optimize, preview From d3b5018314c5ec1f74d99a686c52164c50bd0964 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:41:17 +0200 Subject: [PATCH 35/46] docs: remove all Eight references, improve comparison table styling Co-Authored-By: Claude Sonnet 4.6 --- docs/custom.css | 72 +++++++++++++++++++ .../quickstart/agent-skills.mdx | 4 +- docs/getting-started/quickstart/ai-agent.mdx | 44 ++++++++++-- 3 files changed, 111 insertions(+), 9 deletions(-) diff --git a/docs/custom.css b/docs/custom.css index e3fe8f6..358a25f 100644 --- a/docs/custom.css +++ b/docs/custom.css @@ -875,6 +875,78 @@ html[data-theme="dark"] .skills-desc-wrap { } +/* Comparison table */ +.compare-table { + width: 100%; + border-collapse: collapse; + font-size: 14px; + margin: 16px 0; +} + +.compare-table thead th { + padding: 8px 16px 12px; + text-align: left; + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.06em; + color: #6b7280; + border-bottom: 1px solid #e5e7eb; +} + +html.dark .compare-table thead th, +html[data-theme="dark"] .compare-table thead th { + color: #6e7681; + border-bottom-color: #21262d; +} + +.compare-table thead th.col-featured { + color: #642DFF !important; +} + +.compare-table tbody td { + padding: 12px 16px; + border-bottom: 1px solid #f3f4f6; + font-size: 13.5px; + vertical-align: middle; + color: #374151; +} + +html.dark .compare-table tbody td, +html[data-theme="dark"] .compare-table tbody td { + border-bottom-color: rgba(255,255,255,0.06); + color: #c9d1d9; +} + +.compare-table tbody td:first-child { + font-weight: 600; + color: #111827; +} + +html.dark .compare-table tbody td:first-child, +html[data-theme="dark"] .compare-table tbody td:first-child { + color: #e6edf3; +} + +.compare-table tbody td.col-featured { + background: rgba(100, 45, 255, 0.05); +} + +html.dark .compare-table tbody td.col-featured, +html[data-theme="dark"] .compare-table tbody td.col-featured { + background: rgba(100, 45, 255, 0.09); +} + +.cmp-yes { color: #16a34a; font-weight: 500; } +.cmp-no { color: #9ca3af; } +.cmp-auto { color: #7c3aed; font-weight: 500; } + +html.dark .cmp-yes { color: #3fb950; } +html.dark .cmp-no, +html[data-theme="dark"] .cmp-no { color: #6e7681; } +html.dark .cmp-auto, +html[data-theme="dark"] .cmp-auto { color: #a78bfa; } + /* AI Section Highlight — fond dégradé violet pour mettre en avant les use cases IA */ .ai-section { background: linear-gradient(135deg, rgba(100, 45, 255, 0.09) 0%, rgba(100, 45, 255, 0.03) 100%); diff --git a/docs/getting-started/quickstart/agent-skills.mdx b/docs/getting-started/quickstart/agent-skills.mdx index 0d65242..854e4e8 100644 --- a/docs/getting-started/quickstart/agent-skills.mdx +++ b/docs/getting-started/quickstart/agent-skills.mdx @@ -1,12 +1,12 @@ --- title: "Qovery Agent Skills" -description: "Eight skills that give your AI agent the ability to deploy, troubleshoot, optimize, and manage Kubernetes infrastructure." +description: "Skills that give your AI agent the ability to deploy, troubleshoot, optimize, and manage Kubernetes infrastructure." mode: "wide" ---
-Eight skills. One install. Your agent picks the right one automatically. +One install. Your agent picks the right skill automatically. ```bash curl -fsSL https://skill.qovery.com/install.sh | bash diff --git a/docs/getting-started/quickstart/ai-agent.mdx b/docs/getting-started/quickstart/ai-agent.mdx index 057d0eb..369223a 100644 --- a/docs/getting-started/quickstart/ai-agent.mdx +++ b/docs/getting-started/quickstart/ai-agent.mdx @@ -11,7 +11,7 @@ mode: "wide"
-Eight skills. One install. Your agent picks the right one automatically. +One install. Your agent picks the right skill automatically. ```bash curl -fsSL https://skill.qovery.com/install.sh | bash @@ -135,12 +135,42 @@ Any tool discovering skills from `.claude/skills/`, `.config/opencode/skills/`, ## How It Compares -| | Console | AI Agent Skill | MCP Server | -|---|---|---|---| -| **Creates Dockerfiles** | No | Yes, 12+ frameworks | No | -| **Provisions databases** | Manual | Automatic | No | -| **Monitors & fixes failures** | Manual | Auto-fix | Query-based | -| **Best for** | Fine-tuning | Deploying from code | Day-2 ops | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConsoleAI Agent SkillMCP Server
Creates Dockerfiles— No✓ Yes, 12+ frameworks— No
Provisions databasesManual✓ Automatic— No
Monitors & fixes failuresManual✓ Auto-fixQuery-based
Best forFine-tuningDeploying from codeDay-2 ops
The Skill deploys. The MCP Server operates. Use both together. [→ MCP Server](/copilot/mcp-server) From 1da70172a288a2d02e3768b3602accedb3526f57 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:41:44 +0200 Subject: [PATCH 36/46] docs: add intro sentence to quickstart page Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/getting-started/quickstart.mdx b/docs/getting-started/quickstart.mdx index 3c33b88..2fb1403 100644 --- a/docs/getting-started/quickstart.mdx +++ b/docs/getting-started/quickstart.mdx @@ -4,6 +4,8 @@ description: "Choose your deployment path." mode: "wide" --- +Qovery runs on your own cloud — AWS, GCP, Azure, or Scaleway. Tell your AI agent to deploy, or use the console, CLI, and Terraform. Everything drives the same Kubernetes control plane. + ## AI-Powered Paths
From 2198e8e20928f3773e9d218c2c62b181578c9420 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:43:01 +0200 Subject: [PATCH 37/46] docs: move Choose your deployment path after intro sentence Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/getting-started/quickstart.mdx b/docs/getting-started/quickstart.mdx index 2fb1403..a7035ce 100644 --- a/docs/getting-started/quickstart.mdx +++ b/docs/getting-started/quickstart.mdx @@ -1,11 +1,12 @@ --- title: "Get Started with Qovery" -description: "Choose your deployment path." mode: "wide" --- Qovery runs on your own cloud — AWS, GCP, Azure, or Scaleway. Tell your AI agent to deploy, or use the console, CLI, and Terraform. Everything drives the same Kubernetes control plane. +Choose your deployment path. + ## AI-Powered Paths
From 78ccc8ee9eb0b5ca046fe76ba339cc848556c9c4 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:47:41 +0200 Subject: [PATCH 38/46] docs: add Remote Dev Environments page, add to nav, update quickstart link Co-Authored-By: Claude Sonnet 4.6 --- docs/docs.json | 3 +- docs/getting-started/quickstart.mdx | 2 +- .../quickstart/remote-dev-environments.mdx | 120 ++++++++++++++++++ 3 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 docs/getting-started/quickstart/remote-dev-environments.mdx diff --git a/docs/docs.json b/docs/docs.json index c5da57b..3fb9615 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -64,7 +64,8 @@ "group": "Deploy with AI", "pages": [ "getting-started/quickstart/ai-agent", - "getting-started/quickstart/agent-skills" + "getting-started/quickstart/agent-skills", + "getting-started/quickstart/remote-dev-environments" ] }, { diff --git a/docs/getting-started/quickstart.mdx b/docs/getting-started/quickstart.mdx index a7035ce..ae9830c 100644 --- a/docs/getting-started/quickstart.mdx +++ b/docs/getting-started/quickstart.mdx @@ -17,7 +17,7 @@ Choose your deployment path. **~10 min** · Claude Code, Cursor, OpenCode, 30+ tools - + Each developer or AI agent gets their own isolated environment. Clone, use, destroy. **~10 min** · Pay only while active diff --git a/docs/getting-started/quickstart/remote-dev-environments.mdx b/docs/getting-started/quickstart/remote-dev-environments.mdx new file mode 100644 index 0000000..9882f41 --- /dev/null +++ b/docs/getting-started/quickstart/remote-dev-environments.mdx @@ -0,0 +1,120 @@ +--- +title: "Remote Dev Environments" +description: "One environment per person, per agent — on your own Kubernetes." +mode: "wide" +--- + +
+ +One environment per person, per agent. Anyone in your org — engineers, designers, PMs, AI agents — can spin up a fully configured clone of your production stack. Auto-shutdown when idle. + +```bash +curl -fsSL https://skill.qovery.com/install.sh | bash +``` + +Then ask your agent: + +``` +Create a dev environment for my project with Qovery +``` + +
+ +--- + + + + Each developer or agent gets their own isolated stack. + + + From request to productive environment. + + + Idle environments stop automatically. No waste. + + + On onboarding and environment troubleshooting. + + + +--- + +## Why local dev is broken + + + + Docker Desktop consumes 12+ GB RAM. Port collisions, broken WSL2 file watchers, slow macOS bind mounts. Your platform team fixes environment issues instead of building product. + + + Running Claude Code on a developer's laptop exposes SSH keys, API tokens, and local credentials. A dedicated Kubernetes sandbox limits the blast radius. + + + A PM reproducing a bug or a designer testing a variant can't set up Docker Compose. They file tickets and wait. + + + +--- + +## How It Works + + + + Define your environment in Qovery — app, database, services, env vars. One template for everyone. + + + Engineer, designer, PM, or AI agent — each gets a fully isolated environment in under 4 minutes. + + + Submit a PR when done. The environment shuts down when idle. No cleanup needed. + + + +--- + +## Built for AI Agents + +AI agents like Claude Code run autonomously inside an isolated Kubernetes sandbox — no access to your local credentials, SSH keys, or other services. The agent works on its task for hours, then surfaces a PR when done. + +Use the `qovery-builder-env` skill to set this up: + + + Self-service environments for non-technical teams — with RBAC so they can't touch production. + + +--- + +## Security & Access Control + + + + Single sign-on with your identity provider. No separate credentials to manage. + + + Per-role access control. Builders deploy to their sandbox, can't touch production. + + + Per-environment allowlists. Each sandbox is fully isolated from others. + + + Every action tracked — what changed, when, by whom or which agent. + + + +--- + +## Next Steps + + + + Set up the skill and deploy your first environment. + + + Explore qovery-builder-env and all other skills. + + + Auto-created environments per pull request. + + + Manage infrastructure from your AI agent. + + From 8ba11f38502f424654de21ca2ea8d3c9de3d0cd9 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:49:47 +0200 Subject: [PATCH 39/46] docs: remove $80K+ saved stat from remote dev environments page Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/remote-dev-environments.mdx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/getting-started/quickstart/remote-dev-environments.mdx b/docs/getting-started/quickstart/remote-dev-environments.mdx index 9882f41..17445e8 100644 --- a/docs/getting-started/quickstart/remote-dev-environments.mdx +++ b/docs/getting-started/quickstart/remote-dev-environments.mdx @@ -22,7 +22,7 @@ Create a dev environment for my project with Qovery --- - + Each developer or agent gets their own isolated stack. @@ -32,9 +32,6 @@ Create a dev environment for my project with Qovery Idle environments stop automatically. No waste. - - On onboarding and environment troubleshooting. - --- From 5732bd3a75b1cd826b2cd25a5c29aade6232238c Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:52:20 +0200 Subject: [PATCH 40/46] docs: remove redundant Built for AI Agents section Co-Authored-By: Claude Sonnet 4.6 --- .../quickstart/remote-dev-environments.mdx | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/docs/getting-started/quickstart/remote-dev-environments.mdx b/docs/getting-started/quickstart/remote-dev-environments.mdx index 17445e8..48c2c6c 100644 --- a/docs/getting-started/quickstart/remote-dev-environments.mdx +++ b/docs/getting-started/quickstart/remote-dev-environments.mdx @@ -68,18 +68,6 @@ Create a dev environment for my project with Qovery --- -## Built for AI Agents - -AI agents like Claude Code run autonomously inside an isolated Kubernetes sandbox — no access to your local credentials, SSH keys, or other services. The agent works on its task for hours, then surfaces a PR when done. - -Use the `qovery-builder-env` skill to set this up: - - - Self-service environments for non-technical teams — with RBAC so they can't touch production. - - ---- - ## Security & Access Control From 84c39b9d65ad56c86b7265a2d9b63e7b3083c356 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:53:46 +0200 Subject: [PATCH 41/46] docs: replace plain code block with terminal component on remote dev page Co-Authored-By: Claude Sonnet 4.6 --- .../quickstart/remote-dev-environments.mdx | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/docs/getting-started/quickstart/remote-dev-environments.mdx b/docs/getting-started/quickstart/remote-dev-environments.mdx index 48c2c6c..79cf003 100644 --- a/docs/getting-started/quickstart/remote-dev-environments.mdx +++ b/docs/getting-started/quickstart/remote-dev-environments.mdx @@ -14,9 +14,34 @@ curl -fsSL https://skill.qovery.com/install.sh | bash Then ask your agent: -``` -Create a dev environment for my project with Qovery -``` +
+
+
+
+
+
+
+
claude
+ +
+
+ Create a dev environment for my project with Qovery +
+
From 26962d975422441b62494084f95be17f85f5572f Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 14:56:06 +0200 Subject: [PATCH 42/46] docs: remove security section, improve next steps, rename nav group to AI Quickstart, reorder pages Co-Authored-By: Claude Sonnet 4.6 --- docs/docs.json | 6 ++-- .../quickstart/remote-dev-environments.mdx | 33 ++++--------------- 2 files changed, 10 insertions(+), 29 deletions(-) diff --git a/docs/docs.json b/docs/docs.json index 3fb9615..e011128 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -61,11 +61,11 @@ "getting-started/how-it-works", "getting-started/basic-concepts", { - "group": "Deploy with AI", + "group": "AI Quickstart", "pages": [ "getting-started/quickstart/ai-agent", - "getting-started/quickstart/agent-skills", - "getting-started/quickstart/remote-dev-environments" + "getting-started/quickstart/remote-dev-environments", + "getting-started/quickstart/agent-skills" ] }, { diff --git a/docs/getting-started/quickstart/remote-dev-environments.mdx b/docs/getting-started/quickstart/remote-dev-environments.mdx index 79cf003..382347e 100644 --- a/docs/getting-started/quickstart/remote-dev-environments.mdx +++ b/docs/getting-started/quickstart/remote-dev-environments.mdx @@ -93,38 +93,19 @@ Then ask your agent: --- -## Security & Access Control - - - - Single sign-on with your identity provider. No separate credentials to manage. - - - Per-role access control. Builders deploy to their sandbox, can't touch production. - - - Per-environment allowlists. Each sandbox is fully isolated from others. - - - Every action tracked — what changed, when, by whom or which agent. - - - ---- - ## Next Steps - - Set up the skill and deploy your first environment. + + From code to running app in ~10 minutes. - - Explore qovery-builder-env and all other skills. + + All skills including qovery-builder-env and qovery-builder-portal. - Auto-created environments per pull request. + Auto-created full-stack environment per pull request. - - Manage infrastructure from your AI agent. + + SSO, RBAC, audit logs, SOC2, HIPAA, GDPR. From c257150a776f2a1698deacacbf9de3baa7d1b833 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 15:06:27 +0200 Subject: [PATCH 43/46] docs: fix AI Dev Environments card link in introduction to remote-dev-environments Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/introduction.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/introduction.mdx b/docs/getting-started/introduction.mdx index fb3e0f1..d3bfa1d 100644 --- a/docs/getting-started/introduction.mdx +++ b/docs/getting-started/introduction.mdx @@ -22,7 +22,7 @@ Describe what you want to deploy. An AI agent handles the rest. Or use the conso Tell your AI agent to deploy. It analyzes your code, writes the Dockerfile, provisions the database, and ships to Kubernetes. - + Every developer and AI agent gets their own isolated environment. Spin up, experiment, tear down. From 560c0426b79fd887a86748c622dd623f6909b9d0 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 17:47:28 +0200 Subject: [PATCH 44/46] docs: replace em dash with hyphen in platform heading Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/introduction.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/introduction.mdx b/docs/getting-started/introduction.mdx index d3bfa1d..fbf440e 100644 --- a/docs/getting-started/introduction.mdx +++ b/docs/getting-started/introduction.mdx @@ -32,7 +32,7 @@ Describe what you want to deploy. An AI agent handles the rest. Or use the conso
-### The platform — full control +### The platform - full control Visual UI From 25876635e9a986a6f89473ada44c8089ee172867 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 17:48:16 +0200 Subject: [PATCH 45/46] docs: replace em dash with hyphen in remote dev environments description Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/remote-dev-environments.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/quickstart/remote-dev-environments.mdx b/docs/getting-started/quickstart/remote-dev-environments.mdx index 382347e..b734149 100644 --- a/docs/getting-started/quickstart/remote-dev-environments.mdx +++ b/docs/getting-started/quickstart/remote-dev-environments.mdx @@ -1,6 +1,6 @@ --- title: "Remote Dev Environments" -description: "One environment per person, per agent — on your own Kubernetes." +description: "One environment per person, per agent - on your own Kubernetes." mode: "wide" --- From c1dc15ada1e84b5c8551ec93a94a4b5624702bb3 Mon Sep 17 00:00:00 2001 From: Julien Dan Date: Thu, 7 May 2026 17:48:38 +0200 Subject: [PATCH 46/46] docs: remove dash in remote dev environments description Co-Authored-By: Claude Sonnet 4.6 --- docs/getting-started/quickstart/remote-dev-environments.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/quickstart/remote-dev-environments.mdx b/docs/getting-started/quickstart/remote-dev-environments.mdx index b734149..56349f0 100644 --- a/docs/getting-started/quickstart/remote-dev-environments.mdx +++ b/docs/getting-started/quickstart/remote-dev-environments.mdx @@ -1,6 +1,6 @@ --- title: "Remote Dev Environments" -description: "One environment per person, per agent - on your own Kubernetes." +description: "One environment per person, per agent. On your own Kubernetes." mode: "wide" ---