This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 29e7044d450 [refactor](next) fix some links (#3662)
29e7044d450 is described below

commit 29e7044d45071740022106abe0779c6663d3d26a
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Sun May 17 14:50:29 2026 -0700

    [refactor](next) fix some links (#3662)
    
    Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
---
 config/redirects-4.x.json                          | 148 ++++++++++-----------
 docusaurus.config.js                               |  20 +--
 scripts/migrate-4.x/build-redirects.py             |  61 ++++++++-
 src/components/home-next/NavbarNext.tsx            |   4 +-
 .../home-next/sections/EcosystemSection.scss       |  25 ++--
 .../home-next/sections/EcosystemSection.tsx        |  16 ++-
 src/components/home-next/sections/HeroSection.tsx  |   2 +-
 src/pages/{download-next => download}/index.tsx    |   0
 src/scss/custom.scss                               |  19 +++
 static/home-next/realtime-analytics.html           |   5 +-
 10 files changed, 182 insertions(+), 118 deletions(-)

diff --git a/config/redirects-4.x.json b/config/redirects-4.x.json
index cfd3c0da014..8ccbab81b84 100644
--- a/config/redirects-4.x.json
+++ b/config/redirects-4.x.json
@@ -337,299 +337,299 @@
   },
   {
     "from": "/docs/4.x/ecosystem/automq-load",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/automq"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/automq-load",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/automq"
   },
   {
     "from": "/docs/4.x/ecosystem/bi/apache-superset",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/superset"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/bi/apache-superset",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/superset"
   },
   {
     "from": "/docs/4.x/ecosystem/bi/clouddm",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/clouddm"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/bi/clouddm",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/clouddm"
   },
   {
     "from": "/docs/4.x/ecosystem/bi/datagrip",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/datagrip"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/bi/datagrip",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/datagrip"
   },
   {
     "from": "/docs/4.x/ecosystem/bi/dbeaver",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/dbeaver"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/bi/dbeaver",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/dbeaver"
   },
   {
     "from": "/docs/4.x/ecosystem/bi/finebi",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/finebi"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/bi/finebi",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/finebi"
   },
   {
     "from": "/docs/4.x/ecosystem/bi/metabase",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/metabase"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/bi/metabase",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/metabase"
   },
   {
     "from": "/docs/4.x/ecosystem/bi/powerbi",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/powerbi"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/bi/powerbi",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/powerbi"
   },
   {
     "from": "/docs/4.x/ecosystem/bi/quickbi",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/quickbi"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/bi/quickbi",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/quickbi"
   },
   {
     "from": "/docs/4.x/ecosystem/bi/quicksight",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/quicksight"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/bi/quicksight",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/quicksight"
   },
   {
     "from": "/docs/4.x/ecosystem/bi/smartbi",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/smartbi"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/bi/smartbi",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/smartbi"
   },
   {
     "from": "/docs/4.x/ecosystem/bi/tableau",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/tableau"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/bi/tableau",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/tableau"
   },
   {
     "from": "/docs/4.x/ecosystem/cloudcanal",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/cloudcanal"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/cloudcanal",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/cloudcanal"
   },
   {
     "from": "/docs/4.x/ecosystem/datax",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/datax"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/datax",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/datax"
   },
   {
     "from": "/docs/4.x/ecosystem/dbt-doris-adapter",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/dbt-doris-adapter"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/dbt-doris-adapter",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/zh-CN/docs/4.x/connection-integration/data-integration/dbt-doris-adapter"
   },
   {
     "from": "/docs/4.x/ecosystem/doris-kafka-connector/doris-kafka-connector",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/docs/4.x/connection-integration/data-integration/doris-kafka-connector"
   },
   {
     "from": 
"/zh-CN/docs/4.x/ecosystem/doris-kafka-connector/doris-kafka-connector",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/zh-CN/docs/4.x/connection-integration/data-integration/doris-kafka-connector"
   },
   {
     "from": "/docs/4.x/ecosystem/doris-kafka-connector/release-notes",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/docs/4.x/connection-integration/data-integration/doris-kafka-connector"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/doris-kafka-connector/release-notes",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/zh-CN/docs/4.x/connection-integration/data-integration/doris-kafka-connector"
   },
   {
     "from": "/docs/4.x/ecosystem/doris-operator/doris-operator-overview",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/docs/4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/doris-operator/doris-operator-overview",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/zh-CN/docs/4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview"
   },
   {
     "from": "/docs/4.x/ecosystem/doris-operator/on-alibaba",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/install/deploy-on-kubernetes/doris-operator/on-alibaba"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/doris-operator/on-alibaba",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/zh-CN/docs/4.x/install/deploy-on-kubernetes/doris-operator/on-alibaba"
   },
   {
     "from": "/docs/4.x/ecosystem/doris-operator/on-aws",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/install/deploy-on-kubernetes/doris-operator/on-aws"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/doris-operator/on-aws",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/install/deploy-on-kubernetes/doris-operator/on-aws"
   },
   {
     "from": "/docs/4.x/ecosystem/doris-streamloader",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/docs/4.x/connection-integration/data-integration/doris-streamloader"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/doris-streamloader",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/zh-CN/docs/4.x/connection-integration/data-integration/doris-streamloader"
   },
   {
     "from": "/docs/4.x/ecosystem/flink-doris-connector/flink-doris-connector",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/docs/4.x/connection-integration/data-integration/flink-doris-connector"
   },
   {
     "from": 
"/zh-CN/docs/4.x/ecosystem/flink-doris-connector/flink-doris-connector",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/zh-CN/docs/4.x/connection-integration/data-integration/flink-doris-connector"
   },
   {
     "from": "/docs/4.x/ecosystem/flink-doris-connector/release-notes",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/docs/4.x/connection-integration/data-integration/flink-doris-connector"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/flink-doris-connector/release-notes",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/zh-CN/docs/4.x/connection-integration/data-integration/flink-doris-connector"
   },
   {
     "from": "/docs/4.x/ecosystem/hive-bitmap-udf",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/hive-udf"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/hive-bitmap-udf",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/hive-udf"
   },
   {
     "from": "/docs/4.x/ecosystem/hive-hll-udf",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/hive-udf"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/hive-hll-udf",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/hive-udf"
   },
   {
     "from": "/docs/4.x/ecosystem/kettle",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/kettle"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/kettle",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/kettle"
   },
   {
     "from": "/docs/4.x/ecosystem/kyuubi",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/kyuubi"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/kyuubi",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/kyuubi"
   },
   {
     "from": "/docs/4.x/ecosystem/observability/beats",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/beats"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/observability/beats",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/beats"
   },
   {
     "from": "/docs/4.x/ecosystem/observability/fluentbit",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/fluentbit"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/observability/fluentbit",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/fluentbit"
   },
   {
     "from": "/docs/4.x/ecosystem/observability/langfuse",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/langfuse"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/observability/langfuse",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/langfuse"
   },
   {
     "from": "/docs/4.x/ecosystem/observability/logstash",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/logstash"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/observability/logstash",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/logstash"
   },
   {
     "from": "/docs/4.x/ecosystem/observability/loongcollector",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/loongcollector"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/observability/loongcollector",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/zh-CN/docs/4.x/connection-integration/data-integration/loongcollector"
   },
   {
     "from": "/docs/4.x/ecosystem/observability/opentelemetry",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/opentelemetry"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/observability/opentelemetry",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/zh-CN/docs/4.x/connection-integration/data-integration/opentelemetry"
   },
   {
     "from": "/docs/4.x/ecosystem/observability/vector",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/vector"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/observability/vector",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/vector"
   },
   {
     "from": "/docs/4.x/ecosystem/seatunnel",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/docs/4.x/connection-integration/data-integration/seatunnel"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/seatunnel",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": "/zh-CN/docs/4.x/connection-integration/data-integration/seatunnel"
   },
   {
     "from": "/docs/4.x/ecosystem/spark-doris-connector/release-notes",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/docs/4.x/connection-integration/data-integration/spark-doris-connector"
   },
   {
     "from": "/zh-CN/docs/4.x/ecosystem/spark-doris-connector/release-notes",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/zh-CN/docs/4.x/connection-integration/data-integration/spark-doris-connector"
   },
   {
     "from": "/docs/4.x/ecosystem/spark-doris-connector/spark-doris-connector",
-    "to": "/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/docs/4.x/connection-integration/data-integration/spark-doris-connector"
   },
   {
     "from": 
"/zh-CN/docs/4.x/ecosystem/spark-doris-connector/spark-doris-connector",
-    "to": "/zh-CN/docs/4.x/getting-started/what-is-apache-doris"
+    "to": 
"/zh-CN/docs/4.x/connection-integration/data-integration/spark-doris-connector"
   },
   {
     "from": "/docs/4.x/ecosystem/spark-load",
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 72ff935024d..21f379ce964 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -28,11 +28,11 @@ function buildRedirectIndex() {
     add('/zh-CN/docs/4.x/getting-started/what-is-apache-doris', '/zh-CN/docs');
 
     // Decommissioned standalone pages whose content moved into the
-    // homepage/why-doris/download-next flows.
+    // homepage/why-doris/download flows.
     add('/why-doris/users', '/users');
     add('/zh-CN/why-doris/users', '/zh-CN/users');
-    add('/download-next', '/download');
-    add('/zh-CN/download-next', '/zh-CN/download');
+    add('/download', '/download-next');
+    add('/zh-CN/download', '/zh-CN/download-next');
 
     // /ecosystem/* was retired; its closest spiritual home is the Dev tree's
     // Data Integration intro, which catalogs the same connector/tool families
@@ -457,18 +457,6 @@ const config = {
                                 label: 'Blog',
                                 href: '/blog',
                             },
-                            {
-                                label: 'Ecosystem',
-                                href: '/ecosystem/cluster-management',
-                            },
-                            {
-                                label: 'Users',
-                                href: '/users',
-                            },
-                            {
-                                label: 'Discussions',
-                                href: 
'https://github.com/apache/doris/discussions',
-                            },
                         ],
                     },
                     {
@@ -488,7 +476,7 @@ const config = {
                             },
                             {
                                 label: 'Roadmap',
-                                href: 
'https://github.com/apache/doris/issues/30669',
+                                href: 
'https://github.com/apache/doris/issues/60036',
                             },
                             {
                                 label: 'Improvement proposal',
diff --git a/scripts/migrate-4.x/build-redirects.py 
b/scripts/migrate-4.x/build-redirects.py
index 4af81fae63f..421d905851d 100644
--- a/scripts/migrate-4.x/build-redirects.py
+++ b/scripts/migrate-4.x/build-redirects.py
@@ -46,12 +46,62 @@ PREFIX_RENAMES = [
     ("gettingStarted/", "getting-started/"),
 ]
 
+# Per-slug overrides applied before the prefix-rename / fallback pass.
+# Each entry maps an *old* slug to a specific *new* slug (resolved against
+# the en tree; the zh side reuses the same path via to_zh()). Use this when
+# a slug moved to a non-obvious new location that the prefix heuristics
+# can't infer — e.g. /ecosystem/* docs that were reorganized into
+# /connection-integration/data-integration/ or /install/deploy-on-kubernetes/.
+EXPLICIT_SLUG_MAP = {
+    # /ecosystem/* → /connection-integration/data-integration/*
+    "ecosystem/automq-load":                                
"connection-integration/data-integration/automq",
+    "ecosystem/bi/apache-superset":                         
"connection-integration/data-integration/superset",
+    "ecosystem/bi/clouddm":                                 
"connection-integration/data-integration/clouddm",
+    "ecosystem/bi/datagrip":                                
"connection-integration/data-integration/datagrip",
+    "ecosystem/bi/dbeaver":                                 
"connection-integration/data-integration/dbeaver",
+    "ecosystem/bi/finebi":                                  
"connection-integration/data-integration/finebi",
+    "ecosystem/bi/metabase":                                
"connection-integration/data-integration/metabase",
+    "ecosystem/bi/powerbi":                                 
"connection-integration/data-integration/powerbi",
+    "ecosystem/bi/quickbi":                                 
"connection-integration/data-integration/quickbi",
+    "ecosystem/bi/quicksight":                              
"connection-integration/data-integration/quicksight",
+    "ecosystem/bi/smartbi":                                 
"connection-integration/data-integration/smartbi",
+    "ecosystem/bi/tableau":                                 
"connection-integration/data-integration/tableau",
+    "ecosystem/cloudcanal":                                 
"connection-integration/data-integration/cloudcanal",
+    "ecosystem/datax":                                      
"connection-integration/data-integration/datax",
+    "ecosystem/dbt-doris-adapter":                          
"connection-integration/data-integration/dbt-doris-adapter",
+    "ecosystem/doris-kafka-connector/doris-kafka-connector": 
"connection-integration/data-integration/doris-kafka-connector",
+    "ecosystem/doris-kafka-connector/release-notes":        
"connection-integration/data-integration/doris-kafka-connector",
+    "ecosystem/doris-streamloader":                         
"connection-integration/data-integration/doris-streamloader",
+    "ecosystem/flink-doris-connector/flink-doris-connector": 
"connection-integration/data-integration/flink-doris-connector",
+    "ecosystem/flink-doris-connector/release-notes":        
"connection-integration/data-integration/flink-doris-connector",
+    "ecosystem/hive-bitmap-udf":                            
"connection-integration/data-integration/hive-udf",
+    "ecosystem/hive-hll-udf":                               
"connection-integration/data-integration/hive-udf",
+    "ecosystem/kettle":                                     
"connection-integration/data-integration/kettle",
+    "ecosystem/kyuubi":                                     
"connection-integration/data-integration/kyuubi",
+    "ecosystem/observability/beats":                        
"connection-integration/data-integration/beats",
+    "ecosystem/observability/fluentbit":                    
"connection-integration/data-integration/fluentbit",
+    "ecosystem/observability/langfuse":                     
"connection-integration/data-integration/langfuse",
+    "ecosystem/observability/logstash":                     
"connection-integration/data-integration/logstash",
+    "ecosystem/observability/loongcollector":               
"connection-integration/data-integration/loongcollector",
+    "ecosystem/observability/opentelemetry":                
"connection-integration/data-integration/opentelemetry",
+    "ecosystem/observability/vector":                       
"connection-integration/data-integration/vector",
+    "ecosystem/seatunnel":                                  
"connection-integration/data-integration/seatunnel",
+    "ecosystem/spark-doris-connector/release-notes":        
"connection-integration/data-integration/spark-doris-connector",
+    "ecosystem/spark-doris-connector/spark-doris-connector": 
"connection-integration/data-integration/spark-doris-connector",
+    # /ecosystem/doris-operator/* → 
/install/deploy-on-kubernetes/doris-operator/*
+    "ecosystem/doris-operator/doris-operator-overview":     
"install/deploy-on-kubernetes/doris-operator/doris-operator-overview",
+    "ecosystem/doris-operator/on-alibaba":                  
"install/deploy-on-kubernetes/doris-operator/on-alibaba",
+    "ecosystem/doris-operator/on-aws":                      
"install/deploy-on-kubernetes/doris-operator/on-aws",
+    # ecosystem/spark-load has no direct new home; falls through to 
DEFAULT_FALLBACK.
+}
+
 PREFIX_FALLBACKS = [
     ("gettingStarted/alternatives/", "/why-doris/compare"),
     ("db-connect/",                  
"/docs/4.x/connection-integration/mysql-proto"),
     ("benchmark/",                   "/why-doris/benchmarks"),
-    # ecosystem/ has no replacement landing — the /ecosystem/ tree was
-    # decommissioned. Slugs fall through to DEFAULT_FALLBACK (docs home).
+    # /ecosystem/* has been pulled apart by EXPLICIT_SLUG_MAP above; any
+    # leftover ecosystem/* slug not covered there falls through to
+    # DEFAULT_FALLBACK (docs home).
 ]
 
 
@@ -62,11 +112,18 @@ def to_zh(target: str) -> str:
 
 
 def resolve(slug: str, new_set: set[str]) -> str:
+    # 1. Explicit per-slug overrides take precedence.
+    if slug in EXPLICIT_SLUG_MAP:
+        target = EXPLICIT_SLUG_MAP[slug]
+        if target in new_set:
+            return f"/docs/4.x/{target}"
+    # 2. Prefix renames (gettingStarted/ → getting-started/).
     for old_prefix, new_prefix in PREFIX_RENAMES:
         if slug.startswith(old_prefix):
             candidate = new_prefix + slug[len(old_prefix):]
             if candidate in new_set:
                 return f"/docs/4.x/{candidate}"
+    # 3. Whole-subtree fallbacks.
     for prefix, target in PREFIX_FALLBACKS:
         if slug.startswith(prefix):
             return target
diff --git a/src/components/home-next/NavbarNext.tsx 
b/src/components/home-next/NavbarNext.tsx
index 7357c4a18c8..39b9d46ff55 100644
--- a/src/components/home-next/NavbarNext.tsx
+++ b/src/components/home-next/NavbarNext.tsx
@@ -192,7 +192,7 @@ export function NavbarNext(): JSX.Element {
                         <span className="navbar-next__star-divider" />
                         <GitHubIcon />
                     </a>
-                    <Link to="/download-next" className="navbar-next__cta">
+                    <Link to="/download" className="navbar-next__cta">
                         DOWNLOAD
                     </Link>
                 </div>
@@ -260,7 +260,7 @@ export function NavbarNext(): JSX.Element {
                         <span className="navbar-next__star-divider" />
                         <GitHubIcon />
                     </a>
-                    <Link to="/download-next" className="navbar-next__cta" 
onClick={() => setMobileOpen(false)}>
+                    <Link to="/download" className="navbar-next__cta" 
onClick={() => setMobileOpen(false)}>
                         DOWNLOAD
                     </Link>
                 </div>
diff --git a/src/components/home-next/sections/EcosystemSection.scss 
b/src/components/home-next/sections/EcosystemSection.scss
index 979799283e5..394497f57ec 100644
--- a/src/components/home-next/sections/EcosystemSection.scss
+++ b/src/components/home-next/sections/EcosystemSection.scss
@@ -373,22 +373,13 @@
             0 0 34px -16px rgba(45, 223, 168, 0.8);
     }
 
-    &__doris-mark {
-        width: 36px;
+    &__doris-logo {
+        width: auto;
         height: 36px;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        border-radius: 7px;
-        background: var(--en-yellow);
-        color: var(--en-ink);
-        @include type.mono-text(20px, 800, 1, 0);
-    }
-
-    &__doris-name {
-        color: var(--en-cream-light);
-        @include type.mono-text(12px, 800, 1.2, 0.14em, uppercase);
-        text-align: center;
+        max-width: 78%;
+        filter: brightness(0) invert(1);
+        user-select: none;
+        pointer-events: none;
     }
 
     &__flows {
@@ -724,8 +715,8 @@
             height: 124px;
         }
 
-        &__doris-name {
-            font-size: 10px;
+        &__doris-logo {
+            height: 28px;
         }
     }
 }
diff --git a/src/components/home-next/sections/EcosystemSection.tsx 
b/src/components/home-next/sections/EcosystemSection.tsx
index ca8cc24e9b5..02549513516 100644
--- a/src/components/home-next/sections/EcosystemSection.tsx
+++ b/src/components/home-next/sections/EcosystemSection.tsx
@@ -514,8 +514,12 @@ function CompactEcosystem(): JSX.Element {
                 <div className="ecosystem-next__compact-engine">
                     <div className="ecosystem-next__doris">
                         <div className="ecosystem-next__doris-core">
-                            <span 
className="ecosystem-next__doris-mark">D</span>
-                            <span 
className="ecosystem-next__doris-name">Apache Doris</span>
+                            <img
+                                className="ecosystem-next__doris-logo"
+                                src="/images/logo-doris.svg"
+                                alt="Apache Doris"
+                                draggable={false}
+                            />
                         </div>
                     </div>
                 </div>
@@ -567,8 +571,12 @@ export function EcosystemSection(): JSX.Element {
                                     </div>
                                     <div className="ecosystem-next__doris" 
ref={dorisRef}>
                                         <div 
className="ecosystem-next__doris-core">
-                                            <span 
className="ecosystem-next__doris-mark">D</span>
-                                            <span 
className="ecosystem-next__doris-name">Apache Doris</span>
+                                            <img
+                                                
className="ecosystem-next__doris-logo"
+                                                src="/images/logo-doris.svg"
+                                                alt="Apache Doris"
+                                                draggable={false}
+                                            />
                                         </div>
                                     </div>
                                 </div>
diff --git a/src/components/home-next/sections/HeroSection.tsx 
b/src/components/home-next/sections/HeroSection.tsx
index 02b425447b3..ef60640e677 100644
--- a/src/components/home-next/sections/HeroSection.tsx
+++ b/src/components/home-next/sections/HeroSection.tsx
@@ -897,7 +897,7 @@ export function HeroSection(): JSX.Element {
                         </p>
 
                         <div className="hero-next__ctas">
-                            <a className="hero-next__btn 
hero-next__btn--yellow" href="/download-next">
+                            <a className="hero-next__btn 
hero-next__btn--yellow" href="/download">
                                 <DownloadIcon />
                                 Download
                             </a>
diff --git a/src/pages/download-next/index.tsx b/src/pages/download/index.tsx
similarity index 100%
rename from src/pages/download-next/index.tsx
rename to src/pages/download/index.tsx
diff --git a/src/scss/custom.scss b/src/scss/custom.scss
index 65420703916..74c66c2854d 100644
--- a/src/scss/custom.scss
+++ b/src/scss/custom.scss
@@ -156,3 +156,22 @@ body {
 .mantine-Modal-overlay {
     z-index: 9999 !important;
 }
+
+/**
+ * Push the Kapa Ask AI modal down from the top of the viewport so it
+ * doesn't sit flush against the 64px sticky NavbarNext. Kapa renders its
+ * modal flush against whichever container it sits below, so we both
+ * override Mantine's yOffset variable on the inner wrapper and add a
+ * margin-top on the modal panel itself — whichever Kapa is using, the
+ * gap shows up.
+ */
+.mantine-Modal-inner,
+[class*="Modal-inner"] {
+    --mantine-modal-y-offset: 24px !important;
+    padding-top: 24px !important;
+}
+
+.mantine-Modal-content,
+[class*="Modal-content"] {
+    margin-top: 24px !important;
+}
diff --git a/static/home-next/realtime-analytics.html 
b/static/home-next/realtime-analytics.html
index 9af6c9f2c65..c74668d2c83 100644
--- a/static/home-next/realtime-analytics.html
+++ b/static/home-next/realtime-analytics.html
@@ -99,7 +99,7 @@
   <style>
     /* ========== Type ========== */
     .card-text { fill: #0c3a25; font-weight: 600; font-family: Inter, 
system-ui, -apple-system, "Segoe UI", sans-serif; }
-    .doris-text { fill: #2a1f00; font-weight: 800; letter-spacing: 5px; }
+    .doris-logo { filter: brightness(0) invert(1); }
     .mono { font-family: Inter, system-ui, -apple-system, "Segoe UI", 
sans-serif; }
 
     /* ========== Doris pulse ========== */
@@ -313,7 +313,8 @@
       fill="none" stroke="#F4C542" stroke-opacity="0.35" stroke-width="2"/>
     <rect x="395" y="220" width="210" height="100" rx="22" ry="22"
       fill="#F4C542" stroke="#FFD96B" stroke-width="1.5"/>
-    <text x="500" y="282" text-anchor="middle" class="doris-text" 
font-size="38">DORIS</text>
+    <image href="/images/logo-doris.svg" x="430" y="240" width="140" 
height="60"
+      preserveAspectRatio="xMidYMid meet" class="doris-logo"/>
   </g>
 
   <!-- ====================================================== -->


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to