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 dc7d22b7f9759e1949c72468c724cd8134645689 Author: Serge Huber <[email protected]> AuthorDate: Sat Feb 14 17:29:38 2026 +0100 Content pages: AI positioning, ES 9.1.3, structured data, inline style cleanup - Homepage: fix traveling data dots animation, AI era section, OpenSearch wording - Use cases: reorder AI use case first, center graphs, add FAQPage schema - Tutorial & get-started: update to Elasticsearch 9.1.3 with xpack.security - Documentation: add CollectionPage schema, fix heading hierarchy, absolute links - Resources: add CollectionPage schema, new video entries, local thumbnails - Download: fix broken link to quick start guide - All pages: replace inline styles with CSS classes, add SEO keywords - Correct "ElasticSearch" trademark spelling across all pages Co-authored-by: Cursor <[email protected]> --- src/main/webapp/documentation.html | 66 ++++++++++++++++++++++------------ src/main/webapp/download.html | 6 ++-- src/main/webapp/get-started.html | 11 +++--- src/main/webapp/index.html | 61 +++++++++++++++---------------- src/main/webapp/resources.html | 74 +++++++++++++++++++++++++------------- src/main/webapp/tutorial.html | 21 +++++++---- src/main/webapp/use-cases.html | 45 ++++++++++++++++++++++- 7 files changed, 193 insertions(+), 91 deletions(-) diff --git a/src/main/webapp/documentation.html b/src/main/webapp/documentation.html index 83c09a7..444144e 100644 --- a/src/main/webapp/documentation.html +++ b/src/main/webapp/documentation.html @@ -1,7 +1,28 @@ --- title: Documentation description: "Apache Unomi documentation hub. Find the latest manual, REST API reference, Javadoc, tutorials, use cases, migration guides, and security advisories." +keywords: "Apache Unomi documentation, user manual, REST API, Javadoc, developer guide, configuration" layout: default +structured_data: > + <script type="application/ld+json"> + { + "@context": "https://schema.org", + "@type": "CollectionPage", + "name": "Apache Unomi Documentation", + "description": "Comprehensive documentation for Apache Unomi: user manual, REST API reference, Javadoc, tutorials, migration guides, and security advisories.", + "url": "https://unomi.apache.org/documentation.html", + "mainEntity": { + "@type": "ItemList", + "name": "Apache Unomi Documentation Resources", + "itemListElement": [ + { "@type": "ListItem", "position": 1, "name": "Latest Manual", "url": "https://unomi.apache.org/manual/latest/index.html" }, + { "@type": "ListItem", "position": 2, "name": "REST API Reference", "url": "https://unomi.apache.org/rest-api-doc/index.html" }, + { "@type": "ListItem", "position": 3, "name": "Java API (Javadoc)", "url": "https://unomi.apache.org/unomi-api/apidocs/index.html" }, + { "@type": "ListItem", "position": 4, "name": "Tutorials", "url": "https://unomi.apache.org/tutorial.html" } + ] + } + } + </script> --- <!-- Page Header --> @@ -16,6 +37,7 @@ layout: default <!-- Quick Links --> <section class="section"> <div class="container"> + <h2 class="visually-hidden">Quick Links</h2> <div class="row g-4"> <div class="col-md-6 col-lg-3"> <a href="/get-started.html" class="feature-card d-block text-decoration-none h-100"> @@ -25,21 +47,21 @@ layout: default </a> </div> <div class="col-md-6 col-lg-3"> - <a href="/manual/3_0_x/index.html" class="feature-card d-block text-decoration-none h-100"> + <a href="https://unomi.apache.org/manual/3_0_x/index.html" class="feature-card d-block text-decoration-none h-100"> <div class="feature-icon"><i class="bi bi-book"></i></div> <h3 class="h6 fw-semibold text-dark">Stable Manual <span class="text-muted fw-normal">3.0.x</span></h3> <p class="small text-muted mb-0">The comprehensive guide for the current stable release.</p> </a> </div> <div class="col-md-6 col-lg-3"> - <a href="/rest-api-doc/index.html" class="feature-card d-block text-decoration-none h-100"> + <a href="https://unomi.apache.org/rest-api-doc/index.html" class="feature-card d-block text-decoration-none h-100"> <div class="feature-icon"><i class="bi bi-braces"></i></div> <h3 class="h6 fw-semibold text-dark">REST API</h3> <p class="small text-muted mb-0">Complete REST API reference for profiles, events, segments, and more.</p> </a> </div> <div class="col-md-6 col-lg-3"> - <a href="/unomi-api/apidocs/index.html" class="feature-card d-block text-decoration-none h-100" target="_blank" rel="noopener"> + <a href="https://unomi.apache.org/unomi-api/apidocs/index.html" class="feature-card d-block text-decoration-none h-100" target="_blank" rel="noopener"> <div class="feature-icon"><i class="bi bi-code-square"></i></div> <h3 class="h6 fw-semibold text-dark">Javadoc</h3> <p class="small text-muted mb-0">Java API documentation for plugin and extension developers.</p> @@ -65,8 +87,8 @@ layout: default <div class="feature-card h-100"> <div class="feature-icon icon-success"><i class="bi bi-box-seam"></i></div> <h3 class="h6 fw-semibold">Installation & Configuration</h3> - <p class="small text-muted mb-2">Docker setup, manual installation, ElasticSearch configuration, and production deployment.</p> - <a href="/manual/latest/index.html#_quick_start" class="small fw-semibold">Read more <i class="bi bi-arrow-right"></i></a> + <p class="small text-muted mb-2">Docker setup, manual installation, Elasticsearch configuration, and production deployment.</p> + <a href="https://unomi.apache.org/manual/latest/index.html#_quick_start" class="small fw-semibold">Installation guide <i class="bi bi-arrow-right"></i></a> </div> </div> <div class="col-md-6 col-lg-4"> @@ -74,7 +96,7 @@ layout: default <div class="feature-icon icon-info"><i class="bi bi-braces"></i></div> <h3 class="h6 fw-semibold">REST API & Integration</h3> <p class="small text-muted mb-2">Send events, query profiles, manage segments, and integrate with external systems.</p> - <a href="/rest-api-doc/index.html" class="small fw-semibold">REST API docs <i class="bi bi-arrow-right"></i></a> + <a href="https://unomi.apache.org/rest-api-doc/index.html" class="small fw-semibold">REST API docs <i class="bi bi-arrow-right"></i></a> </div> </div> <div class="col-md-6 col-lg-4"> @@ -82,7 +104,7 @@ layout: default <div class="feature-icon icon-amber"><i class="bi bi-shield-lock"></i></div> <h3 class="h6 fw-semibold">Privacy & GDPR</h3> <p class="small text-muted mb-2">Consent management, data portability, anonymization, and profile deletion.</p> - <a href="/manual/latest/index.html" class="small fw-semibold">Read more <i class="bi bi-arrow-right"></i></a> + <a href="https://unomi.apache.org/manual/latest/index.html" class="small fw-semibold">Privacy manual <i class="bi bi-arrow-right"></i></a> </div> </div> <div class="col-md-6 col-lg-4"> @@ -90,7 +112,7 @@ layout: default <div class="feature-icon icon-rose"><i class="bi bi-puzzle"></i></div> <h3 class="h6 fw-semibold">Extending Unomi</h3> <p class="small text-muted mb-2">Build plugins, custom actions, rules, conditions, and Groovy connectors.</p> - <a href="/manual/latest/index.html" class="small fw-semibold">Plugin guide <i class="bi bi-arrow-right"></i></a> + <a href="https://unomi.apache.org/manual/latest/index.html" class="small fw-semibold">Plugin guide <i class="bi bi-arrow-right"></i></a> </div> </div> <div class="col-md-6 col-lg-4"> @@ -130,12 +152,12 @@ layout: default <div class="col-md-5"> <div class="version-card featured"> <div class="d-flex align-items-center mb-2"> - <span class="badge badge-success me-2"><i class="bi bi-circle-fill me-1" style="font-size:.45em"></i> Stable</span> + <span class="badge badge-success me-2"><i class="bi bi-circle-fill me-1 badge-dot-sm"></i> Stable</span> <span class="fw-semibold">Recommended</span> </div> <h3 class="h5 fw-bold mb-1">Unomi 3.0.x</h3> <div class="d-flex flex-wrap gap-2 mt-3"> - <a href="/manual/3_0_x/index.html" class="btn btn-primary btn-sm">Read Online</a> + <a href="https://unomi.apache.org/manual/3_0_x/index.html" class="btn btn-primary btn-sm">Read Online</a> <a href="https://dist.apache.org/repos/dist/release/unomi/3.0.0/unomi-manual-3_0_x.zip" target="_blank" rel="noopener" class="btn btn-outline-primary btn-sm">HTML (zip)</a> <a href="https://dist.apache.org/repos/dist/release/unomi/3.0.0/unomi-manual-3_0_x.pdf" target="_blank" rel="noopener" class="btn btn-outline-primary btn-sm">PDF</a> </div> @@ -144,11 +166,11 @@ layout: default <div class="col-md-5"> <div class="version-card"> <div class="d-flex align-items-center mb-2"> - <span class="badge badge-warning me-2"><i class="bi bi-circle-fill me-1" style="font-size:.45em"></i> Development</span> + <span class="badge badge-warning me-2"><i class="bi bi-circle-fill me-1 badge-dot-sm"></i> Development</span> </div> <h3 class="h5 fw-bold mb-1">Unomi {{ site.data.unomi.latest.development.version }}</h3> <p class="small text-muted mb-2">In development — may contain unreleased features.</p> - <a href="/manual/latest/index.html" class="btn btn-outline-primary btn-sm">Read Online</a> + <a href="https://unomi.apache.org/manual/latest/index.html" class="btn btn-outline-primary btn-sm">Read Online</a> </div> </div> </div> @@ -157,7 +179,7 @@ layout: default <div class="row justify-content-center"> <div class="col-lg-10"> <details class="mt-3"> - <summary class="fw-semibold text-primary" style="cursor:pointer"> + <summary class="fw-semibold text-primary cursor-pointer"> <i class="bi bi-archive me-1"></i> Archived Versions (2.7.x – 1.1.x) </summary> <div class="table-responsive mt-3"> @@ -173,7 +195,7 @@ layout: default <tbody> <tr> <td class="fw-semibold">2.7.x</td> - <td><a href="/manual/2_7_x/index.html">Online</a></td> + <td><a href="https://unomi.apache.org/manual/2_7_x/index.html">Online</a></td> <td><a href="https://dist.apache.org/repos/dist/release/unomi/2.7.0/unomi-manual-2_7_x.zip" target="_blank" rel="noopener">Download</a></td> <td><a href="https://dist.apache.org/repos/dist/release/unomi/2.7.0/unomi-manual-2_7_x.pdf" target="_blank" rel="noopener">Download</a></td> </tr> @@ -310,7 +332,7 @@ layout: default </table> </div> <p class="small text-muted text-center mt-2"> - <a href="/rest-api-doc/index.html">View full REST API documentation <i class="bi bi-arrow-right"></i></a> + <a href="https://unomi.apache.org/rest-api-doc/index.html">View full REST API documentation <i class="bi bi-arrow-right"></i></a> </p> </div> </div> @@ -319,31 +341,31 @@ layout: default <hr class="section-divider"> -<!-- ElasticSearch Migration & Security --> +<!-- Elasticsearch Migration & Security --> <section class="section section-alt"> <div class="container"> <div class="row g-5"> <div class="col-lg-6"> - <h2 class="h4 mb-3"><i class="bi bi-database-gear me-2 text-primary"></i>ElasticSearch Migration</h2> - <p class="small text-muted">When migrating between ElasticSearch versions used by Unomi:</p> + <h2 class="h4 mb-3"><i class="bi bi-database-gear me-2 text-primary"></i>Elasticsearch Migration</h2> + <p class="small text-muted">When migrating between Elasticsearch versions used by Unomi:</p> <ul class="small text-muted"> <li class="mb-2"><strong>Standalone:</strong> Copy the data directory and custom <code>elasticsearch.yml</code> settings to the new version.</li> - <li class="mb-2"><strong>Cluster:</strong> Use ElasticSearch <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-upgrade.html" target="_blank" rel="noopener">Snapshot and Restore</a> functionality.</li> + <li class="mb-2"><strong>Cluster:</strong> Use Elasticsearch <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-upgrade.html" target="_blank" rel="noopener">Snapshot and Restore</a> functionality.</li> </ul> </div> <div class="col-lg-6"> <h2 class="h4 mb-3"><i class="bi bi-shield-check me-2 text-primary"></i>Security Advisories</h2> <ul class="list-unstyled small"> <li class="d-flex align-items-center mb-2"> - <span class="badge bg-danger me-2" style="font-size:.65rem">CVE</span> + <span class="badge bg-danger badge-cve me-2">CVE</span> <a href="/security/cve-2021-31164.txt">CVE-2021-31164</a><span class="text-muted ms-2">— CRLF Log injection</span> </li> <li class="d-flex align-items-center mb-2"> - <span class="badge bg-danger me-2" style="font-size:.65rem">CVE</span> + <span class="badge bg-danger badge-cve me-2">CVE</span> <a href="/security/cve-2020-13942.txt">CVE-2020-13942</a><span class="text-muted ms-2">— Remote Code Execution</span> </li> <li class="d-flex align-items-center mb-2"> - <span class="badge bg-danger me-2" style="font-size:.65rem">CVE</span> + <span class="badge bg-danger badge-cve me-2">CVE</span> <a href="/security/cve-2020-11975.txt">CVE-2020-11975</a><span class="text-muted ms-2">— Remote Code Execution</span> </li> </ul> diff --git a/src/main/webapp/download.html b/src/main/webapp/download.html index d5c381d..309dd0d 100644 --- a/src/main/webapp/download.html +++ b/src/main/webapp/download.html @@ -34,7 +34,7 @@ structured_data: > <div class="col-lg-8"> <div class="version-card featured p-4"> <div class="d-flex align-items-center mb-3"> - <span class="badge badge-success me-2"><i class="bi bi-circle-fill me-1" style="font-size:.45em"></i> Latest Stable</span> + <span class="badge badge-success me-2"><i class="bi bi-circle-fill me-1 badge-dot-sm"></i> Latest Stable</span> <span class="fw-semibold">Recommended</span> </div> <h2 class="h3 fw-bold mb-1">Apache Unomi {{ site.data.unomi.latest.stable.version }}</h2> @@ -83,7 +83,7 @@ structured_data: > <div class="col-lg-5"> <div class="feature-icon mb-3"><i class="bi bi-rocket-takeoff"></i></div> <h2 class="h5 fw-semibold">Installation</h2> - <p class="small text-muted">Get up and running quickly with our <a href="/get-started.html#quickstart">Docker Quick Start</a> or follow the <a href="/manual/latest/index.html#_quick_start" target="_blank" rel="noopener">manual installation guide</a>.</p> + <p class="small text-muted">Get up and running quickly with our <a href="/get-started.html#quickstart">Docker Quick Start</a> or follow the <a href="https://unomi.apache.org/manual/latest/index.html#_quick_start" target="_blank" rel="noopener">manual installation guide</a>.</p> </div> <div class="col-lg-5"> <div class="feature-icon mb-3"><i class="bi bi-shield-check"></i></div> @@ -128,7 +128,7 @@ gpg --verify unomi-{{ site.data.unomi.latest.stable.version }}-bin.tar.gz.asc \ </table> </div> <details class="mt-3"> - <summary class="fw-semibold text-primary small" style="cursor:pointer"> + <summary class="fw-semibold text-primary small cursor-pointer"> <i class="bi bi-archive me-1"></i> Older releases (1.x) </summary> <div class="table-responsive mt-3"> diff --git a/src/main/webapp/get-started.html b/src/main/webapp/get-started.html index b788a78..9716559 100644 --- a/src/main/webapp/get-started.html +++ b/src/main/webapp/get-started.html @@ -1,14 +1,16 @@ --- title: Getting Started description: "Get started with Apache Unomi in minutes. Learn what Unomi does, run it with Docker, and start building with the REST API." +keywords: "Apache Unomi quickstart, getting started, Docker setup, installation guide, CDP setup, first steps" layout: default +mermaid: true structured_data: > <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "HowTo", "name": "How to Get Started with Apache Unomi using Docker", - "description": "Run Apache Unomi Customer Data Platform in minutes using Docker Compose with ElasticSearch.", + "description": "Run Apache Unomi Customer Data Platform in minutes using Docker Compose with Elasticsearch.", "totalTime": "PT5M", "tool": [ { "@type": "HowToTool", "name": "Docker" }, @@ -19,7 +21,7 @@ structured_data: > "@type": "HowToStep", "position": 1, "name": "Create a docker-compose.yml file", - "text": "Create a docker-compose.yml file with ElasticSearch 7.10.2 and Apache Unomi services configured." + "text": "Create a docker-compose.yml file with Elasticsearch 9.1.3 and Apache Unomi services configured." }, { "@type": "HowToStep", @@ -133,9 +135,10 @@ graph TD <pre><code>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: @@ -178,7 +181,7 @@ services: <div class="row justify-content-center mt-2"> <div class="col-lg-9"> - <div class="p-3 rounded-3" style="background:var(--unomi-primary-light)"> + <div class="p-3 rounded-3 bg-primary-light"> <p class="small mb-1"><strong><i class="bi bi-info-circle me-1"></i>Production note:</strong> This configuration is for development only. See the <a href="https://unomi.apache.org/manual/latest/index.html#_securing_a_production_environment">production security guide</a> before deploying.</p> <p class="small mb-0"><strong>Prefer manual install?</strong> Follow the <a href="https://unomi.apache.org/manual/latest/index.html#_quick_start">manual quick start guide</a> for Java-based installation.</p> </div> diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 01cd784..482cc64 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -1,8 +1,9 @@ --- title: Open Source Customer Data Platform -description: "Apache Unomi is an open source Customer Data Platform (CDP) that unifies data from web, mobile, CRM, support systems, IoT, and more. The privacy-first data foundation for AI agents, personalization engines, and real-time customer intelligence." +description: "Apache Unomi is an open source CDP that unifies customer data from web, mobile, CRM, and IoT. Privacy-first for AI, personalization, and real-time." keywords: "Apache Unomi, Customer Data Platform, CDP, open source CDP, personalization engine, GDPR compliant CDP, customer profiles, segmentation, Java CDP, privacy platform, first-party data, OASIS CXS, AI customer data, CDP for AI, AI agents customer context" layout: default +mermaid: true structured_data: > <script type="application/ld+json"> { @@ -38,7 +39,7 @@ structured_data: > "name": "What technologies does Apache Unomi use?", "acceptedAnswer": { "@type": "Answer", - "text": "Apache Unomi is built in Java, runs on Apache Karaf (OSGi runtime), uses ElasticSearch for data storage, and communicates via a REST/JSON API. It has a plugin architecture supporting OSGi bundles and Groovy actions." + "text": "Apache Unomi is built in Java, runs on Apache Karaf (OSGi runtime), uses Elasticsearch for data storage, and communicates via a REST/JSON API. It has a plugin architecture supporting OSGi bundles and Groovy actions." } }, { @@ -78,7 +79,7 @@ structured_data: > </div> <div class="col-lg-6 text-center"> <!-- Inline SVG Illustration: Data flowing into a unified profile --> - <svg viewBox="0 0 520 440" fill="none" xmlns="http://www.w3.org/2000/svg" class="illustration w-100" style="max-width:560px" aria-label="Customer data platform illustration showing data flowing into unified profiles"> + <svg viewBox="0 0 520 440" fill="none" xmlns="http://www.w3.org/2000/svg" class="illustration w-100 hero-illustration" role="img" aria-label="Customer data platform illustration showing data flowing into unified profiles"> <defs> <style> /* Pulse animation for background circles */ @@ -101,7 +102,7 @@ structured_data: > .src-br { animation: svg-float-1 3.4s ease-in-out infinite 1.2s; } /* Glow pulse on central profile */ - @keyframes svg-glow { 0%,100%{opacity:.9;filter:drop-shadow(0 0 6px rgba(109,92,231,.3))} 50%{opacity:1;filter:drop-shadow(0 0 14px rgba(109,92,231,.6))} } + @keyframes svg-glow { 0%,100%{opacity:.9;filter:drop-shadow(0 0 6px var(--unomi-primary-glow))} 50%{opacity:1;filter:drop-shadow(0 0 14px var(--unomi-primary-glow-strong))} } .profile-node { animation: svg-glow 3s ease-in-out infinite; } /* Traveling data dot along path */ @@ -128,8 +129,8 @@ structured_data: > </defs> <!-- Background circles (pulsing) --> - <circle cx="260" cy="210" r="170" fill="rgba(167,139,250,.08)" class="bg-outer"/> - <circle cx="260" cy="210" r="120" fill="rgba(167,139,250,.06)" class="bg-inner"/> + <circle cx="260" cy="210" r="170" fill="var(--unomi-hero-accent-ghost)" class="bg-outer"/> + <circle cx="260" cy="210" r="120" fill="var(--unomi-hero-accent-whisper)" class="bg-inner"/> <!-- Connector lines (flowing dashes) --> <line x1="140" y1="72" x2="200" y2="180" stroke="var(--unomi-hero-accent)" stroke-width="2.5" stroke-dasharray="6 4" opacity=".5" class="flow-line"/> @@ -139,58 +140,58 @@ structured_data: > <line x1="235" y1="270" x2="195" y2="390" stroke="var(--unomi-accent)" stroke-width="2" stroke-dasharray="5 3" opacity=".45" class="flow-line-out"/> <line x1="285" y1="270" x2="325" y2="390" stroke="var(--unomi-accent)" stroke-width="2" stroke-dasharray="5 3" opacity=".45" class="flow-line-out"/> - <!-- Traveling data dots --> - <circle r="5" fill="var(--unomi-hero-accent)" class="dot-tl"/> - <circle r="5" fill="var(--unomi-hero-accent)" class="dot-tr"/> - <circle r="5" fill="var(--unomi-hero-accent)" class="dot-bl"/> - <circle r="5" fill="var(--unomi-hero-accent)" class="dot-br"/> + <!-- Traveling data dots (initial cx/cy match 0% keyframe; opacity 0 until animation starts) --> + <circle cx="140" cy="72" r="5" fill="var(--unomi-hero-accent)" opacity="0" class="dot-tl"/> + <circle cx="380" cy="72" r="5" fill="var(--unomi-hero-accent)" opacity="0" class="dot-tr"/> + <circle cx="140" cy="342" r="5" fill="var(--unomi-hero-accent)" opacity="0" class="dot-bl"/> + <circle cx="380" cy="342" r="5" fill="var(--unomi-hero-accent)" opacity="0" class="dot-br"/> <!-- Central profile node (glowing) --> <g class="profile-node"> <rect x="200" y="150" width="120" height="120" rx="24" fill="var(--unomi-primary)" opacity=".9"/> - <circle cx="260" cy="185" r="20" fill="white" opacity=".9"/> - <path d="M232 220 a28 20 0 0 1 56 0" fill="white" opacity=".7"/> - <text x="260" y="258" text-anchor="middle" fill="white" font-size="14" font-weight="700" font-family="Inter,sans-serif">PROFILE</text> + <circle cx="260" cy="185" r="20" fill="var(--unomi-white)" opacity=".9"/> + <path d="M232 220 a28 20 0 0 1 56 0" fill="var(--unomi-white)" opacity=".7"/> + <text x="260" y="258" text-anchor="middle" fill="var(--unomi-white)" font-size="14" font-weight="700" font-family="Inter,sans-serif">PROFILE</text> </g> <!-- Web data source (floating) --> <g class="src-tl"> <rect x="30" y="40" width="110" height="64" rx="14" fill="var(--unomi-gradient-start)" opacity=".85"/> - <text x="85" y="68" text-anchor="middle" fill="white" font-size="15" font-weight="600" font-family="Inter,sans-serif">Web</text> - <text x="85" y="88" text-anchor="middle" fill="rgba(255,255,255,.65)" font-size="12" font-family="Inter,sans-serif">Events</text> + <text x="85" y="68" text-anchor="middle" fill="var(--unomi-white)" font-size="15" font-weight="600" font-family="Inter,sans-serif">Web</text> + <text x="85" y="88" text-anchor="middle" fill="var(--unomi-on-dark-dim)" font-size="12" font-family="Inter,sans-serif">Events</text> </g> <!-- Mobile data source (floating) --> <g class="src-tr"> <rect x="380" y="40" width="110" height="64" rx="14" fill="var(--unomi-gradient-start)" opacity=".85"/> - <text x="435" y="68" text-anchor="middle" fill="white" font-size="15" font-weight="600" font-family="Inter,sans-serif">Mobile</text> - <text x="435" y="88" text-anchor="middle" fill="rgba(255,255,255,.65)" font-size="12" font-family="Inter,sans-serif">App Data</text> + <text x="435" y="68" text-anchor="middle" fill="var(--unomi-white)" font-size="15" font-weight="600" font-family="Inter,sans-serif">Mobile</text> + <text x="435" y="88" text-anchor="middle" fill="var(--unomi-on-dark-dim)" font-size="12" font-family="Inter,sans-serif">App Data</text> </g> <!-- CRM / Support source (floating) --> <g class="src-bl"> <rect x="30" y="310" width="110" height="64" rx="14" fill="var(--unomi-gradient-start)" opacity=".85"/> - <text x="85" y="338" text-anchor="middle" fill="white" font-size="15" font-weight="600" font-family="Inter,sans-serif">CRM</text> - <text x="85" y="358" text-anchor="middle" fill="rgba(255,255,255,.65)" font-size="12" font-family="Inter,sans-serif">Support</text> + <text x="85" y="338" text-anchor="middle" fill="var(--unomi-white)" font-size="15" font-weight="600" font-family="Inter,sans-serif">CRM</text> + <text x="85" y="358" text-anchor="middle" fill="var(--unomi-on-dark-dim)" font-size="12" font-family="Inter,sans-serif">Support</text> </g> <!-- IoT / Systems source (floating) --> <g class="src-br"> <rect x="380" y="310" width="110" height="64" rx="14" fill="var(--unomi-gradient-start)" opacity=".85"/> - <text x="435" y="338" text-anchor="middle" fill="white" font-size="15" font-weight="600" font-family="Inter,sans-serif">IoT</text> - <text x="435" y="358" text-anchor="middle" fill="rgba(255,255,255,.65)" font-size="12" font-family="Inter,sans-serif">Devices</text> + <text x="435" y="338" text-anchor="middle" fill="var(--unomi-white)" font-size="15" font-weight="600" font-family="Inter,sans-serif">IoT</text> + <text x="435" y="358" text-anchor="middle" fill="var(--unomi-on-dark-dim)" font-size="12" font-family="Inter,sans-serif">Devices</text> </g> <!-- Output: Segment (bouncing) --> <g class="out-seg"> <rect x="155" y="392" width="82" height="36" rx="10" fill="var(--unomi-accent)" opacity=".75"/> - <text x="196" y="415" text-anchor="middle" fill="white" font-size="13" font-weight="700" font-family="Inter,sans-serif">Segment</text> + <text x="196" y="415" text-anchor="middle" fill="var(--unomi-white)" font-size="13" font-weight="700" font-family="Inter,sans-serif">Segment</text> </g> <!-- Output: AI Agent (bouncing) --> <g class="out-score"> <rect x="283" y="392" width="82" height="36" rx="10" fill="var(--unomi-accent)" opacity=".75"/> - <text x="324" y="415" text-anchor="middle" fill="white" font-size="13" font-weight="700" font-family="Inter,sans-serif">AI Agent</text> + <text x="324" y="415" text-anchor="middle" fill="var(--unomi-white)" font-size="13" font-weight="700" font-family="Inter,sans-serif">AI Agent</text> </g> </svg> </div> @@ -368,7 +369,7 @@ graph LR <ul class="list-unstyled mt-3"> <li class="d-flex align-items-start mb-3"> <i class="bi bi-check-circle-fill text-primary me-2 mt-1"></i> - <span>ElasticSearch backend with dynamic, schema-free data structures</span> + <span>Elasticsearch backend with dynamic, schema-free data structures</span> </li> <li class="d-flex align-items-start mb-3"> <i class="bi bi-check-circle-fill text-primary me-2 mt-1"></i> @@ -441,7 +442,7 @@ graph LR <div class="text-center"> <div class="step-number mx-auto mb-3">2</div> <h3 class="h6 fw-semibold mb-2">Configure</h3> - <p class="small text-muted">Point to your ElasticSearch instance and customize settings as needed.</p> + <p class="small text-muted">Point to your Elasticsearch instance and customize settings as needed.</p> </div> </div> <div class="col-md-4"> @@ -509,7 +510,7 @@ graph LR <!-- "Hidden gems" teaser card --> <div class="ecosystem-card ecosystem-card-oss" data-company> <div class="text-center"> - <i class="bi bi-globe2 d-block mb-2" style="font-size:2rem;color:var(--unomi-primary)"></i> + <i class="bi bi-globe2 d-block mb-2 icon-lg-primary"></i> <h3 class="h6 fw-semibold mb-2">And many more…</h3> <p class="small text-muted mb-0">Countless teams around the world build on Apache Unomi without ever telling us. That’s the beauty of open source — anyone can adopt it freely and make it their own.</p> </div> @@ -619,7 +620,7 @@ graph LR <i class="bi bi-camera-video news-icon"></i> <div> <strong class="small">OpenSearch contribution presentation</strong> - <span class="small text-muted">— How Unomi added OpenSearch persistence support.</span> + <span class="small text-muted">— Presentation on the upcoming OpenSearch persistence support.</span> <a href="/community/events/index.html#opensearch-2025" class="news-link">Watch</a> </div> </div> @@ -679,10 +680,10 @@ graph LR <div class="row g-5 align-items-center justify-content-center"> <div class="col-md-5 col-lg-4 text-center"> <a href="https://apache.org" target="_blank" rel="noopener"> - <img src="/assets/images/asf_logo_wide.svg" alt="Apache Software Foundation" class="img-fluid mb-3" style="max-width:220px"> + <img src="/assets/images/asf_logo_wide.svg" alt="Apache Software Foundation" class="img-fluid mb-3 mw-220"> </a> <a href="https://events.apache.org/x/current-event.html" target="_blank" rel="noopener" class="d-block"> - <img src="https://www.apache.org/events/current-event-234x60.png" alt="Apache Events" class="img-fluid" style="max-width:234px"> + <img src="https://www.apache.org/events/current-event-234x60.png" alt="Apache Events" class="img-fluid mw-234"> </a> </div> <div class="col-md-7 col-lg-5"> diff --git a/src/main/webapp/resources.html b/src/main/webapp/resources.html index 2551dc1..9e437da 100644 --- a/src/main/webapp/resources.html +++ b/src/main/webapp/resources.html @@ -1,7 +1,33 @@ --- title: Videos & Resources description: "Apache Unomi learning resources: conference talks, video tutorials, articles, slides, and community presentations." +keywords: "Apache Unomi resources, videos, articles, presentations, CDP tutorials, Unomi talks, learning resources" layout: default +structured_data: > + <script type="application/ld+json"> + { + "@context": "https://schema.org", + "@type": "CollectionPage", + "name": "Apache Unomi Videos & Resources", + "description": "Conference talks, tutorials, articles, and slides about the Apache Unomi Customer Data Platform.", + "url": "https://unomi.apache.org/resources.html", + "mainEntity": { + "@type": "ItemList", + "name": "Apache Unomi Video Resources", + "numberOfItems": 8, + "itemListElement": [ + { "@type": "ListItem", "position": 1, "name": "A CDP in an AI-first World — Apache Unomi", "url": "https://www.youtube.com/watch?v=UrhNhXHugKc" }, + { "@type": "ListItem", "position": 2, "name": "Apache Unomi 3 — The Open Source CDP at Scale", "url": "https://www.youtube.com/watch?v=ON0EskhpuME" }, + { "@type": "ListItem", "position": 3, "name": "ApacheCon 2024 — Apache Unomi: The Open Source CDP", "url": "https://www.youtube.com/watch?v=YqPkUhBlcrs" }, + { "@type": "ListItem", "position": 4, "name": "Apache Unomi — What's New in the Latest Releases", "url": "https://www.youtube.com/watch?v=_6vfuWocQBs" }, + { "@type": "ListItem", "position": 5, "name": "Apache Unomi Past, Present, and Future", "url": "https://www.youtube.com/watch?v=uNbKW29FCnE" }, + { "@type": "ListItem", "position": 6, "name": "ApacheCon 2021 — Introduction to Apache Unomi", "url": "https://www.youtube.com/watch?v=ynluCYocfG4" }, + { "@type": "ListItem", "position": 7, "name": "ApacheCon 2020 — Building a Customer Data Platform with Apache Unomi", "url": "https://www.youtube.com/watch?v=_EXJQJ69niA" }, + { "@type": "ListItem", "position": 8, "name": "First Apache Unomi Meetup", "url": "https://www.youtube.com/watch?v=f4q4fDkqBDQ" } + ] + } + } + </script> --- <!-- Page Header --> @@ -27,10 +53,10 @@ layout: default <!-- 1. Community Over Code NA 2025 — Sep 29, 2025 --> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=_6vfuWocQBs" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/coc-2025-_6vfuWocQBs.jpg" alt="From Complaining Customers to Brand Promoters - Community Over Code 2025" class="w-100 h-100" style="object-fit:cover" loading="lazy"> + <a href="https://www.youtube.com/watch?v=_6vfuWocQBs" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/coc-2025-_6vfuWocQBs.jpg" alt="From Complaining Customers to Brand Promoters - Community Over Code 2025" class="w-100 h-100 img-cover" loading="lazy"> <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay-lg"> - <i class="bi bi-play-fill text-white" style="font-size:1.5rem;margin-left:2px"></i> + <i class="bi bi-play-fill text-white play-icon"></i> </span> </a> <span class="badge badge-primary mb-2">Community Over Code 2025</span> @@ -43,10 +69,10 @@ layout: default <!-- 2. Community Over Code NA 2025 — Sep 29, 2025 --> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=ON0EskhpuME" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/coc-2025-ON0EskhpuME.jpg" alt="How AI + Customer Data Platforms Create Unlimited Personalized Memory - Community Over Code 2025" class="w-100 h-100" style="object-fit:cover" loading="lazy"> + <a href="https://www.youtube.com/watch?v=ON0EskhpuME" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/coc-2025-ON0EskhpuME.jpg" alt="How AI + Customer Data Platforms Create Unlimited Personalized Memory - Community Over Code 2025" class="w-100 h-100 img-cover" loading="lazy"> <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay-lg"> - <i class="bi bi-play-fill text-white" style="font-size:1.5rem;margin-left:2px"></i> + <i class="bi bi-play-fill text-white play-icon"></i> </span> </a> <span class="badge badge-primary mb-2">Community Over Code 2025</span> @@ -59,10 +85,10 @@ layout: default <!-- 3. OpenSearch Contribution — Jan 14, 2025 --> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=uNbKW29FCnE" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/opensearch-uNbKW29FCnE.jpg" alt="Apache Unomi OpenSearch Contribution Presentation" class="w-100 h-100" style="object-fit:cover" loading="lazy"> + <a href="https://www.youtube.com/watch?v=uNbKW29FCnE" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/opensearch-uNbKW29FCnE.jpg" alt="Apache Unomi OpenSearch Contribution Presentation" class="w-100 h-100 img-cover" loading="lazy"> <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay-lg"> - <i class="bi bi-play-fill text-white" style="font-size:1.5rem;margin-left:2px"></i> + <i class="bi bi-play-fill text-white play-icon"></i> </span> </a> <span class="badge badge-primary mb-2">Technical Deep Dive • Jan 2025</span> @@ -75,10 +101,10 @@ layout: default <!-- 3. Claude AI + MCP Demo — Dec 2, 2024 --> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=YqPkUhBlcrs" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/mcp-demo-YqPkUhBlcrs.jpg" alt="Claude AI integration with Apache Unomi using MCP" class="w-100 h-100" style="object-fit:cover" loading="lazy"> + <a href="https://www.youtube.com/watch?v=YqPkUhBlcrs" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/mcp-demo-YqPkUhBlcrs.jpg" alt="Claude AI integration with Apache Unomi using MCP" class="w-100 h-100 img-cover" loading="lazy"> <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay-lg"> - <i class="bi bi-play-fill text-white" style="font-size:1.5rem;margin-left:2px"></i> + <i class="bi bi-play-fill text-white play-icon"></i> </span> </a> <span class="badge badge-primary mb-2">AI Integration Demo • Dec 2024</span> @@ -91,10 +117,10 @@ layout: default <!-- 4. Community Meetup — Nov 18, 2021 --> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=UrhNhXHugKc" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/meetup-2021-UrhNhXHugKc.jpg" alt="Apache Unomi November 2021 Meetup" class="w-100 h-100" style="object-fit:cover" loading="lazy"> + <a href="https://www.youtube.com/watch?v=UrhNhXHugKc" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/meetup-2021-UrhNhXHugKc.jpg" alt="Apache Unomi November 2021 Meetup" class="w-100 h-100 img-cover" loading="lazy"> <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay-lg"> - <i class="bi bi-play-fill text-white" style="font-size:1.5rem;margin-left:2px"></i> + <i class="bi bi-play-fill text-white play-icon"></i> </span> </a> <span class="badge badge-primary mb-2">Community Meetup 2021</span> @@ -107,10 +133,10 @@ layout: default <!-- 5. ApacheCon 2019 --> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=ut2ReqhMl2Y" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2019-ut2ReqhMl2Y.jpg" alt="Customer Segmentation & Marketing Automation - ApacheCon 2019" class="w-100 h-100" style="object-fit:cover" loading="lazy"> + <a href="https://www.youtube.com/watch?v=ut2ReqhMl2Y" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2019-ut2ReqhMl2Y.jpg" alt="Customer Segmentation & Marketing Automation - ApacheCon 2019" class="w-100 h-100 img-cover" loading="lazy"> <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay-lg"> - <i class="bi bi-play-fill text-white" style="font-size:1.5rem;margin-left:2px"></i> + <i class="bi bi-play-fill text-white play-icon"></i> </span> </a> <span class="badge badge-primary mb-2">ApacheCon 2019</span> @@ -126,10 +152,10 @@ layout: default <!-- 6. ApacheCon 2018 --> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=XO1cLSgeRsw" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2018-XO1cLSgeRsw.jpg" alt="Apache Unomi — An Open Source CDP - ApacheCon 2018" class="w-100 h-100" style="object-fit:cover" loading="lazy"> + <a href="https://www.youtube.com/watch?v=XO1cLSgeRsw" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2018-XO1cLSgeRsw.jpg" alt="Apache Unomi — An Open Source CDP - ApacheCon 2018" class="w-100 h-100 img-cover" loading="lazy"> <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay-lg"> - <i class="bi bi-play-fill text-white" style="font-size:1.5rem;margin-left:2px"></i> + <i class="bi bi-play-fill text-white play-icon"></i> </span> </a> <span class="badge badge-primary mb-2">ApacheCon 2018</span> @@ -145,10 +171,10 @@ layout: default <!-- 7. ApacheCon 2015 --> <div class="col-md-6 col-lg-4"> <div class="feature-card h-100"> - <a href="https://www.youtube.com/watch?v=y4uNwnVMVyg" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden" style="aspect-ratio:16/9"> - <img src="/assets/images/videos/apachecon-2015-y4uNwnVMVyg.jpg" alt="Apache Unomi Project In-Depth - ApacheCon 2015" class="w-100 h-100" style="object-fit:cover" loading="lazy"> + <a href="https://www.youtube.com/watch?v=y4uNwnVMVyg" target="_blank" rel="noopener" class="d-block position-relative mb-3 rounded overflow-hidden video-thumbnail"> + <img src="/assets/images/videos/apachecon-2015-y4uNwnVMVyg.jpg" alt="Apache Unomi Project In-Depth - ApacheCon 2015" class="w-100 h-100 img-cover" loading="lazy"> <span class="position-absolute top-50 start-50 translate-middle d-flex align-items-center justify-content-center rounded-circle play-overlay-lg"> - <i class="bi bi-play-fill text-white" style="font-size:1.5rem;margin-left:2px"></i> + <i class="bi bi-play-fill text-white play-icon"></i> </span> </a> <span class="badge badge-primary mb-2">ApacheCon 2015</span> diff --git a/src/main/webapp/tutorial.html b/src/main/webapp/tutorial.html index e5a5a35..5db0517 100644 --- a/src/main/webapp/tutorial.html +++ b/src/main/webapp/tutorial.html @@ -1,6 +1,7 @@ --- title: Tutorials — Getting Started with Apache Unomi 3 description: "Step-by-step tutorials for Apache Unomi 3.0: Docker quick start, manual installation, REST API basics, web tracking integration, and profile personalization." +keywords: "Apache Unomi tutorial, step by step, beginner guide, CDP tutorial, profiles, events, segments, rules" layout: default structured_data: > <script type="application/ld+json"> @@ -9,24 +10,29 @@ structured_data: > "@type": "HowTo", "name": "Getting Started with Apache Unomi 3", "description": "Learn how to set up and use Apache Unomi 3.0 as a Customer Data Platform with Docker, REST APIs, and web tracking.", + "totalTime": "PT30M", "step": [ { "@type": "HowToStep", + "position": 1, "name": "Start Unomi with Docker", "text": "Create a docker-compose.yml and run docker-compose up to start Unomi with Elasticsearch." }, { "@type": "HowToStep", + "position": 2, "name": "Verify the cluster", "text": "Access https://localhost:9443/cxs/cluster with credentials karaf/karaf to verify the installation." }, { "@type": "HowToStep", + "position": 3, "name": "Create a scope and send events", "text": "Use the REST API to create scopes, send events, and query profiles." }, { "@type": "HowToStep", + "position": 4, "name": "Integrate the web tracker", "text": "Add the Unomi web tracker to your web pages for automatic event collection and personalization." } @@ -45,7 +51,7 @@ structured_data: > </section> <!-- Table of Contents --> -<section class="section" style="padding-bottom:0"> +<section class="section section-flush-bottom"> <div class="container"> <div class="row justify-content-center"> <div class="col-lg-10"> @@ -89,9 +95,10 @@ structured_data: > <pre><code>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 @@ -125,7 +132,7 @@ services: <pre><code>curl http://localhost:9200/_cat/health?format=json</code></pre> <div class="alert alert-info small" role="alert"> - <i class="bi bi-info-circle me-1"></i> This Docker setup is for <strong>development and learning only</strong>. For production deployments, see the <a href="/manual/latest/index.html#_securing_a_production_environment">production security guide</a>. + <i class="bi bi-info-circle me-1"></i> This Docker setup is for <strong>development and learning only</strong>. For production deployments, see the <a href="https://unomi.apache.org/manual/latest/index.html#_securing_a_production_environment">production security guide</a>. </div> </div> </div> @@ -148,7 +155,7 @@ services: <h3 class="h6 fw-semibold mt-4 mb-3">Prerequisites</h3> <ul class="small"> <li><strong>Java 17</strong> or later — set <code>JAVA_HOME</code> accordingly. OpenJDK distributions work fine.</li> - <li><strong>Elasticsearch 7.17.x</strong> — <a href="https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-5" target="_blank" rel="noopener">Download 7.17.5</a></li> + <li><strong>Elasticsearch 9.x</strong> — <a href="https://www.elastic.co/downloads/elasticsearch" target="_blank" rel="noopener">Download Elasticsearch</a></li> </ul> <h3 class="h6 fw-semibold mt-4 mb-3">1. Configure & start Elasticsearch</h3> @@ -229,7 +236,7 @@ Initializing cluster service endpoint...</code></pre> <!-- Send a custom event --> <h3 class="h6 fw-semibold mt-4 mb-3">Send a custom event</h3> - <p>Before sending a custom event, register a <strong>JSON Schema</strong> to validate it (required since Unomi 2.x):</p> + <p>Before sending a custom event, register a <strong>JSON Schema</strong> to validate it (required since Unomi 2.0):</p> <pre><code>curl -X POST http://localhost:8181/cxs/jsonSchema \ -u karaf:karaf \ -H "Content-Type: application/json" \ @@ -557,7 +564,7 @@ unomiWebTracker.registerPersonalizationObject({ <div class="feature-icon"><i class="bi bi-book"></i></div> <h3 class="h6 fw-semibold mb-2">Full Documentation</h3> <p class="small text-muted mb-2">Dive deeper into segmentation, scoring, conditions, and actions in the comprehensive manual.</p> - <a href="/manual/latest/index.html" class="small fw-semibold">Read the manual <i class="bi bi-arrow-right"></i></a> + <a href="https://unomi.apache.org/manual/latest/index.html" class="small fw-semibold">Read the manual <i class="bi bi-arrow-right"></i></a> </div> </div> <div class="col-md-6"> @@ -565,7 +572,7 @@ unomiWebTracker.registerPersonalizationObject({ <div class="feature-icon"><i class="bi bi-braces"></i></div> <h3 class="h6 fw-semibold mb-2">REST API Reference</h3> <p class="small text-muted mb-2">Explore every endpoint for profiles, events, segments, rules, and more.</p> - <a href="/rest-api-doc/index.html" class="small fw-semibold">Browse the API <i class="bi bi-arrow-right"></i></a> + <a href="https://unomi.apache.org/rest-api-doc/index.html" class="small fw-semibold">Browse the API <i class="bi bi-arrow-right"></i></a> </div> </div> <div class="col-md-6"> diff --git a/src/main/webapp/use-cases.html b/src/main/webapp/use-cases.html index 0a38aa5..6333da6 100644 --- a/src/main/webapp/use-cases.html +++ b/src/main/webapp/use-cases.html @@ -1,7 +1,50 @@ --- title: Use Cases -description: "Discover how Apache Unomi can be used as a web personalization engine, mobile analytics backend, centralized profile management system, or real-time data backbone for AI agents and machine learning." +description: "Apache Unomi use cases: web personalization, mobile analytics, profile management, and data backbone for AI agents and machine learning." +keywords: "Apache Unomi use cases, web personalization, mobile analytics, customer profiles, AI CDP, machine learning, segmentation" layout: default +mermaid: true +structured_data: > + <script type="application/ld+json"> + { + "@context": "https://schema.org", + "@type": "FAQPage", + "mainEntity": [ + { + "@type": "Question", + "name": "How can Apache Unomi be used for AI and machine learning?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Apache Unomi serves as the real-time customer data backbone for AI agents, chatbots, recommendation engines, and predictive models. It provides unified profiles, segments, and event data via REST API with built-in consent management to ensure AI only processes data customers have explicitly consented to share." + } + }, + { + "@type": "Question", + "name": "How does Apache Unomi work for web personalization?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Apache Unomi integrates with CMS platforms to track visitors, build profiles, define real-time segments, and deliver personalized content. A lightweight JavaScript tracker sends events, while the context servlet returns matching personalization rules for the current visitor." + } + }, + { + "@type": "Question", + "name": "Can Apache Unomi be used as a mobile analytics backend?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Yes. Native mobile apps send events to the Unomi REST API to track user journeys, build profiles, and compute segments. This enables personalized mobile experiences based on real-time behavioral data." + } + }, + { + "@type": "Question", + "name": "How does Apache Unomi handle centralized profile management?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Unomi aggregates customer data from CRM, support, commerce, and other systems into unified profiles. It resolves multiple identities across touchpoints and provides a single customer view via REST API." + } + } + ] + } + </script> --- <!-- Page Header -->
