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 064b22bd3f1561bffa82930e2456896ccefdcd11
Author: Serge Huber <[email protected]>
AuthorDate: Sat Feb 14 17:29:57 2026 +0100

    Contribute pages, SEO & LLM files: testing TODOs, release guide, sitemap
    
    - Testing: replace TODOs with Surefire/Failsafe/Pax Exam docs, add CI 
section
    - Dependencies: add BOM section with usage examples
    - Release guide: update versions to 3.0.x, fix typos and stale URLs
    - Manual release guide: update version examples, fix typos
    - Encoding fixes: correct mojibake characters on 3 contribute pages
    - Sitemap: expand from 14 to 29 URLs, add lastmod dates
    - Robots.txt: remove CSS/JS disallow rules for proper Google rendering
    - LLM files: update to 3.0.0, Groovy/Java plugin guidance, OpenSearch 
wording,
      Salesforce deprecation, Slack access, remove excess Inoyu product listings
    - All contribute pages: add SEO keywords, fix rel="noopener"
    
    Co-authored-by: Cursor <[email protected]>
---
 src/main/webapp/contribute/become-a-committer.html |  17 +--
 src/main/webapp/contribute/committer-guide.html    |   7 +-
 src/main/webapp/contribute/dependencies-guide.html |  13 +-
 src/main/webapp/contribute/index.html              |  13 +-
 .../webapp/contribute/manual-release-guide.html    |  47 +++----
 src/main/webapp/contribute/post-commit-guides.html |   3 +-
 .../contribute/post-commit-policies-details.html   |   3 +-
 .../contribute/post-commit-test-policies.html      |   3 +-
 .../contribute/pre-commit-test-policies.html       |   1 +
 src/main/webapp/contribute/release-guide.html      |  51 ++++----
 src/main/webapp/contribute/testing.html            |  23 ++--
 src/main/webapp/contribute/website.html            |  11 +-
 src/main/webapp/llms-full.txt                      |  47 +++++--
 src/main/webapp/llms.txt                           |  29 +++--
 src/main/webapp/privacy-policy.html                |   1 +
 src/main/webapp/robots.txt                         |   2 -
 src/main/webapp/sitemap.xml                        | 137 +++++++++++++++++++--
 17 files changed, 282 insertions(+), 126 deletions(-)

diff --git a/src/main/webapp/contribute/become-a-committer.html 
b/src/main/webapp/contribute/become-a-committer.html
index 1543967..4073ad0 100644
--- a/src/main/webapp/contribute/become-a-committer.html
+++ b/src/main/webapp/contribute/become-a-committer.html
@@ -1,6 +1,7 @@
 ---
 title: Contribute | Become a committer
 description: "Learn how to become an Apache Unomi committer and what it means 
to be part of the project."
+keywords: "Apache committer, become committer, Unomi committer, open source 
committer, ASF committer guide"
 layout: default
 ---
 
@@ -39,15 +40,15 @@ layout: default
                 </div>
             </div>
             <div class="col-lg-9">
-            <p>An Apache Unomi <a target="_blank" 
href="https://www.apache.org/foundation/how-it-works.html#committers";>committer</a>
 has write access to the repository for merging pull requests, but you don't 
have to be a code contributor to become a committer. Becoming a committer means 
that ou have the project's trust. Read the <a target="_blank" 
href="https://www.apache.org/dev/committers.html#committer-responsibilities";>ASF
 documentation</a> for more about being a committer in the A [...]
+            <p>An Apache Unomi <a target="_blank" rel="noopener" 
href="https://www.apache.org/foundation/how-it-works.html#committers";>committer</a>
 has write access to the repository for merging pull requests, but you don't 
have to be a code contributor to become a committer. Becoming a committer means 
that ou have the project's trust. Read the <a target="_blank" rel="noopener" 
href="https://www.apache.org/dev/committers.html#committer-responsibilities";>ASF
 documentation</a> for more ab [...]
 
-            <p>The <a target="_blank" 
href="https://www.apache.org/foundation/how-it-works.html#pmc-members";>PMC</a> 
makes someone a committer via nomination, discussion, and then majority vote. 
We use data from as many sources as possible to inform our reasoning. Here are 
some examples:</p>
+            <p>The <a target="_blank" rel="noopener" 
href="https://www.apache.org/foundation/how-it-works.html#pmc-members";>PMC</a> 
makes someone a committer via nomination, discussion, and then majority vote. 
We use data from as many sources as possible to inform our reasoning. Here are 
some examples:</p>
 
             <ul>
-              <li><a target="_blank" 
href="https://lists.apache.org/[email protected]";>dev@ 
archives</a> and <a target="_blank" 
href="https://lists.apache.org/[email protected]";>statistics</a></li>
-              <li><a target="_blank" 
href="https://lists.apache.org/[email protected]";>user@ 
archives</a> and <a target="_blank" 
href="https://lists.apache.org/[email protected]";>statistics</a></li>
-              <li>Git metrics for <a target="_blank" 
href="https://github.com/apache/unomi/graphs/contributors";>Unomi</a> and the <a 
target="_blank" 
href="https://github.com/apache/unomi-site/graphs/contributors";>Unomi 
site</a></li>
-              <li>Code reviews given and received on <a target="_blank" 
href="https://github.com/apache/unomi/pulls";>Unomi</a> and the <a 
target="_blank" href="https://github.com/apache/unomi-site/pulls";>Unomi 
site</a></li>
+              <li><a target="_blank" rel="noopener" 
href="https://lists.apache.org/[email protected]";>dev@ 
archives</a> and <a target="_blank" rel="noopener" 
href="https://lists.apache.org/[email protected]";>statistics</a></li>
+              <li><a target="_blank" rel="noopener" 
href="https://lists.apache.org/[email protected]";>user@ 
archives</a> and <a target="_blank" rel="noopener" 
href="https://lists.apache.org/[email protected]";>statistics</a></li>
+              <li>Git metrics for <a target="_blank" rel="noopener" 
href="https://github.com/apache/unomi/graphs/contributors";>Unomi</a> and the <a 
target="_blank" rel="noopener" 
href="https://github.com/apache/unomi-site/graphs/contributors";>Unomi 
site</a></li>
+              <li>Code reviews given and received on <a target="_blank" 
rel="noopener" href="https://github.com/apache/unomi/pulls";>Unomi</a> and the 
<a target="_blank" rel="noopener" 
href="https://github.com/apache/unomi-site/pulls";>Unomi site</a></li>
               <li>Clear areas of ownership (runtime, API, persistence, 
documentation, etc.)</li>
               <li>Public events</li>
               <li>Firsthand PMC testimonials</li>
@@ -63,7 +64,7 @@ layout: default
 
             <h4>Knows, upholds, and reinforces the Apache Software Foundation 
code of conduct</h4>
 
-            <p>See the <a target="_blank" 
href="https://www.apache.org/foundation/policies/conduct.html";>ASF 
documentation</a>. In particular, they manifestly strive to:</p>
+            <p>See the <a target="_blank" rel="noopener" 
href="https://www.apache.org/foundation/policies/conduct.html";>ASF 
documentation</a>. In particular, they manifestly strive to:</p>
 
             <ul>
               <li>Be open</li>
@@ -78,7 +79,7 @@ layout: default
 
             <h4>Knows, upholds, and reinforces the responsibilities of an 
Apache Software Foundation committer</h4>
 
-            <p>See the <a target="_blank" 
href="https://www.apache.org/dev/committers.html#committer-responsibilities";>ASF
 documentation</a>.</p>
+            <p>See the <a target="_blank" rel="noopener" 
href="https://www.apache.org/dev/committers.html#committer-responsibilities";>ASF
 documentation</a>.</p>
 
             <ul>
               <li>They help create a product that will outlive the interest of 
any particular volunteer (including themselves)</li>
diff --git a/src/main/webapp/contribute/committer-guide.html 
b/src/main/webapp/contribute/committer-guide.html
index 90a79b1..dd878af 100644
--- a/src/main/webapp/contribute/committer-guide.html
+++ b/src/main/webapp/contribute/committer-guide.html
@@ -1,6 +1,7 @@
 ---
 title: Contribute | Committer guide
 description: "Guidelines for Apache Unomi committers on reviewing and merging 
code."
+keywords: "Unomi committer guide, committer responsibilities, Apache 
committer, git workflow, code review"
 layout: default
 ---
 
@@ -39,7 +40,7 @@ layout: default
                 </div>
             </div>
             <div class="col-lg-9">
-            <p>This guide is for <a target="_blank" 
href="https://www.apache.org/foundation/how-it-works.html#committers";>committers</a>
 and covers Unomi's guidelines for reviewing and merging code.</p>
+            <p>This guide is for <a target="_blank" rel="noopener" 
href="https://www.apache.org/foundation/how-it-works.html#committers";>committers</a>
 and covers Unomi's guidelines for reviewing and merging code.</p>
 
             <h3>Always get to LGTM ("Looks good to me!")</h3>
 
@@ -54,9 +55,9 @@ layout: default
             <h3>Contributor License Agreement</h3>
 
             <p>If you are merging a larger contribution, please make sure that 
the contributor has an ICLA on file with the Apache Secretary. You can view the 
list of
-            committers <a target="_blank" 
href="http://home.apache.org/phonebook.html?unix=committers";>here</a>, as well 
as <a target="_blank" 
href="http://home.apache.org/unlistedclas.html";>ICLA-signers who aren't yet 
committers</a>.</p>
+            committers <a target="_blank" rel="noopener" 
href="https://home.apache.org/phonebook.html?unix=committers";>here</a>, as well 
as <a target="_blank" rel="noopener" 
href="https://home.apache.org/unlistedclas.html";>ICLA-signers who aren't yet 
committers</a>.</p>
 
-            <p>For smaller contributions, however, this is not required. In 
this case, we rely on <a target="_blank" 
href="http://www.apache.org/licenses/LICENSE-2.0#contributions";>clause five</a> 
of the Apache License, Version 2.0, describing licensing of intentionally 
submitted contributions.</p>
+            <p>For smaller contributions, however, this is not required. In 
this case, we rely on <a target="_blank" rel="noopener" 
href="https://www.apache.org/licenses/LICENSE-2.0#contributions";>clause 
five</a> of the Apache License, Version 2.0, describing licensing of 
intentionally submitted contributions.</p>
 
             <h3>Tests</h3>
 
diff --git a/src/main/webapp/contribute/dependencies-guide.html 
b/src/main/webapp/contribute/dependencies-guide.html
index 9fd9608..6114aca 100644
--- a/src/main/webapp/contribute/dependencies-guide.html
+++ b/src/main/webapp/contribute/dependencies-guide.html
@@ -1,6 +1,7 @@
 ---
 title: Contribute | Dependencies guide
 description: "Learn about policies for keeping Apache Unomi dependencies up to 
date."
+keywords: "Apache Unomi dependencies, BOM, dependency management, Maven, 
third-party libraries, license compliance"
 layout: default
 ---
 
@@ -50,15 +51,15 @@ layout: default
 
             <p>This picture can become even more complicated during runtime. 
Runner specific code might be incompatible with dependencies included by 
certain modules and if these dependencies leak into runtime, a pipeline might 
end up in a broken state.</p>
 
-            <p>The overall issue is not common to Unomi and well known in the 
industry as the Diamond <a target="_blank" 
href="https://en.wikipedia.org/wiki/Dependency_hell";>Dependency problem (or 
Dependency Hell)</a>.</p>
+            <p>The overall issue is not common to Unomi and well known in the 
industry as the Diamond <a target="_blank" rel="noopener" 
href="https://en.wikipedia.org/wiki/Dependency_hell";>Dependency problem (or 
Dependency Hell)</a>.</p>
 
             <h3>Bill of Materials (BOM)</h3>
 
             <p>Starting with Unomi 3, the project uses a <strong>Bill of 
Materials (BOM)</strong> to centralize and align all dependency versions across 
the codebase. The BOM is structured in two layers:</p>
 
             <ul>
-                <li><strong><a target="_blank" 
href="https://github.com/apache/unomi/blob/master/bom/pom.xml";><code>unomi-bom</code></a></strong>
 &mdash; The main BOM. It imports the <a target="_blank" 
href="https://karaf.apache.org/";>Apache Karaf</a> BOM, the Unomi artifacts BOM 
(below), and declares managed versions for all third-party dependencies used 
across the project: Jackson, CXF, Elasticsearch, OpenSearch, Groovy, GraphQL, 
Jetty, Kafka, JUnit, and many more. Every module in the  [...]
-                <li><strong><a target="_blank" 
href="https://github.com/apache/unomi/blob/master/bom/artifacts/pom.xml";><code>unomi-bom-artifacts</code></a></strong>
 &mdash; A nested BOM that manages all of Unomi&rsquo;s own module artifacts 
(API, services, persistence SPI, plugins, extensions, GraphQL, router, shell 
commands, etc.) with version-aligned declarations. This is especially useful 
for developers building custom extensions or integrations, as importing this 
single BOM pulls in [...]
+                <li><strong><a target="_blank" rel="noopener" 
href="https://github.com/apache/unomi/blob/master/bom/pom.xml";><code>unomi-bom</code></a></strong>
 &mdash; The main BOM. It imports the <a target="_blank" rel="noopener" 
href="https://karaf.apache.org/";>Apache Karaf</a> BOM, the Unomi artifacts BOM 
(below), and declares managed versions for all third-party dependencies used 
across the project: Jackson, CXF, Elasticsearch, OpenSearch, Groovy, GraphQL, 
Jetty, Kafka, JUnit, and m [...]
+                <li><strong><a target="_blank" rel="noopener" 
href="https://github.com/apache/unomi/blob/master/bom/artifacts/pom.xml";><code>unomi-bom-artifacts</code></a></strong>
 &mdash; A nested BOM that manages all of Unomi&rsquo;s own module artifacts 
(API, services, persistence SPI, plugins, extensions, GraphQL, router, shell 
commands, etc.) with version-aligned declarations. This is especially useful 
for developers building custom extensions or integrations, as importing this 
sing [...]
             </ul>
 
             <p><strong>Using the BOM in your own project:</strong> If you are 
building a custom Unomi extension, plugin, or integration, you can import the 
Unomi BOM in your own <code>pom.xml</code> to avoid having to manually track 
dependency versions:</p>
@@ -92,7 +93,7 @@ layout: default
 
             <p>This approach ensures your extension always uses dependency 
versions that have been tested together as part of the Unomi release, 
significantly reducing the risk of version conflicts at runtime.</p>
 
-            <p>One common solution for the diamond dependency problem is <a 
target="_blank" href="https://semver.org/";>semantic versioning</a>. The basic 
idea is that dependencies will be versioned in the form <em>x.y.z</em> where 
<em>x</em> is the <em>major version</em>, <em>y</em> is the <em>minor 
version</em>, and <em>z</em> is the <em>patch version</em>. A major version 
change may be backwards incompatible and is expected to be rare. Minor and 
patch versions may be released more regu [...]
+            <p>One common solution for the diamond dependency problem is <a 
target="_blank" rel="noopener" href="https://semver.org/";>semantic 
versioning</a>. The basic idea is that dependencies will be versioned in the 
form <em>x.y.z</em> where <em>x</em> is the <em>major version</em>, <em>y</em> 
is the <em>minor version</em>, and <em>z</em> is the <em>patch version</em>. A 
major version change may be backwards incompatible and is expected to be rare. 
Minor and patch versions may be rel [...]
 
             <h3>Identifying outdated dependencies</h3>
 
@@ -144,11 +145,11 @@ layout: default
 
             <p><strong>Dependencies of Java SDK components that may cause 
issues to other components if leaked should be vendored.</strong></p>
 
-            <p><a target="_blank" 
href="https://www.ardanlabs.com/blog/2013/10/manage-dependencies-with-godep.html";>Vendoring</a>
 is the process of creating copies of third party dependencies. Combined with 
repackaging, vendoring will allow Unomi components to depend on third party 
libraries without causing conflicts to other components. Vendoring should be 
done in a case-by-case basis since this can increase the total number of 
dependencies deployed in user&rsquo;s enviroment.</p>
+            <p><a target="_blank" rel="noopener" 
href="https://www.ardanlabs.com/blog/2013/10/manage-dependencies-with-godep.html";>Vendoring</a>
 is the process of creating copies of third party dependencies. Combined with 
repackaging, vendoring will allow Unomi components to depend on third party 
libraries without causing conflicts to other components. Vendoring should be 
done in a case-by-case basis since this can increase the total number of 
dependencies deployed in user&rsquo;s enviro [...]
 
             <h3>Dependency updates and backwards compatibility</h3>
 
-            <p>Unomi releases <a target="_blank" 
href="https://unomi.apache.org/downloads/";>adhere to</a> semantic versioning. 
Hence, community members should take care when updating dependencies. Minor 
version updates to dependencies should be backwards compatible in most cases. 
Some updates to dependencies though may result in backwards incompatible API or 
functionality changes to Unomi. PR reviewers and committers should take care to 
detect any dependency updates that could potentiall [...]
+            <p>Unomi releases <a target="_blank" rel="noopener" 
href="https://unomi.apache.org/download.html";>adhere to</a> semantic 
versioning. Hence, community members should take care when updating 
dependencies. Minor version updates to dependencies should be backwards 
compatible in most cases. Some updates to dependencies though may result in 
backwards incompatible API or functionality changes to Unomi. PR reviewers and 
committers should take care to detect any dependency updates tha [...]
 
             <p>Any exceptions to this policy should only occur in extreme 
cases (for example, due to a security vulnerability of an existing dependency 
that is only fixed in a subsequent major version) and should be discussed in 
the Unomi dev list. Note that backwards incompatible changes to experimental 
features may be introduced in a minor version release.</p>
             </div>
diff --git a/src/main/webapp/contribute/index.html 
b/src/main/webapp/contribute/index.html
index 9274b33..df5adab 100644
--- a/src/main/webapp/contribute/index.html
+++ b/src/main/webapp/contribute/index.html
@@ -1,6 +1,7 @@
 ---
 title: Contribute
 description: "Contribute to Apache Unomi. Help with code, documentation, bug 
reports, answering questions, and more."
+keywords: "contribute Apache Unomi, open source contribution, how to 
contribute, pull requests, JIRA, developer guide"
 layout: default
 ---
 
@@ -50,7 +51,7 @@ layout: default
                 <div class="row g-3 mb-4">
                     <div class="col-md-6">
                         <div class="d-flex align-items-start">
-                            <div class="feature-icon me-3" 
style="width:2.5rem;height:2.5rem;font-size:1rem"><i class="bi 
bi-chat-dots"></i></div>
+                            <div class="feature-icon feature-icon-md me-3"><i 
class="bi bi-chat-dots"></i></div>
                             <div>
                                 <h3 class="h6 fw-semibold mb-1">Answer 
Questions</h3>
                                 <p class="small text-muted mb-0">Help users on 
the <a href="/community/index.html">mailing list</a> or Slack.</p>
@@ -59,7 +60,7 @@ layout: default
                     </div>
                     <div class="col-md-6">
                         <div class="d-flex align-items-start">
-                            <div class="feature-icon me-3" 
style="width:2.5rem;height:2.5rem;font-size:1rem"><i class="bi 
bi-file-text"></i></div>
+                            <div class="feature-icon feature-icon-md me-3"><i 
class="bi bi-file-text"></i></div>
                             <div>
                                 <h3 class="h6 fw-semibold mb-1">Improve 
Documentation</h3>
                                 <p class="small text-muted mb-0">Fix typos, 
add examples, or write new guides.</p>
@@ -68,7 +69,7 @@ layout: default
                     </div>
                     <div class="col-md-6">
                         <div class="d-flex align-items-start">
-                            <div class="feature-icon me-3" 
style="width:2.5rem;height:2.5rem;font-size:1rem"><i class="bi 
bi-bug"></i></div>
+                            <div class="feature-icon feature-icon-md me-3"><i 
class="bi bi-bug"></i></div>
                             <div>
                                 <h3 class="h6 fw-semibold mb-1">Report 
Bugs</h3>
                                 <p class="small text-muted mb-0">File issues 
on <a href="https://issues.apache.org/jira/browse/UNOMI"; target="_blank" 
rel="noopener">JIRA</a>.</p>
@@ -77,7 +78,7 @@ layout: default
                     </div>
                     <div class="col-md-6">
                         <div class="d-flex align-items-start">
-                            <div class="feature-icon me-3" 
style="width:2.5rem;height:2.5rem;font-size:1rem"><i class="bi 
bi-code-slash"></i></div>
+                            <div class="feature-icon feature-icon-md me-3"><i 
class="bi bi-code-slash"></i></div>
                             <div>
                                 <h3 class="h6 fw-semibold mb-1">Submit 
Code</h3>
                                 <p class="small text-muted mb-0">Send pull 
requests with bug fixes, features, or examples.</p>
@@ -86,7 +87,7 @@ layout: default
                     </div>
                     <div class="col-md-6">
                         <div class="d-flex align-items-start">
-                            <div class="feature-icon me-3" 
style="width:2.5rem;height:2.5rem;font-size:1rem"><i class="bi 
bi-eye"></i></div>
+                            <div class="feature-icon feature-icon-md me-3"><i 
class="bi bi-eye"></i></div>
                             <div>
                                 <h3 class="h6 fw-semibold mb-1">Review 
Designs</h3>
                                 <p class="small text-muted mb-0">Discuss 
proposals on <a href="https://lists.apache.org/[email protected]"; 
target="_blank" rel="noopener">[email protected]</a>.</p>
@@ -95,7 +96,7 @@ layout: default
                     </div>
                     <div class="col-md-6">
                         <div class="d-flex align-items-start">
-                            <div class="feature-icon me-3" 
style="width:2.5rem;height:2.5rem;font-size:1rem"><i class="bi 
bi-share"></i></div>
+                            <div class="feature-icon feature-icon-md me-3"><i 
class="bi bi-share"></i></div>
                             <div>
                                 <h3 class="h6 fw-semibold mb-1">Spread the 
Word</h3>
                                 <p class="small text-muted mb-0">Write blog 
posts, give talks, or share your experience.</p>
diff --git a/src/main/webapp/contribute/manual-release-guide.html 
b/src/main/webapp/contribute/manual-release-guide.html
index 5f74fb2..06ba469 100644
--- a/src/main/webapp/contribute/manual-release-guide.html
+++ b/src/main/webapp/contribute/manual-release-guide.html
@@ -1,6 +1,7 @@
 ---
 title: Manual Release Guide
 description: "Manual release guide for Apache Unomi release managers"
+keywords: "Apache Unomi release, manual release guide, Maven release, ASF 
release process, artifact signing"
 layout: default
 ---
 
@@ -48,7 +49,7 @@ layout: default
 
             <p>Each release is executed by a <em>Release Manager</em>, who is 
selected among the Unomi committers. This document describes the process that 
the Release Manager follows to perform a release. Any changes to this process 
should be discussed and adopted on the <a href="../community/index.html">dev@ 
mailing list</a>.</p>
 
-            <p>Please remember that publishing software has legal 
consequences. This guide complements the foundation-wide <a 
href="https://www.apache.org/dev/release.html"; target="_blank">Product Release 
Policy</a> and <a href="https://www.apache.org/dev/release-distribution"; 
target="_blank">Release Distribution Policy</a>.</p>
+            <p>Please remember that publishing software has legal 
consequences. This guide complements the foundation-wide <a 
href="https://www.apache.org/dev/release.html"; target="_blank" 
rel="noopener">Product Release Policy</a> and <a 
href="https://www.apache.org/dev/release-distribution"; target="_blank" 
rel="noopener">Release Distribution Policy</a>.</p>
 
             <h2 id="overview">Overview</h2>
 
@@ -77,7 +78,7 @@ layout: default
 
             <p>In general, the community prefers to have a rotating set of 3-5 
Release Managers. Keeping a small core set of managers allows enough people to 
build expertise in this area and improve processes over time, without Release 
Managers needing to re-learn the processes for each release. That said, if you 
are a committer interested in serving the community in this way, please reach 
out to the community on the dev@ mailing list.</p>
 
-            <p>Basically we will be following the procedure described <a 
href="https://www.apache.org/dev/publishing-maven-artifacts.html"; 
target="_blank">here</a> with a few more steps and details before and after.</p>
+            <p>Basically we will be following the procedure described <a 
href="https://www.apache.org/dev/publishing-maven-artifacts.html"; 
target="_blank" rel="noopener">here</a> with a few more steps and details 
before and after.</p>
 
 
             <h3 id="checklist-to-proceed-to-the-next-step">Checklist to 
proceed to the next step</h3>
@@ -117,7 +118,7 @@ gpg --verify test.txt.asc test.txt
                       This should tell you which key was used and display the 
email address.
                   </li>
                   <li>
-                      Make sure your public KEY is available in this files (if 
not add your key to the files and commit/push):
+                      Make sure your public KEY is available in these files 
(if not add your key to the files and commit/push):
                       <ol>
                           <li><a 
href="https://github.com/apache/unomi/blob/master/KEYS";>GIT 
https://github.com/apache/unomi/blob/master/KEYS (cherry-pick to the branches 
if necessary)</a></li>
                           <li><a 
href="https://dist.apache.org/repos/dist/dev/unomi/KEYS";>SVN 
https://dist.apache.org/repos/dist/dev/unomi/KEYS</a></li>
@@ -138,7 +139,7 @@ gpg --verify test.txt.asc test.txt
               <li>
                   Update all JIRAs, close the ones that are still not closed, 
review tickets that can be closed, postpone to another release tickets that are 
not managed now.
                   You can use this JIRA page: <a 
href="https://issues.apache.org/jira/projects/UNOMI?selectedItem=com.atlassian.jira.jira-projects-plugin%3Arelease-page&status=unreleased";>Unomi
 JIRA releases</a>.
-                  Then review the list of tickets that need to be updated, 
also additionally you can check the list of commits since previous release and 
insure they are closed using fix version: {{ 
site.data.unomi.next.stable.version }}.
+                  Then review the list of tickets that need to be updated, 
also additionally you can check the list of commits since previous release and 
ensure they are closed using fix version: {{ 
site.data.unomi.next.stable.version }}.
                   Ideally all tickets listed for version: {{ 
site.data.unomi.next.stable.version }} should be closed or moved to the next 
version in case they are not finished/started.
               </li>
                 <li>
@@ -191,7 +192,7 @@ gpg: 'echec de la signature : Inappropriate ioctl for device
 gpg: signing failed: Inappropriate ioctl for device</code></pre>
                 you can either try to sign a file like this:
                 <pre class="alert alert-primary"><code>gpg -ab 
test.txt</code></pre>
-                this will ask for your password and remember it in the agent 
for a while, or if you want a more permanent solution: <a 
href="https://dan.cx/2016/11/gpg-inappropriate-ioctl-for-device-errors"; 
target="_blank">https://dan.cx/2016/11/gpg-inappropriate-ioctl-for-device-errors</a>
+                this will ask for your password and remember it in the agent 
for a while, or if you want a more permanent solution: <a 
href="https://dan.cx/2016/11/gpg-inappropriate-ioctl-for-device-errors"; 
target="_blank" 
rel="noopener">https://dan.cx/2016/11/gpg-inappropriate-ioctl-for-device-errors</a>
               </li>
             </ol>
 
@@ -199,8 +200,8 @@ gpg: signing failed: Inappropriate ioctl for 
device</code></pre>
             <h3 id="publish-repository">Repository</h3>
 
             <ol>
-              <li>Setup server passwords for publishing as document here:
-                <a 
href="https://www.apache.org/dev/publishing-maven-artifacts.html"; 
target="_blank">https://www.apache.org/dev/publishing-maven-artifacts.html</a> 
and <a 
href="https://maven.apache.org/guides/mini/guide-encryption.html#How_to_encrypt_server_passwords";
 
target="_blank">https://maven.apache.org/guides/mini/guide-encryption.html#How_to_encrypt_server_passwords</a>
+              <li>Setup server passwords for publishing as documented here:
+                <a 
href="https://www.apache.org/dev/publishing-maven-artifacts.html"; 
target="_blank" 
rel="noopener">https://www.apache.org/dev/publishing-maven-artifacts.html</a> 
and <a 
href="https://maven.apache.org/guides/mini/guide-encryption.html#How_to_encrypt_server_passwords";
 target="_blank" 
rel="noopener">https://maven.apache.org/guides/mini/guide-encryption.html#How_to_encrypt_server_passwords</a>
               </li>
               <li>Check into the target directory and unzip the source release 
and compile it using:
                 <pre class="alert alert-primary"><code>pushd target
@@ -228,14 +229,14 @@ popd</code></pre>
               <li>
                 <pre class="alert alert-primary"><code>mvn -DskipITs=true 
-DskipTests=true -Drelease.arguments="-Papache-release,integration-tests 
-DskipITs=true -DskipTests=true" -P integration-tests,docker,\!run-tests 
release:perform</code></pre>
               </li>
-              <li>If something fails, make sure you first drop the staging 
repository created here: <a 
href="https://repository.apache.org/#stagingRepositories"; 
target="_blank">https://repository.apache.org/#stagingRepositories</a>.<br>
+              <li>If something fails, make sure you first drop the staging 
repository created here: <a 
href="https://repository.apache.org/#stagingRepositories"; target="_blank" 
rel="noopener">https://repository.apache.org/#stagingRepositories</a>.<br>
 If you need to relaunch the <code>release:perform</code> and don't have a 
release.properties, create a <code>release.properties</code> file with the 
following contents:
                 <pre class="alert 
alert-primary"><code>scm.url=scm:git:https://gitbox.apache.org/repos/asf?p=unomi.git
 scm.tag=unomi-root-{{ site.data.unomi.next.stable.version }}
 and run mvn release:perform</code></pre>
               </li>
-              <li>Connect to <a 
href="https://repository.apache.org/#stagingRepositories"; 
target="_blank">https://repository.apache
-                  .org/#stagingRepositories</a> and look for the open staging 
repositories, you should have two (one for everything and the other for 
KAR/features) for releases &lt;= 1.2 and just one for versions &gt;= 1.3.0 
(because of changes in the Karaf plugins). Close the repositories and given a 
meaningful comment when closing such as:<br>
+              <li>Connect to <a 
href="https://repository.apache.org/#stagingRepositories"; target="_blank" 
rel="noopener">https://repository.apache
+                  .org/#stagingRepositories</a> and look for the open staging 
repositories, you should have two (one for everything and the other for 
KAR/features) for releases &lt;= 1.2 and just one for versions &gt;= 1.3.0 
(because of changes in the Karaf plugins). Close the repositories and give a 
meaningful comment when closing such as:<br>
                 <strong>Apache Unomi {{ site.data.unomi.next.stable.version }} 
Release Candidate 1</strong>
               </li>
             </ol>
@@ -251,9 +252,9 @@ mkdir {{ site.data.unomi.next.stable.version }}</code></pre>
               </li>
               <li>
                 Copy all the Zip and Tarbars including ASC (but do not copy 
the SHA1 or MD5 sum) files from:
-                <a 
href="https://repository.apache.org/content/repositories/orgapacheunomi-1014/org/apache/unomi/unomi/{{
 site.data.unomi.next.stable.version }}/" 
target="_blank">https://repository.apache.org/content/repositories/orgapacheunomi-1014/org/apache/unomi/unomi/{{
 site.data.unomi.next.stable.version }}/</a>
+                <a 
href="https://repository.apache.org/content/repositories/orgapacheunomi-1014/org/apache/unomi/unomi/{{
 site.data.unomi.next.stable.version }}/" target="_blank" 
rel="noopener">https://repository.apache.org/content/repositories/orgapacheunomi-1014/org/apache/unomi/unomi/{{
 site.data.unomi.next.stable.version }}/</a>
                 and
-                <a 
href="https://repository.apache.org/content/repositories/orgapacheunomi-1014/org/apache/unomi/unomi-root/{{
 site.data.unomi.next.stable.version }}/" 
target="_blank">https://repository.apache.org/content/repositories/orgapacheunomi-1014/org/apache/unomi/unomi-root/{{
 site.data.unomi.next.stable.version }}/</a>
+                <a 
href="https://repository.apache.org/content/repositories/orgapacheunomi-1014/org/apache/unomi/unomi-root/{{
 site.data.unomi.next.stable.version }}/" target="_blank" 
rel="noopener">https://repository.apache.org/content/repositories/orgapacheunomi-1014/org/apache/unomi/unomi-root/{{
 site.data.unomi.next.stable.version }}/</a>
                   using commands such as : <pre class="alert 
alert-primary"><code>export REPO_ID=orgapacheunomi-1033
 wget 
https://repository.apache.org/content/repositories/$REPO_ID/org/apache/unomi/unomi-root/{{
 site.data.unomi.next.stable.version }}/unomi-root-{{ 
site.data.unomi.next.stable.version }}-source-release.zip
 wget 
https://repository.apache.org/content/repositories/$REPO_ID/org/apache/unomi/unomi-root/{{
 site.data.unomi.next.stable.version }}/unomi-root-{{ 
site.data.unomi.next.stable.version }}-source-release.zip.asc
@@ -288,9 +289,9 @@ svn add {{ site.data.unomi.next.stable.version 
}}</code></pre>
                 <pre class="alert alert-primary"><code>svn commit -m "Apache 
{{ site.data.unomi.next.stable.version }} Release (for PMC voting)"</code></pre>
               </li>
                 <li>Send out to the Unomi mailing list a mail to start the 
voting process, see <a href="#mail-1">[1]</a></li>
-                <li>If the vote is refused or cancelled, peform the following 
steps to restart the release process:
+                <li>If the vote is refused or cancelled, perform the following 
steps to restart the release process:
                     <ol>
-                        <li>Drop the release in <a 
href="https://repository.apache.org/#stagingRepositories"; 
target="_blank">Nexus</a></li>
+                        <li>Drop the release in <a 
href="https://repository.apache.org/#stagingRepositories"; target="_blank" 
rel="noopener">Nexus</a></li>
                         <li>Remove the tag in Git:
                             <pre class="alert alert-primary"><code>git push 
--delete origin unomi-root-{{ site.data.unomi.next.stable.version }}
 git tag -d unomi-root-{{ site.data.unomi.next.stable.version }}</code></pre>
@@ -319,7 +320,7 @@ git tag -d unomi-root-{{ 
site.data.unomi.next.stable.version }}</code></pre>
                 In JIRA mark the version as released and add a release date
               </li>
               <li>
-                Connect to <a 
href="https://repository.apache.org/#stagingRepositories"; 
target="_blank">https://repository.apache.org/#stagingRepositories</a> and look 
for the open staging repositories, you should have one. Select the staging 
repositoriy and click on <code>release</code>.
+                Connect to <a 
href="https://repository.apache.org/#stagingRepositories"; target="_blank" 
rel="noopener">https://repository.apache.org/#stagingRepositories</a> and look 
for the open staging repositories, you should have one. Select the staging 
repository and click on <code>release</code>.
               </li>
               <li>Update the website (in project `unomi-site`) to point to the 
new release on the download page by
                   first copying the previous archive release and replacing all 
the version numbers with the current release
@@ -330,10 +331,10 @@ git tag -d unomi-root-{{ 
site.data.unomi.next.stable.version }}</code></pre>
                   <pre class="alert alert-primary"><code>git clone 
https://gitbox.apache.org/repos/asf/unomi-site.git</code></pre>
                   Perform any modifications, notably change the versions in 
the pom.xml file:
                   <pre class="alert alert-primary"><code>    &lt;properties&gt;
-        &lt;latest.stable.version&gt;1.5.4&lt;/latest.stable.version&gt;
-        
&lt;next.development.version&gt;1.5.5-SNAPSHOT&lt;/next.development.version&gt;
-        &lt;next.stable.version&gt;1.5.5&lt;/next.stable.version&gt;
-        
&lt;latest.development.version&gt;2.0.0-SNAPSHOT&lt;/latest.development.version&gt;
+        &lt;latest.stable.version&gt;3.0.0&lt;/latest.stable.version&gt;
+        
&lt;next.development.version&gt;3.1.0-SNAPSHOT&lt;/next.development.version&gt;
+        &lt;next.stable.version&gt;3.1.0&lt;/next.stable.version&gt;
+        
&lt;latest.development.version&gt;3.1.0-SNAPSHOT&lt;/latest.development.version&gt;
     &lt;/properties&gt;
 </code></pre>
                  Then modify the index.html, download.html to add the new 
files. For the documentation see the next step.
@@ -460,12 +461,12 @@ git push origin -f</code></pre>
               <li>Release recorded in reporter.apache.org.</li>
               <li>Release announced on social media.</li>
               <li>Completion declared on the dev@ mailing list.</li>
-                <li>Check that old release where removed from the dist 
server</li>
+                <li>Check that old releases were removed from the dist 
server</li>
             </ol>
 
             <h2 id="improve-the-process">Improve the process</h2>
 
-            <p>It is important that we improve the release processes over 
time. Once you've finished the release, please take a step back and look what 
areas of this process and be improved. Perhaps some part of the process can be 
simplified. Perhaps parts of this guide can be clarified.</p>
+            <p>It is important that we improve the release processes over 
time. Once you've finished the release, please take a step back and look at 
what areas of this process can be improved. Perhaps some part of the process 
can be simplified. Perhaps parts of this guide can be clarified.</p>
 
             <p>If we have specific ideas, please start a discussion on the 
dev@ mailing list and/or propose a pull request to update this guide. 
Thanks!</p>
 
@@ -568,10 +569,10 @@ designed to manage customers, leads and visitors' data 
and help personalize cust
 experiences.
 
 More details regarding Apache Unomi can be found here:
-http://unomi.apache.org/
+https://unomi.apache.org/
 
 The release artifacts can be downloaded here:
-https://dist.apache.org/repos/dist/release/incubator/unomi/{{ 
site.data.unomi.next.stable.version }}/
+https://dist.apache.org/repos/dist/release/unomi/{{ 
site.data.unomi.next.stable.version }}/
 
 All JIRAs completed for this release are tagged with 'FixVersion =
 {{ site.data.unomi.next.stable.version }}'; the JIRA release notes can be 
found here:
diff --git a/src/main/webapp/contribute/post-commit-guides.html 
b/src/main/webapp/contribute/post-commit-guides.html
index fb0cae9..92c506f 100644
--- a/src/main/webapp/contribute/post-commit-guides.html
+++ b/src/main/webapp/contribute/post-commit-guides.html
@@ -1,6 +1,7 @@
 ---
 title: Post-commit Guides
 description: "Guides for handling post-commit test failures in Apache Unomi"
+keywords: "post-commit guide, Apache Unomi, new committer, ASF procedures, 
committer onboarding"
 layout: default
 ---
 
@@ -51,7 +52,7 @@ layout: default
             <ol>
               <li>If you can triage it yourself, go for it.</li>
               <li>Look at the GitHub blame for the files with problematic 
code.</li>
-              <li>Ask in the <a target="_blank" 
href="https://the-asf.slack.com/messages/CBP2Z98Q7/";>Unomi Slack chat</a>.</li>
+              <li>Ask in the <a target="_blank" rel="noopener" 
href="https://the-asf.slack.com/messages/CBP2Z98Q7/";>Unomi Slack chat</a>.</li>
               <li>Write to the dev list: [email protected]</li>
             </ol>
 
diff --git a/src/main/webapp/contribute/post-commit-policies-details.html 
b/src/main/webapp/contribute/post-commit-policies-details.html
index cfed087..78a3916 100644
--- a/src/main/webapp/contribute/post-commit-policies-details.html
+++ b/src/main/webapp/contribute/post-commit-policies-details.html
@@ -1,6 +1,7 @@
 ---
 title: Post-commit Details
 description: "Detailed information about Apache Unomi post-commit test 
policies"
+keywords: "Apache Unomi policies, commit policies, code review, testing 
requirements, ASF guidelines"
 layout: default
 ---
 
@@ -72,7 +73,7 @@ layout: default
             <p>Flaky tests do not provide a reliable quality signal, so it is 
important to quickly fix the flakiness. If a fix will take awhile to implement, 
it is safer
             to disable the test until the fix is ready.</p>
 
-            <p>Martin Fowler has a good <a target="_blank" 
href="https://martinfowler.com/articles/nonDeterminism.html";>article</a> about 
non-determinism in tests.</p>
+            <p>Martin Fowler has a good <a target="_blank" rel="noopener" 
href="https://martinfowler.com/articles/nonDeterminism.html";>article</a> about 
non-determinism in tests.</p>
 
             <h3 id="remove_flake">Flaky tests must be fixed or removed</h3>
 
diff --git a/src/main/webapp/contribute/post-commit-test-policies.html 
b/src/main/webapp/contribute/post-commit-test-policies.html
index eb24219..0b030ed 100644
--- a/src/main/webapp/contribute/post-commit-test-policies.html
+++ b/src/main/webapp/contribute/post-commit-test-policies.html
@@ -1,6 +1,7 @@
 ---
 title: Contribute | Post-commit test policies
 description: "Learn about Apache Unomi post-commit test policies and 
requirements."
+keywords: "Apache Unomi testing, post-commit tests, test policies, CI testing, 
quality assurance"
 layout: default
 ---
 
@@ -62,7 +63,7 @@ layout: default
             <h4>I found a test failure</h4>
 
             <ol>
-              <li>Create a <a target="_blank" 
href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20UNOMI%20AND%20component%20%3D%20test-failures";>JIRA
 issue</a> and assign it to yourself.</li>
+              <li>Create a <a target="_blank" rel="noopener" 
href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20UNOMI%20AND%20component%20%3D%20test-failures";>JIRA
 issue</a> and assign it to yourself.</li>
               <li>Do high level triage of the failure.</li>
               <li><a href="post-commit-guides.html#find_specialist">Assign the 
JIRA issue to a relevant person</a>.</li>
             </ol>
diff --git a/src/main/webapp/contribute/pre-commit-test-policies.html 
b/src/main/webapp/contribute/pre-commit-test-policies.html
index 90389ce..8391876 100644
--- a/src/main/webapp/contribute/pre-commit-test-policies.html
+++ b/src/main/webapp/contribute/pre-commit-test-policies.html
@@ -1,6 +1,7 @@
 ---
 title: Contribute | Pre-commit test policies
 description: "Learn about Apache Unomi pre-commit test policies and 
requirements."
+keywords: "Apache Unomi testing, pre-commit tests, test policies, code 
quality, testing guidelines"
 layout: default
 ---
 
diff --git a/src/main/webapp/contribute/release-guide.html 
b/src/main/webapp/contribute/release-guide.html
index 33b016d..33c0a57 100644
--- a/src/main/webapp/contribute/release-guide.html
+++ b/src/main/webapp/contribute/release-guide.html
@@ -1,6 +1,7 @@
 ---
 title: Release Guide
 description: "Guide for Apache Unomi release managers on how to perform a 
release"
+keywords: "Apache Unomi release, release guide, ASF release, Maven release, 
version management"
 layout: default
 ---
 
@@ -47,7 +48,7 @@ layout: default
 
             <p>Each release is executed by a <em>Release Manager</em>, who is 
selected among the Unomi committers. This document describes the process that 
the Release Manager follows to perform a release. Any changes to this process 
should be discussed and adopted on the <a href="../community/index.html">dev@ 
mailing list</a>.</p>
 
-            <p>Please remember that publishing software has legal 
consequences. This guide complements the foundation-wide <a 
href="https://www.apache.org/dev/release.html"; target="_blank">Product Release 
Policy</a> and <a href="https://www.apache.org/dev/release-distribution"; 
target="_blank">Release Distribution Policy</a>.</p>
+            <p>Please remember that publishing software has legal 
consequences. This guide complements the foundation-wide <a 
href="https://www.apache.org/dev/release.html"; target="_blank" 
rel="noopener">Product Release Policy</a> and <a 
href="https://www.apache.org/dev/release-distribution"; target="_blank" 
rel="noopener">Release Distribution Policy</a>.</p>
 
             <h2 id="overview">Overview</h2>
 
@@ -76,7 +77,7 @@ layout: default
 
             <p>In general, the community prefers to have a rotating set of 3-5 
Release Managers. Keeping a small core set of managers allows enough people to 
build expertise in this area and improve processes over time, without Release 
Managers needing to re-learn the processes for each release. That said, if you 
are a committer interested in serving the community in this way, please reach 
out to the community on the dev@ mailing list.</p>
 
-            <p>Basically we will be following the procedure described <a 
href="https://www.apache.org/dev/publishing-maven-artifacts.html"; 
target="_blank">here</a> with a few more steps and details before and after.</p>
+            <p>Basically we will be following the procedure described <a 
href="https://www.apache.org/dev/publishing-maven-artifacts.html"; 
target="_blank" rel="noopener">here</a> with a few more steps and details 
before and after.</p>
 
 
             <h3 id="checklist-to-proceed-to-the-next-step">Checklist to 
proceed to the next step</h3>
@@ -116,7 +117,7 @@ gpg --verify test.txt.asc test.txt
                       This should tell you which key was used and display the 
email address.
                   </li>
                   <li>
-                      Make sure your public KEY is available in this files (if 
not add your key to the files and commit/push):
+                      Make sure your public KEY is available in these files 
(if not add your key to the files and commit/push):
                       <ol>
                           <li><a 
href="https://github.com/apache/unomi/blob/master/KEYS";>GIT 
https://github.com/apache/unomi/blob/master/KEYS (cherry-pick to the branches 
if necessary)</a></li>
                           <li><a 
href="https://dist.apache.org/repos/dist/dev/unomi/KEYS";>SVN 
https://dist.apache.org/repos/dist/dev/unomi/KEYS</a></li>
@@ -137,7 +138,7 @@ gpg --verify test.txt.asc test.txt
               <li>
                   Update all JIRAs, close the ones that are still not closed, 
review tickets that can be closed, postpone to another release tickets that are 
not managed now.
                   You can use this JIRA page: <a 
href="https://issues.apache.org/jira/projects/UNOMI?selectedItem=com.atlassian.jira.jira-projects-plugin%3Arelease-page&status=unreleased";>Unomi
 JIRA releases</a>.
-                  Then review the list of tickets that need to be updated, 
also additionally you can check the list of commits since previous release and 
insure they are closed using fix version: {{ 
site.data.unomi.next.stable.version }}.
+                  Then review the list of tickets that need to be updated, 
also additionally you can check the list of commits since previous release and 
ensure they are closed using fix version: {{ 
site.data.unomi.next.stable.version }}.
                   Ideally all tickets listed for version: {{ 
site.data.unomi.next.stable.version }} should be closed or moved to the next 
version in case they are not finished/started.
               </li>
                 <li>
@@ -158,8 +159,8 @@ gpg --verify test.txt.asc test.txt
               <li>Make sure you have a Docker installation properly configured 
on the machine building the project,
                   as it is required to build everything.
               </li>
-                <li>Setup server passwords for publishing as document here:
-                    <a 
href="https://www.apache.org/dev/publishing-maven-artifacts.html"; 
target="_blank">https://www.apache.org/dev/publishing-maven-artifacts.html</a> 
and <a 
href="https://maven.apache.org/guides/mini/guide-encryption.html#How_to_encrypt_server_passwords";
 
target="_blank">https://maven.apache.org/guides/mini/guide-encryption.html#How_to_encrypt_server_passwords</a>
+                <li>Setup server passwords for publishing as documented here:
+                    <a 
href="https://www.apache.org/dev/publishing-maven-artifacts.html"; 
target="_blank" 
rel="noopener">https://www.apache.org/dev/publishing-maven-artifacts.html</a> 
and <a 
href="https://maven.apache.org/guides/mini/guide-encryption.html#How_to_encrypt_server_passwords";
 target="_blank" 
rel="noopener">https://maven.apache.org/guides/mini/guide-encryption.html#How_to_encrypt_server_passwords</a>
                 </li>
               <li>Launch the first build script using.
                 <pre class="alert alert-primary"><code>./release-stage-1.sh {{ 
site.data.unomi.next.stable.version }} BRANCH_NAME</code></pre>
@@ -181,21 +182,21 @@ gpg: 'echec de la signature : Inappropriate ioctl for 
device
 gpg: signing failed: Inappropriate ioctl for device</code></pre>
                 you can either try to sign a file like this:
                 <pre class="alert alert-primary"><code>gpg -ab 
test.txt</code></pre>
-                this will ask for your password and remember it in the agent 
for a while, or if you want a more permanent solution: <a 
href="https://dan.cx/2016/11/gpg-inappropriate-ioctl-for-device-errors"; 
target="_blank">https://dan.cx/2016/11/gpg-inappropriate-ioctl-for-device-errors</a>
+                this will ask for your password and remember it in the agent 
for a while, or if you want a more permanent solution: <a 
href="https://dan.cx/2016/11/gpg-inappropriate-ioctl-for-device-errors"; 
target="_blank" 
rel="noopener">https://dan.cx/2016/11/gpg-inappropriate-ioctl-for-device-errors</a>
               </li>
             </ol>
 
             <h2 id="publish-the-release">Publish the release</h2>
             <h3 id="publish-repository">Repository</h3>
               <ol>
-              <li>If something fails, make sure you first drop the staging 
repository created here: <a 
href="https://repository.apache.org/#stagingRepositories"; 
target="_blank">https://repository.apache.org/#stagingRepositories</a>.<br>
+              <li>If something fails, make sure you first drop the staging 
repository created here: <a 
href="https://repository.apache.org/#stagingRepositories"; target="_blank" 
rel="noopener">https://repository.apache.org/#stagingRepositories</a>.<br>
 If you need to relaunch the <code>release:perform</code> and don't have a 
release.properties, create a <code>release.properties</code> file with the 
following contents:
                 <pre class="alert 
alert-primary"><code>scm.url=scm:git:https://gitbox.apache.org/repos/asf?p=unomi.git
 scm.tag=unomi-root-{{ site.data.unomi.next.stable.version }}
 and run mvn release:perform</code></pre>
               </li>
-              <li>Connect to <a 
href="https://repository.apache.org/#stagingRepositories"; 
target="_blank">https://repository.apache
-                  .org/#stagingRepositories</a> and look for the open staging 
repositories, you should have two (one for everything and the other for 
KAR/features) for releases &lt;= 1.2 and just one for versions &gt;= 1.3.0 
(because of changes in the Karaf plugins). Close the repositories and given a 
meaningful comment when closing such as:<br>
+              <li>Connect to <a 
href="https://repository.apache.org/#stagingRepositories"; target="_blank" 
rel="noopener">https://repository.apache
+                  .org/#stagingRepositories</a> and look for the open staging 
repositories, you should have two (one for everything and the other for 
KAR/features) for releases &lt;= 1.2 and just one for versions &gt;= 1.3.0 
(because of changes in the Karaf plugins). Close the repositories and give a 
meaningful comment when closing such as:<br>
                 <strong>Apache Unomi {{ site.data.unomi.next.stable.version }} 
Release Candidate 1</strong>. If no artefact related to Unomi is present, 
something wrong happened in <code>release-stage-1.sh</code>.
               </li>
             </ol>
@@ -207,9 +208,9 @@ and run mvn release:perform</code></pre>
                   where NEXUS-UNOMI-ID is the ID generated by Nexus for the 
staging artifacts.
               </li>
                 <li>Send out to the Unomi mailing list a mail to start the 
voting process, see <a href="#mail-1">[1]</a></li>
-                <li>If the vote is refused or cancelled, peform the following 
steps to restart the release process:
+                <li>If the vote is refused or cancelled, perform the following 
steps to restart the release process:
                     <ol>
-                        <li>Drop the release in <a 
href="https://repository.apache.org/#stagingRepositories"; 
target="_blank">Nexus</a></li>
+                        <li>Drop the release in <a 
href="https://repository.apache.org/#stagingRepositories"; target="_blank" 
rel="noopener">Nexus</a></li>
                         <li>Remove the tag in Git:
                             <pre class="alert alert-primary"><code>git push 
--delete origin unomi-root-{{ site.data.unomi.next.stable.version }}
 git tag -d unomi-root-{{ site.data.unomi.next.stable.version }}</code></pre>
@@ -238,7 +239,7 @@ git tag -d unomi-root-{{ 
site.data.unomi.next.stable.version }}</code></pre>
                 In JIRA mark the version as released and add a release date
               </li>
               <li>
-                Connect to <a 
href="https://repository.apache.org/#stagingRepositories"; 
target="_blank">https://repository.apache.org/#stagingRepositories</a> and look 
for the open staging repositories, you should have one. Select the staging 
repositoriy and click on <code>release</code>.
+                Connect to <a 
href="https://repository.apache.org/#stagingRepositories"; target="_blank" 
rel="noopener">https://repository.apache.org/#stagingRepositories</a> and look 
for the open staging repositories, you should have one. Select the staging 
repository and click on <code>release</code>.
               </li>
               <li>Update the website (in project `unomi-site`) to point to the 
new release on the download page by
                   first copying the previous archive release and replacing all 
the version numbers with the current release
@@ -251,12 +252,12 @@ git tag -d unomi-root-{{ 
site.data.unomi.next.stable.version }}</code></pre>
                   <pre class="alert alert-primary"><code>
                       latest:
                           stable:
-                            version: 2.3.0
-                          .development:
-                            version: 2.4.0-SNAPSHOT
+                            version: 3.0.0
+                          development:
+                            version: 3.1.0-SNAPSHOT
                         next:
                           stable:
-                            version: 2.4.0
+                            version: 3.1.0
                       ...
                 </code></pre>
                  Then modify the <code>index.html</code>, 
<code>download.html</code> to add the new files. For the documentation see the 
next step or git <a 
href="https://github.com/apache/unomi-site/blob/master/README.md";>README</a>.
@@ -274,7 +275,7 @@ git tag -d unomi-root-{{ 
site.data.unomi.next.stable.version }}</code></pre>
                     This generates the site in the <code>target/site</code> 
folder.
                 </li>
                 <li>
-                  Once the site build, deploy the web site changes using:
+                  Once the site builds, deploy the web site changes using:
                   <pre class="alert alert-primary"><code>
 mvn install scm-publish:publish-scm -Dusername=YOUR_APACHE_USERNAME 
-Dpassword=YOUR_APACHE_PASSWORD</code></pre>
                 </li>
@@ -300,9 +301,9 @@ LATEST_VERSION="3.0.0-SNAPSHOT"
 LATEST_DIR="latest"
 
 # Stable version (release branch)
-STABLE_BRANCH="unomi-2.7.x"
-STABLE_VERSION="2.7.0"
-STABLE_DIR="2_7_x"
+STABLE_BRANCH="unomi-3.0.x"
+STABLE_VERSION="3.0.0"
+STABLE_DIR="3_0_x"
                       </code></pre>
                   </li>
                   <li>
@@ -383,12 +384,12 @@ git push origin -f</code></pre>
               <li>Release recorded in reporter.apache.org.</li>
               <li>Release announced on social media.</li>
               <li>Completion declared on the dev@ mailing list.</li>
-                <li>Check that old release where removed from the dist 
server</li>
+                <li>Check that old releases were removed from the dist 
server</li>
             </ol>
 
             <h2 id="improve-the-process">Improve the process</h2>
 
-            <p>It is important that we improve the release processes over 
time. Once you've finished the release, please take a step back and look what 
areas of this process and be improved. Perhaps some part of the process can be 
simplified. Perhaps parts of this guide can be clarified.</p>
+            <p>It is important that we improve the release processes over 
time. Once you've finished the release, please take a step back and look at 
what areas of this process can be improved. Perhaps some part of the process 
can be simplified. Perhaps parts of this guide can be clarified.</p>
 
             <p>If we have specific ideas, please start a discussion on the 
dev@ mailing list and/or propose a pull request to update this guide. 
Thanks!</p>
 
@@ -491,10 +492,10 @@ designed to manage customers, leads and visitors' data 
and help personalize cust
 experiences.
 
 More details regarding Apache Unomi can be found here:
-http://unomi.apache.org/
+https://unomi.apache.org/
 
 The release artifacts can be downloaded here:
-https://dist.apache.org/repos/dist/release/incubator/unomi/{{ 
site.data.unomi.next.stable.version }}/
+https://dist.apache.org/repos/dist/release/unomi/{{ 
site.data.unomi.next.stable.version }}/
 
 All JIRAs completed for this release are tagged with 'FixVersion =
 {{ site.data.unomi.next.stable.version }}'; the JIRA release notes can be 
found here:
diff --git a/src/main/webapp/contribute/testing.html 
b/src/main/webapp/contribute/testing.html
index 9ada187..7345908 100644
--- a/src/main/webapp/contribute/testing.html
+++ b/src/main/webapp/contribute/testing.html
@@ -1,6 +1,7 @@
 ---
 title: Contribute | Testing
 description: "Learn how to write tests for Apache Unomi, which tests are 
appropriate where, and when tests are run."
+keywords: "Apache Unomi testing, unit tests, integration tests, Pax Exam, 
JUnit, Maven Surefire, CI/CD, GitHub Actions"
 layout: default
 ---
 
@@ -43,11 +44,11 @@ layout: default
 
             <h3 id="testing-scenarios">Testing Scenarios</h3>
 
-            <p>Ideally, all available tests should be run against a pull 
request (PR) before it's allowed to be committed to Unomi's <a target="_blank" 
href="https://github.com/apache/unomi";>Github</a> repo. This is not possible, 
however, due to a combination of time and resource constraints. Running all 
tests for each PR would take hours or even days using available resources, 
which would slow down development considerably.</p>
+            <p>Ideally, all available tests should be run against a pull 
request (PR) before it's allowed to be committed to Unomi's <a target="_blank" 
rel="noopener" href="https://github.com/apache/unomi";>Github</a> repo. This is 
not possible, however, due to a combination of time and resource constraints. 
Running all tests for each PR would take hours or even days using available 
resources, which would slow down development considerably.</p>
 
             <p>Thus tests are split into <em>pre-commit</em> and 
<em>post-commit</em> suites. Pre-commit is fast, while post-commit is 
comprehensive. As their names imply, pre-commit tests are run on each PR before 
it is committed, while post-commits run periodically against the master branch 
(i.e. on already committed PRs).</p>
 
-            <p>Unomi uses <a target="_blank" 
href="https://github.com/apache/unomi/actions/workflows/unomi-ci-build-tests.yml";>GitHub
 Actions</a> to run pre-commit and post-commit tests.</p>
+            <p>Unomi uses <a target="_blank" rel="noopener" 
href="https://github.com/apache/unomi/actions/workflows/unomi-ci-build-tests.yml";>GitHub
 Actions</a> to run pre-commit and post-commit tests.</p>
 
             <h4 id="pre-commit">Pre-commit</h4>
 
@@ -61,11 +62,11 @@ layout: default
 
             <h4 id="post-commit">Post-commit</h4>
 
-            <p>Running in post-commit removes the stringent time constraint, 
which gives us the ability to do more comprehensive testing. In post-commit the 
full integration test suite is executed against both supported search engines 
&mdash; <strong>Elasticsearch</strong> and <strong>OpenSearch</strong> &mdash; 
via the <code>-Pintegration-tests</code> Maven profile. The suite is defined in 
<a target="_blank" 
href="https://github.com/apache/unomi/blob/master/itests/src/test/java/org/apac 
[...]
+            <p>Running in post-commit removes the stringent time constraint, 
which gives us the ability to do more comprehensive testing. In post-commit the 
full integration test suite is executed against both supported search engines 
&mdash; <strong>Elasticsearch</strong> and <strong>OpenSearch</strong> &mdash; 
via the <code>-Pintegration-tests</code> Maven profile. The suite is defined in 
<a target="_blank" rel="noopener" 
href="https://github.com/apache/unomi/blob/master/itests/src/tes [...]
 
-            <p>Adding new integration tests is generally as easy as adding a 
<code>*IT.java</code> file to the <code>itests/</code> module and registering 
it in the <code>AllITs.java</code> suite class. New tests should extend <a 
target="_blank" 
href="https://github.com/apache/unomi/blob/master/itests/src/test/java/org/apache/unomi/itests/BaseIT.java";><code>BaseIT</code></a>,
 which provides access to all Unomi OSGi services, an HTTP client for REST API 
calls, and helper methods for waiti [...]
+            <p>Adding new integration tests is generally as easy as adding a 
<code>*IT.java</code> file to the <code>itests/</code> module and registering 
it in the <code>AllITs.java</code> suite class. New tests should extend <a 
target="_blank" rel="noopener" 
href="https://github.com/apache/unomi/blob/master/itests/src/test/java/org/apache/unomi/itests/BaseIT.java";><code>BaseIT</code></a>,
 which provides access to all Unomi OSGi services, an HTTP client for REST API 
calls, and helper me [...]
 
-            <p>Post-commit test results can be found in <a target="_blank" 
href="https://github.com/apache/unomi/actions/workflows/unomi-ci-build-tests.yml";>GitHub
 Actions</a>.</p>
+            <p>Post-commit test results can be found in <a target="_blank" 
rel="noopener" 
href="https://github.com/apache/unomi/actions/workflows/unomi-ci-build-tests.yml";>GitHub
 Actions</a>.</p>
 
             <h3 id="testing-types">Testing Types</h3>
 
@@ -100,18 +101,18 @@ layout: default
             <p>Unomi&rsquo;s integration tests use the following technology 
stack:</p>
 
             <ul>
-                <li><strong><a target="_blank" 
href="https://ops4j1.jira.com/wiki/spaces/PAXEXAM4/overview";>Pax 
Exam</a></strong> &mdash; An OSGi testing framework that provisions and manages 
the Apache Karaf container used during tests. It handles downloading the Unomi 
distribution, configuring features, and injecting OSGi services into test 
classes.</li>
-                <li><strong><a target="_blank" 
href="https://karaf.apache.org/";>Apache Karaf</a> Test Support</strong> &mdash; 
Provides the base class (<code>KarafTestSupport</code>) for container-based 
integration tests, enabling Karaf shell command execution and OSGi service 
lookups.</li>
-                <li><strong><a target="_blank" 
href="https://maven.apache.org/surefire/maven-failsafe-plugin/";>Maven Failsafe 
Plugin</a></strong> &mdash; Executes the integration tests during the 
<code>integration-test</code> phase and verifies results in the 
<code>verify</code> phase. Tests follow the <code>*IT.java</code> naming 
convention.</li>
+                <li><strong><a target="_blank" rel="noopener" 
href="https://ops4j1.jira.com/wiki/spaces/PAXEXAM4/overview";>Pax 
Exam</a></strong> &mdash; An OSGi testing framework that provisions and manages 
the Apache Karaf container used during tests. It handles downloading the Unomi 
distribution, configuring features, and injecting OSGi services into test 
classes.</li>
+                <li><strong><a target="_blank" rel="noopener" 
href="https://karaf.apache.org/";>Apache Karaf</a> Test Support</strong> &mdash; 
Provides the base class (<code>KarafTestSupport</code>) for container-based 
integration tests, enabling Karaf shell command execution and OSGi service 
lookups.</li>
+                <li><strong><a target="_blank" rel="noopener" 
href="https://maven.apache.org/surefire/maven-failsafe-plugin/";>Maven Failsafe 
Plugin</a></strong> &mdash; Executes the integration tests during the 
<code>integration-test</code> phase and verifies results in the 
<code>verify</code> phase. Tests follow the <code>*IT.java</code> naming 
convention.</li>
                 <li><strong>Embedded Elasticsearch / Docker 
OpenSearch</strong> &mdash; The Elasticsearch profile uses the 
<code>elasticsearch-maven-plugin</code> to start an embedded Elasticsearch 
instance, while the OpenSearch profile uses the 
<code>docker-maven-plugin</code> to spin up an OpenSearch container.</li>
-                <li><strong><a target="_blank" 
href="https://www.jacoco.org/";>JaCoCo</a></strong> &mdash; Optionally collects 
code coverage data during integration test runs.</li>
+                <li><strong><a target="_blank" rel="noopener" 
href="https://www.jacoco.org/";>JaCoCo</a></strong> &mdash; Optionally collects 
code coverage data during integration test runs.</li>
             </ul>
 
-            <p>All test classes extend <a target="_blank" 
href="https://github.com/apache/unomi/blob/master/itests/src/test/java/org/apache/unomi/itests/BaseIT.java";><code>BaseIT</code></a>,
 which provides access to injected Unomi services (ProfileService, 
RulesService, SegmentService, etc.), a pre-configured HTTP client for REST API 
testing, and utility methods for polling asynchronous operations.</p>
+            <p>All test classes extend <a target="_blank" rel="noopener" 
href="https://github.com/apache/unomi/blob/master/itests/src/test/java/org/apache/unomi/itests/BaseIT.java";><code>BaseIT</code></a>,
 which provides access to injected Unomi services (ProfileService, 
RulesService, SegmentService, etc.), a pre-configured HTTP client for REST API 
testing, and utility methods for polling asynchronous operations.</p>
 
             <h4 id="ci">Continuous Integration</h4>
 
-            <p>Unomi uses <strong>GitHub Actions</strong> for continuous 
integration. The <a target="_blank" 
href="https://github.com/apache/unomi/blob/master/.github/workflows/unomi-ci-build-tests.yml";><code>unomi-ci-build-tests.yml</code></a>
 workflow is triggered on every push to <code>master</code> and on pull 
requests. It runs in two stages:</p>
+            <p>Unomi uses <strong>GitHub Actions</strong> for continuous 
integration. The <a target="_blank" rel="noopener" 
href="https://github.com/apache/unomi/blob/master/.github/workflows/unomi-ci-build-tests.yml";><code>unomi-ci-build-tests.yml</code></a>
 workflow is triggered on every push to <code>master</code> and on pull 
requests. It runs in two stages:</p>
 
             <ol>
                 <li><strong>Unit tests</strong> &mdash; A full <code>mvn clean 
install</code> build with a 15-minute timeout. This must pass before 
integration tests begin.</li>
diff --git a/src/main/webapp/contribute/website.html 
b/src/main/webapp/contribute/website.html
index 3c1931b..30d74ad 100644
--- a/src/main/webapp/contribute/website.html
+++ b/src/main/webapp/contribute/website.html
@@ -1,6 +1,7 @@
 ---
 title: Website Guide
-description: "Guide for contributing to the Apache Unomi website"
+description: "Guide for contributing to the Apache Unomi website, including 
Jekyll setup, content editing, and publishing."
+keywords: "Apache Unomi website, contribute website, Jekyll, site development, 
documentation"
 layout: default
 ---
 
@@ -44,13 +45,13 @@ layout: default
 
             <p>Contributions to the website require the same steps as 
contributions to the main repository, so start with the instructions for <a 
href="index.html">Contributing Code</a>.</p>
 
-            <p>The Unomi website is in the <a target="_blank" 
href="https://github.com/apache/unomi-site";>Unomi Site GitHub mirror</a> 
repository in the <code>asf-site</code> branch (<em>not</em> 
<code>master</code>).</p>
+            <p>The Unomi website is in the <a target="_blank" rel="noopener" 
href="https://github.com/apache/unomi-site";>Unomi Site GitHub mirror</a> 
repository in the <code>asf-site</code> branch (<em>not</em> 
<code>master</code>).</p>
 
-            <p>Issues are tracked in the <a target="_blank" 
href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20UNOMI%20AND%20component%20%3D%20website";>website</a>
 component in JIRA.</p>
+            <p>Issues are tracked in the <a target="_blank" rel="noopener" 
href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20UNOMI%20AND%20component%20%3D%20website";>website</a>
 component in JIRA.</p>
 
             <h3 id="one-time-setup">One-time Setup</h3>
 
-            <p>The <a target="_blank" 
href="https://github.com/apache/unomi-site/blob/asf-site/README.md";>README 
file</a> in the website repository has more information on how to set up the 
required dependencies for your development environment.</p>
+            <p>The <a target="_blank" rel="noopener" 
href="https://github.com/apache/unomi-site/blob/asf-site/README.md";>README 
file</a> in the website repository has more information on how to set up the 
required dependencies for your development environment.</p>
 
             <p>The general guidelines for cloning a repository can be adjusted 
to use the <code>asf-site</code> branch of <code>unomi-site</code>:</p>
 
@@ -77,7 +78,7 @@ layout: default
 
             <p class="alert alert-primary"><code>$ git checkout -- 
content</code></p>
 
-            <p>When you are ready, submit a pull request using the <a 
target="_blank" href="https://github.com/apache/unomi-site";>Unomi Site GitHub 
mirror</a>, including the JIRA issue as usual.</p>
+            <p>When you are ready, submit a pull request using the <a 
target="_blank" rel="noopener" 
href="https://github.com/apache/unomi-site";>Unomi Site GitHub mirror</a>, 
including the JIRA issue as usual.</p>
 
             <p>During review, committers will patch in your PR, generate the 
static <code>content/</code>, and review the changes.</p>
 
diff --git a/src/main/webapp/llms-full.txt b/src/main/webapp/llms-full.txt
index 3fa5b6a..9d62e16 100644
--- a/src/main/webapp/llms-full.txt
+++ b/src/main/webapp/llms-full.txt
@@ -21,8 +21,8 @@
 ### Runtime Stack
 - **Language**: Java
 - **Runtime Container**: Apache Karaf (OSGi framework)
-- **Data Store**: ElasticSearch (currently 7.x)
-- **API Protocol**: REST over HTTP/HTTPS with JSON payloads
+- **Data Store**: Elasticsearch (9.x). OpenSearch support is in development 
(committed to main branch, expected in next release)
+- **API Protocols**: REST over HTTP/HTTPS with JSON payloads; GraphQL API for 
flexible queries
 - **Extension Model**: OSGi bundles, Groovy scripting, JSON descriptors
 
 ### Core Components
@@ -33,6 +33,7 @@
 5. **Scoring Service**: Calculates engagement/lead scores based on 
configurable scoring plans
 6. **Privacy Service**: Manages consent, anonymization, data export, and 
profile deletion
 7. **Plugin System**: OSGi-based plugins with JSON metadata for extending 
conditions, actions, and types
+8. **GraphQL API**: Flexible query interface for profiles, events, segments, 
and rules with field-level selection
 
 ### Data Flow
 1. External systems (web, mobile, CRM, IoT) send events to the REST API
@@ -53,6 +54,8 @@
 - `/cxs/definitions` - Type definitions
 - `/cxs/cluster` - Cluster management
 - `/cxs/privacy` - Privacy operations (consent, anonymize, delete)
+- `/cxs/context.json` - Context servlet (main entry point for web tracking, 
returns personalized content)
+- `/graphql` - GraphQL API endpoint for flexible queries
 
 ### Key Concepts
 - **Profile**: A persistent record of a visitor/customer with properties, 
segments, and scores
@@ -78,13 +81,12 @@ Apache Unomi is the **reference implementation** of the 
OASIS Customer Data Plat
 
 ## Connectors & Integrations
 
-### Built-in Connectors
-- **Salesforce CRM**: Bidirectional profile/contact sync
-- **MailChimp**: Mailing list and campaign integration
-- **Custom Groovy**: Write connector logic in Groovy scripts
+### Extending Unomi
+- **Groovy Actions (recommended)**: Hot-deployable scripts for custom logic — 
react to events, update profiles, call external APIs, integrate with CRMs and 
third-party services. No compilation or restart required. Source: 
https://github.com/apache/unomi/tree/master/extensions/groovy-actions
+- **Custom Java Plugins (OSGi)**: For advanced needs (custom conditions, 
persistence types, deep core integration). Full access to the Unomi API. Guide: 
https://github.com/apache/unomi/blob/master/manual/src/main/asciidoc/writing-plugins.adoc
 
 ### Extension Points
-- Custom actions (Java, Groovy)
+- Custom actions (Groovy recommended, Java for advanced cases)
 - Custom conditions (Java)
 - Custom property types
 - Custom event types
@@ -112,10 +114,9 @@ AI models and autonomous agents require clean, unified, 
real-time customer data.
 
 ### Products Using Apache Unomi
 - **Jahia jExperience** (https://www.jahia.com): Original contributor, uses 
Unomi as CDP engine in their DXP
+- **Ninetailed Personalization Platform** (https://ninetailed.io): Content 
personalization platform built on Unomi
 - **Dropsolid Experience Cloud** (https://dropsolid.com): Integrates Unomi for 
smart segmentation with Drupal CMS and Mautic
-- **Unomi UI**: Open source (Apache License v2) user interface for Unomi by 
Inoyu (coming soon)
 - **Inoyu SaaS**: Fully managed cloud-hosted Unomi service (coming soon)
-- **Inoyu UI**: Commercial-grade management interface for Unomi (coming soon)
 
 ### Commercial Support Providers
 - **Inoyu** (https://www.inoyu.dev): Founded by original Unomi developer, CDP 
implementations and extensions
@@ -125,24 +126,33 @@ AI models and autonomous agents require clean, unified, 
real-time customer data.
 
 - **Users Mailing List**: [email protected] (subscribe: 
[email protected])
 - **Dev Mailing List**: [email protected] (subscribe: 
[email protected])
-- **Slack**: #unomi on ASF Slack (free signup: 
https://s.apache.org/slack-invite)
+- **Slack**: #unomi on ASF Slack (https://the-asf.slack.com) — Apache 
committers sign in directly; others request guest access via 
[email protected] (see https://infra.apache.org/slack.html)
 - **Monthly Meetings**: Online, alternating times for global coverage
 - **JIRA**: https://issues.apache.org/jira/browse/UNOMI
 - **GitHub**: https://github.com/apache/unomi
 
+## Bill of Materials (BOM)
+
+Starting with Unomi 3.0, the project uses a two-layer BOM for dependency 
management:
+- **unomi-bom** (https://github.com/apache/unomi/blob/master/bom/pom.xml): 
Main BOM importing Karaf BOM and managing all third-party dependency versions 
(Jackson, CXF, Elasticsearch, Groovy, GraphQL, etc.)
+- **unomi-bom-artifacts** 
(https://github.com/apache/unomi/blob/master/bom/artifacts/pom.xml): Manages 
all Unomi module artifacts for consistent versioning in custom extensions
+
+Extension developers can import `unomi-bom` in their `pom.xml` to 
automatically align with tested dependency versions.
+
 ## Quick Start (Docker)
 
 ```yaml
 version: '3.8'
 services:
   elasticsearch:
-    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
+    image: docker.elastic.co/elasticsearch/elasticsearch:9.1.3
     environment:
       - discovery.type=single-node
+      - xpack.security.enabled=false
     ports:
       - 9200:9200
   unomi:
-    image: apache/unomi:2.7.0
+    image: apache/unomi:3.0.0
     environment:
       - UNOMI_ELASTICSEARCH_ADDRESSES=elasticsearch:9200
     ports:
@@ -154,10 +164,21 @@ services:
 
 Run with `docker-compose up`, verify at https://localhost:9443/cxs/cluster 
(credentials: karaf/karaf).
 
+## Frequently Asked Questions
+
+- **What is Apache Unomi?** An open source Customer Data Platform (CDP) 
managed by the Apache Software Foundation. It collects customer data from any 
source, builds unified profiles, enables real-time segmentation and 
personalization, and includes built-in GDPR compliance.
+- **How does Unomi differ from proprietary CDPs?** It is 100% open source 
(Apache License 2.0), self-hosted, vendor-neutral, and extensible through OSGi 
plugins. No vendor lock-in, no per-profile pricing.
+- **What storage backends are supported?** Elasticsearch (9.x) in the current 
release. OpenSearch support has been committed to the main branch and is 
expected in the next release.
+- **Does Unomi have a GraphQL API?** Yes, Unomi 3.0 includes a GraphQL API 
alongside the REST API for flexible querying of profiles, events, segments, and 
rules.
+- **Can I use Unomi with AI systems?** Yes. Feed unified customer profiles, 
segments, and event streams to AI agents, LLMs, chatbots, recommendation 
engines, and ML models via REST or GraphQL API. Built-in consent management 
ensures AI only processes consented data.
+- **What is the OASIS CXS standard?** A Customer Data Platform specification 
from OASIS. Apache Unomi is its reference implementation.
+- **How do I extend Unomi?** Through OSGi bundles (Java), Groovy scripts, JSON 
descriptors for custom conditions/actions, and REST API extensions.
+- **What is the Bill of Materials (BOM)?** Starting with Unomi 3.0, the 
project provides a Maven BOM (`unomi-bom`) to centralize dependency versions 
for extension developers.
+
 ## History
 
 - **2014**: Project started at Jahia
 - **2015**: Entered Apache Incubator
 - **2019**: Graduated to Apache Top-Level Project
 - **2022**: Version 2.0.0 released (major architecture update)
-- **2025**: Version 3.0.0 released (current stable, major upgrade to Karaf and 
ElasticSearch client)
+- **2025**: Version 3.0.0 released (current stable, major upgrade to Karaf 
4.4, new Elasticsearch Java client 9.x, GraphQL API, Bill of Materials for 
dependency management). OpenSearch support committed to main branch (expected 
in next release)
diff --git a/src/main/webapp/llms.txt b/src/main/webapp/llms.txt
index 831e46a..c0af81f 100644
--- a/src/main/webapp/llms.txt
+++ b/src/main/webapp/llms.txt
@@ -9,9 +9,9 @@
 - **License**: Apache License 2.0
 - **Language**: Java
 - **Runtime**: Apache Karaf (OSGi)
-- **Storage**: ElasticSearch
-- **API**: REST/JSON
-- **Current Stable Version**: 2.7.0
+- **Storage**: Elasticsearch (9.x); OpenSearch support coming in next release
+- **API**: REST/JSON & GraphQL
+- **Current Stable Version**: 3.0.0
 - **Website**: https://unomi.apache.org
 - **Source Code**: https://github.com/apache/unomi
 - **Issue Tracker**: https://issues.apache.org/jira/browse/UNOMI
@@ -26,7 +26,9 @@
 - **Rules Engine**: Built-in rule engine that triggers actions when conditions 
are met on events or profiles
 - **Privacy / GDPR**: Consent management, data anonymization, profile 
deletion, data portability
 - **Plugin Architecture**: Extend functionality through OSGi plugins, Groovy 
actions, and JSON descriptors
-- **Connectors**: Salesforce CRM, MailChimp, and custom connectors via plugin 
API
+- **Connectors**: MailChimp and custom connectors via plugin API (Salesforce 
connector was deprecated)
+- **GraphQL API**: Flexible query API for profiles, events, segments, and rules
+- **Multi-backend**: OpenSearch support is in development (committed to main 
branch, coming in next release)
 
 ## Use Cases
 
@@ -53,7 +55,7 @@ The fastest way to try Apache Unomi is with Docker:
 docker-compose up
 ```
 
-Using the provided docker-compose.yml with ElasticSearch 7.10.2 and Apache 
Unomi.
+Using the provided docker-compose.yml with Elasticsearch and Apache Unomi 
3.0.0.
 
 Full getting started guide: https://unomi.apache.org/get-started.html
 Docker quick start: https://unomi.apache.org/get-started.html#quickstart
@@ -69,7 +71,7 @@ Docker quick start: 
https://unomi.apache.org/get-started.html#quickstart
 
 - **Users mailing list**: [email protected] (subscribe: 
[email protected])
 - **Dev mailing list**: [email protected] (subscribe: 
[email protected])
-- **Slack**: #unomi channel on ASF Slack (https://the-asf.slack.com) — anyone 
can create a free account at https://s.apache.org/slack-invite
+- **Slack**: #unomi channel on ASF Slack (https://the-asf.slack.com) — Apache 
committers sign in with @apache.org email; others can request a guest 
invitation via [email protected] (see https://infra.apache.org/slack.html)
 - **Monthly meetings**: The community meets monthly online
 - **JIRA**: https://issues.apache.org/jira/browse/UNOMI
 
@@ -77,10 +79,9 @@ Docker quick start: 
https://unomi.apache.org/get-started.html#quickstart
 
 ### Products Built on Apache Unomi
 - **Jahia jExperience**: CDP and Digital Experience Platform (initial 
contributor of Unomi) — https://www.jahia.com
+- **Ninetailed Personalization Platform**: Content personalization platform 
using Unomi — https://ninetailed.io
 - **Dropsolid Experience Cloud**: DXP with Drupal CMS, Mautic, and Unomi CDP — 
https://dropsolid.com
-- **Unomi UI**: Open source (Apache License v2) user interface for Apache 
Unomi by Inoyu (coming soon)
 - **Inoyu SaaS**: Fully managed cloud-hosted Unomi service (coming soon)
-- **Inoyu UI**: Commercial-grade management interface for Unomi (coming soon)
 
 ### Commercial Support
 - **Inoyu**: CDP implementations, commercial extensions and support — 
https://www.inoyu.dev
@@ -88,4 +89,14 @@ Docker quick start: 
https://unomi.apache.org/get-started.html#quickstart
 
 ## Architecture
 
-Apache Unomi is a REST server. Data sources (web, mobile, CRM, IoT) send 
events via the REST API. The processing engine stores data in ElasticSearch, 
evaluates segments and rules in real-time, and outputs personalization 
decisions, scores, and data exports. All communication is JSON over HTTP/HTTPS.
+Apache Unomi is a REST server. Data sources (web, mobile, CRM, IoT) send 
events via the REST API. The processing engine stores data in Elasticsearch, 
evaluates segments and rules in real-time, and outputs personalization 
decisions, scores, and data exports. All communication is JSON over HTTP/HTTPS. 
A GraphQL API is also available for flexible querying of profiles, events, 
segments, and rules.
+
+## Frequently Asked Questions
+
+- **What is Apache Unomi?** An open source Customer Data Platform (CDP) 
managed by the Apache Software Foundation that unifies customer data, enables 
real-time segmentation and personalization, and provides built-in GDPR 
compliance.
+- **How do I get started?** Use Docker Compose for the fastest setup: 
https://unomi.apache.org/get-started.html#quickstart
+- **What storage does it use?** Elasticsearch (9.x). OpenSearch support is in 
development and will be available in the next release.
+- **Does it have a GraphQL API?** Yes, Unomi 3.0 includes a GraphQL API 
alongside the REST API.
+- **Is it GDPR compliant?** Yes, with built-in consent management, data 
anonymization, profile deletion, and data portability.
+- **Can I use it with AI?** Yes — feed unified customer profiles and event 
data to AI agents, LLMs, recommendation engines, and predictive models via the 
REST or GraphQL API.
+- **What is the OASIS CXS standard?** A Customer Data Platform specification 
from OASIS. Apache Unomi is its reference implementation.
diff --git a/src/main/webapp/privacy-policy.html 
b/src/main/webapp/privacy-policy.html
index 74caf8c..a82e1f4 100644
--- a/src/main/webapp/privacy-policy.html
+++ b/src/main/webapp/privacy-policy.html
@@ -1,6 +1,7 @@
 ---
 title: Privacy Policy
 description: "Apache Unomi website privacy policy. Information about data 
collection, analytics, and cookie usage."
+keywords: "Apache Unomi privacy policy, website privacy, data collection, 
cookies, Matomo analytics"
 layout: default
 ---
 
diff --git a/src/main/webapp/robots.txt b/src/main/webapp/robots.txt
index c54ca2f..32c6357 100644
--- a/src/main/webapp/robots.txt
+++ b/src/main/webapp/robots.txt
@@ -1,8 +1,6 @@
 # Apache Unomi Website - https://unomi.apache.org
 User-agent: *
 Allow: /
-Disallow: /assets/js/
-Disallow: /assets/css/
 
 # Sitemap
 Sitemap: https://unomi.apache.org/sitemap.xml
diff --git a/src/main/webapp/sitemap.xml b/src/main/webapp/sitemap.xml
index 33ba5cd..82d3c74 100644
--- a/src/main/webapp/sitemap.xml
+++ b/src/main/webapp/sitemap.xml
@@ -1,72 +1,185 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9";>
+    <!-- Homepage -->
     <url>
         <loc>https://unomi.apache.org/</loc>
+        <lastmod>2026-02-09</lastmod>
         <changefreq>weekly</changefreq>
         <priority>1.0</priority>
     </url>
+
+    <!-- Primary navigation pages -->
     <url>
         <loc>https://unomi.apache.org/get-started.html</loc>
+        <lastmod>2026-02-09</lastmod>
         <changefreq>monthly</changefreq>
         <priority>0.9</priority>
     </url>
     <url>
         <loc>https://unomi.apache.org/documentation.html</loc>
+        <lastmod>2026-02-09</lastmod>
         <changefreq>monthly</changefreq>
         <priority>0.9</priority>
     </url>
     <url>
         <loc>https://unomi.apache.org/download.html</loc>
+        <lastmod>2026-02-09</lastmod>
         <changefreq>monthly</changefreq>
         <priority>0.9</priority>
     </url>
     <url>
-        <loc>https://unomi.apache.org/community/</loc>
+        <loc>https://unomi.apache.org/use-cases.html</loc>
+        <lastmod>2026-02-09</lastmod>
         <changefreq>monthly</changefreq>
         <priority>0.8</priority>
     </url>
     <url>
         <loc>https://unomi.apache.org/integrations.html</loc>
+        <lastmod>2026-02-09</lastmod>
         <changefreq>monthly</changefreq>
         <priority>0.8</priority>
     </url>
     <url>
-        <loc>https://unomi.apache.org/use-cases.html</loc>
-        <changefreq>monthly</changefreq>
+        <loc>https://unomi.apache.org/tutorial.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
         <priority>0.7</priority>
     </url>
     <url>
         <loc>https://unomi.apache.org/resources.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>monthly</changefreq>
+        <priority>0.7</priority>
+    </url>
+    <url>
+        <loc>https://unomi.apache.org/stories.html</loc>
+        <lastmod>2026-02-09</lastmod>
         <changefreq>monthly</changefreq>
         <priority>0.6</priority>
     </url>
+
+    <!-- Community section -->
     <url>
-        <loc>https://unomi.apache.org/tutorial.html</loc>
-        <changefreq>yearly</changefreq>
-        <priority>0.5</priority>
+        <loc>https://unomi.apache.org/community/</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>monthly</changefreq>
+        <priority>0.8</priority>
     </url>
     <url>
-        <loc>https://unomi.apache.org/stories.html</loc>
+        <loc>https://unomi.apache.org/community/team.html</loc>
+        <lastmod>2026-02-09</lastmod>
         <changefreq>monthly</changefreq>
-        <priority>0.5</priority>
+        <priority>0.6</priority>
     </url>
     <url>
-        <loc>https://unomi.apache.org/contribute/</loc>
+        <loc>https://unomi.apache.org/community/events/</loc>
+        <lastmod>2026-02-09</lastmod>
         <changefreq>monthly</changefreq>
         <priority>0.6</priority>
     </url>
     <url>
-        <loc>https://unomi.apache.org/community/team.html</loc>
+        <loc>https://unomi.apache.org/community/events/apachecon/</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.4</priority>
+    </url>
+    <url>
+        
<loc>https://unomi.apache.org/community/events/meetups/2021-11-18.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.3</priority>
+    </url>
+    <url>
+        <loc>https://unomi.apache.org/community/policies.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.4</priority>
+    </url>
+    <url>
+        
<loc>https://unomi.apache.org/community/maturity-model-report.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.3</priority>
+    </url>
+
+    <!-- Contribute section -->
+    <url>
+        <loc>https://unomi.apache.org/contribute/</loc>
+        <lastmod>2026-02-09</lastmod>
         <changefreq>monthly</changefreq>
+        <priority>0.7</priority>
+    </url>
+    <url>
+        <loc>https://unomi.apache.org/contribute/become-a-committer.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
         <priority>0.5</priority>
     </url>
     <url>
-        <loc>https://unomi.apache.org/community/events/</loc>
-        <changefreq>monthly</changefreq>
+        <loc>https://unomi.apache.org/contribute/committer-guide.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.5</priority>
+    </url>
+    <url>
+        <loc>https://unomi.apache.org/contribute/testing.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.5</priority>
+    </url>
+    <url>
+        <loc>https://unomi.apache.org/contribute/dependencies-guide.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.5</priority>
+    </url>
+    <url>
+        <loc>https://unomi.apache.org/contribute/release-guide.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
         <priority>0.4</priority>
     </url>
+    <url>
+        
<loc>https://unomi.apache.org/contribute/manual-release-guide.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.4</priority>
+    </url>
+    <url>
+        <loc>https://unomi.apache.org/contribute/website.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.4</priority>
+    </url>
+    <url>
+        <loc>https://unomi.apache.org/contribute/post-commit-guides.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.3</priority>
+    </url>
+    <url>
+        
<loc>https://unomi.apache.org/contribute/post-commit-policies-details.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.3</priority>
+    </url>
+    <url>
+        
<loc>https://unomi.apache.org/contribute/post-commit-test-policies.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.3</priority>
+    </url>
+    <url>
+        
<loc>https://unomi.apache.org/contribute/pre-commit-test-policies.html</loc>
+        <lastmod>2026-02-09</lastmod>
+        <changefreq>yearly</changefreq>
+        <priority>0.3</priority>
+    </url>
+
+    <!-- Other pages -->
     <url>
         <loc>https://unomi.apache.org/privacy-policy.html</loc>
+        <lastmod>2026-02-09</lastmod>
         <changefreq>yearly</changefreq>
         <priority>0.2</priority>
     </url>


Reply via email to