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 14d690270c1 [opt] opt several pages (#3969)
14d690270c1 is described below

commit 14d690270c1486e3e05aa8debd30172ac6eb09cc
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Mon Jul 6 18:36:27 2026 +0800

    [opt] opt several pages (#3969)
---
 doc-tools/prompts/img-compression-guide.md         |  45 +++
 .../doris-operator/doris-operator-overview.md      |   2 +-
 .../doris-operator/doris-operator-overview.md      |   2 +-
 .../doris-operator/doris-operator-overview.md      |   2 +-
 .../community-report-next/CommunityReportNext.scss |  81 ++++++
 .../community-report-next/CommunityReportNext.tsx  |  34 ++-
 .../community-report-next/WeeklyReport.scss        |  40 ++-
 src/components/home-next/HomeNext.scss             |   6 +
 .../home-next/sections/DeploymentSection.tsx       |   4 +-
 .../home-next/sections/EcosystemSection.scss       |  35 ++-
 .../home-next/sections/EcosystemSection.tsx        |  87 +++---
 .../home-next/sections/FeaturesSection.scss        |  16 ++
 .../home-next/sections/FeaturesSection.tsx         |  44 +++
 .../home-next/sections/UseCasesSection.tsx         |   2 +-
 src/pages/community-report/_reports/2026-06-29.mdx | 306 ++++++++++++++++-----
 src/scss/custom.scss                               |   8 +
 static/images/doris-ecosystem.jpg                  | Bin 0 -> 114568 bytes
 .../doris-operator/doris-operator-overview.md      |   2 +-
 18 files changed, 579 insertions(+), 137 deletions(-)

diff --git a/doc-tools/prompts/img-compression-guide.md 
b/doc-tools/prompts/img-compression-guide.md
new file mode 100644
index 00000000000..22ee716cda0
--- /dev/null
+++ b/doc-tools/prompts/img-compression-guide.md
@@ -0,0 +1,45 @@
+# Image Compression Guide
+
+## Convert PNG to JPEG
+
+Use this for documentation illustrations, such as diagrams and flowcharts, 
when the image does not rely on a solid-color or transparent background.
+
+### Tool
+
+Use Python PIL (Pillow):
+
+```python
+from PIL import Image
+import os
+
+files = ['xxx.png', 'yyy.png']
+
+for f in files:
+    out = f.replace('.png', '.jpg')
+    img = Image.open(f).convert('RGB')
+    img.save(out, 'JPEG', quality=85, optimize=True)
+    orig = os.path.getsize(f) / 1024
+    new = os.path.getsize(out) / 1024
+    print(f"{f}: {orig:.0f}KB → {out}: {new:.0f}KB (saved {orig-new:.0f}KB)")
+```
+
+### Parameters
+
+- `quality=85`: Keeps documentation illustrations clear while producing a 
reasonable file size.
+- `convert('RGB')`: Removes the PNG alpha channel and converts the image to 
standard JPEG format.
+- `optimize=True`: Enables optimized JPEG encoding to reduce the file size 
further.
+
+### Compression Results (Reference)
+
+| File | Original Size | Compressed Size | Saved |
+|------|--------|--------|------|
+| catalog-db-tbl.png | 2.1MB | 191KB | 91% |
+| columnar-storage.png | 1.9MB | 231KB | 88% |
+| mpp.png | 2.2MB | 240KB | 89% |
+| partition-bucket.png | 1.5MB | 186KB | 88% |
+| runtime-filter.png | 1.9MB | 265KB | 86% |
+
+### Notes
+
+- Images with transparent backgrounds are not good candidates for JPEG 
conversion because transparency becomes a white background.
+- For solid-color images and screenshots, keep PNG format and compress them 
with tinypng.com.
diff --git 
a/docs/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md 
b/docs/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
index c6f03d1fb2e..cccb068748d 100644
--- 
a/docs/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
+++ 
b/docs/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
@@ -8,7 +8,7 @@
 }
 ---
 
-Doris Operator is the official Kubernetes Operator for Apache Doris. It 
combines Doris operational experience with Kubernetes-native resource 
management to provide a simpler, more efficient, and easier-to-use way to 
deploy and operate Doris on Kubernetes.
+[Doris Operator](https://github.com/apache/doris-operator) is the official 
Kubernetes Operator for Apache Doris. It combines Doris operational experience 
with Kubernetes-native resource management to provide a simpler, more 
efficient, and easier-to-use way to deploy and operate Doris on Kubernetes.
 
 Doris Operator extends the Kubernetes API through CustomResourceDefinitions 
(CRDs). After you submit a Doris custom resource, the Operator creates and 
maintains the corresponding Kubernetes resources such as `StatefulSet`, 
`Service`, and `PersistentVolumeClaim`, and in some scenarios performs Doris 
metadata-level actions such as node registration, decommissioning, or cleanup.
 
diff --git 
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
 
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
index 7fa1ff4a359..c441cb2a69c 100644
--- 
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
+++ 
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
@@ -8,7 +8,7 @@
 }
 ---
 
-Doris Operator 是为满足用户在 Kubernetes 平台上高效部署和运维 Apache Doris 而提供的官方 Kubernetes 
Operator。它把 Doris 组件间的分布式协同经验与 Kubernetes 原生资源管理能力结合起来,为用户提供更简洁、高效、易用的容器化部署方案。
+[Doris Operator](https://github.com/apache/doris-operator) 是为满足用户在 Kubernetes 
平台上高效部署和运维 Apache Doris 而提供的官方 Kubernetes Operator。它把 Doris 组件间的分布式协同经验与 
Kubernetes 原生资源管理能力结合起来,为用户提供更简洁、高效、易用的容器化部署方案。
 
 Doris Operator 基于 Kubernetes CustomResourceDefinitions(CRD)扩展 Kubernetes 
API。用户提交 Doris 自定义资源后,Operator 会根据资源中描述的期望状态,自动创建并维护对应的 
`StatefulSet`、`Service`、`PersistentVolumeClaim` 等 Kubernetes 
资源,并在部分场景下完成节点注册、下线和清理等 Doris 元数据层动作。
 
diff --git 
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
 
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
index 7fa1ff4a359..c441cb2a69c 100644
--- 
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
+++ 
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
@@ -8,7 +8,7 @@
 }
 ---
 
-Doris Operator 是为满足用户在 Kubernetes 平台上高效部署和运维 Apache Doris 而提供的官方 Kubernetes 
Operator。它把 Doris 组件间的分布式协同经验与 Kubernetes 原生资源管理能力结合起来,为用户提供更简洁、高效、易用的容器化部署方案。
+[Doris Operator](https://github.com/apache/doris-operator) 是为满足用户在 Kubernetes 
平台上高效部署和运维 Apache Doris 而提供的官方 Kubernetes Operator。它把 Doris 组件间的分布式协同经验与 
Kubernetes 原生资源管理能力结合起来,为用户提供更简洁、高效、易用的容器化部署方案。
 
 Doris Operator 基于 Kubernetes CustomResourceDefinitions(CRD)扩展 Kubernetes 
API。用户提交 Doris 自定义资源后,Operator 会根据资源中描述的期望状态,自动创建并维护对应的 
`StatefulSet`、`Service`、`PersistentVolumeClaim` 等 Kubernetes 
资源,并在部分场景下完成节点注册、下线和清理等 Doris 元数据层动作。
 
diff --git a/src/components/community-report-next/CommunityReportNext.scss 
b/src/components/community-report-next/CommunityReportNext.scss
index ea10173ba47..9c818deabf0 100644
--- a/src/components/community-report-next/CommunityReportNext.scss
+++ b/src/components/community-report-next/CommunityReportNext.scss
@@ -40,6 +40,9 @@
     position: sticky;
     top: calc(var(--cr-navbar-h) + 24px);
     align-self: flex-start;
+    display: flex;
+    flex-direction: column;
+    gap: 14px;
 }
 
 .community-report__section {
@@ -104,6 +107,84 @@
     line-height: 1.3;
 }
 
+.community-report__links {
+    display: grid;
+    gap: 12px;
+}
+
+.community-report__link-card {
+    position: relative;
+    display: flex;
+    flex-direction: column;
+    gap: 8px;
+    min-height: 116px;
+    padding: 18px 46px 18px 20px;
+    color: var(--cr-ink);
+    text-decoration: none;
+    background: #fff;
+    border: 1px solid var(--cr-line);
+    border-radius: 14px;
+    box-shadow: 0 1px 4px rgba(0, 89, 68, 0.06);
+    transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s 
ease;
+}
+
+.community-report__link-card::after {
+    content: '';
+    position: absolute;
+    top: 18px;
+    right: 18px;
+    display: grid;
+    place-items: center;
+    width: 22px;
+    height: 22px;
+    background: var(--cr-cream);
+    border: 1px solid rgba(6, 128, 95, 0.12);
+    border-radius: 50%;
+    transition: background 0.2s ease, color 0.2s ease;
+}
+
+.community-report__link-card::before {
+    content: '';
+    position: absolute;
+    top: 25px;
+    right: 26px;
+    width: 8px;
+    height: 8px;
+    border-top: 2px solid var(--cr-green-dark);
+    border-right: 2px solid var(--cr-green-dark);
+    transform: rotate(45deg);
+    z-index: 1;
+    transition: border-color 0.2s ease;
+}
+
+.community-report__link-card:hover {
+    color: var(--cr-ink);
+    text-decoration: none;
+    border-color: rgba(6, 128, 95, 0.35);
+    box-shadow: 0 10px 24px rgba(0, 89, 68, 0.10);
+    transform: translateY(-1px);
+}
+
+.community-report__link-card:hover::after {
+    background: var(--cr-green);
+}
+
+.community-report__link-card:hover::before {
+    border-color: #fff;
+}
+
+.community-report__link-title {
+    font-size: 15px;
+    font-weight: 700;
+    line-height: 1.28;
+}
+
+.community-report__link-description {
+    font-size: 13px;
+    line-height: 1.45;
+    color: var(--cr-muted);
+}
+
 /* ---------------- Past-reports dropdown ---------------- */
 
 .community-report__select-wrap {
diff --git a/src/components/community-report-next/CommunityReportNext.tsx 
b/src/components/community-report-next/CommunityReportNext.tsx
index f913a2610ad..b1baa5aa6c5 100644
--- a/src/components/community-report-next/CommunityReportNext.tsx
+++ b/src/components/community-report-next/CommunityReportNext.tsx
@@ -90,6 +90,23 @@ interface CommunityReportNextProps {
     reports: WeeklyReportEntry[];
 }
 
+const COMMUNITY_SURVEY_URL =
+    
'https://docs.google.com/forms/d/e/1FAIpQLSeSppR5JJyXIxNoPlG_hS8RTW8k2tsCkpC0h68WSN6CEUsWcA/viewform';
+const DORIS_ROADMAP_ISSUE_URL = 'https://github.com/apache/doris/issues/60036';
+
+const sidebarLinks = [
+    {
+        title: 'Help Shape the Future of Apache Doris',
+        description: 'Complete the survey to help us build a better Doris 
community.',
+        href: COMMUNITY_SURVEY_URL,
+    },
+    {
+        title: 'Which Doris Feature Do You Want to Discuss or Build?',
+        description: 'Leave your reply on the GitHub issue.',
+        href: DORIS_ROADMAP_ISSUE_URL,
+    },
+];
+
 export default function CommunityReportNext({ reports }: 
CommunityReportNextProps): JSX.Element {
     const latest = reports[0];
     const historical = reports.slice(1);
@@ -123,7 +140,7 @@ export default function CommunityReportNext({ reports }: 
CommunityReportNextProp
         >
             <div className="community-report">
                 <div className="community-report__layout">
-                    <aside className="community-report__sidebar" 
aria-label="Reports">
+                    <aside className="community-report__sidebar" 
aria-label="Reports and community feedback">
                         <div className="community-report__section">
                             <h2 
className="community-report__section-title">Weekly Report</h2>
 
@@ -161,6 +178,21 @@ export default function CommunityReportNext({ reports }: 
CommunityReportNextProp
                                 </div>
                             )}
                         </div>
+
+                        <div className="community-report__links" 
aria-label="Community feedback links">
+                            {sidebarLinks.map(link => (
+                                <a
+                                    key={link.href}
+                                    className="community-report__link-card"
+                                    href={link.href}
+                                    target="_blank"
+                                    rel="noopener noreferrer"
+                                >
+                                    <span 
className="community-report__link-title">{link.title}</span>
+                                    <span 
className="community-report__link-description">{link.description}</span>
+                                </a>
+                            ))}
+                        </div>
                     </aside>
 
                     <main className="community-report__content">
diff --git a/src/components/community-report-next/WeeklyReport.scss 
b/src/components/community-report-next/WeeklyReport.scss
index 44222f17901..3288da2c447 100644
--- a/src/components/community-report-next/WeeklyReport.scss
+++ b/src/components/community-report-next/WeeklyReport.scss
@@ -359,41 +359,51 @@
 }
 
 .wr-highlight__panel {
+    display: grid;
+    gap: 14px;
     padding: 0 20px 20px 47px;
 }
 
 .wr-highlight__text {
     margin: 0;
+    padding: 16px 18px;
+    background: rgba(5, 76, 57, 0.38);
+    border: 1px solid rgba(255, 252, 245, 0.16);
+    border-radius: 8px;
     font-size: 15px;
     line-height: 1.68;
-    color: rgba(255, 252, 245, 0.88);
+    color: rgba(255, 252, 245, 0.9);
 }
 
 .wr-highlight__panel .wr-scn__prs {
-    margin-top: 14px;
-    border-top-color: rgba(255, 252, 245, 0.18);
+    margin: 0;
+    padding: 8px 16px;
+    background: rgba(255, 252, 245, 0.96);
+    border: 1px solid rgba(5, 76, 57, 0.18);
+    border-radius: 8px;
+    box-shadow: inset 3px 0 0 var(--wr-yellow);
 }
 
 .wr-highlight__panel .wr-scn__pr {
-    border-top-color: rgba(255, 252, 245, 0.18);
+    border-top-color: rgba(5, 76, 57, 0.18);
 }
 
 .wr-highlight__panel .wr-scn__pr-title {
-    color: rgba(255, 252, 245, 0.92);
+    color: var(--wr-ink);
 }
 
 .wr-highlight__panel .wr-scn__pr-num {
-    color: var(--wr-yellow);
-    border-bottom-color: rgba(255, 210, 63, 0.5);
+    color: var(--wr-green);
+    border-bottom-color: rgba(6, 128, 95, 0.32);
 }
 
 .wr-highlight__panel .wr-scn__pr-num:hover {
-    border-bottom-color: var(--wr-yellow);
+    border-bottom-color: var(--wr-green);
 }
 
 .wr-highlight__panel .wr-scn__new {
-    color: var(--wr-paper);
-    background: rgba(255, 252, 245, 0.16);
+    color: var(--wr-green-dark);
+    background: rgba(6, 128, 95, 0.12);
 }
 
 /* Repo tabs (only shown when a report covers more than one repository) */
@@ -703,7 +713,15 @@
     }
 
     .wr-highlight__panel {
-        padding: 0 16px 17px 42px;
+        padding: 0 16px 17px 16px;
+    }
+
+    .wr-highlight__text {
+        padding: 14px 15px;
+    }
+
+    .wr-highlight__panel .wr-scn__prs {
+        padding: 8px 14px;
     }
 
     .wr-scenario-tabs {
diff --git a/src/components/home-next/HomeNext.scss 
b/src/components/home-next/HomeNext.scss
index 4e9ed5807f0..165e604f869 100644
--- a/src/components/home-next/HomeNext.scss
+++ b/src/components/home-next/HomeNext.scss
@@ -23,3 +23,9 @@
     overflow-x: clip;
 }
 
+.use-cases-next,
+.features-next__card,
+.ecosystem-next,
+.deployment-next {
+    scroll-margin-top: 88px;
+}
diff --git a/src/components/home-next/sections/DeploymentSection.tsx 
b/src/components/home-next/sections/DeploymentSection.tsx
index b2d5fd03595..934d92d37ce 100644
--- a/src/components/home-next/sections/DeploymentSection.tsx
+++ b/src/components/home-next/sections/DeploymentSection.tsx
@@ -83,11 +83,11 @@ function DeploymentCard({ card }: { card: 
DeploymentCardItem }): JSX.Element {
 
 export function DeploymentSection(): JSX.Element {
     return (
-        <section className="deployment-next">
+        <section id="deployment" className="deployment-next" 
aria-labelledby="deployment-next-title">
             <div className="home-next-container">
                 <div className="deployment-next__header">
                     <div className="deployment-next__eyebrow">Deployment</div>
-                    <h2 className="deployment-next__headline">
+                    <h2 className="deployment-next__headline" 
id="deployment-next-title">
                         <span 
className="deployment-next__headline-line">Choose Your Architecture</span>
                         <span className="deployment-next__headline-line 
deployment-next__headline-line--accent">
                             One Engine, Two Modes
diff --git a/src/components/home-next/sections/EcosystemSection.scss 
b/src/components/home-next/sections/EcosystemSection.scss
index d1f8935b26b..7cd935c2e78 100644
--- a/src/components/home-next/sections/EcosystemSection.scss
+++ b/src/components/home-next/sections/EcosystemSection.scss
@@ -114,6 +114,12 @@
         perspective-origin: 50% 50%;
     }
 
+    &__card-shell {
+        transform-style: preserve-3d;
+        transition: transform 0.5s cubic-bezier(0.18, 0.9, 0.25, 1.15);
+        will-change: transform;
+    }
+
     &__card {
         position: relative;
         padding: 56px;
@@ -126,9 +132,6 @@
             0 38px 90px -44px rgba(6, 70, 50, 0.45),
             0 18px 48px -30px rgba(6, 70, 50, 0.28),
             inset 0 1px 0 rgba(255, 255, 255, 0.75);
-        transform-style: preserve-3d;
-        transition: transform 0.5s cubic-bezier(0.18, 0.9, 0.25, 1.15);
-        will-change: transform;
     }
 
     &__panel {
@@ -371,6 +374,24 @@
             0 0 34px -16px rgba(45, 223, 168, 0.8);
     }
 
+    &__graphic-link {
+        display: block;
+        color: inherit;
+        border-radius: 8px;
+        text-decoration: none;
+        cursor: pointer;
+
+        &:hover {
+            color: inherit;
+            text-decoration: none;
+        }
+
+        &:focus-visible {
+            outline: 3px solid var(--en-yellow);
+            outline-offset: 4px;
+        }
+    }
+
     &__doris-logo {
         width: auto;
         height: 36px;
@@ -595,9 +616,12 @@
             perspective: none;
         }
 
+        &__card-shell {
+            transform: none !important;
+        }
+
         &__card {
             padding: 22px;
-            transform: none !important;
         }
 
         &__panel {
@@ -721,7 +745,7 @@
 
 @media (prefers-reduced-motion: reduce) {
     .ecosystem-next {
-        &__card,
+        &__card-shell,
         &__block,
         &__doris {
             transition: none;
@@ -731,7 +755,6 @@
             transform: translateY(var(--ecosystem-doris-offset-y)) !important;
         }
 
-        &__card,
         &__block:hover {
             transform: none !important;
         }
diff --git a/src/components/home-next/sections/EcosystemSection.tsx 
b/src/components/home-next/sections/EcosystemSection.tsx
index 780f62c8e71..9e06ab2805b 100644
--- a/src/components/home-next/sections/EcosystemSection.tsx
+++ b/src/components/home-next/sections/EcosystemSection.tsx
@@ -6,6 +6,7 @@ import React, {
     useRef,
     useState,
 } from 'react';
+import Link from '@docusaurus/Link';
 import './EcosystemSection.scss';
 
 type EcosystemSide = 'left' | 'right';
@@ -33,6 +34,8 @@ interface TiltState {
     ry: number;
 }
 
+const DATA_INTEGRATION_DOC_LINK = 
'/docs/dev/connection-integration/data-integration/intro';
+
 interface EcosystemBlockProps {
     data: EcosystemGroup;
     side: EcosystemSide;
@@ -509,7 +512,11 @@ function CompactEcosystem(): JSX.Element {
             aria-labelledby="ecosystem-next-title"
         >
             <EcosystemHeader />
-            <div className="ecosystem-next__compact-card">
+            <Link
+                className="ecosystem-next__graphic-link 
ecosystem-next__compact-card"
+                to={DATA_INTEGRATION_DOC_LINK}
+                aria-label="View Apache Doris data integration documentation"
+            >
                 <CompactTier label="Upstream — Sources" num="01" 
groups={SOURCES} />
                 <CompactConnector />
                 <div className="ecosystem-next__compact-engine">
@@ -526,7 +533,7 @@ function CompactEcosystem(): JSX.Element {
                 </div>
                 <CompactConnector />
                 <CompactTier label="Downstream — Consumers" num="03" 
groups={CONSUMERS} />
-            </div>
+            </Link>
         </section>
     );
 }
@@ -550,49 +557,55 @@ export function EcosystemSection(): JSX.Element {
                 <EcosystemHeader showCoverage />
 
                 <div className="ecosystem-next__stage">
-                    <div className="ecosystem-next__card" ref={cardRef}>
-                        <div className="ecosystem-next__panel" ref={panelRef}>
-                            <FlowLines paths={paths} />
-
-                            <div className="ecosystem-next__grid">
-                                <div className="ecosystem-next__col 
ecosystem-next__col--sources">
-                                    <div className="ecosystem-next__col-head">
-                                        <span 
className="ecosystem-next__col-num">01</span>
-                                        Upstream - Sources
+                    <div className="ecosystem-next__card-shell" ref={cardRef}>
+                        <Link
+                            className="ecosystem-next__graphic-link 
ecosystem-next__card"
+                            to={DATA_INTEGRATION_DOC_LINK}
+                            aria-label="View Apache Doris data integration 
documentation"
+                        >
+                            <div className="ecosystem-next__panel" 
ref={panelRef}>
+                                <FlowLines paths={paths} />
+
+                                <div className="ecosystem-next__grid">
+                                    <div className="ecosystem-next__col 
ecosystem-next__col--sources">
+                                        <div 
className="ecosystem-next__col-head">
+                                            <span 
className="ecosystem-next__col-num">01</span>
+                                            Upstream - Sources
+                                        </div>
+                                        {SOURCES.map(source => (
+                                            <EcosystemBlock key={source.id} 
data={source} side="left" refMap={blockRefs} />
+                                        ))}
                                     </div>
-                                    {SOURCES.map(source => (
-                                        <EcosystemBlock key={source.id} 
data={source} side="left" refMap={blockRefs} />
-                                    ))}
-                                </div>
 
-                                <div className="ecosystem-next__col 
ecosystem-next__col--center">
-                                    <div className="ecosystem-next__col-head 
ecosystem-next__col-head--center">
-                                        <span 
className="ecosystem-next__col-num">02</span>
-                                        The Engine
-                                    </div>
-                                    <div className="ecosystem-next__doris" 
ref={dorisRef}>
-                                        <div 
className="ecosystem-next__doris-core">
-                                            <img
-                                                
className="ecosystem-next__doris-logo"
-                                                src="/images/logo-doris.svg"
-                                                alt="Apache Doris"
-                                                draggable={false}
-                                            />
+                                    <div className="ecosystem-next__col 
ecosystem-next__col--center">
+                                        <div 
className="ecosystem-next__col-head ecosystem-next__col-head--center">
+                                            <span 
className="ecosystem-next__col-num">02</span>
+                                            The Engine
+                                        </div>
+                                        <div className="ecosystem-next__doris" 
ref={dorisRef}>
+                                            <div 
className="ecosystem-next__doris-core">
+                                                <img
+                                                    
className="ecosystem-next__doris-logo"
+                                                    
src="/images/logo-doris.svg"
+                                                    alt="Apache Doris"
+                                                    draggable={false}
+                                                />
+                                            </div>
                                         </div>
                                     </div>
-                                </div>
 
-                                <div className="ecosystem-next__col 
ecosystem-next__col--consumers">
-                                    <div className="ecosystem-next__col-head 
ecosystem-next__col-head--right">
-                                        <span 
className="ecosystem-next__col-num">03</span>
-                                        Downstream - Consumers
+                                    <div className="ecosystem-next__col 
ecosystem-next__col--consumers">
+                                        <div 
className="ecosystem-next__col-head ecosystem-next__col-head--right">
+                                            <span 
className="ecosystem-next__col-num">03</span>
+                                            Downstream - Consumers
+                                        </div>
+                                        {CONSUMERS.map(consumer => (
+                                            <EcosystemBlock key={consumer.id} 
data={consumer} side="right" refMap={blockRefs} />
+                                        ))}
                                     </div>
-                                    {CONSUMERS.map(consumer => (
-                                        <EcosystemBlock key={consumer.id} 
data={consumer} side="right" refMap={blockRefs} />
-                                    ))}
                                 </div>
                             </div>
-                        </div>
+                        </Link>
                     </div>
                 </div>
             </div>
diff --git a/src/components/home-next/sections/FeaturesSection.scss 
b/src/components/home-next/sections/FeaturesSection.scss
index 48d7aefaf71..a2008ad6824 100644
--- a/src/components/home-next/sections/FeaturesSection.scss
+++ b/src/components/home-next/sections/FeaturesSection.scss
@@ -54,6 +54,14 @@
         width: 100%;
     }
 
+    &__card-anchor {
+        position: absolute;
+        left: 0;
+        width: 1px;
+        height: 1px;
+        pointer-events: none;
+    }
+
     &__stage {
         position: sticky;
         top: 0;
@@ -553,6 +561,14 @@
             padding: 0 0 72px;
         }
 
+        &__card-anchor {
+            position: static;
+            display: block;
+            width: 0;
+            height: 0;
+            overflow: hidden;
+        }
+
         &__stage {
             position: relative;
             top: auto;
diff --git a/src/components/home-next/sections/FeaturesSection.tsx 
b/src/components/home-next/sections/FeaturesSection.tsx
index 72d393169f3..9124949ba2e 100644
--- a/src/components/home-next/sections/FeaturesSection.tsx
+++ b/src/components/home-next/sections/FeaturesSection.tsx
@@ -11,6 +11,7 @@ interface CapabilityItem {
 
 interface Capability {
     num: string;
+    hashId: string;
     title: string;
     subtitle: string;
     tone: CapabilityTone;
@@ -27,6 +28,7 @@ interface Capability {
 const CAPABILITIES: Capability[] = [
     {
         num: '01',
+        hashId: 'real-time-analytics',
         title: 'Real-Time Analytics',
         subtitle: 'The fastest end-to-end engine from ingestion to insight.',
         tone: 'green',
@@ -45,6 +47,7 @@ const CAPABILITIES: Capability[] = [
     },
     {
         num: '02',
+        hashId: 'lakehouse-analytics',
         title: 'Lakehouse Analytics',
         subtitle: 'Real-time analytics, applied directly to your open 
lakehouse.',
         tone: 'cream',
@@ -63,6 +66,7 @@ const CAPABILITIES: Capability[] = [
     },
     {
         num: '03',
+        hashId: 'hybrid-search',
         title: 'Hybrid Search',
         subtitle: 'First-class search across structured, text, and vector 
data.',
         tone: 'ink',
@@ -385,6 +389,37 @@ export function FeaturesSection(): JSX.Element {
         };
     }, [isNarrowViewport]);
 
+    useEffect(() => {
+        function scrollToCapabilityHash() {
+            const hash = window.location.hash.slice(1);
+            if (!hash) return;
+
+            const idx = CAPABILITIES.findIndex(capability => capability.hashId 
=== hash);
+            if (idx === -1) return;
+
+            if (isNarrowViewport) {
+                cardRefs.current[idx]?.scrollIntoView({ block: 'start' });
+                return;
+            }
+
+            const containerEl = containerRef.current;
+            if (!containerEl) return;
+
+            const transitions = Math.max(1, CAPABILITIES.length - 1);
+            const rect = containerEl.getBoundingClientRect();
+            const containerTop = rect.top + window.scrollY;
+            const scrollable = Math.max(0, containerEl.offsetHeight - 
window.innerHeight);
+            const targetTop = containerTop + (idx / transitions) * scrollable;
+
+            window.scrollTo({ top: targetTop, behavior: 'auto' });
+        }
+
+        scrollToCapabilityHash();
+        window.addEventListener('hashchange', scrollToCapabilityHash);
+
+        return () => window.removeEventListener('hashchange', 
scrollToCapabilityHash);
+    }, [isNarrowViewport]);
+
     return (
         <section className="features-next">
             <div className="home-next-container">
@@ -399,6 +434,15 @@ export function FeaturesSection(): JSX.Element {
                     ref={containerRef}
                     style={isNarrowViewport ? undefined : { height: 
`${CAPABILITIES.length * 100}vh` }}
                 >
+                    {CAPABILITIES.map((capability, i) => (
+                        <span
+                            key={`${capability.hashId}-anchor`}
+                            id={capability.hashId}
+                            className="features-next__card-anchor"
+                            style={isNarrowViewport ? undefined : { top: `${i 
* 100}vh` }}
+                            aria-hidden="true"
+                        />
+                    ))}
                     <div className="features-next__stage">
                         {CAPABILITIES.map((capability, i) => (
                             <CapabilityCard
diff --git a/src/components/home-next/sections/UseCasesSection.tsx 
b/src/components/home-next/sections/UseCasesSection.tsx
index 167c771fcb6..97c1f193d85 100644
--- a/src/components/home-next/sections/UseCasesSection.tsx
+++ b/src/components/home-next/sections/UseCasesSection.tsx
@@ -41,7 +41,7 @@ const USE_CASES: UseCase[] = [
 
 export function UseCasesSection(): JSX.Element {
     return (
-        <section className="use-cases-next" 
aria-labelledby="use-cases-next-title">
+        <section id="use-cases" className="use-cases-next" 
aria-labelledby="use-cases-next-title">
             <div className="home-next-container">
                 <div className="use-cases-next__header">
                     <div className="use-cases-next__eyebrow">Use Cases</div>
diff --git a/src/pages/community-report/_reports/2026-06-29.mdx 
b/src/pages/community-report/_reports/2026-06-29.mdx
index af9553c6d87..997b77267de 100644
--- a/src/pages/community-report/_reports/2026-06-29.mdx
+++ b/src/pages/community-report/_reports/2026-06-29.mdx
@@ -20,58 +20,32 @@ export const stats = [
 
 export const report = {
   "summary": {
-    "lead": "This week Apache Doris merged 113 PRs with 42 contributors 
active, with the community concentrating on real-time data warehousing and 
kernel engineering while advancing the multi-modal lakehouse and cloud-native 
compute-storage separation tracks. Core capabilities deepened around Catalog 
SPI decoupling, scan execution optimization, inverted index evolution, and peer 
routing with cache tiering, alongside reinforced security/governance and 
observability—signaling a clear direc [...]
+    "lead": "This week the Doris community merged 113 PRs with 42 
contributors, showing intense iteration around the twin tracks of real-time 
data warehousing and kernel engineering. The capability footprint is steadily 
expanding toward multi-modal lakehouse, cloud-native multi-tenancy, and 
next-generation inverted indexing, with security, governance, and observability 
hardening in parallel — signaling clear acceleration on real-time analytics and 
lakehouse convergence.",
     "highlights": [
       {
-        "title": "Catalog SPI decoupling and external data source expansion",
-        "narrative": "FE connectors move to a loadable Catalog SPI, easing new 
data-source onboarding and upgrades, while BE gains a unified File Scanner v2 
for Parquet, CSV, JSON and similar external files. Paimon write support and 
OIDC session credentials for Iceberg REST close the lakehouse read-write and 
secure-access loop, making Doris easier",
+        "title": "Lakehouse catalog plugin-ization and write support",
+        "narrative": "Doris kicks off a Catalog SPI migration to decouple 
built-in connectors from FE core into loadable plugins, adds native write 
support for Apache Paimon tables, and lands the file scanner v2 reader stack 
with native Parquet/CSV/JSON readers, projection, and predicate 
pushdown—tightening the read-write loop for multi-modal lakehouse workloads.",
         "prs": [
-          {
-            "num": 65185,
-            "title": "[Tracking][Catalog] Catalog SPI migration — decouple 
built-in connectors from FE core into loadable plugins",
-            "url": "https://github.com/apache/doris/issues/65185";
-          },
           {
             "num": 65086,
             "title": "Support writing to Apache Paimon tables",
             "url": "https://github.com/apache/doris/issues/65086";
           },
+          {
+            "num": 65185,
+            "title": "[Tracking][Catalog] Catalog SPI migration — decouple 
built-in connectors from FE core into loadable plugins",
+            "url": "https://github.com/apache/doris/issues/65185";
+          },
           {
             "num": 65046,
             "title": "[feature](be) Add file scanner v2 readers ",
             "url": "https://github.com/apache/doris/pull/65046";
-          },
-          {
-            "num": 63068,
-            "title": "[feature](fe) Support OIDC session credentials for 
Iceberg REST catalog",
-            "url": "https://github.com/apache/doris/pull/63068";
           }
         ]
       },
       {
-        "title": "Cloud-native compute-storage separation: peer routing and 
cache tiering",
-        "narrative": "Cross-compute-group peer read routing enables data 
sharing across groups, while a new write-index-only cache config curbs IO 
amplification under hot writes. Tenant-level colocation trims replica 
redundancy in multi-tenant deployments, together pushing the 
separation-of-storage-and-compute architecture toward higher elasticity and 
finer resource control.",
-        "prs": [
-          {
-            "num": 63818,
-            "title": "[feat](cloud) cross compute group peer read routing with 
peer cache I/O optimization",
-            "url": "https://github.com/apache/doris/pull/63818";
-          },
-          {
-            "num": 64995,
-            "title": "[feature](cloud) Support file cache write index only",
-            "url": "https://github.com/apache/doris/pull/64995";
-          },
-          {
-            "num": 64167,
-            "title": "[feat](colocate) support tenant-level colocation",
-            "url": "https://github.com/apache/doris/pull/64167";
-          }
-        ]
-      },
-      {
-        "title": "Scan and query execution: pruning, lazy read, and runtime 
filters",
-        "narrative": "Lazy reads for pruned complex-type subcolumns and 
expression-based ZoneMap pruning cut IO across internal and Parquet scans. 
Global runtime filters now publish through an adaptive tree, removing duplicate 
broadcasts of large filters in big clusters, while dynamic table snapshot reads 
keep extending real-time warehouse capabilities.",
+        "title": "Real-time DWH: query pushdown and IO pruning",
+        "narrative": "This week brings lazy reading on pruned complex columns, 
expression-based ZoneMap pruning (comparisons, IN, IS NULL, starts_with) across 
internal and Parquet scans, adaptive global runtime filter publishing to ease 
coordinator fan-out, and ongoing work on multi-stage predicate lazy 
materialization—sharper pruning and leaner IO for real-time queries.",
         "prs": [
           {
             "num": 59263,
@@ -92,33 +66,33 @@ export const report = {
             "num": 64891,
             "title": "[enhancement](Multi-stage lm) Multi-Stage Predicate Lazy 
Materialization",
             "url": "https://github.com/apache/doris/pull/64891";
-          },
-          {
-            "num": 64776,
-            "title": " [feat](dynamic table) support table stream part 4: 
support snapshot read",
-            "url": "https://github.com/apache/doris/pull/64776";
           }
         ]
       },
       {
-        "title": "Inverted index evolution: Japanese tokenizer and SNII 
format",
-        "narrative": "A new Kuromoji morphological analyzer closes Doris's gap 
on space-less Japanese text, while the SNII inverted-index storage format lands 
as an alternative path for better compression and extensibility. Together they 
strengthen full-text search and observability for multi-language corpora and 
AI-agent workloads.",
+        "title": "Cloud-native multi-tenant compute and cache",
+        "narrative": "Cloud gains cross-compute-group peer read routing with 
optimized peer cache IO, a new option to cache only index files during rowset 
writes and compaction to protect hot data, and tenant-level colocation entering 
review to cut replica redundancy for multi-tenant JOINs—together improving 
isolation and cache efficiency in the cloud.",
         "prs": [
           {
-            "num": 64667,
-            "title": "[feature](inverted-index) Add Japanese (Kuromoji) 
morphological analyzer",
-            "url": "https://github.com/apache/doris/pull/64667";
+            "num": 63818,
+            "title": "[feat](cloud) cross compute group peer read routing with 
peer cache I/O optimization",
+            "url": "https://github.com/apache/doris/pull/63818";
           },
           {
-            "num": 64909,
-            "title": "[feature](be) Add SNII inverted index storage format",
-            "url": "https://github.com/apache/doris/pull/64909";
+            "num": 64995,
+            "title": "[feature](cloud) Support file cache write index only",
+            "url": "https://github.com/apache/doris/pull/64995";
+          },
+          {
+            "num": 64167,
+            "title": "[feat](colocate) support tenant-level colocation",
+            "url": "https://github.com/apache/doris/pull/64167";
           }
         ]
       },
       {
-        "title": "Security and governance hardening across FE and TDE",
-        "narrative": "Intra-FE RPC now switches to HTTPS when TLS is enabled, 
removing the plaintext fallback in hardened deployments. TDE gains Aliyun KMS 
and Ranger KMS provider metadata, letting transparent encryption plug into 
enterprise key management. The combined effect raises Doris's default security 
posture for compliance-sensitive workloads.",
+        "title": "Security and governance hardening",
+        "narrative": "Intra-FE communication now upgrades to HTTPS when 
enable_https is set, closing the plaintext gap in hardened deployments; TDE 
adds Aliyun KMS and Ranger KMS as recognized root-key providers, with refreshed 
KMS configuration documentation for cloud and Hadoop/Ranger endpoints—hardening 
key management and transport encryption.",
         "prs": [
           {
             "num": 60921,
@@ -131,6 +105,22 @@ export const report = {
             "url": "https://github.com/apache/doris/pull/64561";
           }
         ]
+      },
+      {
+        "title": "Next-gen inverted index and Japanese tokenization",
+        "narrative": "Doris adds a Japanese Kuromoji morphological analyzer to 
the inverted index, fixing tokenization for space-less Japanese text so MATCH 
queries work end-to-end, and integrates the SNII inverted index storage format 
as a separate write/read path—advancing both multilingual search and index 
storage efficiency.",
+        "prs": [
+          {
+            "num": 64667,
+            "title": "[feature](inverted-index) Add Japanese (Kuromoji) 
morphological analyzer",
+            "url": "https://github.com/apache/doris/pull/64667";
+          },
+          {
+            "num": 64909,
+            "title": "[feature](be) Add SNII inverted index storage format",
+            "url": "https://github.com/apache/doris/pull/64909";
+          }
+        ]
       }
     ],
     "numbers": {
@@ -145,51 +135,217 @@ export const report = {
       "scenarios": [
         {
           "name": "Multi-modal Lakehouse",
-          "mergedNarrative": "The multi-modal lakehouse scenario stabilized 
Iceberg/Hive/external-write paths. Iceberg v3 row-lineage columns are rejected 
to avoid hidden conflicts; COUNT(*) pushdown tolerates missing snapshot summary 
counters; LZ4 compression now ships to Iceberg/Hive Parquet/ORC writers; binary 
columns are emitted with correct Arrow types; nested decimal precision 
promotion is supported; external writers clean up",
-          "merged": [],
-          "inProgressNarrative": "Multi-modal Lakehouse work strengthens 
external read/write paths: Paimon write P0, Iceberg position-deletes system 
table, ORC format v2 reader, Parquet dict bounds checks, Arrow Flight 
coordinator lifecycle, OSS/HTTP FS SPI normalization, MaxCompute 
partition-by-name parsing, Iceberg REST OAuth re-auth on 401, S3 load complex 
types for Parquet/ORC, and Hive-ORC column-name default —",
-          "inProgress": []
+          "mergedNarrative": "Lakehouse gaps were closed: Iceberg v3 
row-lineage hidden column collisions are rejected up front, COUNT(*) pushdown 
tolerates missing snapshot counters, Parquet/ORC writers gain LZ4 support, 
binary columns now emit proper Arrow types instead of utf8, and nested decimal 
precision promotion is validated. External writes clean up the real target 
file",
+          "merged": [
+            {
+              "num": 63825,
+              "title": "[fix](fe) Reject Iceberg v3 row lineage columns",
+              "url": "https://github.com/apache/doris/pull/63825";
+            },
+            {
+              "num": 64648,
+              "title": "[fix](iceberg) Fix NPE in COUNT(*) pushdown when 
snapshot summary omits total-* counters",
+              "url": "https://github.com/apache/doris/pull/64648";
+            },
+            {
+              "num": 64678,
+              "title": "[fix](external-write) Delete the actual data file on 
write failure to avoid orphan files",
+              "url": "https://github.com/apache/doris/pull/64678";
+            },
+            {
+              "num": 64723,
+              "title": "[fix](iceberg)Support LZ4 compression for iceberg/hive 
Parquet/ORC writers.",
+              "url": "https://github.com/apache/doris/pull/64723";
+            }
+          ],
+          "inProgressNarrative": "Lakehouse work keeps broadening 
Iceberg/Hive/Paimon/MaxCompute read-write and governance. The key addition of 
OIDC user-session credential forwarding for Iceberg REST lets queries access 
data under the real user identity, paired with OAuth 401 re-auth, Arrow Flight 
coordinator lifetime fixes, the new ORC format v2 reader, and Paimon write P0 
to steadily",
+          "inProgress": [
+            {
+              "num": 63068,
+              "title": "[feature](fe) Support OIDC session credentials for 
Iceberg REST catalog",
+              "url": "https://github.com/apache/doris/pull/63068";
+            }
+          ]
         },
         {
           "name": "Real-time Data Warehouse",
-          "mergedNarrative": "Real-time data warehouse work targeted P0 
stability and correctness. Group commit recovers from missing block queues and 
load_id reuse that dropped rows; SimplifyAggGroupBy now verifies injectivity; 
local shuffle eliminates the bucket-shuffle serial bottleneck and upgrades 
parallelism; local runtime filter merge deadlocks, pipeline-task 
wake-after-finalize crashes, and variable-length column overflows across 
sorted-run",
-          "merged": [],
-          "inProgressNarrative": "Real-time DWH advances the optimizer, load 
pipeline, and ops visibility: Nereids adds expression defaults, named 
BloomFilter, regexp rewrite, FD-redundant group-by elimination, stats-driven 
distinct/eager-agg pushdown, anti/outer-join conversion, bucket shuffle for set 
ops; loads gain routine-load target swap, stream-load progress observability, 
UTF-8 validation toggle, Arrow case-sensitive columns, label-aware abort, 
binlog hidden keys,",
-          "inProgress": []
+          "mergedNarrative": "Real-time DWH query and ingest paths were both 
hardened: SimplifyAggGroupBy now checks injectivity to avoid wrong grouping, 
group commit tracks pending requests and isolates reused prepared plans' 
load_ids, and recursive CTE target blocks are dispatched per scan instance 
instead of per backend. The BE fixed BIGINT_MIN div SIGFPE, null child",
+          "merged": [
+            {
+              "num": 63379,
+              "title": "[improvement](fe) Prune partition keys from partition 
topn sort",
+              "url": "https://github.com/apache/doris/pull/63379";
+            },
+            {
+              "num": 63722,
+              "title": "[fix](group commit) fix can not get a block queue",
+              "url": "https://github.com/apache/doris/pull/63722";
+            },
+            {
+              "num": 64335,
+              "title": "[fix](simplify agg) SimplifyAggGroupBy should verify 
injectivity",
+              "url": "https://github.com/apache/doris/pull/64335";
+            },
+            {
+              "num": 64362,
+              "title": "[fix](group commit) fix lost row when prepared stmt 
reused plan shares one load_id",
+              "url": "https://github.com/apache/doris/pull/64362";
+            }
+          ],
+          "inProgressNarrative": "A highlight of real-time DWH work is the 
snapshot-read slice of the dynamic table streaming series, a key milestone for 
continuously refreshing tables; alongside it, MTMV refresh serialization, 
routine-load target-table switching, last-schedule-time visibility, and 
INSERT-INTO-SELECT progress through SHOW LOAD make ingestion and refresh far 
more observable and reliable. Many newly",
+          "inProgress": [
+            {
+              "num": 64776,
+              "title": " [feat](dynamic table) support table stream part 4: 
support snapshot read",
+              "url": "https://github.com/apache/doris/pull/64776";
+            }
+          ]
         },
         {
           "name": "Compute-Storage Separation & Cloud-Native",
-          "mergedNarrative": "Compute-storage separation and cloud-native 
reliability advanced this week. Queries hitting E-230 now force a fresh version 
cache; start.sh accepts multiple config files; version reads use snapshot 
transactions to avoid write conflicts with update_table_version; S3FileWriter 
now recovers from async submit failures; file-cache evict metrics are aligned 
with the FileCacheType enum; Azure",
-          "merged": [],
-          "inProgressNarrative": "Compute-storage separation and cloud-native 
work keeps hardening meta service, filesystem, and cache reliability and 
observability: capability-gated MS_TOO_BUSY, warm-up job count bvar, recycler 
S3 timeout fix, LRU restore speedup, file-cache skip-after-threshold, 
post-alter tablet meta sync, label-aware transaction abort, Azure glob 
pushdown, HDFS property migration, HTTP FS SPI scaffolding, segment id list,",
+          "mergedNarrative": "Compute-storage separation and cloud-native work 
emphasized control and stability: retries on E-230 now drop the version-cache 
TTL to fetch the freshest version, table_version reads inside transactions 
switch to snapshot reads to remove self-conflicts, and bugs in S3 async 
submission, file-cache queue metrics, Azure resource persistence (missing 
clazz), and partition storage-policy",
+          "merged": [
+            {
+              "num": 63721,
+              "title": "[fix](fe) set cloud version_cache_ttl to 0 temporarily 
if retry a query with -230",
+              "url": "https://github.com/apache/doris/pull/63721";
+            },
+            {
+              "num": 63924,
+              "title": "[opt](cloud) Support multiple config files in 
start.sh",
+              "url": "https://github.com/apache/doris/pull/63924";
+            },
+            {
+              "num": 64647,
+              "title": "[fix](cloud) use snapshot read for table version to 
avoid txn conflict",
+              "url": "https://github.com/apache/doris/pull/64647";
+            },
+            {
+              "num": 64779,
+              "title": "[fix](s3) handle S3 file writer async task submission 
failures",
+              "url": "https://github.com/apache/doris/pull/64779";
+            },
+            {
+              "num": 64897,
+              "title": "[fix](be) Fix file cache queue evict size metrics",
+              "url": "https://github.com/apache/doris/pull/64897";
+            }
+          ],
+          "inProgressNarrative": "Compute-storage separation work this week 
sharpens Meta Service, file cache, and tiered storage. Fixes for cloud recycler 
S3 timeouts, proactive tablet meta sync after alter, and capability-gated 
MS_TOO_BUSY errors improve cross-version stability and operability, while new 
warm-up job metrics, threshold-based remote cache write cutoff, parallel LRU 
restore, and TopN lazy-materialization",
           "inProgress": []
         },
         {
           "name": "Agent Observability",
-          "mergedNarrative": "This scenario hardens observability across 
Variant, inverted-index, and Delete paths. Variant compaction now distinguishes 
empty keys from the root to prevent misrouting into sparse columns; 
tokenization rejects invalid char_filter replacements; DELETE supports 
generated-column partial updates; inverted-index predicates no longer crash on 
null literals; and regression-side pinning plus bool-output normalization 
reduce",
-          "merged": [],
-          "inProgressNarrative": "Agent Observability work is hardening legacy 
index paths by blocking creation of inverted index V1 in FE, preventing the 
small-file merge and packed-file path bypass that could amplify issues during 
agent monitoring and export.",
+          "mergedNarrative": "Half-structured and indexing paths were hardened 
this week: variant compaction now correctly distinguishes the root path from 
empty keys instead of forcing them into sparse columns, FE tightens 
inverted-index char_filter replacement validation, and the BE fixes a crash 
from NULL literals in index predicates while properly handling generated 
columns in",
+          "merged": [
+            {
+              "num": 64641,
+              "title": "[fix](variant) Preserve empty key during variant 
compaction",
+              "url": "https://github.com/apache/doris/pull/64641";
+            },
+            {
+              "num": 64794,
+              "title": "[fix](fe) Reject invalid char filter replacement in 
tokenize",
+              "url": "https://github.com/apache/doris/pull/64794";
+            },
+            {
+              "num": 64884,
+              "title": "[fix](fe) Handle generated columns in delete partial 
update",
+              "url": "https://github.com/apache/doris/pull/64884";
+            },
+            {
+              "num": 65093,
+              "title": "[fix](test) pin variant defaults in check_before_quit",
+              "url": "https://github.com/apache/doris/pull/65093";
+            },
+            {
+              "num": 65138,
+              "title": "[fix](be) Fix null query crash in inverted index 
predicates",
+              "url": "https://github.com/apache/doris/pull/65138";
+            }
+          ],
+          "inProgressNarrative": "To prevent tables from silently being 
created with inverted index V1 when users replay historical DDL, the community 
is gating V1 creation at the FE so index format stays intentional and storage 
amplification from bypassing small-file merging and packed paths is avoided.",
           "inProgress": []
         },
         {
           "name": "Ecosystem Integration",
-          "mergedNarrative": "Ecosystem-integration work reconciled 
client-side protocol differences. The regression suite now skips 
Arrow-incompatible map cast cases with null keys and asserts bitmaps via 
bitmap_to_string so Arrow Flight SQL and JDBC return semantically consistent 
results without spurious failures.",
-          "merged": [],
-          "inProgressNarrative": "Ecosystem Integration is restoring the 
dbt-doris adapter dev loop by fixing long-broken test dependencies so 
contributors can run adapter tests from a clean checkout (new this month).",
-          "inProgress": []
+          "mergedNarrative": "External ecosystem paths are more robust: Arrow 
Flight SQL now skips cases that intentionally yield null map keys, and bitmap 
assertions compare via bitmap_to_string instead of raw bytes, working around 
Arrow Map's lack of null-key support so JDBC and Arrow regression outputs stay 
aligned.",
+          "merged": [
+            {
+              "num": 65182,
+              "title": "[test](regression) skip Arrow-incompatible complex 
outputs",
+              "url": "https://github.com/apache/doris/pull/65182";
+            }
+          ],
+          "inProgressNarrative": "The dbt-doris adapter's broken test 
dependencies that have blocked fresh-checkout development are being repaired by 
re-aligning the dbt-tests-adapter source and filling missing packages, enabling 
community contributors to iterate on the adapter again.",
+          "inProgress": [
+            {
+              "num": 64929,
+              "title": "[fix](dbt-doris) Fix broken test dependencies 
preventing adapter development",
+              "url": "https://github.com/apache/doris/pull/64929";,
+              "isNew": true
+            }
+          ]
         },
         {
           "name": "Security & Governance",
-          "mergedNarrative": "Security governance closed loopholes across 
credentials, gateway, and REST APIs. Kafka routine load properties are now 
masked in SHOW/metadata; the _stream_load_forward endpoint is gated by a new BE 
config and requires auth to block SSRF; brpc disables an SSL BIO buffer to 
avoid mTLS write issues on large responses; and",
-          "merged": [],
-          "inProgressNarrative": "Security & Governance tightens TLS and 
supply-chain hygiene: enabling cert verification by default in the Go SDK, 
pinning Python deps with known CVEs across doris-compose/dbt-doris/cost_model, 
and normalizing FE-internal HTTP calls to https when enable_https is on (all 
new this month).",
+          "mergedNarrative": "Security work narrowed the credential-exposure 
surface: Kafka routine-load custom properties are now masked in SHOW and 
information_schema to prevent SASL/SSL/AWS credential leaks, 
_stream_load_forward is gated by a new BE config to block unauthenticated SSRF, 
brpc TLS drops the extra BIO buffer to fix TLS write issues on large 
meta-service responses,",
+          "merged": [
+            {
+              "num": 64786,
+              "title": "[fix](fe) Mask Kafka routine load sensitive 
properties",
+              "url": "https://github.com/apache/doris/pull/64786";
+            },
+            {
+              "num": 64935,
+              "title": "[fix](security) Add auth and config gate for 
_stream_load_forward endpoint",
+              "url": "https://github.com/apache/doris/pull/64935";
+            },
+            {
+              "num": 64962,
+              "title": "[fix](brpc) disable SSL BIO buffer ",
+              "url": "https://github.com/apache/doris/pull/64962";
+            },
+            {
+              "num": 65042,
+              "title": "[fix](auth) add auth check for manager node and query 
qerror REST APIs",
+              "url": "https://github.com/apache/doris/pull/65042";
+            },
+            {
+              "num": 65149,
+              "title": "[regression-test](auth) Scope export cancel by label",
+              "url": "https://github.com/apache/doris/pull/65149";
+            }
+          ],
+          "inProgressNarrative": "Security and governance work this week 
tightens transport encryption and dependency hygiene: enabling TLS verification 
by default in the Go SDK, capping Python packages with known CVEs in 
doris-compose, dbt-doris, and cost_model, and normalizing internal FE HTTP URLs 
to https when enable_https is on, closing plaintext and insecure-component gaps 
across",
           "inProgress": []
         },
         {
           "name": "Kernel & Engineering",
-          "mergedNarrative": "Kernel and engineering foundations received 
broad hardening. Key fixes address bvar SIGSEGV under high EPS, NaN propagation 
in PERCENTILE, SIGFPE on BIGINT_MIN/-1, sliced FixedSizeBinary reads, redundant 
partition keys in PartitionTopN sort, AuditLoader concurrent assembly, and 
AsyncIO workers without ThreadContext. Refactors moved array functions to 
ColumnArrayView and split const vs. mutable",
-          "merged": [],
-          "inProgressNarrative": "Kernel & Engineering spans core correctness 
and infra: the key change is adaptive random-bucket load routing for cloud 
mode, alongside bitmap/Prometheus/TabletStatMgr/Broker-Load fixes, stable 
`now()` folding, DECIMAL-returning round functions, rollback handling, Arrow 
buffer validation, ORC SerDe decoding, UDF rollback, SetPreAggStatus stack 
refactor, bucketed hash aggregate plan refactor, and many regression/Docker/CI 
stabilizations",
+          "mergedNarrative": "Kernel work swept up crashes and correctness 
traps: SIGSEGV in bvar take_sample under high EPS, missing ThreadContext on 
AsyncIO workers, missing storage-policy pre-checks, SIGFPE on BIGINT_MIN DIV 
-1, escaping block-serialization exceptions, std::exception leaks in the 
pipeline scheduler, workload-group smart-pointer cycles, and unchecked task 
executor scan handles. FE now rejects complex",
+          "merged": [
+            {
+              "num": 62842,
+              "title": "[enhancement](limitreach) FE receives many limit reach 
error messages and make very confused",
+              "url": "https://github.com/apache/doris/pull/62842";
+            },
+            {
+              "num": 63472,
+              "title": "[fix](be) Skip NaN values in 
PERCENTILE/PERCENTILE_ARRAY aggregations",
+              "url": "https://github.com/apache/doris/pull/63472";
+            },
+            {
+              "num": 63621,
+              "title": "[fix](fe) Reject complex types (ARRAY/MAP/STRUCT) as 
MAP key types",
+              "url": "https://github.com/apache/doris/pull/63621";
+            },
+            {
+              "num": 64040,
+              "title": "[fix](be) Fix SIGSEGV in bvar::take_sample caused by 
AgentCombiner/TLS Agent lifetime race under high EPS",
+              "url": "https://github.com/apache/doris/pull/64040";
+            }
+          ],
+          "inProgressNarrative": "Kernel work this week balances stability, 
performance, and developer experience. The highlighted cloud-mode adaptive 
routing for random bucket load assigns candidate buckets on the FE and routes 
locally on the BE, removing sender-side reshuffle cost; alongside it, schema 
change, txn rollback, Arrow/Parquet/ORC decoding, and expression evaluation 
keep getting hardened, while",
           "inProgress": [
             {
               "num": 62661,
diff --git a/src/scss/custom.scss b/src/scss/custom.scss
index 56951afe636..a0e90ac9bef 100644
--- a/src/scss/custom.scss
+++ b/src/scss/custom.scss
@@ -167,3 +167,11 @@ body {
 
 // Centering the Kapa modal itself is done by injecting CSS into its shadow
 // root from static/js/custom-script.js, since light-DOM rules can't pierce it.
+
+@media (min-width: 997px) {
+    .docs-wrapper .theme-back-to-top-button {
+        right: calc(386px + 2rem);
+        bottom: 1.5rem;
+        z-index: 259;
+    }
+}
diff --git a/static/images/doris-ecosystem.jpg 
b/static/images/doris-ecosystem.jpg
new file mode 100644
index 00000000000..1ca8ad05dd5
Binary files /dev/null and b/static/images/doris-ecosystem.jpg differ
diff --git 
a/versioned_docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
 
b/versioned_docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
index c6f03d1fb2e..cccb068748d 100644
--- 
a/versioned_docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
+++ 
b/versioned_docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
@@ -8,7 +8,7 @@
 }
 ---
 
-Doris Operator is the official Kubernetes Operator for Apache Doris. It 
combines Doris operational experience with Kubernetes-native resource 
management to provide a simpler, more efficient, and easier-to-use way to 
deploy and operate Doris on Kubernetes.
+[Doris Operator](https://github.com/apache/doris-operator) is the official 
Kubernetes Operator for Apache Doris. It combines Doris operational experience 
with Kubernetes-native resource management to provide a simpler, more 
efficient, and easier-to-use way to deploy and operate Doris on Kubernetes.
 
 Doris Operator extends the Kubernetes API through CustomResourceDefinitions 
(CRDs). After you submit a Doris custom resource, the Operator creates and 
maintains the corresponding Kubernetes resources such as `StatefulSet`, 
`Service`, and `PersistentVolumeClaim`, and in some scenarios performs Doris 
metadata-level actions such as node registration, decommissioning, or cleanup.
 


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

Reply via email to