You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fluss.apache.org by ab...@apache.org on 2026/09/23 23:22:39 UTC

(fluss-blog) branch main updated: [Blog] Prepare article cards with categories and banners (#17)

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

fresh-borzoni pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fluss-blog.git


The following commit(s) were added to refs/heads/main by this push:
     new a33ec80  [Blog] Prepare article cards with categories and banners (#17)
a33ec80 is described below

commit a33ec806b506d85e3f3b0c4e1a047d5c1910e888
Author: Jark Wu <ja...@apache.org>
AuthorDate: Thu Sep 24 07:22:34 2026 +0800

    [Blog] Prepare article cards with categories and banners (#17)
    
    Organize 31 posts into four reader-facing categories, add concise summaries and dedicated banner assets, and document the contribution guidelines for the new blog homepage.
    
    
    AI-Model: gpt-6-astra
    AI-Contributed/Feature: 195/195
    AI-Contributed/UT: 0/0
    
    Co-authored-by: Codex <no...@openai.com>
---
 README.md                                          |  32 ++++++++++++-----
 blog/2024-11-29-fluss-open-source.md               |   3 ++
 blog/2024-12-11-why-fluss.md                       |   3 ++
 blog/2024-12-12-fluss-intro.md                     |   3 ++
 blog/2025-01-28-towards-stream-lake-arch.md        |   3 ++
 blog/2025-05-28-unveil-fluss-logo.md               |   3 ++
 blog/2025-06-01-partial-updates.md                 |   4 ++-
 blog/2025-07-01-tiering-service.md                 |   2 ++
 blog/2025-07-07-fluss-java-client.md               |   3 ++
 blog/2025-07-10-fluss-joins-asf.md                 |   4 ++-
 blog/2025-07-23-hands-on-fluss-lakehouse.md        |   4 ++-
 blog/2025-08-07-taobao-practice.md                 |   3 ++
 ...2025-09-01-pk-key-tables-log-cache-streaming.md |   3 ++
 ...rg-why-your-lakehouse-is-not-streamhouse-yet.md |   4 ++-
 blog/2026-02-01-fluss-fraud-detection.md           |  15 ++++----
 blog/2026-03-05-fluss-for-ai.md                    |   3 ++
 blog/2026-04-06-fluss-rust-python-cpp-release.md   |   5 +--
 blog/2026-04-09-fluss-rust-sdk.md                  |   5 +--
 blog/2026-04-16-roaringbitmap-uv-deduplication.md  |   3 ++
 ...0-taobao-instant-commerce-real-time-decision.md |   3 ++
 .../2026-04-22-column-pruning-streaming-storage.md |   5 +--
 blog/2026-06-02-fluss-storage-hierarchy.md         |   4 ++-
 blog/2026-06-04-tiering-service-part1.md           |   4 ++-
 blog/2026-06-09-tiering-service-part2.md           |   4 ++-
 blog/2026-06-10-tiering-service-part3.md           |   4 ++-
 ...-apache-fluss-graduates-to-top-level-project.md |   4 ++-
 ...18-rednote-kafka-to-fluss-real-time-indexing.md |   4 +--
 blog/assets/0.6/banner-1200x510.webp               | Bin 0 -> 98062 bytes
 blog/assets/0.7/banner-1200x510.webp               | Bin 0 -> 190206 bytes
 blog/assets/0.8/banner-1200x510.webp               | Bin 0 -> 184076 bytes
 blog/assets/0.9/banner-1200x510.webp               | Bin 0 -> 131790 bytes
 blog/assets/1.0/banner-1200x510.webp               | Bin 0 -> 123894 bytes
 blog/assets/column_pruning/banner-1200x510.webp    | Bin 0 -> 55914 bytes
 blog/assets/fluss-x-iceberg/banner-1200x510.webp   | Bin 0 -> 39740 bytes
 .../assets/fluss_announcement/banner-1200x510.webp | Bin 0 -> 35770 bytes
 blog/assets/fluss_asf/banner-1200x510.webp         | Bin 0 -> 43476 bytes
 blog/assets/fluss_for_ai/banner-1200x510.webp      | Bin 0 -> 112304 bytes
 .../fluss_fraud_detection/banner-1200x510.webp     | Bin 0 -> 39542 bytes
 blog/assets/fluss_intro/banner-1200x510.webp       | Bin 0 -> 49888 bytes
 blog/assets/fluss_logo/banner-1200x510.webp        | Bin 0 -> 30096 bytes
 blog/assets/fluss_rust/banner-1200x510.webp        | Bin 0 -> 83100 bytes
 .../assets/fluss_rust_release/banner-1200x510.webp | Bin 0 -> 55146 bytes
 blog/assets/fluss_tlp/banner-1200x510.webp         | Bin 0 -> 39002 bytes
 .../hands_on_fluss_lakehouse/banner-1200x510.webp  | Bin 0 -> 35008 bytes
 blog/assets/java_client/banner-1200x510.webp       | Bin 0 -> 206574 bytes
 blog/assets/partial_updates/banner-1200x510.webp   | Bin 0 -> 68056 bytes
 blog/assets/pk_tables/banner-1200x510.webp         | Bin 0 -> 23238 bytes
 blog/assets/realtime_uv/banner-1200x510.webp       | Bin 0 -> 62642 bytes
 .../banner-1200x510.webp                           | Bin 0 -> 38534 bytes
 blog/assets/storage_hierarchy/banner-1200x510.webp | Bin 0 -> 119534 bytes
 blog/assets/taobao_practice/banner-1200x510.webp   | Bin 0 -> 110974 bytes
 .../taobao_realtime_decisions/banner-1200x510.webp | Bin 0 -> 77172 bytes
 .../tiering_service_dd_part1/banner-1200x510.webp  | Bin 0 -> 94066 bytes
 .../tiering_service_dd_part2/banner-1200x510.webp  | Bin 0 -> 81208 bytes
 .../tiering_service_dd_part3/banner-1200x510.webp  | Bin 0 -> 75140 bytes
 .../unified_lake_stream_arch/banner-1200x510.webp  | Bin 0 -> 42016 bytes
 blog/assets/why_fluss/banner-1200x510.webp         | Bin 0 -> 53658 bytes
 blog/releases/0.6.md                               |   4 ++-
 blog/releases/0.7.md                               |   4 ++-
 blog/releases/0.8.md                               |   4 ++-
 blog/releases/0.9.md                               |   4 ++-
 blog/releases/1.0.md                               |   4 ++-
 blog/tags.yml                                      |  38 +++++++++------------
 63 files changed, 136 insertions(+), 59 deletions(-)

diff --git a/README.md b/README.md
index f933b2e..7ed2583 100644
--- a/README.md
+++ b/README.md
@@ -51,15 +51,17 @@ slug: my-post-slug
 title: "My Blog Post Title"
 date: YYYY-MM-DD
 authors: [jark]
-tags: [apache-fluss]
+tags: [engineering]
+description: "A short summary explaining what readers will learn from this post."
 image: ./assets/my_post/banner.png
 ---
 ```
 
 - **slug**: URL path for the post (e.g., `/blog/my-post-slug`)
 - **authors**: List of author keys defined in `blog/authors.yml`
-- **tags**: List of tag keys defined in `blog/tags.yml`
-- **image**: (Optional) Cover image used for social sharing (Open Graph)
+- **tags**: One or two category keys from the four categories below
+- **description**: One concise sentence (roughly 120–200 characters) for the homepage card and social sharing
+- **image**: Cover image used on the homepage and for social sharing (Open Graph). Prefer an explicit path to the post banner, rather than a diagram from the article. For posts in `blog/releases/`, use `./../assets/<my_post>/banner.png` so Docusaurus bundles the relative image.
 
 ### 3. Add Images
 
@@ -83,14 +85,26 @@ your_key:
 
 Then place your avatar image in `blog/static/avatars/`.
 
-### 5. Register New Tags
+### 5. Choose Categories
 
-If your post uses a new tag, define it in `blog/tags.yml`:
+Use one primary category and, when it adds useful context, one secondary category. Keep the taxonomy limited to these four categories; technology names such as Flink, Iceberg, Rust, or Arrow belong in the title, summary, or article text.
 
-```yaml
-my-new-tag:
-  label: 'My New Tag'
-```
+| Key | Label | Use for |
+| --- | --- | --- |
+| `announcement` | Announcement | Releases, project milestones, and official announcements |
+| `case-study` | Case Study | Enterprise case studies and production practices |
+| `engineering` | Engineering | Architecture, system internals, and technical deep dives |
+| `guides` | Guides | Getting started, how-to guides, application patterns, and best practices |
+
+For example, a graduation announcement uses `[announcement]`; a production tuning deep dive can use `[engineering, guides]`.
+
+### 6. Prepare the Banner
+
+- **Canvas:** 1200 × 510 px (40:17, approximately 2.35:1). A 2400 × 1020 px export is also suitable for high-density screens. Use the same ratio for the featured article and regular cards.
+- **Composition:** Keep titles and logos at least 60 px from every edge on the 1200 × 510 canvas. Use a short headline and large type that remain legible at a card width of about 400 px.
+- **Export:** Use PNG for text-heavy artwork or WebP/JPEG for photographic images. Aim for a file size below 300 KB where possible.
+- **Existing artwork:** The homepage fits the whole image inside the banner frame without stretching or cropping. Images with other ratios have padding. For a full-bleed cover, create a separate banner composed for this canvas and point `image` to it; keep the original illustration in the article body. Simply resizing a 3:2 or square image does not make it 40:17 without distortion or cropping.
+- **Missing cover:** The homepage uses the Fluss default cover until a dedicated banner is available. Do not promote a dense technical diagram to a cover just to fill the space.
 
 ## Build
 
diff --git a/blog/2024-11-29-fluss-open-source.md b/blog/2024-11-29-fluss-open-source.md
index 3e3effb..375ce89 100644
--- a/blog/2024-11-29-fluss-open-source.md
+++ b/blog/2024-11-29-fluss-open-source.md
@@ -2,6 +2,9 @@
 slug: fluss-open-source
 title: Fluss is Now Open Source
 authors: [jark, giannis]
+tags: [announcement]
+description: "Fluss is now open source: meet the columnar streaming storage system built for real-time analytics and the Lakehouse."
+image: ./assets/fluss_announcement/banner-1200x510.webp
 ---
 
 Earlier this year at Flink Forward 2024 Berlin we [announced Fluss](https://www.ververica.com/blog/introducing-fluss) and today we are thrilled to announce open-sourcing the project.
diff --git a/blog/2024-12-11-why-fluss.md b/blog/2024-12-11-why-fluss.md
index f6120c0..ea6158c 100644
--- a/blog/2024-12-11-why-fluss.md
+++ b/blog/2024-12-11-why-fluss.md
@@ -3,6 +3,9 @@ slug: why-fluss
 title: "Why Fluss? Top 4 Challenges of Using Kafka for Real-Time Analytics"
 sidebar_label: "Why Fluss? Top 4 Challenges of Kafka"
 authors: [jark]
+tags: [engineering]
+description: "Explore four challenges of using Kafka for real-time analytics, and why analytical workloads need a different approach to streaming storage."
+image: ./assets/why_fluss/banner-1200x510.webp
 ---
 
 The industry is undergoing a clear and significant shift as big data computing transitions from offline to real-time processing.
diff --git a/blog/2024-12-12-fluss-intro.md b/blog/2024-12-12-fluss-intro.md
index 1cb76fb..343d153 100644
--- a/blog/2024-12-12-fluss-intro.md
+++ b/blog/2024-12-12-fluss-intro.md
@@ -3,6 +3,9 @@ slug: fluss-intro
 title: "Introducing Fluss: Streaming Storage for Real-Time Analytics"
 sidebar_label: "Introducing Fluss"
 authors: [jark]
+tags: [engineering]
+description: "An introduction to Fluss architecture, columnar streams, primary-key tables, and the design choices behind real-time analytical storage."
+image: ./assets/fluss_intro/banner-1200x510.webp
 ---
 
 We have discussed the challenges of using Kafka for real-time analytics in our previous [blog post](/blog/why-fluss/).
diff --git a/blog/2025-01-28-towards-stream-lake-arch.md b/blog/2025-01-28-towards-stream-lake-arch.md
index 4c24c09..241fe0b 100644
--- a/blog/2025-01-28-towards-stream-lake-arch.md
+++ b/blog/2025-01-28-towards-stream-lake-arch.md
@@ -3,6 +3,9 @@ slug: unified-streaming-lakehouse
 title: "Towards A Unified Streaming & Lakehouse Architecture"
 sidebar_label: "Toward Streaming Lakehouse"
 authors: [yuxia]
+tags: [engineering]
+description: "How Fluss connects streaming storage with the Lakehouse to combine fresh data, historical analysis, and a unified processing architecture."
+image: ./assets/unified_lake_stream_arch/banner-1200x510.webp
 ---
 
 The unification of Lakehouse and streaming storage represents a major trend in the future development of modern data lakes and streaming storage systems. Designed specifically for real-time analytics, Fluss has embraced a unified Streaming and Lakehouse architecture from its inception, enabling seamless integration into existing Lakehouse architectures. 
diff --git a/blog/2025-05-28-unveil-fluss-logo.md b/blog/2025-05-28-unveil-fluss-logo.md
index c4b12b5..eafeb80 100644
--- a/blog/2025-05-28-unveil-fluss-logo.md
+++ b/blog/2025-05-28-unveil-fluss-logo.md
@@ -2,6 +2,9 @@
 slug: unveil-fluss-logo
 title: "The Story of Fluss Logo"
 authors: [jark]
+tags: [announcement]
+description: "Meet the Fluss surfing otter and follow the design journey, community feedback, and more than 30 iterations behind the project logo."
+image: ./assets/fluss_logo/banner-1200x510.webp
 ---
 
 ![](assets/fluss_logo/colored_logo.png)
diff --git a/blog/2025-06-01-partial-updates.md b/blog/2025-06-01-partial-updates.md
index d5e8d69..356cc54 100644
--- a/blog/2025-06-01-partial-updates.md
+++ b/blog/2025-06-01-partial-updates.md
@@ -2,7 +2,9 @@
 slug: partial-updates
 title: "Understanding Partial Updates"
 authors: [giannis]
-image: ./assets/partial_updates/banner.png
+image: ./assets/partial_updates/banner-1200x510.webp
+tags: [engineering, guides]
+description: "Learn how partial updates combine independent data streams into a wide table, reducing the state and complexity of streaming joins."
 ---
 
 ![Banner](assets/partial_updates/banner.png)
diff --git a/blog/2025-07-01-tiering-service.md b/blog/2025-07-01-tiering-service.md
index 2e69da1..dbd16b6 100644
--- a/blog/2025-07-01-tiering-service.md
+++ b/blog/2025-07-01-tiering-service.md
@@ -3,6 +3,8 @@ slug: tiering-service
 title: "Tiering Service Deep Dive"
 authors: [gyang94]
 toc_max_heading_level: 5
+tags: [engineering]
+description: "A deep dive into the Fluss Tiering Service: how Flink moves streaming data into lakehouse storage and commits consistent snapshots."
 ---
 
 # Tiering Service Deep Dive
diff --git a/blog/2025-07-07-fluss-java-client.md b/blog/2025-07-07-fluss-java-client.md
index 24e5385..999feab 100644
--- a/blog/2025-07-07-fluss-java-client.md
+++ b/blog/2025-07-07-fluss-java-client.md
@@ -2,6 +2,9 @@
 slug: fluss-java-client
 title: "Apache Fluss Java Client: A Deep Dive"
 authors: [giannis]
+tags: [guides]
+description: "Build an IoT example with the Fluss Java client, from managing tables and writing records to scanning streams and looking up keys."
+image: ./assets/java_client/banner-1200x510.webp
 ---
 
 ![Banner](assets/java_client/banner.png)
diff --git a/blog/2025-07-10-fluss-joins-asf.md b/blog/2025-07-10-fluss-joins-asf.md
index 3e887b5..5fedcf0 100644
--- a/blog/2025-07-10-fluss-joins-asf.md
+++ b/blog/2025-07-10-fluss-joins-asf.md
@@ -3,7 +3,9 @@ slug: fluss-joins-asf
 title: "Fluss Joins the Apache Incubator"
 sidebar_label: "Fluss Joins the Apache Incubator"
 authors: [jark]
-image: ./assets/fluss_asf/asf.png
+image: ./assets/fluss_asf/banner-1200x510.webp
+tags: [announcement]
+description: "Fluss joins the Apache Incubator, opening a new chapter in community governance, open development, and real-time data infrastructure."
 ---
 
 On June 5th, Fluss, the next-generation streaming storage project open-sourced and donated by Alibaba, successfully passed the [vote](https://lists.apache.org/thread/mnol4wxovpz6klt196d3x239t4mp6z5o) and officially became an incubator project of the Apache Software Foundation (ASF). This marks a significant milestone in the development of the Fluss community, symbolizing that the project has entered a new phase that is more open,
diff --git a/blog/2025-07-23-hands-on-fluss-lakehouse.md b/blog/2025-07-23-hands-on-fluss-lakehouse.md
index a32ef50..0eb6dab 100644
--- a/blog/2025-07-23-hands-on-fluss-lakehouse.md
+++ b/blog/2025-07-23-hands-on-fluss-lakehouse.md
@@ -2,8 +2,10 @@
 slug: hands-on-fluss-lakehouse
 title: "From Stream to Lake: Hands-On with Fluss Tiering into Paimon on Minio"
 authors: [gyang94]
-image: ./assets/hands_on_fluss_lakehouse/streamhouse.png
+image: ./assets/hands_on_fluss_lakehouse/banner-1200x510.webp
 toc_max_heading_level: 5
+tags: [guides]
+description: "Set up Fluss tiering into Paimon on MinIO and try unified queries across real-time streams and historical lakehouse data."
 ---
 
 # From Stream to Lake: Hands-On with Fluss Tiering into Paimon on Minio
diff --git a/blog/2025-08-07-taobao-practice.md b/blog/2025-08-07-taobao-practice.md
index 42481bc..be7cf3a 100644
--- a/blog/2025-08-07-taobao-practice.md
+++ b/blog/2025-08-07-taobao-practice.md
@@ -3,6 +3,9 @@ slug: taobao-practice
 title: "How Taobao uses Apache Fluss (Incubating) for Real-Time Processing in Search and RecSys"
 sidebar_label: "Apache Fluss (Incubating) at Taobao"
 authors: [zhangxinyu, wanglilei]
+tags: [case-study]
+description: "How Taobao uses Fluss for search and recommendation workloads, reducing resource usage and streaming state in its real-time data warehouse."
+image: ./assets/taobao_practice/banner-1200x510.webp
 ---
 
 ## Streaming Storage More Suitable for Real-Time OLAP
diff --git a/blog/2025-09-01-pk-key-tables-log-cache-streaming.md b/blog/2025-09-01-pk-key-tables-log-cache-streaming.md
index c06a3e1..5425486 100644
--- a/blog/2025-09-01-pk-key-tables-log-cache-streaming.md
+++ b/blog/2025-09-01-pk-key-tables-log-cache-streaming.md
@@ -3,6 +3,9 @@ slug: pk-key-tables-log-cache-streaming
 date: 2025-09-01
 title: "Primary Key Tables: Unifying Log and Cache for 🚀 Streaming"
 authors: [giannis]
+tags: [engineering]
+description: "Inside Fluss primary-key tables: how one storage layer combines a durable log, current-state lookups, and continuous change streams."
+image: ./assets/pk_tables/banner-1200x510.webp
 ---
 
 Modern data platforms have traditionally relied on two foundational components: a **log** for durable, ordered event storage and a **cache** for low-latency access. 
diff --git a/blog/2025-12-02-fluss-x-iceberg-why-your-lakehouse-is-not-streamhouse-yet.md b/blog/2025-12-02-fluss-x-iceberg-why-your-lakehouse-is-not-streamhouse-yet.md
index ba92871..12b615f 100644
--- a/blog/2025-12-02-fluss-x-iceberg-why-your-lakehouse-is-not-streamhouse-yet.md
+++ b/blog/2025-12-02-fluss-x-iceberg-why-your-lakehouse-is-not-streamhouse-yet.md
@@ -2,7 +2,9 @@
 title: "Fluss × Iceberg (Part 1): Why Your Lakehouse Isn’t a Streamhouse Yet"
 authors: [mehulbatra, yuxia]
 date: 2025-12-11
-tags: [streaming-lakehouse, apache-iceberg, real-time-analytics, apache-fluss]
+tags: [engineering]
+description: "Why a Lakehouse needs a streaming layer, and how Fluss and Iceberg combine hot data with historical storage in a Streamhouse architecture."
+image: ./assets/fluss-x-iceberg/banner-1200x510.webp
 ---
 
 
diff --git a/blog/2026-02-01-fluss-fraud-detection.md b/blog/2026-02-01-fluss-fraud-detection.md
index 62dd023..c323920 100644
--- a/blog/2026-02-01-fluss-fraud-detection.md
+++ b/blog/2026-02-01-fluss-fraud-detection.md
@@ -1,9 +1,12 @@
----
-slug: fluss_fraud_detection
-date: 2026-02-01
-title: "A fraud detection pipeline with Streamhouse"
-authors: [jacopogardini]
-toc_max_heading_level: 5
+---
+slug: fluss_fraud_detection
+date: 2026-02-01
+title: "A fraud detection pipeline with Streamhouse"
+authors: [jacopogardini]
+toc_max_heading_level: 5
+tags: [guides]
+description: "Build a real-time fraud detection pipeline with Fluss, Flink, and Iceberg, combining fast transaction processing with historical analytics."
+image: ./assets/fluss_fraud_detection/banner-1200x510.webp
 ---
 
 # A fraud detection pipeline with Streamhouse.
diff --git a/blog/2026-03-05-fluss-for-ai.md b/blog/2026-03-05-fluss-for-ai.md
index 5d57447..306c461 100644
--- a/blog/2026-03-05-fluss-for-ai.md
+++ b/blog/2026-03-05-fluss-for-ai.md
@@ -3,6 +3,9 @@ slug: fluss-for-ai
 date: 2026-03-05
 title: "What does Apache Fluss mean in the context of AI?"
 authors: [giannis]
+tags: [engineering]
+description: "Explore how Fluss provides fresh features, user profiles, and continuously updated context for real-time intelligent systems."
+image: ./assets/fluss_for_ai/banner-1200x510.webp
 ---
 
 ### The Data Foundation for Real-Time Intelligent Systems
diff --git a/blog/2026-04-06-fluss-rust-python-cpp-release.md b/blog/2026-04-06-fluss-rust-python-cpp-release.md
index e9751aa..b91b451 100644
--- a/blog/2026-04-06-fluss-rust-python-cpp-release.md
+++ b/blog/2026-04-06-fluss-rust-python-cpp-release.md
@@ -4,8 +4,9 @@ date: 2026-04-06
 title: "Announcing Apache Fluss (Incubating) Rust, Python, and C++ Client 0.1.0 Release"
 authors: [yuxia, keithlee, anton]
 toc_max_heading_level: 5
-tags: [releases, fluss-rust, fluss-rs, pyfluss, fluss-cpp, arrow]
-image: ./assets/fluss_rust_release/banner.png
+tags: [announcement]
+image: ./assets/fluss_rust_release/banner-1200x510.webp
+description: "Introducing the first Fluss Rust, Python, and C++ clients, built on a shared Rust core for native performance and consistent capabilities."
 ---
 
 ![Banner](assets/fluss_rust_release/banner.png)
diff --git a/blog/2026-04-09-fluss-rust-sdk.md b/blog/2026-04-09-fluss-rust-sdk.md
index 7b12fd2..e9373be 100644
--- a/blog/2026-04-09-fluss-rust-sdk.md
+++ b/blog/2026-04-09-fluss-rust-sdk.md
@@ -3,8 +3,9 @@ slug: why-fluss-chose-rust-for-multi-language-sdk
 title: "Why Apache Fluss Chose Rust for Its Multi-Language SDK"
 date: 2026-04-09
 authors: [yuxia, keithlee, anton]
-tags: [fluss-rust, fluss-rs, pyfluss, fluss-cpp, arrow]
-image: ./assets/fluss_rust/banner.jpg
+tags: [engineering]
+image: ./assets/fluss_rust/banner-1200x510.webp
+description: "Why Fluss chose a shared Rust core for its multi-language SDK, and how thin bindings bring consistent capabilities to Python and C++."
 ---
 
 ![Banner](assets/fluss_rust/banner.jpg)
diff --git a/blog/2026-04-16-roaringbitmap-uv-deduplication.md b/blog/2026-04-16-roaringbitmap-uv-deduplication.md
index f8a391c..f8e508b 100644
--- a/blog/2026-04-16-roaringbitmap-uv-deduplication.md
+++ b/blog/2026-04-16-roaringbitmap-uv-deduplication.md
@@ -3,6 +3,9 @@ slug: roaringbitmap-uv-deduplication
 date: 2026-04-16
 title: "Real-Time Multi-Dimensional Unique Visitor Deduplication in Practice"
 authors: [yangwang]
+tags: [guides]
+description: "Use Fluss aggregation tables and RoaringBitmap to count unique visitors across multiple dimensions with accurate, real-time deduplication."
+image: ./assets/realtime_uv/banner-1200x510.webp
 ---
 
 ![](assets/realtime_uv/image.png)
diff --git a/blog/2026-04-20-taobao-instant-commerce-real-time-decision.md b/blog/2026-04-20-taobao-instant-commerce-real-time-decision.md
index 2868d89..170b234 100644
--- a/blog/2026-04-20-taobao-instant-commerce-real-time-decision.md
+++ b/blog/2026-04-20-taobao-instant-commerce-real-time-decision.md
@@ -3,6 +3,9 @@ slug: taobao-instant-commerce-real-time-decision
 title: "Taobao Instant Commerce: Real-Time Decisions at Scale with Apache Fluss"
 sidebar_label: "Taobao Instant Commerce: Real-Time Decisions at Scale with Apache Fluss"
 authors: [matrixsparse]
+tags: [case-study]
+description: "How Taobao Instant Commerce uses Fluss for real-time decisions, from Delta Join and partial updates to lakehouse integration and UV statistics."
+image: ./assets/taobao_realtime_decisions/banner-1200x510.webp
 ---
 ![](assets/taobao_realtime_decisions/banner.jpg)
 
diff --git a/blog/2026-04-22-column-pruning-streaming-storage.md b/blog/2026-04-22-column-pruning-streaming-storage.md
index 568be1c..5cf464d 100644
--- a/blog/2026-04-22-column-pruning-streaming-storage.md
+++ b/blog/2026-04-22-column-pruning-streaming-storage.md
@@ -3,8 +3,9 @@ slug: column-pruning-streaming-storage
 title: "How Apache Fluss Achieves True Pruning in Streaming Storage"
 date: 2026-04-22
 authors: [yunhongzheng]
-tags: [fluss, column-pruning, arrow, streaming, kafka, performance]
-image: ./assets/column_pruning/banner.png
+tags: [engineering]
+image: ./assets/column_pruning/banner-1200x510.webp
+description: "How Arrow IPC storage, server-side pruning, and client-side batching let Fluss read only the columns that streaming applications need."
 ---
 
 ![Banner](assets/column_pruning/banner.png)
diff --git a/blog/2026-06-02-fluss-storage-hierarchy.md b/blog/2026-06-02-fluss-storage-hierarchy.md
index 484189e..5ed2a11 100644
--- a/blog/2026-06-02-fluss-storage-hierarchy.md
+++ b/blog/2026-06-02-fluss-storage-hierarchy.md
@@ -3,7 +3,9 @@ slug: fluss-storage-hierarchy
 title: "The Storage Hierarchy: Hot, Remote, and Lake"
 date: 2026-06-02
 authors: [giannis]
-image: ./assets/storage_hierarchy/banner.png
+image: ./assets/storage_hierarchy/banner-1200x510.webp
+tags: [engineering]
+description: "Understand the Fluss storage hierarchy: what lives on local disk, in remote object storage, and in the Lakehouse, and how recovery works."
 ---
 
 ![Banner](assets/storage_hierarchy/banner.png)
diff --git a/blog/2026-06-04-tiering-service-part1.md b/blog/2026-06-04-tiering-service-part1.md
index df02755..c3b3bcf 100644
--- a/blog/2026-06-04-tiering-service-part1.md
+++ b/blog/2026-06-04-tiering-service-part1.md
@@ -3,7 +3,9 @@ slug: fluss-tiering-service-deep-dive-part1
 title: "Tiering Service Deep Dive Part 1: The Mental Model"
 date: 2026-06-04
 authors: [giannis]
-image: ./assets/tiering_service_dd_part1/banner.png
+image: ./assets/tiering_service_dd_part1/banner-1200x510.webp
+tags: [engineering]
+description: "Follow a lake-tiering round from its timer to the committed snapshot, and understand the processes and table states that make it work."
 ---
 
 ![Banner](assets/tiering_service_dd_part1/banner.png)
diff --git a/blog/2026-06-09-tiering-service-part2.md b/blog/2026-06-09-tiering-service-part2.md
index 183c1a2..2fdabaa 100644
--- a/blog/2026-06-09-tiering-service-part2.md
+++ b/blog/2026-06-09-tiering-service-part2.md
@@ -3,7 +3,9 @@ slug: fluss-tiering-service-deep-dive-part2
 title: "Tiering Service Deep Dive Part 2: Tuning"
 date: 2026-06-09
 authors: [giannis]
-image: ./assets/tiering_service_dd_part2/banner.png
+image: ./assets/tiering_service_dd_part2/banner-1200x510.webp
+tags: [engineering]
+description: "Tune lake tiering with a practical guide to parallelism, table types, freshness, multi-table scheduling, and scaling out tiering jobs."
 ---
 
 ![Banner](assets/tiering_service_dd_part2/banner.png)
diff --git a/blog/2026-06-10-tiering-service-part3.md b/blog/2026-06-10-tiering-service-part3.md
index 454989e..fa0f0e6 100644
--- a/blog/2026-06-10-tiering-service-part3.md
+++ b/blog/2026-06-10-tiering-service-part3.md
@@ -3,7 +3,9 @@ slug: fluss-tiering-service-deep-dive-part3
 title: "Tiering Service Deep Dive Part 3: In Production"
 date: 2026-06-10
 authors: [giannis]
-image: ./assets/tiering_service_dd_part3/banner.png
+image: ./assets/tiering_service_dd_part3/banner-1200x510.webp
+tags: [engineering]
+description: "Run lake tiering in production: identify failure modes, avoid deployment pitfalls, and monitor the signals that reveal operational health."
 ---
 
 ![Banner](assets/tiering_service_dd_part3/banner.png)
diff --git a/blog/2026-08-06-apache-fluss-graduates-to-top-level-project.md b/blog/2026-08-06-apache-fluss-graduates-to-top-level-project.md
index 627d4eb..ffcbfec 100644
--- a/blog/2026-08-06-apache-fluss-graduates-to-top-level-project.md
+++ b/blog/2026-08-06-apache-fluss-graduates-to-top-level-project.md
@@ -3,7 +3,9 @@ slug: apache-fluss-graduates-to-top-level-project
 title: "Apache Fluss Graduates to a Top Level Project"
 date: 2026-08-06
 authors: [jark]
-tags: [apache-fluss, lakestream, real-time-analytics]
+tags: [announcement]
+description: "Apache Fluss graduates to a Top-Level Project, marking a milestone in community growth and the evolution of real-time Lakehouse infrastructure."
+image: ./assets/fluss_tlp/banner-1200x510.webp
 ---
 
 ![Apache Fluss Graduates to a Top Level Project](assets/fluss_tlp/banner.png)
diff --git a/blog/2026-08-18-rednote-kafka-to-fluss-real-time-indexing.md b/blog/2026-08-18-rednote-kafka-to-fluss-real-time-indexing.md
index 3f9e50e..d01015b 100644
--- a/blog/2026-08-18-rednote-kafka-to-fluss-real-time-indexing.md
+++ b/blog/2026-08-18-rednote-kafka-to-fluss-real-time-indexing.md
@@ -4,8 +4,8 @@ title: "From Kafka to Fluss: How Rednote Migrated a Core Real-Time Indexing Pipe
 sidebar_label: "From Kafka to Fluss: Rednote's Real-Time Indexing Migration"
 date: 2026-08-18
 authors: [hanliu]
-tags: [apache-fluss, real-time-analytics, streaming-lakehouse]
-image: ./assets/rednote_real_time_indexing/banner.png
+tags: [case-study]
+image: ./assets/rednote_real_time_indexing/banner-1200x510.webp
 description: "A production case study in columnar streaming, cold-data isolation, and lakehouse integration."
 ---
 
diff --git a/blog/assets/0.6/banner-1200x510.webp b/blog/assets/0.6/banner-1200x510.webp
new file mode 100644
index 0000000..9cb616a
Binary files /dev/null and b/blog/assets/0.6/banner-1200x510.webp differ
diff --git a/blog/assets/0.7/banner-1200x510.webp b/blog/assets/0.7/banner-1200x510.webp
new file mode 100644
index 0000000..4337aea
Binary files /dev/null and b/blog/assets/0.7/banner-1200x510.webp differ
diff --git a/blog/assets/0.8/banner-1200x510.webp b/blog/assets/0.8/banner-1200x510.webp
new file mode 100644
index 0000000..1f0d7c2
Binary files /dev/null and b/blog/assets/0.8/banner-1200x510.webp differ
diff --git a/blog/assets/0.9/banner-1200x510.webp b/blog/assets/0.9/banner-1200x510.webp
new file mode 100644
index 0000000..2d3f2df
Binary files /dev/null and b/blog/assets/0.9/banner-1200x510.webp differ
diff --git a/blog/assets/1.0/banner-1200x510.webp b/blog/assets/1.0/banner-1200x510.webp
new file mode 100644
index 0000000..8038e71
Binary files /dev/null and b/blog/assets/1.0/banner-1200x510.webp differ
diff --git a/blog/assets/column_pruning/banner-1200x510.webp b/blog/assets/column_pruning/banner-1200x510.webp
new file mode 100644
index 0000000..ee258e6
Binary files /dev/null and b/blog/assets/column_pruning/banner-1200x510.webp differ
diff --git a/blog/assets/fluss-x-iceberg/banner-1200x510.webp b/blog/assets/fluss-x-iceberg/banner-1200x510.webp
new file mode 100644
index 0000000..611f3ac
Binary files /dev/null and b/blog/assets/fluss-x-iceberg/banner-1200x510.webp differ
diff --git a/blog/assets/fluss_announcement/banner-1200x510.webp b/blog/assets/fluss_announcement/banner-1200x510.webp
new file mode 100644
index 0000000..de01cd7
Binary files /dev/null and b/blog/assets/fluss_announcement/banner-1200x510.webp differ
diff --git a/blog/assets/fluss_asf/banner-1200x510.webp b/blog/assets/fluss_asf/banner-1200x510.webp
new file mode 100644
index 0000000..16d2f3f
Binary files /dev/null and b/blog/assets/fluss_asf/banner-1200x510.webp differ
diff --git a/blog/assets/fluss_for_ai/banner-1200x510.webp b/blog/assets/fluss_for_ai/banner-1200x510.webp
new file mode 100644
index 0000000..1b83587
Binary files /dev/null and b/blog/assets/fluss_for_ai/banner-1200x510.webp differ
diff --git a/blog/assets/fluss_fraud_detection/banner-1200x510.webp b/blog/assets/fluss_fraud_detection/banner-1200x510.webp
new file mode 100644
index 0000000..af42b92
Binary files /dev/null and b/blog/assets/fluss_fraud_detection/banner-1200x510.webp differ
diff --git a/blog/assets/fluss_intro/banner-1200x510.webp b/blog/assets/fluss_intro/banner-1200x510.webp
new file mode 100644
index 0000000..e2a9764
Binary files /dev/null and b/blog/assets/fluss_intro/banner-1200x510.webp differ
diff --git a/blog/assets/fluss_logo/banner-1200x510.webp b/blog/assets/fluss_logo/banner-1200x510.webp
new file mode 100644
index 0000000..8d8c72f
Binary files /dev/null and b/blog/assets/fluss_logo/banner-1200x510.webp differ
diff --git a/blog/assets/fluss_rust/banner-1200x510.webp b/blog/assets/fluss_rust/banner-1200x510.webp
new file mode 100644
index 0000000..88af7a5
Binary files /dev/null and b/blog/assets/fluss_rust/banner-1200x510.webp differ
diff --git a/blog/assets/fluss_rust_release/banner-1200x510.webp b/blog/assets/fluss_rust_release/banner-1200x510.webp
new file mode 100644
index 0000000..6321470
Binary files /dev/null and b/blog/assets/fluss_rust_release/banner-1200x510.webp differ
diff --git a/blog/assets/fluss_tlp/banner-1200x510.webp b/blog/assets/fluss_tlp/banner-1200x510.webp
new file mode 100644
index 0000000..926f7bf
Binary files /dev/null and b/blog/assets/fluss_tlp/banner-1200x510.webp differ
diff --git a/blog/assets/hands_on_fluss_lakehouse/banner-1200x510.webp b/blog/assets/hands_on_fluss_lakehouse/banner-1200x510.webp
new file mode 100644
index 0000000..0b827ab
Binary files /dev/null and b/blog/assets/hands_on_fluss_lakehouse/banner-1200x510.webp differ
diff --git a/blog/assets/java_client/banner-1200x510.webp b/blog/assets/java_client/banner-1200x510.webp
new file mode 100644
index 0000000..46753b9
Binary files /dev/null and b/blog/assets/java_client/banner-1200x510.webp differ
diff --git a/blog/assets/partial_updates/banner-1200x510.webp b/blog/assets/partial_updates/banner-1200x510.webp
new file mode 100644
index 0000000..1a2b4fc
Binary files /dev/null and b/blog/assets/partial_updates/banner-1200x510.webp differ
diff --git a/blog/assets/pk_tables/banner-1200x510.webp b/blog/assets/pk_tables/banner-1200x510.webp
new file mode 100644
index 0000000..1e6cd28
Binary files /dev/null and b/blog/assets/pk_tables/banner-1200x510.webp differ
diff --git a/blog/assets/realtime_uv/banner-1200x510.webp b/blog/assets/realtime_uv/banner-1200x510.webp
new file mode 100644
index 0000000..874d5b6
Binary files /dev/null and b/blog/assets/realtime_uv/banner-1200x510.webp differ
diff --git a/blog/assets/rednote_real_time_indexing/banner-1200x510.webp b/blog/assets/rednote_real_time_indexing/banner-1200x510.webp
new file mode 100644
index 0000000..1fc3ad0
Binary files /dev/null and b/blog/assets/rednote_real_time_indexing/banner-1200x510.webp differ
diff --git a/blog/assets/storage_hierarchy/banner-1200x510.webp b/blog/assets/storage_hierarchy/banner-1200x510.webp
new file mode 100644
index 0000000..e661d9f
Binary files /dev/null and b/blog/assets/storage_hierarchy/banner-1200x510.webp differ
diff --git a/blog/assets/taobao_practice/banner-1200x510.webp b/blog/assets/taobao_practice/banner-1200x510.webp
new file mode 100644
index 0000000..99eaa3e
Binary files /dev/null and b/blog/assets/taobao_practice/banner-1200x510.webp differ
diff --git a/blog/assets/taobao_realtime_decisions/banner-1200x510.webp b/blog/assets/taobao_realtime_decisions/banner-1200x510.webp
new file mode 100644
index 0000000..ec480fb
Binary files /dev/null and b/blog/assets/taobao_realtime_decisions/banner-1200x510.webp differ
diff --git a/blog/assets/tiering_service_dd_part1/banner-1200x510.webp b/blog/assets/tiering_service_dd_part1/banner-1200x510.webp
new file mode 100644
index 0000000..5fae369
Binary files /dev/null and b/blog/assets/tiering_service_dd_part1/banner-1200x510.webp differ
diff --git a/blog/assets/tiering_service_dd_part2/banner-1200x510.webp b/blog/assets/tiering_service_dd_part2/banner-1200x510.webp
new file mode 100644
index 0000000..522fa75
Binary files /dev/null and b/blog/assets/tiering_service_dd_part2/banner-1200x510.webp differ
diff --git a/blog/assets/tiering_service_dd_part3/banner-1200x510.webp b/blog/assets/tiering_service_dd_part3/banner-1200x510.webp
new file mode 100644
index 0000000..aec6c37
Binary files /dev/null and b/blog/assets/tiering_service_dd_part3/banner-1200x510.webp differ
diff --git a/blog/assets/unified_lake_stream_arch/banner-1200x510.webp b/blog/assets/unified_lake_stream_arch/banner-1200x510.webp
new file mode 100644
index 0000000..3db2546
Binary files /dev/null and b/blog/assets/unified_lake_stream_arch/banner-1200x510.webp differ
diff --git a/blog/assets/why_fluss/banner-1200x510.webp b/blog/assets/why_fluss/banner-1200x510.webp
new file mode 100644
index 0000000..5a8368a
Binary files /dev/null and b/blog/assets/why_fluss/banner-1200x510.webp differ
diff --git a/blog/releases/0.6.md b/blog/releases/0.6.md
index 287b5cb..09e5283 100644
--- a/blog/releases/0.6.md
+++ b/blog/releases/0.6.md
@@ -2,7 +2,9 @@
 title: Announcing Fluss 0.6
 authors: [jark]
 date: 2025-03-10
-tags: [releases]
+tags: [announcement]
+description: "Fluss 0.6 introduces column compression, merge engines, and prefix lookups, alongside improvements to stability and lakehouse integration."
+image: ./../assets/0.6/banner-1200x510.webp
 ---
 
 The Fluss community is pleased to announce the official release of **Fluss 0.6.0**. This version has undergone over
diff --git a/blog/releases/0.7.md b/blog/releases/0.7.md
index fd652c7..ae79974 100644
--- a/blog/releases/0.7.md
+++ b/blog/releases/0.7.md
@@ -2,7 +2,9 @@
 title: Announcing Fluss 0.7
 authors: [jark]
 date: 2025-06-18
-tags: [releases]
+tags: [announcement]
+description: "Fluss 0.7 advances production readiness with stability improvements, a new tiering architecture, stronger security, and Java client support."
+image: ./../assets/0.7/banner-1200x510.webp
 ---
 
 ![Banner](../assets/0.7/banner.png)
diff --git a/blog/releases/0.8.md b/blog/releases/0.8.md
index b24d626..3468ace 100644
--- a/blog/releases/0.8.md
+++ b/blog/releases/0.8.md
@@ -3,7 +3,9 @@ title: "Announcing Apache Fluss (Incubating) 0.8: Streaming Lakehouse for Data +
 sidebar_label: "Announcing Apache Fluss 0.8"
 authors: [giannis, jark]
 date: 2025-11-09
-tags: [releases]
+tags: [announcement]
+description: "Fluss 0.8 expands the Streaming Lakehouse with Iceberg and Lance integration, Delta Joins, and improvements for production deployments."
+image: ./../assets/0.8/banner-1200x510.webp
 ---
 
 ![Banner](../assets/0.8/banner.jpg)
diff --git a/blog/releases/0.9.md b/blog/releases/0.9.md
index 7345431..ae69201 100644
--- a/blog/releases/0.9.md
+++ b/blog/releases/0.9.md
@@ -3,7 +3,9 @@ title: "Apache Fluss (Incubating) 0.9 Release Announcement"
 sidebar_label: "Announcing Apache Fluss 0.9"
 authors: [giannis, jark]
 date: 2026-03-02
-tags: [releases]
+tags: [announcement]
+description: "Fluss 0.9 brings richer data models, zero-copy schema evolution, storage-level processing, and stronger operational capabilities."
+image: ./../assets/0.9/banner-1200x510.webp
 ---
 
 ![Banner](../assets/0.9/banner.png)
diff --git a/blog/releases/1.0.md b/blog/releases/1.0.md
index 9df122e..ee76009 100644
--- a/blog/releases/1.0.md
+++ b/blog/releases/1.0.md
@@ -3,7 +3,9 @@ title: "Announcing Apache Fluss 1.0: Real-Time Data Foundation for AI"
 sidebar_label: "Announcing Apache Fluss 1.0"
 authors: [keithlee, jark]
 date: 2026-09-21
-tags: [releases]
+tags: [announcement]
+description: "Fluss 1.0 strengthens the real-time data foundation for AI with Fluss Gateway, native clients, and deeper streaming and lakehouse integration."
+image: ./../assets/1.0/banner-1200x510.webp
 ---
 
 import ThemedImage from '@theme/ThemedImage';
diff --git a/blog/tags.yml b/blog/tags.yml
index 5e44131..add3c17 100644
--- a/blog/tags.yml
+++ b/blog/tags.yml
@@ -16,25 +16,19 @@
 # limitations under the License.
 ################################################################################
 
-releases:
-  label: 'releases'
-  permalink: '/releases'
-  description: 'Content related release announcement.'
-streaming-lakehouse:
-  label: 'Streaming Lakehouse'
-apache-iceberg:
-  label: 'Apache Iceberg'
-real-time-analytics:
-  label: 'Real-time Analytics'
-apache-fluss:
-  label: 'Apache Fluss'
-fluss-rust:
-  label: 'Fluss Rust'
-fluss-rs:
-  label: 'fluss-rs'
-pyfluss:
-  label: 'PyFluss'
-fluss-cpp:
-  label: 'Fluss C++'
-arrow:
-  label: 'Arrow'
\ No newline at end of file
+announcement:
+  label: 'Announcement'
+  permalink: '/announcement'
+  description: 'Releases, project milestones, and official announcements.'
+case-study:
+  label: 'Case Study'
+  permalink: '/case-study'
+  description: 'Enterprise case studies and production practices.'
+engineering:
+  label: 'Engineering'
+  permalink: '/engineering'
+  description: 'Architecture, system internals, and technical deep dives.'
+guides:
+  label: 'Guides'
+  permalink: '/guides'
+  description: 'Getting started, how-to guides, application patterns, and best practices.'