diff --git a/_plugins/duckdb_functions.rb b/_plugins/duckdb_functions.rb
index 80110fa0dc3..c7da3e39d42 100644
--- a/_plugins/duckdb_functions.rb
+++ b/_plugins/duckdb_functions.rb
@@ -87,6 +87,7 @@ def render(context)
Jekyll.logger.info(@tag_name, "Loaded #{functions.size} functions")
filtered = functions.filter { |function| this.select_function(filter_expression, function) }.sort_by { |f| f['name'] }
Jekyll.logger.info(@tag_name, "Filtered down to #{filtered.size} functions with expression: #{filter_expression}")
+ throw "No functions found for filter: #{filter_expression}" if filtered.empty?
puts generate_index(page, filtered)
diff --git a/docs/test.md b/docs/test.md
deleted file mode 100644
index 5ec42f2c359..00000000000
--- a/docs/test.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: test
-layout: docu
----
-
-# Scalar Functions
-{% duckdb_functions function['type'] == 'scalar_function' %}
-
-# Aggregate Functions
-{% duckdb_functions function['type'] == 'aggregate_function' %}
-
-# Scalar Function Set
-{% duckdb_functions function['type'] == 'scalar_function_set' %}
-
-# Aggregate Function Set
-{% duckdb_functions function['type'] == 'aggregate_function_set' %}
-
diff --git a/docs/test/functions/bitstring.md b/docs/test/functions/bitstring.md
new file mode 100644
index 00000000000..1418624d3ac
--- /dev/null
+++ b/docs/test/functions/bitstring.md
@@ -0,0 +1,7 @@
+---
+title: Bitstring Functions
+layout: docu
+---
+
+{% duckdb_functions function['category'] == 'bit' %}
+
diff --git a/docs/test/functions/blob.md b/docs/test/functions/blob.md
new file mode 100644
index 00000000000..77b4c743e02
--- /dev/null
+++ b/docs/test/functions/blob.md
@@ -0,0 +1,7 @@
+---
+title: Blob Functions
+layout: docu
+---
+
+{% duckdb_functions function['category'] == 'blob' %}
+
diff --git a/docs/test/functions/char.md b/docs/test/functions/char.md
new file mode 100644
index 00000000000..844e26f05fd
--- /dev/null
+++ b/docs/test/functions/char.md
@@ -0,0 +1,7 @@
+---
+title: String Functions
+layout: docu
+---
+
+{% duckdb_functions function['category'] == 'string' %}
+
diff --git a/docs/test/functions/date.md b/docs/test/functions/date.md
new file mode 100644
index 00000000000..ddbb3b3878d
--- /dev/null
+++ b/docs/test/functions/date.md
@@ -0,0 +1,7 @@
+---
+title: Date Functions
+layout: docu
+---
+
+{% duckdb_functions function['category'] == 'date' %}
+
diff --git a/docs/test/functions/enum.md b/docs/test/functions/enum.md
new file mode 100644
index 00000000000..45b745ad47f
--- /dev/null
+++ b/docs/test/functions/enum.md
@@ -0,0 +1,7 @@
+---
+title: Enum Functions
+layout: docu
+---
+
+{% duckdb_functions function['category'] == 'enum' %}
+
diff --git a/docs/test/functions/math.md b/docs/test/functions/math.md
new file mode 100644
index 00000000000..7679f61223a
--- /dev/null
+++ b/docs/test/functions/math.md
@@ -0,0 +1,7 @@
+---
+title: Math Functions
+layout: docu
+---
+
+{% duckdb_functions function['category'] == 'math' %}
+
diff --git a/docs/test/functions/nested.md b/docs/test/functions/nested.md
new file mode 100644
index 00000000000..7ccb903e259
--- /dev/null
+++ b/docs/test/functions/nested.md
@@ -0,0 +1,17 @@
+---
+title: Nested Functions
+layout: docu
+---
+
+## List Functions
+{% duckdb_functions function['category'] == 'list' %}
+
+## Map Functions
+{% duckdb_functions function['category'] == 'map' %}
+
+## Struct Functions
+{% duckdb_functions function['category'] == 'struct' %}
+
+## Union Functions
+{% duckdb_functions function['category'] == 'union' %}
+
diff --git a/docs/test/functions/overview.md b/docs/test/functions/overview.md
new file mode 100644
index 00000000000..6614c523ede
--- /dev/null
+++ b/docs/test/functions/overview.md
@@ -0,0 +1,20 @@
+---
+name: Overview
+layout: docu
+---
+
+ * Bitstring Functions
+ * Blob Functions
+ * Date Format Functions
+ * Date Functions
+ * Date Part Functions
+ * Enum Functions
+ * Interval Functions
+ * Nested Functions
+ * Numeric Functions
+ * Pattern Matching
+ * Text Functions
+ * Time Functions
+ * Timestamp Functions
+ * Timestamp With Time Zone Functions
+ * Utility Functions
diff --git a/docs/test/functions/utility.md b/docs/test/functions/utility.md
new file mode 100644
index 00000000000..a51053e806d
--- /dev/null
+++ b/docs/test/functions/utility.md
@@ -0,0 +1,7 @@
+---
+title: Utility Functions
+layout: docu
+---
+
+{% duckdb_functions function['category'] == 'generic' || function['category'] == 'random' %}
+