This is an automated email from the ASF dual-hosted git repository. shuber pushed a commit to branch UNOMI-932-website-modernization in repository https://gitbox.apache.org/repos/asf/unomi-site.git
commit 1138ffca56a58bc68c70be7b90475031c987fabe Author: Serge Huber <[email protected]> AuthorDate: Sat Feb 14 17:29:47 2026 +0100 Community, events, integrations: Slack access, Salesforce removal, ASF compliance - Community: rewrite Slack card with ASF access paths, update monthly meeting with direct Zoom link and 'open to all' messaging, add mailing list anchor - Team: modernize to card layout, update affiliations, lazy-load gravatars - Events: restructure past events with local thumbnails, add CollectionPage schema - Integrations: remove Salesforce connector, add Groovy actions (recommended) and Java plugins guidance, remove Unomi UI/Inoyu UI cards for ASF compliance, use generic labels in Mermaid diagram - Connectors: update description for Salesforce deprecation - Stories: replace inline shuffle script with shared shuffle.js - All pages: fix rel="noopener", protocol upgrades, inline style cleanup Co-authored-by: Cursor <[email protected]> --- .../webapp/community/events/apachecon/index.html | 37 +++---- src/main/webapp/community/events/index.html | 97 ++++++++++++------- .../community/events/meetups/2021-11-18.html | 13 +-- src/main/webapp/community/index.html | 33 ++++--- .../webapp/community/maturity-model-report.html | 5 +- src/main/webapp/community/policies.html | 5 +- src/main/webapp/community/team.html | 45 ++++----- src/main/webapp/connectors.html | 5 +- src/main/webapp/integrations.html | 106 +++++++-------------- src/main/webapp/stories.html | 21 +--- 10 files changed, 180 insertions(+), 187 deletions(-) diff --git a/src/main/webapp/community/events/apachecon/index.html b/src/main/webapp/community/events/apachecon/index.html index 5135e57..4e49036 100644 --- a/src/main/webapp/community/events/apachecon/index.html +++ b/src/main/webapp/community/events/apachecon/index.html @@ -1,6 +1,7 @@ --- title: Past Apache Events description: "Archive of Apache Unomi presentations at ApacheCon and Feathercast events." +keywords: "ApacheCon, Apache Unomi talks, conference presentations, CDP talks, open source conferences" layout: default --- @@ -37,9 +38,9 @@ layout: default <h2 class="h4 mb-4">Feathercast</h2> <div class="row g-4 mb-5"> <div class="col-md-5"> - <a href="https://www.youtube.com/watch?v=EyT0_so-ayI" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/feathercast-EyT0_so-ayI.jpg" alt="Feathercast Interview 2020" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=EyT0_so-ayI" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/feathercast-EyT0_so-ayI.jpg" alt="Feathercast Interview 2020" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> </div> <div class="col-md-7 d-flex align-items-center"> @@ -53,9 +54,9 @@ layout: default <h2 class="h4 mb-4">ApacheCon NA 2019</h2> <div class="row g-4 mb-4"> <div class="col-md-5"> - <a href="https://www.youtube.com/watch?v=3VhC3x0GdDQ" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2019-predictionio-3VhC3x0GdDQ.jpg" alt="Adding AI to Apache Unomi using PredictionIO" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=3VhC3x0GdDQ" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2019-predictionio-3VhC3x0GdDQ.jpg" alt="Adding AI to Apache Unomi using PredictionIO" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> </div> <div class="col-md-7 d-flex align-items-center"> @@ -67,9 +68,9 @@ layout: default </div> <div class="row g-4 mb-5"> <div class="col-md-5"> - <a href="https://www.youtube.com/watch?v=5ts6LuNwH9o" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2019-static-5ts6LuNwH9o.jpg" alt="Apache Unomi segmentation in static website" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=5ts6LuNwH9o" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2019-static-5ts6LuNwH9o.jpg" alt="Apache Unomi segmentation in static website" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> </div> <div class="col-md-7 d-flex align-items-center"> @@ -83,9 +84,9 @@ layout: default <h2 class="h4 mb-4">ApacheCon Chicago Roadshow 2019</h2> <div class="row g-4 mb-5"> <div class="col-md-5"> - <a href="https://www.youtube.com/watch?v=ut2ReqhMl2Y&t=3699" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2019-ut2ReqhMl2Y.jpg" alt="Customer Segmentation and Marketing Automation" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=ut2ReqhMl2Y&t=3699" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2019-ut2ReqhMl2Y.jpg" alt="Customer Segmentation and Marketing Automation" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> </div> <div class="col-md-7 d-flex align-items-center"> @@ -99,9 +100,9 @@ layout: default <h2 class="h4 mb-4">ApacheCon NA 2018</h2> <div class="row g-4 mb-5"> <div class="col-md-5"> - <a href="https://www.youtube.com/watch?v=XO1cLSgeRsw" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2018-XO1cLSgeRsw.jpg" alt="Apache Unomi - An Open Source CDP" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=XO1cLSgeRsw" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2018-XO1cLSgeRsw.jpg" alt="Apache Unomi - An Open Source CDP" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> </div> <div class="col-md-7 d-flex align-items-center"> @@ -115,9 +116,9 @@ layout: default <h2 class="h4 mb-4">ApacheCon Europe 2015</h2> <div class="row g-4 mb-4"> <div class="col-md-5"> - <a href="https://www.youtube.com/watch?v=o0VUkSTKTxc" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2015-keynote-o0VUkSTKTxc.jpg" alt="Keynote - Introducing Apache Unomi" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=o0VUkSTKTxc" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2015-keynote-o0VUkSTKTxc.jpg" alt="Keynote - Introducing Apache Unomi" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> </div> <div class="col-md-7 d-flex align-items-center"> diff --git a/src/main/webapp/community/events/index.html b/src/main/webapp/community/events/index.html index 158d769..1f04225 100644 --- a/src/main/webapp/community/events/index.html +++ b/src/main/webapp/community/events/index.html @@ -1,7 +1,30 @@ --- title: Events description: "Apache Unomi community events, meetups, and conference talks." +keywords: "Apache Unomi events, ApacheCon, meetups, conferences, talks, presentations, CDP events" layout: default +structured_data: > + <script type="application/ld+json"> + { + "@context": "https://schema.org", + "@type": "CollectionPage", + "name": "Apache Unomi Events", + "description": "Past and upcoming community events, conference talks, and meetups for the Apache Unomi project.", + "url": "https://unomi.apache.org/community/events/", + "mainEntity": { + "@type": "ItemList", + "name": "Apache Unomi Conference Talks & Events", + "itemListElement": [ + { "@type": "ListItem", "position": 1, "name": "Community Over Code EU 2025 — A CDP in an AI-first World", "url": "https://www.youtube.com/watch?v=UrhNhXHugKc" }, + { "@type": "ListItem", "position": 2, "name": "ApacheCon North America 2024 — Apache Unomi: The Open Source CDP", "url": "https://www.youtube.com/watch?v=YqPkUhBlcrs" }, + { "@type": "ListItem", "position": 3, "name": "Community Over Code NA 2024 — What's New in the Latest Releases", "url": "https://www.youtube.com/watch?v=_6vfuWocQBs" }, + { "@type": "ListItem", "position": 4, "name": "Community Over Code NA 2023 — Apache Unomi Past, Present, and Future", "url": "https://www.youtube.com/watch?v=uNbKW29FCnE" }, + { "@type": "ListItem", "position": 5, "name": "ApacheCon Asia 2021 — Introduction to Apache Unomi", "url": "https://www.youtube.com/watch?v=ynluCYocfG4" }, + { "@type": "ListItem", "position": 6, "name": "ApacheCon @Home 2020 — Building a CDP with Apache Unomi", "url": "https://www.youtube.com/watch?v=_EXJQJ69niA" } + ] + } + } + </script> --- <section class="page-header"> @@ -40,7 +63,7 @@ layout: default </div> <div class="col-lg-9"> <h2 class="h4 mb-4">Upcoming Events</h2> - <div class="p-4 rounded-3 mb-5" style="background:var(--unomi-bg-soft);border:1px solid var(--unomi-border)"> + <div class="p-4 rounded-3 mb-5 info-box"> <p class="text-muted mb-2">No events are currently planned.</p> <p class="small text-muted mb-0">Want to organize a meetup or talk about Apache Unomi? Reach out on the <a href="/community/index.html">mailing list</a>.</p> </div> @@ -53,9 +76,9 @@ layout: default <div class="row g-3"> <div class="col-md-6"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=_6vfuWocQBs" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/coc-2025-_6vfuWocQBs.jpg" alt="From Complaining Customers to Brand Promoters" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=_6vfuWocQBs" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/coc-2025-_6vfuWocQBs.jpg" alt="From Complaining Customers to Brand Promoters" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> <h4 class="h6 fw-semibold mb-1">From Complaining Customers to Brand Promoters</h4> <p class="small text-muted mb-0">Real-time AI + customer data demo combining Unomi with Bluesky, Skype, an LLM, an e-commerce site, Inoyu’s CDP UI, and HubSpot.</p> @@ -63,9 +86,9 @@ layout: default </div> <div class="col-md-6"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=ON0EskhpuME" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/coc-2025-ON0EskhpuME.jpg" alt="AI + CDP = Unlimited Personalized Memory" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=ON0EskhpuME" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/coc-2025-ON0EskhpuME.jpg" alt="AI + CDP = Unlimited Personalized Memory" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> <h4 class="h6 fw-semibold mb-1">AI + CDP = Unlimited Personalized Memory</h4> <p class="small text-muted mb-0">How combining a Customer Data Platform with an LLM creates unlimited, personalized, and privacy-compliant memory.</p> @@ -80,9 +103,9 @@ layout: default <div class="row g-3"> <div class="col-md-6"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=uNbKW29FCnE" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/opensearch-uNbKW29FCnE.jpg" alt="Apache Unomi OpenSearch Contribution" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=uNbKW29FCnE" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/opensearch-uNbKW29FCnE.jpg" alt="Apache Unomi OpenSearch Contribution" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> <h4 class="h6 fw-semibold mb-1">Apache Unomi OpenSearch Contribution</h4> <p class="small text-muted mb-0">The changes proposed to add OpenSearch support to Apache Unomi, including the dual persistence architecture and new tooling.</p> @@ -97,9 +120,9 @@ layout: default <div class="row g-3"> <div class="col-md-6"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=YqPkUhBlcrs" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/mcp-demo-YqPkUhBlcrs.jpg" alt="Claude AI integration with Apache Unomi using MCP" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=YqPkUhBlcrs" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/mcp-demo-YqPkUhBlcrs.jpg" alt="Claude AI integration with Apache Unomi using MCP" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> <h4 class="h6 fw-semibold mb-1">Claude AI + Apache Unomi via Model Context Protocol</h4> <p class="small text-muted mb-0">Anthropic’s Claude Desktop integrated with Apache Unomi using MCP to deliver personalized e-commerce experiences through natural language.</p> @@ -114,9 +137,9 @@ layout: default <div class="row g-3"> <div class="col-md-6"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=UrhNhXHugKc" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/meetup-2021-UrhNhXHugKc.jpg" alt="First Apache Unomi Meetup" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=UrhNhXHugKc" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/meetup-2021-UrhNhXHugKc.jpg" alt="First Apache Unomi Meetup" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> <h4 class="h6 fw-semibold mb-1">Full Meetup Recording</h4> <p class="small text-muted mb-0">State of the Unomi by Serge Huber, how Jahia and Dropsolid use Unomi, Apache Karaf 5 by Jean-Baptiste Onofré, and open Q&A.</p> @@ -136,9 +159,9 @@ layout: default <div class="row g-3"> <div class="col-md-6"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=EyT0_so-ayI" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/feathercast-EyT0_so-ayI.jpg" alt="Feathercast Interview 2020" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=EyT0_so-ayI" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/feathercast-EyT0_so-ayI.jpg" alt="Feathercast Interview 2020" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> <h4 class="h6 fw-semibold mb-1">Interview of Apache Unomi PMC Serge Huber</h4> <p class="small text-muted mb-0">Feathercast interview covering the project’s vision, use cases, and community.</p> @@ -153,9 +176,9 @@ layout: default <div class="row g-3"> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=ut2ReqhMl2Y" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2019-ut2ReqhMl2Y.jpg" alt="Customer Segmentation & Marketing Automation" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=ut2ReqhMl2Y" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2019-ut2ReqhMl2Y.jpg" alt="Customer Segmentation & Marketing Automation" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> <h4 class="h6 fw-semibold mb-1">Customer Segmentation & Marketing Automation</h4> <p class="small text-muted mb-0">Michael Ghen demonstrates profiles, conditions, actions, rules, segments, and plugins with live demos.</p> @@ -163,9 +186,9 @@ layout: default </div> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=3VhC3x0GdDQ" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2019-predictionio-3VhC3x0GdDQ.jpg" alt="Adding AI to Unomi using PredictionIO" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=3VhC3x0GdDQ" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2019-predictionio-3VhC3x0GdDQ.jpg" alt="Adding AI to Unomi using PredictionIO" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> <h4 class="h6 fw-semibold mb-1">Adding AI to Unomi Using PredictionIO</h4> <p class="small text-muted mb-0">How to integrate Apache PredictionIO with Unomi for AI-driven personalization.</p> @@ -173,9 +196,9 @@ layout: default </div> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=5ts6LuNwH9o" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2019-static-5ts6LuNwH9o.jpg" alt="Unomi Segmentation in Static Website" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=5ts6LuNwH9o" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2019-static-5ts6LuNwH9o.jpg" alt="Unomi Segmentation in Static Website" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> <h4 class="h6 fw-semibold mb-1">Unomi Segmentation in a Static Website</h4> <p class="small text-muted mb-0">Apache Unomi segmentation integrated into an existing static website.</p> @@ -190,9 +213,9 @@ layout: default <div class="row g-3"> <div class="col-md-6"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=XO1cLSgeRsw" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2018-XO1cLSgeRsw.jpg" alt="Apache Unomi — An Open Source CDP" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=XO1cLSgeRsw" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2018-XO1cLSgeRsw.jpg" alt="Apache Unomi — An Open Source CDP" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> <h4 class="h6 fw-semibold mb-1">Apache Unomi — An Open Source Customer Data Platform</h4> <p class="small text-muted mb-0">Serge Huber presents the architecture, features, and roadmap of Apache Unomi.</p> @@ -207,9 +230,9 @@ layout: default <div class="row g-3"> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=y4uNwnVMVyg" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2015-y4uNwnVMVyg.jpg" alt="Apache Unomi Project In-Depth" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=y4uNwnVMVyg" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2015-y4uNwnVMVyg.jpg" alt="Apache Unomi Project In-Depth" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> <h4 class="h6 fw-semibold mb-1">Apache Unomi Project In-Depth</h4> <p class="small text-muted mb-0">Serge Huber discusses the project and demonstrates IoT device integration with personalized user experiences.</p> @@ -217,9 +240,9 @@ layout: default </div> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=o0VUkSTKTxc" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2015-keynote-o0VUkSTKTxc.jpg" alt="Keynote - Introducing Apache Unomi" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white" style="font-size:1.2rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=o0VUkSTKTxc" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2015-keynote-o0VUkSTKTxc.jpg" alt="Keynote - Introducing Apache Unomi" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> <h4 class="h6 fw-semibold mb-1">Keynote — Introducing Apache Unomi</h4> <p class="small text-muted mb-0">Opening keynote introducing the Apache Unomi project to the community.</p> diff --git a/src/main/webapp/community/events/meetups/2021-11-18.html b/src/main/webapp/community/events/meetups/2021-11-18.html index 7b57604..215745d 100644 --- a/src/main/webapp/community/events/meetups/2021-11-18.html +++ b/src/main/webapp/community/events/meetups/2021-11-18.html @@ -1,6 +1,7 @@ --- title: First Apache Unomi Meetup — Nov 18, 2021 description: "Recording and agenda of the first Apache Unomi community meetup, November 18 2021." +keywords: "Apache Unomi meetup, first meetup, Unomi community meeting, CDP meetup" layout: default --- @@ -34,7 +35,7 @@ layout: default </div> <div class="col-lg-9"> - <img class="rounded mb-4 mx-auto d-block" src="/assets/images/unomi-meetup-logo.png" alt="Unomi Meetup Logo" style="max-width:100%"/> + <img class="rounded mb-4 mx-auto d-block" src="/assets/images/unomi-meetup-logo.png" alt="Unomi Meetup Logo" class="mw-100"> <h2 class="h4">First Apache Unomi Meetup !</h2> <p> @@ -47,9 +48,9 @@ layout: default The event was recorded and you can view the event here. </p> <div class="mb-4"> - <a href="https://www.youtube.com/watch?v=UrhNhXHugKc" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden" style="aspect-ratio:16/9;max-width:560px"> - <img src="/assets/images/videos/meetup-2021-UrhNhXHugKc.jpg" alt="First Apache Unomi Meetup" class="w-100 h-100" style="object-fit:cover" loading="lazy"> - <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay-lg"><i class="bi bi-play-fill text-white" style="font-size:1.5rem;margin-left:2px"></i></span> + <a href="https://www.youtube.com/watch?v=UrhNhXHugKc" target="_blank" rel="noopener" class="d-block position-relative rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/meetup-2021-UrhNhXHugKc.jpg" alt="First Apache Unomi Meetup" class="w-100 h-100 img-cover" loading="lazy"> + <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay-lg"><i class="bi bi-play-fill text-white play-icon-sm"></i></span> </a> </div> @@ -91,7 +92,7 @@ layout: default </li> <li> - <p><strong>Apache Karaf 5 (15 minutes) by Jean-Baptise Onofré, Apache Karaf PMC chair & + <p><strong>Apache Karaf 5 (15 minutes) by Jean-Baptiste Onofré, Apache Karaf PMC chair & OpenSource Europe at Huawei</strong></p> <p>What's new in Apache Karaf 5 and how Unomi can leverage it.</p> @@ -107,7 +108,7 @@ layout: default </ol> <p class="text-center"> - This event operated under the terms of <a href="http://apache.org/foundation/policies/conduct">The + This event operated under the terms of <a href="https://www.apache.org/foundation/policies/conduct">The Apache Software Foundation Code of Conduct</a> and its <a href="https://www.apache.org/foundation/policies/privacy.html">Privacy Policy</a>. diff --git a/src/main/webapp/community/index.html b/src/main/webapp/community/index.html index f162597..ed10fb4 100644 --- a/src/main/webapp/community/index.html +++ b/src/main/webapp/community/index.html @@ -1,6 +1,7 @@ --- title: Community — Get Help & Contact description: "Connect with the Apache Unomi community. Join mailing lists, Slack, monthly meetings, report bugs, and get help from developers and users worldwide." +keywords: "Apache Unomi community, mailing list, Slack, JIRA, open source community, contributor, support channels, monthly meetings" layout: default structured_data: > <script type="application/ld+json"> @@ -13,7 +14,7 @@ structured_data: > "name": "How do I get help with Apache Unomi?", "acceptedAnswer": { "@type": "Answer", - "text": "The best way to get help is to subscribe to the [email protected] mailing list by sending an email to [email protected]. You can also join the #unomi channel on the ASF Slack (create a free account at https://s.apache.org/slack-invite). The community also holds monthly online meetings." + "text": "The best way to get help is to subscribe to the [email protected] mailing list by sending an email to [email protected]. You can also join the #unomi channel on the ASF Slack. If you have an @apache.org email, sign in directly at https://the-asf.slack.com. Otherwise, email [email protected] to request a guest invitation. See https://infra.apache.org/slack.html for details." } }, { @@ -21,7 +22,7 @@ structured_data: > "name": "How do I join the Apache Unomi Slack channel?", "acceptedAnswer": { "@type": "Answer", - "text": "Step 1: Create a free ASF Slack account at https://s.apache.org/slack-invite (anyone can sign up, no Apache email required). Step 2: Once you have an account, join the #unomi channel at https://the-asf.slack.com/messages/CBP2Z98Q7/" + "text": "Send an email to [email protected] asking for a guest invitation to the #unomi Slack channel. Include the email address you want the invite sent to. A project member will send you a guest invite. If you already have an @apache.org email you can sign in directly at https://the-asf.slack.com and join #unomi. Full details at https://infra.apache.org/slack.html" } }, { @@ -90,7 +91,7 @@ structured_data: > <div class="text-center"> <div class="step-number mx-auto mb-3">3</div> <h3 class="h6 fw-semibold">Chat on Slack</h3> - <p class="small text-muted">For quick questions, join <strong>#unomi</strong> on the ASF Slack (free account for anyone).</p> + <p class="small text-muted">For quick questions, join <strong>#unomi</strong> on the ASF Slack. <a href="#slack-access" class="fw-medium">See how to get access</a>.</p> </div> </div> </div> @@ -111,7 +112,7 @@ structured_data: > <div class="row g-4"> <!-- Mailing Lists (primary) --> - <div class="col-md-6"> + <div class="col-md-6" id="mailing-lists"> <div class="community-card"> <div class="community-icon icon-primary"> <i class="bi bi-envelope"></i> @@ -146,7 +147,7 @@ structured_data: > </div> <!-- Slack --> - <div class="col-md-6"> + <div class="col-md-6" id="slack-access"> <div class="community-card"> <div class="community-icon icon-amber"> <i class="bi bi-slack"></i> @@ -155,24 +156,32 @@ structured_data: > <h3 class="h6 fw-semibold mb-1">Slack — #unomi</h3> <p class="small text-muted mb-2">Real-time chat for quick questions and informal discussions.</p> <div class="d-flex flex-column gap-1"> - <p class="small mb-1"><strong>Step 1:</strong> <a href="https://s.apache.org/slack-invite" target="_blank" rel="noopener">Create a free ASF Slack account</a> <span class="text-muted">(anyone can sign up)</span></p> - <p class="small mb-0"><strong>Step 2:</strong> <a href="https://the-asf.slack.com/messages/CBP2Z98Q7/" target="_blank" rel="noopener">Join the #unomi channel</a></p> + <p class="small fw-semibold mb-1">How to join:</p> + <p class="small mb-1"><strong>1.</strong> Send an email to <a href="mailto:[email protected]">[email protected]</a> asking for an invitation to the <strong>#unomi</strong> Slack channel. Include the email address you want the invite sent to.</p> + <p class="small mb-1"><strong>2.</strong> A project member will send you a guest invite. Accept it to join the channel.</p> + <p class="small text-muted mb-1"><em>Already have an @apache.org email?</em> Sign in directly at <a href="https://the-asf.slack.com" target="_blank" rel="noopener">the-asf.slack.com</a> and join <a href="https://the-asf.slack.com/messages/CBP2Z98Q7/" target="_blank" rel="noopener">#unomi</a>.</p> + <p class="small text-muted mb-0"><a href="https://infra.apache.org/slack.html" target="_blank" rel="noopener">ASF Slack access policy & details <i class="bi bi-box-arrow-up-right"></i></a></p> </div> </div> </div> </div> <!-- Monthly Meeting --> - <div class="col-md-6"> - <a href="https://lists.apache.org/thread/70oo862br3d4g7j8dvnyy3o4z1p0ozfq" target="_blank" rel="noopener" class="community-card text-decoration-none"> + <div class="col-md-6" id="monthly-meeting"> + <div class="community-card"> <div class="community-icon icon-success"> <i class="bi bi-camera-video"></i> </div> <div> - <h3 class="h6 fw-semibold mb-1 text-dark">Monthly Meeting</h3> - <p class="small text-muted mb-0">The community meets monthly online with alternating times for different time zones. Current status and roadmap are discussed. Everyone is welcome!</p> + <h3 class="h6 fw-semibold mb-1">Monthly Meeting <span class="badge badge-primary ms-1">Open to all</span></h3> + <p class="small text-muted mb-2"><strong>You don’t need to be a contributor to attend</strong> — newcomers, users evaluating Unomi, and anyone curious about the project are very welcome. It’s a great way to ask questions, see what’s being worked on, and meet the team.</p> + <p class="small fw-semibold mb-1">Schedule & how to join:</p> + <p class="small mb-1"><i class="bi bi-calendar3 me-1"></i> <strong>When:</strong> Second Thursday of each month, alternating 9:00 AM CET (even months) and 5:00 PM CET (odd months).</p> + <p class="small mb-1"><i class="bi bi-camera-video me-1"></i> <strong>Join:</strong> <a href="https://us02web.zoom.us/j/85252119410" target="_blank" rel="noopener">Click here to join the Zoom call</a> at the scheduled time. No account needed.</p> + <p class="small text-muted mb-1"><strong>Agenda:</strong> Round table & introductions, next release, project roadmap, Q&A.</p> + <p class="small text-muted mb-0">Reminders are posted on <a href="/community/index.html#slack-access">Slack</a>. Can’t attend? Meeting minutes are sent to the <a href="https://lists.apache.org/[email protected]" target="_blank" rel="noopener">dev mailing list</a>. <a href="https://lists.apache.org/thread/70oo862br3d4g7j8dvnyy3o4z1p0ozfq" target="_blank" rel="noopener">Original announcement <i class="bi bi-box-arrow-up-right"></i></a></p> </div> - </a> + </div> </div> <!-- JIRA --> diff --git a/src/main/webapp/community/maturity-model-report.html b/src/main/webapp/community/maturity-model-report.html index 3460e30..7ba2182 100644 --- a/src/main/webapp/community/maturity-model-report.html +++ b/src/main/webapp/community/maturity-model-report.html @@ -1,6 +1,7 @@ --- title: Podling Maturity Assessment description: "Apache Unomi maturity model assessment based on the ASF project maturity model." +keywords: "Apache Unomi maturity model, project maturity, Apache project assessment, open source governance" layout: default --- @@ -33,7 +34,7 @@ layout: default <h3>Overview</h3> <p> This is an assessment of the Unomi podling’s maturity, meant to help inform the decision (of the mentors, community, Incubator PMC and ASF Board of Directors) to graduate - it as a top-level Apache project. It is based on the ASF project maturity model at <a target="_blank" href="https://community.apache.org/apache-way/apache-project-maturity-model.html">https://community.apache.org/apache-way/apache-project-maturity-model.html</a> + it as a top-level Apache project. It is based on the ASF project maturity model at <a target="_blank" rel="noopener" href="https://community.apache.org/apache-way/apache-project-maturity-model.html">https://community.apache.org/apache-way/apache-project-maturity-model.html</a> Maintaining such a file is a new, experimental idea as part of the continuous improvement of the ASF incubation process. </p> @@ -251,7 +252,7 @@ layout: default <td><strong>CO10</strong></td> <td>The project has a well-known homepage that points to all the information required to operate according to this maturity model.</td> <td class="text-center"><i class="bi bi-check-circle-fill text-success"></i></td> - <td>See the <a class="externalLink" target="_blank" href="http://unomi.apache.org">project’s home page</a> that includes a <a href="../contribute/index.html">contribute</a> section + <td>See the <a class="externalLink" target="_blank" rel="noopener" href="https://unomi.apache.org">project’s home page</a> that includes a <a href="../contribute/index.html">contribute</a> section that describes how to become a committer as well as <a href="../contribute/become-a-committer.html">several</a> <a href="../contribute/committer-guide.html">documents</a> for on-board newcomers quickly</td> </tr> <tr> diff --git a/src/main/webapp/community/policies.html b/src/main/webapp/community/policies.html index f9719f3..3ee142d 100644 --- a/src/main/webapp/community/policies.html +++ b/src/main/webapp/community/policies.html @@ -1,6 +1,7 @@ --- title: Policies description: "Apache Unomi project policies including release cadence and long term support." +keywords: "Apache Unomi policies, project guidelines, community policies, Apache Software Foundation policies" layout: default --- @@ -34,13 +35,13 @@ layout: default <h3 id="releases">Releases</h3> - <p>Apache Unomi makes minor releases every 6 weeks. Apache Unomi has a <a target="_blank" href="https://calendar.google.com/calendar/embed?src=0p73sl034k80oob7seouanigd0%40group.calendar.google.com">calendar</a> for cutting the next release branch. After a release branch is cut, the community works quickly to finalize that release.</p> + <p>Apache Unomi makes minor releases every 6 weeks. Apache Unomi has a <a target="_blank" rel="noopener" href="https://calendar.google.com/calendar/embed?src=0p73sl034k80oob7seouanigd0%40group.calendar.google.com">calendar</a> for cutting the next release branch. After a release branch is cut, the community works quickly to finalize that release.</p> <p>Apache Unomi aims to make 8 releases in a 12 month period. To accommodate users with longer upgrade cycles, some of these releases will be tagged as long term support (LTS) releases. LTS releases receive patches to fix major issues for 12 months, starting from the release’s initial release date. There will be at least one new LTS release in a 12 month period, and LTS releases are considered deprecated after 12 months. The community will mark a release as a LTS re [...] <p>It is up to the Apache Unomi community to decide whether an identified issue is a major issue that warrants a patch release. Some examples of major issues are high severity security issues and high risk data integrity issues.</p> - <p>If you wish to report a security vulnerability, please contact <a href="mailto:[email protected]">[email protected]</a>. Apache Unomi follows the typical <a target="_blank" href="https://apache.org/security/committers.html#vulnerability-handling">Apache vulnerability handling process</a>.</p> + <p>If you wish to report a security vulnerability, please contact <a href="mailto:[email protected]">[email protected]</a>. Apache Unomi follows the typical <a target="_blank" rel="noopener" href="https://apache.org/security/committers.html#vulnerability-handling">Apache vulnerability handling process</a>.</p> </div> </div> </div> diff --git a/src/main/webapp/community/team.html b/src/main/webapp/community/team.html index 8b3387c..051255a 100644 --- a/src/main/webapp/community/team.html +++ b/src/main/webapp/community/team.html @@ -1,6 +1,7 @@ --- title: Team description: "Apache Unomi project team. PMC members, committers, and contributors." +keywords: "Apache Unomi team, committers, PMC, contributors, project team, open source developers" layout: default --- @@ -42,7 +43,7 @@ layout: default <div class="col-md-6 col-lg-4" id="shuber"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/4d3eed1c656ec68693eb61d8ccc6a3af?d=mm&s=80" alt="Serge Huber" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/4d3eed1c656ec68693eb61d8ccc6a3af?d=mm&s=80" alt="Serge Huber" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Serge Huber</h3> <span class="small text-muted">shuber</span> @@ -60,7 +61,7 @@ layout: default <div class="col-md-6 col-lg-4" id="jbonofre"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/27790393b874159fe05609ca7ed812f9?d=mm&s=80" alt="Jean-Baptiste Onofré" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/27790393b874159fe05609ca7ed812f9?d=mm&s=80" alt="Jean-Baptiste Onofré" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Jean-Baptiste Onofré</h3> <span class="small text-muted">jbonofre</span> @@ -79,7 +80,7 @@ layout: default <div class="col-md-6 col-lg-4" id="draier"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/9bbc37f4660389c1c54aee53b05a2a65?d=mm&s=80" alt="Thomas Draier" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/9bbc37f4660389c1c54aee53b05a2a65?d=mm&s=80" alt="Thomas Draier" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Thomas Draier</h3> <span class="small text-muted">draier</span> @@ -96,7 +97,7 @@ layout: default <div class="col-md-6 col-lg-4" id="fpapon"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/27790393b874159fe05609ca7ed812f9?d=mm&s=80" alt="Francois Papon" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/27790393b874159fe05609ca7ed812f9?d=mm&s=80" alt="Francois Papon" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Francois Papon</h3> <span class="small text-muted">fpapon</span> @@ -114,7 +115,7 @@ layout: default <div class="col-md-6 col-lg-4" id="jkevan"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/f51aaca9a9943a59ecc3028aca9b113b?d=mm&s=80" alt="Kevan Jahanshahi" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/f51aaca9a9943a59ecc3028aca9b113b?d=mm&s=80" alt="Kevan Jahanshahi" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Kevan Jahanshahi</h3> <span class="small text-muted">jkevan</span> @@ -132,7 +133,7 @@ layout: default <div class="col-md-6 col-lg-4" id="dgriffon"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/e5f766ba9813c868249c07f9c5e349d6?d=mm&s=80" alt="David Griffon" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/e5f766ba9813c868249c07f9c5e349d6?d=mm&s=80" alt="David Griffon" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">David Griffon</h3> <span class="small text-muted">dgriffon</span> @@ -150,7 +151,7 @@ layout: default <div class="col-md-6 col-lg-4" id="dgaillard"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/6d2d161467f0dc565ce0d55b9f73fe4f?d=mm&s=80" alt="Damien Gaillard" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/6d2d161467f0dc565ce0d55b9f73fe4f?d=mm&s=80" alt="Damien Gaillard" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Damien Gaillard</h3> <span class="small text-muted">dgaillard</span> @@ -166,7 +167,7 @@ layout: default <div class="col-md-6 col-lg-4" id="taybou"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/76b2e3ee9fc69020baad711c38b0186b?d=mm&s=80" alt="Mohamed-Tayeb BENTERKI" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/76b2e3ee9fc69020baad711c38b0186b?d=mm&s=80" alt="Mohamed-Tayeb BENTERKI" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Mohamed-Tayeb Benterki</h3> <span class="small text-muted">taybou</span> @@ -182,7 +183,7 @@ layout: default <div class="col-md-6 col-lg-4" id="shyrkov"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/d21cd1073820fff86b953d57fbfadc83?d=mm&s=80" alt="Sergiy Shyrkov" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/d21cd1073820fff86b953d57fbfadc83?d=mm&s=80" alt="Sergiy Shyrkov" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Sergiy Shyrkov</h3> <span class="small text-muted">shyrkov</span> @@ -198,7 +199,7 @@ layout: default <div class="col-md-6 col-lg-4" id="qlamerand"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/6affe2a2fc9f902578697788c7fc2a3e?d=mm&s=80" alt="Quentin Lamerand" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/6affe2a2fc9f902578697788c7fc2a3e?d=mm&s=80" alt="Quentin Lamerand" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Quentin Lamerand</h3> <span class="small text-muted">qlamerand</span> @@ -215,7 +216,7 @@ layout: default <div class="col-md-6 col-lg-4" id="metacosm"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/1a18e08c27af0044a1c2218ceea839c3?d=mm&s=80" alt="Chris Laprun" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/1a18e08c27af0044a1c2218ceea839c3?d=mm&s=80" alt="Chris Laprun" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Chris Laprun</h3> <span class="small text-muted">metacosm</span> @@ -232,7 +233,7 @@ layout: default <div class="col-md-6 col-lg-4" id="amidani"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/8a23a295ccfaa914c8e40d5b36893c3c?d=mm&s=80" alt="Abdelkader Midani" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/8a23a295ccfaa914c8e40d5b36893c3c?d=mm&s=80" alt="Abdelkader Midani" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Abdelkader Midani</h3> <span class="small text-muted">amidani</span> @@ -253,9 +254,9 @@ layout: default <div class="row g-3"> <div class="col-md-6 col-lg-4" id="bdelacretaz"> - <div class="feature-card h-100" style="opacity:.75"> + <div class="feature-card h-100 card-emeritus"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/505b92f0f422152656b53018929316f4?d=mm&s=80" alt="Bertrand Delacretaz" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/505b92f0f422152656b53018929316f4?d=mm&s=80" alt="Bertrand Delacretaz" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Bertrand Delacretaz</h3> <span class="small text-muted">bdelacretaz</span> @@ -270,9 +271,9 @@ layout: default </div> <div class="col-md-6 col-lg-4" id="rvs"> - <div class="feature-card h-100" style="opacity:.75"> + <div class="feature-card h-100 card-emeritus"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/b103ce8281c7eef619e5e4bfcfccf639?d=mm&s=80" alt="Roman Shaposhnik" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/b103ce8281c7eef619e5e4bfcfccf639?d=mm&s=80" alt="Roman Shaposhnik" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Roman Shaposhnik</h3> <span class="small text-muted">rvs</span> @@ -287,9 +288,9 @@ layout: default </div> <div class="col-md-6 col-lg-4" id="mattmann"> - <div class="feature-card h-100" style="opacity:.75"> + <div class="feature-card h-100 card-emeritus"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/6f919a5883b854b9ae41023ef281ef85?d=mm&s=80" alt="Chris Mattmann" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/6f919a5883b854b9ae41023ef281ef85?d=mm&s=80" alt="Chris Mattmann" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Chris Mattmann</h3> <span class="small text-muted">mattmann</span> @@ -304,9 +305,9 @@ layout: default </div> <div class="col-md-6 col-lg-4"> - <div class="feature-card h-100" style="opacity:.75"> + <div class="feature-card h-100 card-emeritus"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/00000000000000000000000000000000?d=mm&s=80" alt="Cédric Mailleux" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/00000000000000000000000000000000?d=mm&s=80" alt="Cédric Mailleux" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Cédric Mailleux</h3> </div> @@ -320,9 +321,9 @@ layout: default </div> <div class="col-md-6 col-lg-4"> - <div class="feature-card h-100" style="opacity:.75"> + <div class="feature-card h-100 card-emeritus"> <div class="d-flex align-items-center mb-3"> - <img src="https://www.gravatar.com/avatar/00000000000000000000000000000000?d=mm&s=80" alt="Régis Mora" class="rounded-circle me-3" width="48" height="48"> + <img src="https://www.gravatar.com/avatar/00000000000000000000000000000000?d=mm&s=80" alt="Régis Mora" class="rounded-circle me-3" width="48" height="48" loading="lazy"> <div> <h3 class="h6 fw-semibold mb-0">Régis Mora</h3> </div> diff --git a/src/main/webapp/connectors.html b/src/main/webapp/connectors.html index 607ef8f..0275874 100644 --- a/src/main/webapp/connectors.html +++ b/src/main/webapp/connectors.html @@ -1,6 +1,7 @@ --- title: Connectors -description: "Apache Unomi connectors and integrations. Salesforce CRM, MailChimp, and custom Groovy connectors." +description: "Apache Unomi connectors and integrations. MailChimp connector and custom plugin connectors." +keywords: "Apache Unomi connectors, integrations, plugins, extensions, custom connectors" layout: default noindex: true --- @@ -10,7 +11,7 @@ noindex: true <div class="container"> <div class="row justify-content-center text-center"> <div class="col-lg-8"> - <div class="p-5 rounded-3" style="background:var(--unomi-primary-light)"> + <div class="p-5 rounded-3 bg-primary-light"> <div class="feature-icon feature-icon-lg mx-auto mb-3"><i class="bi bi-arrow-right-circle"></i></div> <h1 class="h3 mb-3">This page has moved</h1> <p class="text-muted mb-4">Connectors are now part of our comprehensive <strong>Integrations & Ecosystem</strong> page.</p> diff --git a/src/main/webapp/integrations.html b/src/main/webapp/integrations.html index 9bd523c..8279edc 100644 --- a/src/main/webapp/integrations.html +++ b/src/main/webapp/integrations.html @@ -1,8 +1,9 @@ --- title: Integrations & Ecosystem description: "Discover products built on Apache Unomi, extensions, connectors, and companies offering commercial support for the open source Customer Data Platform." -keywords: "Apache Unomi integrations, Unomi connectors, Salesforce connector, MailChimp connector, Jahia jExperience, Dropsolid, Unomi UI, Inoyu SaaS, CDP integrations, Unomi plugins, commercial support" +keywords: "Apache Unomi integrations, Unomi connectors, Groovy actions, custom plugins, Jahia jExperience, Dropsolid, Inoyu SaaS, CDP integrations, Unomi plugins, commercial support" layout: default +mermaid: true structured_data: > <script type="application/ld+json"> { @@ -10,14 +11,13 @@ structured_data: > "@type": "ItemList", "name": "Apache Unomi Integrations and Ecosystem", "description": "Products, extensions, connectors, and services built on Apache Unomi.", - "numberOfItems": 6, + "numberOfItems": 5, "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Jahia jExperience", "url": "https://www.jahia.com" }, { "@type": "ListItem", "position": 2, "name": "Ninetailed Personalization Platform", "url": "https://ninetailed.io" }, { "@type": "ListItem", "position": 3, "name": "Dropsolid Experience Cloud", "url": "https://dropsolid.com" }, - { "@type": "ListItem", "position": 4, "name": "Salesforce CRM Connector" }, - { "@type": "ListItem", "position": 5, "name": "Inoyu", "url": "https://www.inoyu.dev" }, - { "@type": "ListItem", "position": 6, "name": "Yupiik", "url": "https://www.yupiik.com" } + { "@type": "ListItem", "position": 4, "name": "Inoyu", "url": "https://www.inoyu.dev" }, + { "@type": "ListItem", "position": 5, "name": "Yupiik", "url": "https://www.yupiik.com" } ] } </script> @@ -50,7 +50,7 @@ structured_data: > <p class="small text-muted mb-3">Jahia is the initial contributor of Apache Unomi, using it as the core engine for their Customer Data Platform (jExperience) and Digital Experience Platform with native GDPR support.</p> <blockquote class="small fst-italic text-muted border-start border-3 border-primary ps-3 mb-3"> “Apache Unomi is a very important foundation of our products. We love Apache Unomi and are deeply committed to helping our customers succeed with it.” - <footer class="mt-1 fw-semibold" style="font-style:normal">Serge Huber, Jahia CTO</footer> + <footer class="mt-1 fw-semibold" class="quote-attribution">Serge Huber, Jahia CTO</footer> </blockquote> <a href="https://www.jahia.com" target="_blank" rel="noopener" class="small fw-semibold">www.jahia.com <i class="bi bi-box-arrow-up-right"></i></a> </div> @@ -62,7 +62,7 @@ structured_data: > <p class="small text-muted mb-3">The Dropsolid Experience Cloud delivers an out-of-box DXP with enhanced Drupal CMS, Mautic marketing automation, and Unomi CDP for smart segmentation and cross-system marketing.</p> <blockquote class="small fst-italic text-muted border-start border-3 border-primary ps-3 mb-3"> “Apache Unomi was the puzzle piece that fitted perfectly. It was the obvious CDP to integrate in our DXP solution.” - <footer class="mt-1 fw-semibold" style="font-style:normal">Mattias Michaux, Director of Engineering</footer> + <footer class="mt-1 fw-semibold" class="quote-attribution">Mattias Michaux, Director of Engineering</footer> </blockquote> <a href="https://dropsolid.com/en/dropsolid-experience-cloud" target="_blank" rel="noopener" class="small fw-semibold">dropsolid.com <i class="bi bi-box-arrow-up-right"></i></a> </div> @@ -74,19 +74,11 @@ structured_data: > <p class="small text-muted mb-3">Ninetailed uses Apache Unomi to provide a complete view of visitors, discover new segments, and deliver personalization recommendations to grow the traffic customers already have.</p> <blockquote class="small fst-italic text-muted border-start border-3 border-primary ps-3 mb-3"> “Apache Unomi was chosen as our CDP due to its logical and plugin architecture, because it is an Apache open source project, and especially because of its Privacy (GDPR consent management) features.” - <footer class="mt-1 fw-semibold" style="font-style:normal">Andy Kaiser, Ninetailed Founder</footer> + <footer class="mt-1 fw-semibold" class="quote-attribution">Andy Kaiser, Ninetailed Founder</footer> </blockquote> <a href="https://ninetailed.io" target="_blank" rel="noopener" class="small fw-semibold">ninetailed.io <i class="bi bi-box-arrow-up-right"></i></a> </div> </div> - <div class="col-md-6 col-lg-4"> - <div class="feature-card h-100"> - <span class="badge mb-3 badge-coming-soon">Coming Soon</span> - <h3 class="h6 fw-semibold">Unomi UI <span class="badge badge-oss">Open Source</span></h3> - <p class="small text-muted mb-3">A modern, open source user interface for Apache Unomi by Inoyu, making it easy to manage profiles, segments, and rules through an intuitive dashboard. 100% open source under the Apache License v2.</p> - <a href="https://www.inoyu.dev" target="_blank" rel="noopener" class="small fw-semibold">www.inoyu.dev <i class="bi bi-box-arrow-up-right"></i></a> - </div> - </div> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> <span class="badge mb-3 badge-coming-soon">Coming Soon</span> @@ -95,14 +87,6 @@ structured_data: > <a href="https://www.inoyu.dev" target="_blank" rel="noopener" class="small fw-semibold">www.inoyu.dev <i class="bi bi-box-arrow-up-right"></i></a> </div> </div> - <div class="col-md-6 col-lg-4"> - <div class="feature-card h-100"> - <span class="badge mb-3 badge-coming-soon">Coming Soon</span> - <h3 class="h6 fw-semibold">Inoyu UI</h3> - <p class="small text-muted mb-3">A commercial-grade user interface for Apache Unomi from Inoyu, with advanced features for managing profiles, segments, rules, and real-time analytics.</p> - <a href="https://www.inoyu.dev" target="_blank" rel="noopener" class="small fw-semibold">www.inoyu.dev <i class="bi bi-box-arrow-up-right"></i></a> - </div> - </div> </div> </div> </section> @@ -125,10 +109,9 @@ structured_data: > <div class="col-lg-10"> <pre class="mermaid"> graph LR - subgraph Connectors["Connectors"] - SF["Salesforce CRM"] - MC["MailChimp"] - CUSTOM["Custom Groovy"] + subgraph Extend["Extend Unomi"] + GROOVY["Groovy Actions"] + PLUGIN["Java Plugins"] end subgraph Core["Apache Unomi"] @@ -136,54 +119,50 @@ graph LR ENGINE["Core Engine"] end - subgraph Extensions["Extensions & Products"] - UI["Unomi UI"] - SAAS["Inoyu SaaS"] - INOYU_UI["Inoyu UI"] + subgraph Extensions["Products & Services"] + UI["UI"] + SAAS["SaaS"] ANALYTICS["Analytics"] end - SF --> API2 - MC --> API2 - CUSTOM --> API2 + GROOVY --> API2 + PLUGIN --> API2 API2 --> ENGINE ENGINE --> UI ENGINE --> SAAS - ENGINE --> INOYU_UI ENGINE --> ANALYTICS </pre> </div> </div> - <div class="row g-4" data-shuffle-group> - <div class="col-md-6 col-lg-4"> + <div class="row g-4"> + <div class="col-md-6"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <span class="badge badge-success me-2"><i class="bi bi-circle-fill me-1" style="font-size:.5em"></i> Stable</span> + <span class="badge badge-primary me-2"><i class="bi bi-star-fill me-1 badge-dot"></i> Recommended</span> </div> - <h3 class="h6 fw-semibold">Salesforce CRM Connector</h3> - <p class="small text-muted mb-2">Synchronize profiles and contacts between Apache Unomi and Salesforce CRM.</p> - <p class="small text-muted mb-0">Version 1.5.7 • <a href="/manual/1_5_x/index.html">Documentation</a></p> - </div> - </div> - <div class="col-md-6 col-lg-4"> - <div class="feature-card h-100"> - <div class="d-flex align-items-center mb-3"> - <span class="badge badge-warning me-2"><i class="bi bi-circle-fill me-1" style="font-size:.5em"></i> In Development</span> + <h3 class="h6 fw-semibold">Groovy Actions</h3> + <p class="small text-muted mb-2">The easiest way to extend Unomi. Write custom logic in Groovy scripts that are <strong>hot-deployable</strong> — no compilation, no restart needed. Groovy actions can react to events, update profiles, call external APIs, and integrate with third-party systems like CRMs, email platforms, or any REST service.</p> + <p class="small text-muted mb-2">Start here for most integration needs.</p> + <div class="d-flex flex-wrap gap-2"> + <a href="https://unomi.apache.org/manual/latest/index.html#_groovy_actions" class="small fw-semibold">Groovy actions guide <i class="bi bi-arrow-right"></i></a> + <a href="https://github.com/apache/unomi/tree/master/extensions/groovy-actions" target="_blank" rel="noopener" class="small fw-semibold text-muted">Source code <i class="bi bi-box-arrow-up-right"></i></a> </div> - <h3 class="h6 fw-semibold">MailChimp Connector</h3> - <p class="small text-muted mb-2">Connect mailing lists and campaign data with Unomi profiles.</p> - <p class="small text-muted mb-0">Version {{ site.data.unomi.latest.development.version }} • <a href="/manual/latest/index.html">Documentation</a></p> </div> </div> - <div class="col-md-6 col-lg-4"> + <div class="col-md-6"> <div class="feature-card h-100"> <div class="d-flex align-items-center mb-3"> - <div class="feature-icon" style="width:2rem;height:2rem;font-size:1rem"><i class="bi bi-plus-lg"></i></div> + <div class="feature-icon feature-icon-sm"><i class="bi bi-gear"></i></div> + </div> + <h3 class="h6 fw-semibold">Custom Java Plugins (OSGi)</h3> + <p class="small text-muted mb-2">For advanced needs that go beyond what Groovy actions can do — such as custom conditions, new persistence types, or deep integration with the Unomi core — build a full OSGi plugin in Java. This gives you access to the entire Unomi API and service layer.</p> + <p class="small text-muted mb-2">Use this only when Groovy actions are not sufficient.</p> + <div class="d-flex flex-wrap gap-2"> + <a href="https://unomi.apache.org/manual/latest/index.html#_writing_plugins" class="small fw-semibold">Writing plugins guide <i class="bi bi-arrow-right"></i></a> + <a href="https://unomi.apache.org/manual/latest/index.html#_custom_plugins" class="small fw-semibold">Custom plugins <i class="bi bi-arrow-right"></i></a> + <a href="https://github.com/apache/unomi/tree/master/extensions" target="_blank" rel="noopener" class="small fw-semibold text-muted">Extensions source <i class="bi bi-box-arrow-up-right"></i></a> </div> - <h3 class="h6 fw-semibold">Build Your Own</h3> - <p class="small text-muted mb-2">Create custom connectors using Groovy actions or the OSGi plugin API.</p> - <a href="/manual/latest/index.html" class="small fw-semibold">Read the Plugin Guide <i class="bi bi-arrow-right"></i></a> </div> </div> </div> @@ -247,17 +226,4 @@ graph LR </section> <!-- ASF compliance: randomize company ordering on every page load --> -<script> -(function() { - var groups = document.querySelectorAll('[data-shuffle-group]'); - groups.forEach(function(container) { - var children = Array.from(container.children); - // Fisher-Yates shuffle - for (var i = children.length - 1; i > 0; i--) { - var j = Math.floor(Math.random() * (i + 1)); - container.appendChild(children[j]); - var tmp = children[i]; children[i] = children[j]; children[j] = tmp; - } - }); -})(); -</script> +<script src="/assets/js/shuffle.js" defer></script> diff --git a/src/main/webapp/stories.html b/src/main/webapp/stories.html index 1ec56c3..805a520 100644 --- a/src/main/webapp/stories.html +++ b/src/main/webapp/stories.html @@ -1,6 +1,7 @@ --- title: Apache Unomi Stories description: "How companies and projects use Apache Unomi. Success stories, products built on Unomi, and commercial support providers." +keywords: "Apache Unomi stories, user stories, customer stories, CDP implementations, success stories, case studies" layout: default --- @@ -18,7 +19,7 @@ layout: default <div class="container"> <div class="row justify-content-center text-center mb-5"> <div class="col-lg-8"> - <div class="p-4 rounded-3" style="background:var(--unomi-primary-light)"> + <div class="p-4 rounded-3 info-box-primary"> <h2 class="h5 mb-2">Looking for integrations, products, and commercial support?</h2> <p class="text-muted mb-3">We’ve consolidated all ecosystem information into a single, comprehensive page.</p> <a href="/integrations.html" class="btn btn-primary"><i class="bi bi-puzzle me-2"></i>Visit the Integrations Page</a> @@ -44,7 +45,7 @@ layout: default <p class="small text-muted mb-3">The initial contributor of Apache Unomi, using it as the engine for their Customer Data Platform and Digital Experience Platform with native GDPR support.</p> <blockquote class="small fst-italic text-muted border-start border-3 border-primary ps-3 mb-3"> “Apache Unomi is a very important foundation of our products. We love it and are deeply committed to helping our customers succeed with it.” - <footer class="mt-1 fw-semibold" style="font-style:normal">— Serge Huber, Jahia CTO</footer> + <footer class="mt-1 fw-semibold quote-attribution">— Serge Huber, Jahia CTO</footer> </blockquote> <a href="https://www.jahia.com" target="_blank" rel="noopener" class="small fw-semibold">www.jahia.com <i class="bi bi-box-arrow-up-right"></i></a> </div> @@ -62,7 +63,7 @@ layout: default <p class="small text-muted mb-3">DXP with enhanced Drupal CMS, Mautic marketing automation, and Unomi CDP for smart segmentation and cross-system marketing.</p> <blockquote class="small fst-italic text-muted border-start border-3 border-primary ps-3 mb-3"> “Apache Unomi was the puzzle piece that fitted perfectly. It was the obvious CDP to integrate in our DXP solution.” - <footer class="mt-1 fw-semibold" style="font-style:normal">— Mattias Michaux, Director of Engineering</footer> + <footer class="mt-1 fw-semibold quote-attribution">— Mattias Michaux, Director of Engineering</footer> </blockquote> <a href="https://dropsolid.com/en/dropsolid-experience-cloud" target="_blank" rel="noopener" class="small fw-semibold">dropsolid.com <i class="bi bi-box-arrow-up-right"></i></a> </div> @@ -91,16 +92,4 @@ layout: default </section> <!-- ASF compliance: randomize company ordering on every page load --> -<script> -(function() { - var groups = document.querySelectorAll('[data-shuffle-group]'); - groups.forEach(function(container) { - var children = Array.from(container.children); - for (var i = children.length - 1; i > 0; i--) { - var j = Math.floor(Math.random() * (i + 1)); - container.appendChild(children[j]); - var tmp = children[i]; children[i] = children[j]; children[j] = tmp; - } - }); -})(); -</script> +<script src="/assets/js/shuffle.js" defer></script>
