From a378ec7c67282d6912e139db61098add42a83091 Mon Sep 17 00:00:00 2001 From: Brian O'Kelley Date: Wed, 12 Aug 2026 06:02:25 +0200 Subject: [PATCH 1/2] feat(website): launch Mastermind Council experience --- server/public/committees.html | 16 +- server/public/js/markdown-to-plain-text.js | 29 ++++ server/public/working-groups/detail.html | 39 +++-- server/src/addie/mcp/member-tools.ts | 8 +- server/src/routes/committees.ts | 7 + .../src/services/active-membership-service.ts | 63 ++++++++ .../working-group-membership-service.ts | 63 +++++--- .../unit/active-membership-service.test.ts | 96 ++++++++++++ .../tests/unit/markdown-to-plain-text.test.ts | 72 +++++++++ ...termind-council-membership-service.test.ts | 147 ++++++++++++++++++ .../unit/mastermind-council-surfaces.test.ts | 58 +++++++ .../working-group-admin-global-auth.test.ts | 2 + ...g-group-perspective-url-validation.test.ts | 1 + 13 files changed, 552 insertions(+), 49 deletions(-) create mode 100644 server/public/js/markdown-to-plain-text.js create mode 100644 server/src/services/active-membership-service.ts create mode 100644 server/tests/unit/active-membership-service.test.ts create mode 100644 server/tests/unit/markdown-to-plain-text.test.ts create mode 100644 server/tests/unit/mastermind-council-membership-service.test.ts create mode 100644 server/tests/unit/mastermind-council-surfaces.test.ts diff --git a/server/public/committees.html b/server/public/committees.html index 5cf7748e5e..478714f1ee 100644 --- a/server/public/committees.html +++ b/server/public/committees.html @@ -409,7 +409,7 @@

Committees

All Committees Working Groups - Industry Councils + Mastermind Councils Regional Chapters Industry Gatherings
@@ -493,15 +493,15 @@

Want to Get Involved?

apiType: 'working_group' }, council: { - title: 'Industry Councils', - pageTitle: 'Industry Councils | AgenticAdvertising.org', - subtitle: 'Driving agentic advertising adoption across industry verticals', - sectionTitle: 'All Industry Councils', - sectionDesc: 'Industry councils convene stakeholders from specific advertising verticals to accelerate adoption of agentic advertising standards.', + title: 'Mastermind Councils', + pageTitle: 'Mastermind Councils | AgenticAdvertising.org', + subtitle: 'Exploring how agentic AI is impacting two outcomes that marketers care about: growth and brand value.', + sectionTitle: 'All Mastermind Councils', + sectionDesc: 'Mastermind Councils are interactive peer forums where members openly exchange ideas, share success stories, and collectively develop scalable playbooks and emerging best practices to shape the future of agentic marketing.', emptyTitle: 'No Councils Yet', - emptyMessage: 'Industry councils are being established. Check back soon!', + emptyMessage: 'Mastermind Councils are being established. Check back soon!', myGroupsTitle: 'Your Councils', - joinCta: 'Become an AAO member to join industry councils and help shape your vertical\'s approach to agentic advertising.', + joinCta: 'Become an AgenticAdvertising.org member to join Mastermind Councils and help shape the future of agentic marketing.', viewButton: 'View Council', apiType: 'council' }, diff --git a/server/public/js/markdown-to-plain-text.js b/server/public/js/markdown-to-plain-text.js new file mode 100644 index 0000000000..6b01d63035 --- /dev/null +++ b/server/public/js/markdown-to-plain-text.js @@ -0,0 +1,29 @@ +(function installMarkdownToPlainText(global) { + const SAFE_TAGS = [ + 'p', 'div', 'span', 'strong', 'em', 'b', 'i', 'del', 's', 'code', 'pre', + 'blockquote', 'ul', 'ol', 'li', 'br', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', + 'table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'img', + ]; + const BLOCK_TAGS = 'p, div, li, blockquote, h1, h2, h3, h4, h5, h6, td, th, tr'; + + global.markdownToPlainText = function markdownToPlainText(markdown) { + const container = document.createElement('div'); + const rendered = global.marked.parse(String(markdown)); + container.innerHTML = global.DOMPurify.sanitize(rendered, { + ALLOWED_TAGS: SAFE_TAGS, + ALLOWED_ATTR: ['alt'], + }); + + container.querySelectorAll('img').forEach(image => { + image.replaceWith(document.createTextNode(image.getAttribute('alt') || '')); + }); + container.querySelectorAll('br').forEach(lineBreak => { + lineBreak.replaceWith(document.createTextNode(' ')); + }); + container.querySelectorAll(BLOCK_TAGS).forEach(block => { + block.append(document.createTextNode(' ')); + }); + + return (container.textContent || '').replace(/\s+/g, ' ').trim(); + }; +})(window); diff --git a/server/public/working-groups/detail.html b/server/public/working-groups/detail.html index 2b93d205c3..a7f844111c 100644 --- a/server/public/working-groups/detail.html +++ b/server/public/working-groups/detail.html @@ -26,6 +26,7 @@ + @@ -1174,7 +1175,7 @@

- Join Working Group + Join Working Group