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 e36aa90651cec6d2227850aad9cf9e952ec7ae90 Author: Serge Huber <[email protected]> AuthorDate: Sat Feb 14 17:29:29 2026 +0100 Layout: performance, accessibility, SEO and navigation improvements - Conditional Mermaid.js loading (saves ~25KB on pages without diagrams) - Defer Bootstrap JS and Mermaid scripts for faster initial render - Preconnect to cdn.jsdelivr.net, non-blocking Bootstrap Icons CSS - Add :focus-visible styles for keyboard navigation accessibility - Replace footer <h6> with role="heading" for semantic hierarchy - Shorten <title> suffix to keep under 65 characters - Normalize og:url to match canonical URL - Update navbar Slack link to point to access instructions - Update navbar mailing list link to point to community page - Update JSON-LD featureList (Salesforce deprecated, Groovy actions) - Fix broken links to generated docs with absolute URLs Co-authored-by: Cursor <[email protected]> --- src/main/webapp/_layouts/default.html | 67 +++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/src/main/webapp/_layouts/default.html b/src/main/webapp/_layouts/default.html index 6e18e3b..a448110 100644 --- a/src/main/webapp/_layouts/default.html +++ b/src/main/webapp/_layouts/default.html @@ -5,9 +5,9 @@ <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- SEO Meta Tags --> - <title>{{ page.title }} | Apache Unomi™ — Open Source Customer Data Platform</title> + <title>{{ page.title }} | Apache Unomi™</title> <meta name="description" content="{% if page.description %}{{ page.description }}{% else %}Apache Unomi is an open source Customer Data Platform (CDP) for managing customer profiles, personalizing experiences, and respecting visitor privacy (GDPR).{% endif %}"> - <meta name="keywords" content="{% if page.keywords %}{{ page.keywords }}{% else %}Apache Unomi, Customer Data Platform, CDP, open source, personalization, GDPR, privacy, customer profiles, segmentation, real-time, REST API, Java, ElasticSearch, OASIS{% endif %}"> + <meta name="keywords" content="{% if page.keywords %}{{ page.keywords }}{% else %}Apache Unomi, Customer Data Platform, CDP, open source CDP, personalization, GDPR, privacy, customer profiles, segmentation, real-time, REST API, GraphQL, Java, Elasticsearch, OpenSearch, OASIS CXS, AI customer data{% endif %}"> <meta name="author" content="Apache Unomi Project"> <meta name="robots" content="{% if page.noindex %}noindex, nofollow{% else %}index, follow{% endif %}"> <link rel="canonical" href="{{ site.url }}{{ page.url | replace: 'index.html', '' }}"> @@ -17,7 +17,7 @@ <meta property="og:locale" content="en_US"> <meta property="og:title" content="{{ page.title }} | Apache Unomi"> <meta property="og:description" content="{% if page.description %}{{ page.description }}{% else %}Open source Customer Data Platform for managing profiles and personalizing experiences with built-in privacy.{% endif %}"> - <meta property="og:url" content="{{ site.url }}{{ page.url }}"> + <meta property="og:url" content="{{ site.url }}{{ page.url | replace: 'index.html', '' }}"> <meta property="og:site_name" content="Apache Unomi"> <meta property="og:image" content="{{ site.url }}/assets/images/apache-unomi-380x85.png"> <meta property="og:image:width" content="380"> @@ -30,15 +30,16 @@ <meta name="twitter:description" content="{% if page.description %}{{ page.description }}{% else %}Open source Customer Data Platform for managing profiles and personalizing experiences with built-in privacy.{% endif %}"> <meta name="twitter:image" content="{{ site.url }}/assets/images/apache-unomi-380x85.png"> - <!-- JSON-LD: WebSite with SearchAction (enables sitelinks search box in Google) --> + <!-- JSON-LD: WebSite --> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "WebSite", "name": "Apache Unomi", - "alternateName": ["Unomi", "Apache Unomi CDP"], + "alternateName": ["Unomi", "Apache Unomi CDP", "You know me"], "url": "https://unomi.apache.org", - "description": "Apache Unomi is an open source Customer Data Platform (CDP) for managing customer profiles, real-time personalization, and privacy-first data management." + "description": "Apache Unomi is an open source Customer Data Platform (CDP) for managing customer profiles, real-time personalization, AI-ready customer data, and privacy-first data management with built-in GDPR compliance.", + "inLanguage": "en" } </script> @@ -108,9 +109,11 @@ "Privacy management and GDPR compliance", "Consent management and data anonymization", "Full REST/JSON API", + "GraphQL API for flexible querying", "Plugin architecture (OSGi, Groovy actions)", - "ElasticSearch storage backend", - "Connectors (Salesforce, MailChimp, custom)", + "Elasticsearch storage backend (OpenSearch support coming soon)", + "Connectors (MailChimp, custom via plugin API)", + "Bill of Materials (BOM) for dependency management", "OASIS CDP standard reference implementation" ] } @@ -149,7 +152,7 @@ <!-- Preload critical resources --> <link rel="preload" href="/assets/css/unomi.css" as="style"> - <link rel="dns-prefetch" href="https://cdn.jsdelivr.net"> + <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin> <link rel="dns-prefetch" href="https://analytics.apache.org"> <!-- Matomo Analytics (privacy-respecting) --> @@ -177,8 +180,10 @@ <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"> - <!-- Bootstrap Icons 1.11 --> - <link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css" rel="stylesheet"> + <!-- Bootstrap Icons 1.11 — loaded non-blocking (not needed for first paint) --> + <link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css" + rel="stylesheet" media="print" onload="this.media='all'"> + <noscript><link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css" rel="stylesheet"></noscript> <!-- Custom Styles --> <link href="/assets/css/unomi.css" rel="stylesheet"> @@ -192,7 +197,7 @@ <nav class="navbar navbar-expand-lg navbar-light bg-white border-bottom" aria-label="Main navigation"> <div class="container"> <a class="navbar-brand d-flex align-items-center" href="/index.html" aria-label="Apache Unomi home"> - <img src="/assets/images/apache-unomi-380x85.png" alt="Apache Unomi" height="36" style="width:auto"> + <img src="/assets/images/apache-unomi-380x85.png" alt="Apache Unomi" height="36" class="navbar-brand-img"> </a> <button class="navbar-toggler border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navbarMain" aria-controls="navbarMain" aria-expanded="false" aria-label="Toggle navigation"> @@ -211,7 +216,7 @@ <ul class="dropdown-menu dropdown-menu-end border-0 shadow-lg rounded-3 p-2"> <li><a class="dropdown-item rounded-2 py-2" href="/documentation.html"> <i class="bi bi-book me-2 text-primary"></i>Documentation Home</a></li> - <li><a class="dropdown-item rounded-2 py-2" href="/manual/latest/index.html"> + <li><a class="dropdown-item rounded-2 py-2" href="https://unomi.apache.org/manual/latest/index.html"> <i class="bi bi-journal-text me-2 text-primary"></i>Latest Manual</a></li> <li><hr class="dropdown-divider my-1"></li> <li><a class="dropdown-item rounded-2 py-2" href="/use-cases.html"> @@ -221,9 +226,9 @@ <li><a class="dropdown-item rounded-2 py-2" href="/tutorial.html"> <i class="bi bi-mortarboard me-2 text-primary"></i>Tutorials</a></li> <li><hr class="dropdown-divider my-1"></li> - <li><a class="dropdown-item rounded-2 py-2" href="/rest-api-doc/index.html"> + <li><a class="dropdown-item rounded-2 py-2" href="https://unomi.apache.org/rest-api-doc/index.html"> <i class="bi bi-braces me-2 text-primary"></i>REST API</a></li> - <li><a class="dropdown-item rounded-2 py-2" href="/unomi-api/apidocs/index.html"> + <li><a class="dropdown-item rounded-2 py-2" href="https://unomi.apache.org/unomi-api/apidocs/index.html"> <i class="bi bi-code-square me-2 text-primary"></i>Javadoc</a></li> </ul> </li> @@ -235,9 +240,9 @@ <ul class="dropdown-menu dropdown-menu-end border-0 shadow-lg rounded-3 p-2"> <li><a class="dropdown-item rounded-2 py-2" href="/community/index.html"> <i class="bi bi-chat-dots me-2 text-primary"></i>Get Help & Contact</a></li> - <li><a class="dropdown-item rounded-2 py-2" href="mailto:[email protected]"> - <i class="bi bi-envelope me-2 text-primary"></i>Subscribe to Mailing List</a></li> - <li><a class="dropdown-item rounded-2 py-2" href="https://the-asf.slack.com/messages/CBP2Z98Q7/" target="_blank" rel="noopener"> + <li><a class="dropdown-item rounded-2 py-2" href="/community/index.html#mailing-lists"> + <i class="bi bi-envelope me-2 text-primary"></i>Mailing Lists</a></li> + <li><a class="dropdown-item rounded-2 py-2" href="/community/index.html#slack-access"> <i class="bi bi-slack me-2 text-primary"></i>Slack Channel</a></li> <li><hr class="dropdown-divider my-1"></li> <li><a class="dropdown-item rounded-2 py-2" href="/contribute/index.html"> @@ -267,7 +272,7 @@ <li class="nav-item ms-lg-2 d-none d-lg-block"> <a class="nav-link px-1 opacity-50" target="_blank" rel="noopener" href="https://www.apache.org" title="Apache Software Foundation" aria-label="Apache Software Foundation"> - <img src="/assets/images/feather.svg" alt="" style="height:1.2em" aria-hidden="true"> + <img src="/assets/images/feather.svg" alt="" class="feather-icon" aria-hidden="true"> </a> </li> </ul> @@ -284,7 +289,7 @@ <div class="container"> <div class="row g-4 pb-4"> <div class="col-6 col-md-3"> - <h6 class="text-uppercase fw-semibold mb-3 text-white-50 small">Get Started</h6> + <div class="text-uppercase fw-semibold mb-3 text-white-50 small" role="heading" aria-level="2">Get Started</div> <ul class="list-unstyled small"> <li class="mb-2"><a href="/get-started.html" class="footer-link">Getting Started</a></li> <li class="mb-2"><a href="/get-started.html#quickstart" class="footer-link">Quick Start</a></li> @@ -293,16 +298,16 @@ </ul> </div> <div class="col-6 col-md-3"> - <h6 class="text-uppercase fw-semibold mb-3 text-white-50 small">Documentation</h6> + <div class="text-uppercase fw-semibold mb-3 text-white-50 small" role="heading" aria-level="2">Documentation</div> <ul class="list-unstyled small"> <li class="mb-2"><a href="/documentation.html" class="footer-link">Documentation Home</a></li> <li class="mb-2"><a href="/use-cases.html" class="footer-link">Use Cases</a></li> - <li class="mb-2"><a href="/rest-api-doc/index.html" class="footer-link">REST API</a></li> - <li class="mb-2"><a href="/unomi-api/apidocs/index.html" class="footer-link">Javadoc</a></li> + <li class="mb-2"><a href="https://unomi.apache.org/rest-api-doc/index.html" class="footer-link">REST API</a></li> + <li class="mb-2"><a href="https://unomi.apache.org/unomi-api/apidocs/index.html" class="footer-link">Javadoc</a></li> </ul> </div> <div class="col-6 col-md-3"> - <h6 class="text-uppercase fw-semibold mb-3 text-white-50 small">Community</h6> + <div class="text-uppercase fw-semibold mb-3 text-white-50 small" role="heading" aria-level="2">Community</div> <ul class="list-unstyled small"> <li class="mb-2"><a href="/community/index.html" class="footer-link">Get Help & Contact</a></li> <li class="mb-2"><a href="mailto:[email protected]" class="footer-link">Subscribe to Mailing List</a></li> @@ -311,7 +316,7 @@ </ul> </div> <div class="col-6 col-md-3"> - <h6 class="text-uppercase fw-semibold mb-3 text-white-50 small">Apache</h6> + <div class="text-uppercase fw-semibold mb-3 text-white-50 small" role="heading" aria-level="2">Apache</div> <ul class="list-unstyled small"> <li class="mb-2"><a href="https://www.apache.org/licenses/" target="_blank" rel="noopener" class="footer-link">License</a></li> <li class="mb-2"><a href="https://www.apache.org/security/" target="_blank" rel="noopener" class="footer-link">Security</a></li> @@ -342,12 +347,13 @@ </footer> <!-- Bootstrap 5.3.8 JS Bundle (includes Popper) --> -<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script> +<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous" defer></script> -<!-- Mermaid for diagrams --> -<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script> +<!-- Mermaid for diagrams — only loaded on pages that use it (2.75 MB) --> +{% if page.mermaid %} +<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js" defer></script> <script> - (function() { + document.addEventListener('DOMContentLoaded', function() { var s = getComputedStyle(document.documentElement); var v = function(name) { return s.getPropertyValue(name).trim(); }; mermaid.initialize({ @@ -364,8 +370,9 @@ fontSize: '14px' } }); - })(); + }); </script> +{% endif %} <!-- Smooth scroll + active nav highlighting --> <script>
