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]