diff --git a/packages/webawesome/docs/.eleventy.js b/packages/webawesome/docs/.eleventy.js
index 21cd9ee2f..dd4cd119a 100644
--- a/packages/webawesome/docs/.eleventy.js
+++ b/packages/webawesome/docs/.eleventy.js
@@ -1,3 +1,4 @@
+import { nanoid } from 'nanoid';
import { parse as HTMLParse } from 'node-html-parser';
import * as fs from 'node:fs';
import * as path from 'node:path';
@@ -87,6 +88,7 @@ export default async function (eleventyConfig) {
eleventyConfig.addFilter('markdown', content => markdown.render(content || ''));
eleventyConfig.addFilter('stripExtension', string => path.parse(string + '').name);
eleventyConfig.addFilter('stripPrefix', content => content.replace(/^wa-/, ''));
+ eleventyConfig.addFilter('uniqueId', (_value, length = 8) => nanoid(length));
// Trims whitespace and pipes from the start and end of a string. Useful for CEM types, which can be pipe-delimited.
// With Prettier 3, this means a leading pipe will exist be present when the line wraps.
eleventyConfig.addFilter('trimPipes', content => {
diff --git a/packages/webawesome/docs/_includes/pro-badge.njk b/packages/webawesome/docs/_includes/pro-badge.njk
new file mode 100644
index 000000000..f5d05dd2a
--- /dev/null
+++ b/packages/webawesome/docs/_includes/pro-badge.njk
@@ -0,0 +1,5 @@
+{% macro proBadge(proBadgeDescription, proBadgeId) %}
+ {% set badgeId = proBadgeId or ("pro-badge-" + ("" | uniqueId(8))) %}
+