Modernize Apache Unomi website: Bootstrap 5, design system, AI positi⦠(#40) Modernize Apache Unomi website: Bootstrap 5, design system, AI positioning, SEO/AEO Complete redesign of the Apache Unomi website including: Infrastructure: - Upgrade Bootstrap 4 to 5.3.8 and Jekyll 4.2.0 to 4.4.1 - Add Mermaid.js v11 for interactive diagrams - Centralized CSS design system with 40+ CSS custom properties - Docker-based build workflow using bretfisher/jekyll images Content & Pages: - New "CDP in the AI Era" section and AI-first positioning throughout - New Integrations page with randomized company order (ASF compliance) - Rewritten Tutorial page for Unomi 3.0 - Rebuilt Events page with 12 talks, local video thumbnails - Testing guide TODOs filled in from source code research - Dependencies guide: added BOM documentation for Unomi 3 - Latest News timeline combining releases, articles, and events (capped at 10) - Use cases reordered with AI & ML first Community & Design: - Team page redesigned as responsive card grid with updated affiliations - All 11 contribute sub-pages modernized (layout only, text preserved) - Fixed empty mailing list cards, encoding issues, dead links - Copyright years updated to 2026 SEO & AI Engine Optimization: - JSON-LD structured data (Schema.org) on all pages - Open Graph and Twitter Card meta tags - robots.txt, sitemap.xml, llms.txt, llms-full.txt added Staging preview: https://unomi-v3-site.netlify.app/ * CSS design system: centralized variables, utility classes, DRY cleanup - Add new CSS variables for rgba variants, opacity levels, and color tokens - Create 10+ utility classes to replace inline styles (badges, icons, overlays) - Merge duplicate CSS rules (.mermaid, media queries, button hovers) - Add vendor prefix (-webkit-backdrop-filter) for Safari - Fix color contrast for WCAG AA compliance (hero text opacity) - Add mobile overflow protection for Mermaid diagrams and code blocks - Extract shared Fisher-Yates shuffle script to assets/js/shuffle.js * Layout: performance, accessibility, SEO and navigation improvements - Conditional Mermaid.js loading (saves ~25KB on pages without diagrams) - Defer Bootstrap JS and Mermaid scripts for faster initial render - Preconnect to cdn.jsdelivr.net, non-blocking Bootstrap Icons CSS - Add :focus-visible styles for keyboard navigation accessibility - Replace footer <h6> with role="heading" for semantic hierarchy - Shorten <title> suffix to keep under 65 characters - Normalize og:url to match canonical URL - Update navbar Slack link to point to access instructions - Update navbar mailing list link to point to community page - Update JSON-LD featureList (Salesforce deprecated, Groovy actions) - Fix broken links to generated docs with absolute URLs * 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 * Community, events, integrations: Slack access, Salesforce removal, ASF compliance - Community: rewrite Slack card with ASF access paths, update monthly meeting with direct Zoom link and 'open to all' messaging, add mailing list anchor - Team: modernize to card layout, update affiliations, lazy-load gravatars - Events: restructure past events with local thumbnails, add CollectionPage schema - Integrations: remove Salesforce connector, add Groovy actions (recommended) and Java plugins guidance, remove Unomi UI/Inoyu UI cards for ASF compliance, use generic labels in Mermaid diagram - Connectors: update description for Salesforce deprecation - Stories: replace inline shuffle script with shared shuffle.js - All pages: fix rel="noopener", protocol upgrades, inline style cleanup * 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"
This project contains the Apache Unomi Website. The website is generated using Jekyll 4.4 with Liquid templates.
Can be found in _config YAML file
source: src/main/webapp destination: target/site
Can be found in _data folder This contains some variables used to replace placeholders in the site.
You need either Docker (recommended) or a local Ruby/Jekyll installation to build the website.
Checkout the current project:
git clone https://github.com/apache/unomi-site
Using the bretfisher/jekyll Docker image. No local Ruby or Jekyll installation required.
docker run --rm \ --volume="$PWD:/site" \ bretfisher/jekyll \ build
The generated site will be in the folder target/site.
Serves the site at http://localhost:4000/ with live-reload on source changes:
docker run --rm \ --volume="$PWD:/site" \ -p 4000:4000 \ bretfisher/jekyll-serve
Requires Ruby 2.7+ and Bundler. Install dependencies once, then build:
bundle install bundle exec jekyll build
Or serve locally with live-reload:
bundle exec jekyll serve
To publish the local website to the production location (https://unomi.apache.org/), you have to use: Do not use the clean maven goal to not remove the previous generated site.
mvn install scm-publish:publish-scm -Dusername=YOUR_APACHE_USERNAME -Dpassword=YOUR_APACHE_PASSWORD