diff --git a/CLAUDE.md b/CLAUDE.md
index 82c877d..3040d73 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -20,3 +20,51 @@ Instead, issues for the website are held in the main Kroxylicious repo `https://
So if you need to interact with website issues you can use the `-R kroxylicious/kroxylicious` option, for example: `gh issue list -R kroxylicious/kroxylicious`.
When making commits, use the `Assisted-by:` trailer to attribute changes to AI tooling, rather than `Coauthored-by:`.
+
+## Documentation Filtering System
+
+The documentation index pages (`/documentation/` and `/documentation/{version}/`) use client-side filtering to help visitors find relevant guides.
+
+### Structure
+
+1. **Metadata**: Each version has a YAML file in `_data/documentation/` (e.g., `0_19_0.yaml`) containing guide metadata:
+ - `title`, `description`, `path`: Basic guide information
+ - `tags`: Array of category tags (e.g., `[filter, security]`)
+ - `rank`: String to control sort order (e.g., '000', '010')
+
+2. **Layout**: `_layouts/released-documentation.html` renders:
+ - Filter buttons (All, Proxy, Filters, Kubernetes, Developer, Security, Governance)
+ - Card grid with icons and tag badges
+ - Cards include a `data-categories` attribute for JavaScript filtering
+
+3. **Filtering**: `assets/scripts/doc-filter.js` provides vanilla JavaScript filtering
+ - Progressive enhancement: works without JavaScript
+ - Filters by matching tags in the `data-categories` attribute
+
+4. **Styling**: `_sass/kroxylicious.scss` provides:
+ - Filter button styles with active states
+ - Category-specific border colours on cards
+ - Icon and badge styling
+
+### Current Filter Categories
+
+- **proxy**: Core proxy functionality and configuration
+- **filter**: Filter plugins (encryption, validation, multi-tenancy, OAuth, SASL, authorization)
+- **kubernetes**: Kubernetes operator and deployment
+- **developer**: Development tools, guides, and API documentation
+- **security**: Security features (encryption, authentication, authorization)
+- **governance**: Compliance and validation
+
+### Adding New Categories
+
+To add a new filter category:
+
+1. Update YAML files in `_data/documentation/` for relevant versions
+2. Add filter button in `_layouts/released-documentation.html` with Bootstrap Icon
+3. Add icon mapping for card headers (same file)
+4. Add category border style in `_sass/kroxylicious.scss`
+5. No JavaScript changes needed (handles tags dynamically)
+
+### Version Scope Convention
+
+When updating documentation tags, typically update only recent versions (e.g., 0.16.0+) rather than all historical versions, to balance consistency with maintenance effort.
diff --git a/_data/documentation/0_16_0.yaml b/_data/documentation/0_16_0.yaml
index 51392a4..08202cc 100644
--- a/_data/documentation/0_16_0.yaml
+++ b/_data/documentation/0_16_0.yaml
@@ -9,14 +9,14 @@ docs:
description: "Covers using the proxy, including configuration, security and operation."
tags:
- proxy
+ - security
rank: '010'
path: html/kroxylicious-proxy
- title: Record Encryption quickstart
description: Shows how to use the proxy to provide an encryption at rest solution
for Apache Kafka
tags:
- - record-encryption
- - encryption-at-rest
+ - security
rank: '011'
path: html/record-encryption-quickstart
- title: Kroxylicious Operator for Kubernetes
@@ -31,12 +31,14 @@ docs:
\ security and operation."
tags:
- filter
+ - security
rank: '020'
path: html/record-encryption-guide
- title: Record Validation Guide
description: Covers using the record validation filter.
tags:
- filter
+ - governance
rank: '021'
path: html/record-validation-guide
- title: Multi-tenancy Guide
@@ -49,6 +51,7 @@ docs:
description: Covers using the Oauth Bearer validation filter.
tags:
- filter
+ - security
rank: '023'
path: html/oauth-bearer-validation
- title: Developer Quick Start
diff --git a/_data/documentation/0_17_0.yaml b/_data/documentation/0_17_0.yaml
index 2f4aea7..c235679 100644
--- a/_data/documentation/0_17_0.yaml
+++ b/_data/documentation/0_17_0.yaml
@@ -9,14 +9,14 @@ docs:
description: "Covers using the proxy, including configuration, security and operation."
tags:
- proxy
+ - security
rank: '010'
path: html/kroxylicious-proxy
- title: Record Encryption quickstart
description: Shows how to use the proxy to provide an encryption at rest solution
for Apache Kafka
tags:
- - record-encryption
- - encryption-at-rest
+ - security
rank: '011'
path: html/record-encryption-quickstart
- title: Kroxylicious Operator for Kubernetes
@@ -31,12 +31,14 @@ docs:
\ security and operation."
tags:
- filter
+ - security
rank: '020'
path: html/record-encryption-guide
- title: Record Validation Guide
description: Covers using the record validation filter.
tags:
- filter
+ - governance
rank: '021'
path: html/record-validation-guide
- title: Multi-tenancy Guide
@@ -49,12 +51,14 @@ docs:
description: Covers using the SASL Inspection filter.
tags:
- filter
+ - security
rank: '023'
path: html/sasl-inspection-guide
- title: Oauth Bearer Validation Guide
description: Covers using the Oauth Bearer validation filter.
tags:
- filter
+ - security
rank: '023'
path: html/oauth-bearer-validation
- title: Developer Quick Start
diff --git a/_data/documentation/0_17_1.yaml b/_data/documentation/0_17_1.yaml
index 567885f..267bc82 100644
--- a/_data/documentation/0_17_1.yaml
+++ b/_data/documentation/0_17_1.yaml
@@ -9,14 +9,14 @@ docs:
description: "Covers using the proxy, including configuration, security and operation."
tags:
- proxy
+ - security
rank: '010'
path: html/kroxylicious-proxy
- title: Record Encryption quickstart
description: Shows how to use the proxy to provide an encryption at rest solution
for Apache Kafka
tags:
- - record-encryption
- - encryption-at-rest
+ - security
rank: '011'
path: html/record-encryption-quickstart
- title: Kroxylicious Operator for Kubernetes
@@ -31,12 +31,14 @@ docs:
\ security and operation."
tags:
- filter
+ - security
rank: '020'
path: html/record-encryption-guide
- title: Record Validation Guide
description: Covers using the record validation filter.
tags:
- filter
+ - governance
rank: '021'
path: html/record-validation-guide
- title: Multi-tenancy Guide
@@ -49,12 +51,14 @@ docs:
description: Covers using the SASL Inspection filter.
tags:
- filter
+ - security
rank: '023'
path: html/sasl-inspection-guide
- title: Oauth Bearer Validation Guide
description: Covers using the Oauth Bearer validation filter.
tags:
- filter
+ - security
rank: '023'
path: html/oauth-bearer-validation
- title: Developer Quick Start
diff --git a/_data/documentation/0_18_0.yaml b/_data/documentation/0_18_0.yaml
index fc0e302..058ab75 100644
--- a/_data/documentation/0_18_0.yaml
+++ b/_data/documentation/0_18_0.yaml
@@ -9,14 +9,14 @@ docs:
description: "Covers using the proxy, including configuration, security and operation."
tags:
- proxy
+ - security
rank: '010'
path: html/kroxylicious-proxy
- title: Record Encryption quickstart
description: Shows how to use the proxy to provide an encryption at rest solution
for Apache Kafka
tags:
- - record-encryption
- - encryption-at-rest
+ - security
rank: '011'
path: html/record-encryption-quickstart
- title: Kroxylicious Operator for Kubernetes
@@ -31,12 +31,14 @@ docs:
\ security and operation."
tags:
- filter
+ - security
rank: '020'
path: html/record-encryption-guide
- title: Record Validation Guide
description: Covers using the record validation filter.
tags:
- filter
+ - governance
rank: '021'
path: html/record-validation-guide
- title: Multi-tenancy Guide
@@ -49,12 +51,14 @@ docs:
description: Covers using the SASL Inspection filter.
tags:
- filter
+ - security
rank: '023'
path: html/sasl-inspection-guide
- title: Oauth Bearer Validation Guide
description: Covers using the Oauth Bearer validation filter.
tags:
- filter
+ - security
rank: '023'
path: html/oauth-bearer-validation
- title: Developer Quick Start
diff --git a/_data/documentation/0_19_0.yaml b/_data/documentation/0_19_0.yaml
index 64c0c26..e407293 100644
--- a/_data/documentation/0_19_0.yaml
+++ b/_data/documentation/0_19_0.yaml
@@ -9,14 +9,14 @@ docs:
description: "Covers using the proxy, including configuration, security and operation."
tags:
- proxy
+ - security
rank: '010'
path: html/kroxylicious-proxy
- title: Record Encryption quickstart
description: Shows how to use the proxy to provide an encryption at rest solution
for Apache Kafka
tags:
- - record-encryption
- - encryption-at-rest
+ - security
rank: '011'
path: html/record-encryption-quickstart
- title: Kroxylicious Operator for Kubernetes
@@ -31,12 +31,14 @@ docs:
\ security and operation."
tags:
- filter
+ - security
rank: '020'
path: html/record-encryption-guide
- title: Record Validation Guide
description: Covers using the record validation filter.
tags:
- filter
+ - governance
rank: '021'
path: html/record-validation-guide
- title: Multi-tenancy Guide
@@ -49,18 +51,21 @@ docs:
description: Covers using the Oauth Bearer validation filter.
tags:
- filter
+ - security
rank: '023'
path: html/oauth-bearer-validation
- title: SASL Inspection Guide
description: Covers using the SASL Inspection filter.
tags:
- filter
+ - security
rank: '023'
path: html/sasl-inspection-guide
- title: Authorization Guide
description: Covers using the Authorization filter.
tags:
- filter
+ - security
rank: '024'
path: html/authorization-guide
- title: Developer Quick Start
diff --git a/_layouts/released-documentation.html b/_layouts/released-documentation.html
index 968e9a7..25cddc8 100644
--- a/_layouts/released-documentation.html
+++ b/_layouts/released-documentation.html
@@ -35,8 +35,32 @@
{{ version }} Documentation
-
{%- assign docs_for_release = site.data.documentation[underscored_version].docs | sort: "rank" -%}
+
+
+
+
+
+
+
+
+
+
+
{%- for doc in docs_for_release -%}
{%- assign first1 = doc.path | slice: 0, 1 -%}
{%- assign first7 = doc.path | slice: 0, 7 -%}
@@ -49,12 +73,21 @@
{{ version }} Documentation
{%- assign linkTemplate = "/documentation/" | append: version | append: "/" | append: doc.path | absolute_url -%}
{%- endif -%}