<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Blog posts by AllThingsOpti</title><link href="http://world.optimizely.com" /><updated>2026-01-31T18:48:18.0000000Z</updated><id>https://world.optimizely.com/blogs/allthingsopti/</id> <generator uri="http://world.optimizely.com" version="2.0">Optimizely World</generator> <entry><title>A day in the life of an Optimizely OMVP: Learning Optimizely Just Got Easier: Introducing the Optimizely Learning Centre</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2026/1/a-day-in-the-life-of-an-optimizely-omvp-learning-optimizely-just-got-easier-introducing-the-optimizely-learning-centre/" /><id>&lt;p&gt;&lt;strong&gt;On the back of my last post about the Opti Graph Learning Centre, I am now happy to announce a revamped interactive learning platform that makes mastering Optimizely products approachable for everyone which is called the &quot;Optimizely Learning Centre&quot;&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The Challenge of Learning New Technology&lt;/h2&gt;
&lt;p&gt;We&#39;ve all been there. You&#39;re eager to learn a new tool or platform, but the official documentation feels overwhelming. You read through pages of technical jargon, follow along with examples that don&#39;t quite click, and wonder if there&#39;s a better way.&lt;/p&gt;
&lt;p&gt;That&#39;s exactly why I built the&amp;nbsp;&lt;strong&gt;Optimizely Learning Centre&lt;/strong&gt; &amp;mdash; a free, interactive platform designed to help you learn Optimizely products at your own pace, with hands-on practice built right in.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/cf7451aa9d9f467f9ab75170d18ad367.aspx&quot; width=&quot;1054&quot; height=&quot;469&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;What Is the Optimizely Learning Centre?&lt;/h2&gt;
&lt;p&gt;Think of it as your personal tutor for all things Optimizely. Instead of wading through dense documentation, you follow structured learning paths that guide you from beginner to advanced topics. Each lesson includes real examples you can try immediately &amp;mdash; no setup required.&lt;/p&gt;
&lt;p&gt;The platform currently offers courses on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Graph&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Opal&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely CMS (SaaS)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely CMS 12&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely CMS 13 (Pre-Release)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely DXP&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Content Marketing Platform&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Web Experimentation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Feature Experimentation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Data Platform&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Commerce Connect&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Content Recommendations&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Configured Commerce&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Analytics&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Product Recommendations&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely PIM&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;Learning That Actually Sticks&lt;/h2&gt;
&lt;p&gt;What makes this platform different? Three things:&lt;/p&gt;
&lt;h3&gt;1. Learn by Doing&lt;/h3&gt;
&lt;p&gt;Every lesson includes interactive examples. When learning about Optimizely Graph, you don&#39;t just read about queries &amp;mdash; you write and run them. There&#39;s a built-in playground where you can experiment, make mistakes, and see results instantly.&lt;/p&gt;
&lt;p&gt;For Optimizely Opal, you can test AI prompts and see sample responses. It&#39;s learning through experience, not just reading.&lt;/p&gt;
&lt;h3&gt;2. Progress at Your Own Pace&lt;/h3&gt;
&lt;p&gt;The platform tracks where you are in each course. Pick up exactly where you left off, whether that&#39;s tomorrow or next month. Complete lessons to unlock new ones, building your knowledge step by step.&lt;/p&gt;
&lt;p&gt;A progress bar shows how far you&#39;ve come, giving you a sense of accomplishment as you work through each module.&lt;/p&gt;
&lt;h3&gt;3. Clear, Structured Paths&lt;/h3&gt;
&lt;p&gt;Each course is organised into modules covering specific topics. Modules are labelled by difficulty &amp;mdash; Beginner, Intermediate, or Advanced &amp;mdash; so you know what to expect. Estimated completion times help you plan your learning sessions.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;A Closer Look: The Graph Course&lt;/h2&gt;
&lt;p&gt;Let&#39;s take the Optimizely Graph course as an example. Graph is Optimizely&#39;s content delivery API &amp;mdash; it lets developers fetch content in exactly the format they need.&lt;/p&gt;
&lt;p&gt;The course starts with the basics: What is GraphQL? How do you write your first query? Then it gradually introduces more powerful concepts like filtering, sorting, searching, and working with related content.&lt;/p&gt;
&lt;p&gt;But here&#39;s where it gets interesting. The course includes two interactive tools:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Playground&lt;/strong&gt; &amp;mdash; A sandbox where you can write queries and run them against a real GraphQL endpoint. It&#39;s like having a practice range where you can experiment freely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Query Builder&lt;/strong&gt; &amp;mdash; A visual tool that lets you construct queries by selecting options from menus. Perfect for those who prefer a more guided approach, or for quickly building queries without remembering the exact syntax.&lt;/p&gt;
&lt;p&gt;Both tools connect to your own Optimizely Graph instance, so you&#39;re working with your actual content.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/10fcaf6942264ac29b4eb172291b46de.aspx&quot; width=&quot;1067&quot; height=&quot;503&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Who Is This For?&lt;/h2&gt;
&lt;p&gt;The Learning Centre is designed for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Developers&lt;/strong&gt;&amp;nbsp;new to Optimizely who want a structured introduction&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content teams&lt;/strong&gt;&amp;nbsp;curious about what&#39;s possible with Optimizely&#39;s tools&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Technical architects&lt;/strong&gt;&amp;nbsp;evaluating Optimizely&#39;s capabilities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anyone&lt;/strong&gt;&amp;nbsp;who learns better by doing rather than just reading&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You don&#39;t need to install anything. The platform runs entirely in your web browser.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Built for the Modern Web&lt;/h2&gt;
&lt;p&gt;The Learning Centre is a modern web application that works beautifully on any device &amp;mdash; desktop, tablet, or phone. It includes dark mode for those late-night learning sessions and remembers your preferences between visits.&lt;/p&gt;
&lt;p&gt;All your progress is saved locally in your browser, so your learning journey is private and personal.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;Ready to explore? Visit the Learning Centre on the following link&amp;nbsp;&lt;a href=&quot;https://optilearningcentre.adayinthelife.pro&quot;&gt;https://optilearningcentre.adayinthelife.pro&lt;/a&gt; and browse the course catalogue. Pick a course that interests you, start with the first module, and see how quickly you can go from curious to confident.&lt;/p&gt;
&lt;p&gt;Whether you&#39;re taking your first steps with Optimizely or looking to deepen your expertise, there&#39;s something here for you. The best part? It&#39;s completely free.&lt;/p&gt;
&lt;p&gt;Learning shouldn&#39;t feel like a chore. With interactive examples, clear explanations, and a structured path to follow, mastering Optimizely products is more accessible than ever.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Happy learning!&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;The Optimizely Learning Centre is an open-source project. If you&#39;d like to contribute or suggest improvements, we&#39;d love to hear from you.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;br /&gt;&lt;img class=&quot;clickable&quot; title=&quot;Click image to zoom&quot; src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;p&gt;You can also follow me on&amp;nbsp;&lt;a href=&quot;https://adayinthelife.pro/&quot;&gt;https://adayinthelife.pro&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2026-01-31T18:48:18.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP: Introducing Optimizely Graph Learning Centre Beta: Master GraphQL for Content Delivery</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2026/1/a-day-in-t/" /><id>&lt;p&gt;GraphQL is transforming how developers query and deliver content from Optimizely CMS. But let&#39;s be honest&amp;mdash;there&#39;s a learning curve. Between understanding GraphQL syntax, navigating Optimizely Graph&#39;s specific schema, and figuring out authentication, many developers find themselves stuck between documentation and trial-and-error.&lt;/p&gt;
&lt;p&gt;That&#39;s why I built the &lt;strong&gt;Optimizely Graph Learning Centre&lt;/strong&gt;&amp;mdash;an interactive, hands-on learning platform that takes you from your first query to advanced content delivery patterns.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/0d266d48a0e9488a91be26c3d55a6a93.aspx&quot; width=&quot;1069&quot; height=&quot;525&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;The Problem: GraphQL Has a Learning Curve&lt;/h2&gt;
&lt;p&gt;If you&#39;ve tried to get started with Optimizely Graph, you&#39;ve probably experienced:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Documentation overload&lt;/strong&gt;: Reading about GraphQL concepts is one thing; applying them to real Optimizely content is another&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No safe playground&lt;/strong&gt;: Fear of breaking production while experimenting with queries&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Syntax frustration&lt;/strong&gt;: Getting filters, pagination, and sorting right without examples to reference&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Migration anxiety&lt;/strong&gt;: Wondering how your existing Search &amp;amp; Navigation queries translate to Graph&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Developers learn by doing, not just reading. The Learning Centre bridges that gap.&lt;/p&gt;
&lt;h2&gt;What Is the Optimizely Graph Learning Centre?&lt;/h2&gt;
&lt;p&gt;It&#39;s a browser-based application built with Blazor WebAssembly that provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;12 structured learning modules&lt;/strong&gt;&amp;nbsp;covering beginner to advanced topics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;60+ interactive lessons&lt;/strong&gt;&amp;nbsp;with real GraphQL examples you can execute&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A full GraphQL Playground&lt;/strong&gt;&amp;nbsp;for freeform experimentation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A Visual Query Builder&lt;/strong&gt;&amp;nbsp;that generates GraphQL without writing syntax&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Progress tracking&lt;/strong&gt;&amp;nbsp;so you can pick up where you left off&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No backend server required. No installation needed. Just connect to your Optimizely Graph instance and start learning.&lt;/p&gt;
&lt;h2&gt;Key Features&lt;/h2&gt;
&lt;h3&gt;Interactive Learning Modules&lt;/h3&gt;
&lt;p&gt;The learning content is structured into progressive modules:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Modules&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Beginner&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Getting Started, Filtering Data, Sorting Results, Pagination&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intermediate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Site Search, Faceted Search, GraphQL Fragments, Content Relationships, Recursive Queries, Content Variations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Advanced&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Advanced Topics (Geo-search, JSON Payloads, Text Extraction)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Migration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Complete Search &amp;amp; Navigation to Graph Migration Guide&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;Each lesson includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clear learning objectives&lt;/li&gt;
&lt;li&gt;Step-by-step explanations&lt;/li&gt;
&lt;li&gt;Live GraphQL examples with a &quot;Try It&quot; panel&lt;/li&gt;
&lt;li&gt;Expected results and helpful hints&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;The Visual Query Builder&lt;/h3&gt;
&lt;p&gt;This is where the Learning Centre really shines. Not comfortable writing raw GraphQL? No problem.&lt;/p&gt;
&lt;p&gt;The Query Builder lets you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Select content types from a searchable dropdown&lt;/li&gt;
&lt;li&gt;Add fields with a clean tag-based interface&lt;/li&gt;
&lt;li&gt;Build complex filters using 12+ operators (equals, contains, greater than, exists, and more)&lt;/li&gt;
&lt;li&gt;Configure sorting and pagination&lt;/li&gt;
&lt;li&gt;See the generated GraphQL in real-time&lt;/li&gt;
&lt;li&gt;Execute queries with one click&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&#39;s perfect for content managers who need to build queries without learning GraphQL syntax, and for developers who want to learn by seeing how UI choices translate to code.&lt;/p&gt;
&lt;h3&gt;GraphQL Playground&lt;/h3&gt;
&lt;p&gt;For developers who want to write raw queries, the Playground provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A full-featured query editor&lt;/li&gt;
&lt;li&gt;Query execution with timing metrics&lt;/li&gt;
&lt;li&gt;Formatted JSON results&lt;/li&gt;
&lt;li&gt;Query history with success/failure tracking&lt;/li&gt;
&lt;li&gt;Sample queries to get started quickly&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Migration Guide: Search &amp;amp; Navigation to Graph&lt;/h3&gt;
&lt;p&gt;If you&#39;re migrating from Optimizely Search &amp;amp; Navigation (Find), there&#39;s an entire module dedicated to showing you how your existing patterns translate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Filter syntax comparison&lt;/li&gt;
&lt;li&gt;Full-text search patterns&lt;/li&gt;
&lt;li&gt;Facet migration examples&lt;/li&gt;
&lt;li&gt;Introduction to new capabilities like semantic search&lt;/li&gt;
&lt;li&gt;.NET Client SDK usage&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What You&#39;ll Learn&lt;/h2&gt;
&lt;p&gt;By working through the Learning Centre, you&#39;ll master:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Querying Fundamentals&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Writing your first GraphQL query&lt;/li&gt;
&lt;li&gt;Filtering content by any field&lt;/li&gt;
&lt;li&gt;Sorting and pagination patterns&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Search Capabilities&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Full-text search with highlighting&lt;/li&gt;
&lt;li&gt;Fuzzy search for typo tolerance&lt;/li&gt;
&lt;li&gt;Semantic search for AI-powered content discovery&lt;/li&gt;
&lt;li&gt;Autocomplete and search suggestions&lt;/li&gt;
&lt;li&gt;Faceted navigation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Content Relationships&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Navigating parent/child hierarchies&lt;/li&gt;
&lt;li&gt;Following content references&lt;/li&gt;
&lt;li&gt;Building navigation trees and breadcrumbs&lt;/li&gt;
&lt;li&gt;Generating sitemaps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Advanced Patterns&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Handling localized content&lt;/li&gt;
&lt;li&gt;Working with draft vs. published states&lt;/li&gt;
&lt;li&gt;Geo-location queries&lt;/li&gt;
&lt;li&gt;Joining content across relationships&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/link/5ac355697a9945e28783be9578e07ca8.aspx&quot; width=&quot;1064&quot; height=&quot;506&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Technology Choices&lt;/h2&gt;
&lt;p&gt;The Learning Centre is built with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Blazor WebAssembly&lt;/strong&gt;&amp;nbsp;- Runs entirely in the browser, no server needed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.NET 10.0 / C# 13&lt;/strong&gt;&amp;nbsp;- Type-safe, familiar to Optimizely developers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailwind CSS&lt;/strong&gt;&amp;nbsp;- Clean, responsive UI with dark mode support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Browser LocalStorage&lt;/strong&gt;&amp;nbsp;- Settings and progress persist without a database&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why client-side only? Because your Graph credentials stay in your browser. There&#39;s no server storing your connection details&amp;mdash;just you and your Optimizely Graph instance.&lt;/p&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Configure your connection&lt;/strong&gt;: Add your Optimizely Graph endpoint and authentication (HMAC, SingleKey, or none for public endpoints)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test the connection&lt;/strong&gt;: Verify you can reach your Graph instance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Start learning&lt;/strong&gt;: Begin with Module 1 or jump to any topic that interests you&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Experiment&lt;/strong&gt;: Use the Playground and Query Builder to try your own queries&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Who Is This For?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Developers new to Optimizely Graph&lt;/strong&gt;&amp;nbsp;who want structured, hands-on learning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Teams migrating from Search &amp;amp; Navigation&lt;/strong&gt;&amp;nbsp;who need a clear path forward&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content managers&lt;/strong&gt;&amp;nbsp;who want to build queries without learning GraphQL syntax&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely partners&lt;/strong&gt;&amp;nbsp;looking for training material for client onboarding&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anyone&lt;/strong&gt;&amp;nbsp;who learns better by doing than by reading documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Try It Today&lt;/h2&gt;
&lt;p&gt;The Optimizely Graph Learning Centre is open source and ready to use and has been deployed as an Azure Static Web App which can be accessed on the following link&amp;nbsp;&lt;a href=&quot;https://optilearningcentre.adayinthelife.pro&quot;&gt;https://optilearningcentre.adayinthelife.pro&lt;/a&gt; - &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;&lt;strong&gt;Note. this is a beta version so any feedback is welcome&lt;/strong&gt;&lt;/span&gt;. Whether you&#39;re writing your first query or optimizing complex content delivery patterns, it&#39;s designed to help you succeed with Optimizely Graph.&lt;/p&gt;
&lt;p&gt;Master GraphQL queries through interactive lessons, visual query building, and hands-on examples. Your journey to Optimizely Graph expertise starts here.&lt;/p&gt;
&lt;p&gt;If you want to contribute or have a play locally with the learning centre, then you can find the full source code on the following Github link &lt;a href=&quot;https://github.com/adayinthelifeofapro/OptiGraphLearningCentre&quot;&gt;https://github.com/adayinthelifeofapro/OptiGraphLearningCentre&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;The Optimizely Graph Learning Centre is built with Blazor WebAssembly and requires no backend infrastructure. Connect your own Optimizely Graph instance and start learning immediately.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;br /&gt;&lt;img class=&quot;clickable&quot; title=&quot;Click image to zoom&quot; src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;p&gt;You can also follow me on&amp;nbsp;&lt;a href=&quot;https://adayinthelife.pro/&quot;&gt;https://adayinthelife.pro&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2026-01-30T09:50:00.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP: Migrating an Optimizely CMS Extension from CMS 12 to CMS 13: A Developer&#39;s Guide</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2026/1/a-day-in-the-life-of-an-optimizely-omvp-migrating-an-optimizely-cms-extension-from-cms-12-to-cms-13-a-developers-guide/" /><id>&lt;p&gt;With Optimizely CMS 13 now available in preview, extension developers need to understand what changes are required to make their packages compatible with the new version. In this post, I&#39;ll walk through the specific changes I made to migrate&amp;nbsp;&lt;strong&gt;OptiGraphExtensions&lt;/strong&gt; - an Optimizely CMS add-on for managing synonyms, pinned results, webhooks, and custom data sources within Optimizely Graph.&lt;/p&gt;
&lt;h2&gt;Overview of CMS 13 Changes&lt;/h2&gt;
&lt;p&gt;Before diving into the technical details, it&#39;s worth understanding the scope of this migration. Unlike the extensive CMS 11 to CMS 12 upgrade (which involved moving from .NET Framework to .NET), the CMS 12 to CMS 13 migration is considerably more straightforward. The major changes include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;.NET 10 requirement&lt;/strong&gt; - CMS 13 targets .NET 10&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deprecated APIs&lt;/strong&gt; - Several legacy APIs have been marked obsolete&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New Application Model&lt;/strong&gt; - SiteDefinition is replaced with a more flexible application configuration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shell UI Tag Helpers&lt;/strong&gt; - New &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;&amp;lt;platform-navigation /&amp;gt;&lt;/span&gt; element replaces legacy navigation helpers&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Step 1: Update the Target Framework&lt;/h2&gt;
&lt;p&gt;The first and most fundamental change is updating your target framework from .NET 8 to .NET 10.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before (CMS 12):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;TargetFramework&amp;gt;net8.0&amp;lt;/TargetFramework&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;After (CMS 13):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;TargetFramework&amp;gt;net10.0&amp;lt;/TargetFramework&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Step 2: Update NuGet Package References&lt;/h2&gt;
&lt;p&gt;All Optimizely packages need to be updated to version 13.x. Here&#39;s what changed in the main extension project:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before (CMS 12):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;PackageReference Include=&quot;EPiServer.CMS.UI.Core&quot; Version=&quot;12.23.0&quot; /&amp;gt;
&amp;lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore&quot; Version=&quot;8.0.19&quot; /&amp;gt;
&amp;lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.SqlServer&quot; Version=&quot;8.0.19&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;After (CMS 13):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;PackageReference Include=&quot;EPiServer.CMS.UI.Core&quot; Version=&quot;13.0.0-preview2&quot; /&amp;gt;
&amp;lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore&quot; Version=&quot;10.0.2&quot; /&amp;gt;
&amp;lt;PackageReference Include=&quot;Microsoft.EntityFrameworkCore.SqlServer&quot; Version=&quot;10.0.2&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For the sample CMS site, additional packages are required:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;PackageReference Include=&quot;EPiServer.CMS&quot; Version=&quot;13.0.0-preview2&quot; /&amp;gt;
&amp;lt;PackageReference Include=&quot;EPiServer.CMS.AspNetCore.Routing&quot; Version=&quot;13.0.0-preview2&quot; /&amp;gt;
&amp;lt;PackageReference Include=&quot;EPiServer.Cms.UI.AspNetIdentity&quot; Version=&quot;13.0.0-preview2&quot; /&amp;gt;
&amp;lt;PackageReference Include=&quot;EPiServer.Framework&quot; Version=&quot;13.0.0-preview2&quot; /&amp;gt;
&amp;lt;PackageReference Include=&quot;EPiServer.CMS.UI.Core&quot; Version=&quot;13.0.0-preview2&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Step 3: Update global.json&lt;/h2&gt;
&lt;p&gt;If your solution uses a &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;global.json&lt;/span&gt; file to pin the SDK version, update it to .NET 10:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;sdk&quot;: {
    &quot;version&quot;: &quot;10.0.102&quot;,
    &quot;rollForward&quot;: &quot;latestMinor&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Step 4: Handle Deprecated APIs&lt;/h2&gt;
&lt;p&gt;CMS 13 deprecates several APIs that were commonly used in extensions. Here&#39;s what to look for and how to fix them:&lt;/p&gt;
&lt;h3&gt;PageReference &amp;rarr; ContentReference&lt;/h3&gt;
&lt;p&gt;If your extension uses &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;PageReference&lt;/span&gt;, replace it with &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;ContentReference&lt;/span&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Before
PageReference pageRef = new PageReference(123);

// After
ContentReference contentRef = new ContentReference(123);
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;PageData.PageLink &amp;rarr; ContentLink&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Before
var link = pageData.PageLink;

// After
var link = pageData.ContentLink;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;IContentTypeRepository Generic Parameter&lt;/h3&gt;
&lt;p&gt;The generic argument has been removed from &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;IContentTypeRepository&lt;/span&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Before
IContentTypeRepository&amp;lt;PageType&amp;gt; _pageTypeRepository;

// After
IContentTypeRepository _contentTypeRepository;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Service Location Changes&lt;/h3&gt;
&lt;p&gt;Service location via &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;InitializationEngine.Locate&lt;/span&gt; and &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;context.Locate.Advanced.GetInstance&amp;lt;T&amp;gt;()&lt;/span&gt; is now obsolete. Use constructor injection with &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;IServiceProvider&lt;/span&gt; instead:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Before (obsolete)
var myService = context.Locate.Advanced.GetInstance&amp;lt;IMyService&amp;gt;();

// After (preferred)
public class MyClass
{
    private readonly IMyService _myService;

    public MyClass(IServiceProvider serviceProvider)
    {
        _myService = serviceProvider.GetRequiredService&amp;lt;IMyService&amp;gt;();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Check compiler warnings in your IDE - they will guide you to all deprecated API usage in your codebase.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Step 5: Update Startup Configuration&lt;/h2&gt;
&lt;p&gt;CMS 13 requires some additional configuration in your &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;Startup.cs&lt;/span&gt;:&lt;/p&gt;
&lt;h3&gt;Add Visitor Groups Support&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;services.AddCmsAspNetIdentity&amp;lt;ApplicationUser&amp;gt;()
        .AddCms()
        .AddAdminUserRegistration(x =&amp;gt; x.Behavior = RegisterAdminUserBehaviors.Enabled | RegisterAdminUserBehaviors.LocalRequestsOnly)
        .AddVisitorGroups()  // Required in CMS 13
        .AddEmbeddedLocalization&amp;lt;Startup&amp;gt;();
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Configure Database Compatibility&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;services.Configure&amp;lt;DataAccessOptions&amp;gt;(options =&amp;gt;
{
    options.UpdateDatabaseCompatibilityLevel = true;
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Step 6: Handle Blazor Component Changes (.NET 10)&lt;/h2&gt;
&lt;p&gt;If your extension uses Blazor components (as OptiGraphExtensions does), you may need to add this property to your consuming project&#39;s &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;.csproj&lt;/span&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-xml&quot;&gt;&amp;lt;!-- Required for .NET 10+ when Blazor components are in a referenced library --&amp;gt;
&amp;lt;RequiresAspNetWebAssets&amp;gt;true&amp;lt;/RequiresAspNetWebAssets&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This ensures that static web assets from referenced Razor Class Libraries are properly included.&lt;/p&gt;
&lt;h2&gt;Step 7: Update Admin Layout Pages with New Shell UI Tag Helpers&lt;/h2&gt;
&lt;p&gt;CMS 13 introduces a new way to integrate admin pages with the Optimizely Shell navigation using Tag Helpers. If your extension has custom admin pages, you&#39;ll need to update your layout files.&lt;/p&gt;
&lt;h3&gt;Add the EPiServer.Shell.UI Tag Helper&lt;/h3&gt;
&lt;p&gt;In your admin layout file (e.g., &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;_LayoutBlazorAdminPage.cshtml&lt;/span&gt;), add the new tag helper reference:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, EPiServer.Shell.UI
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;EPiServer.Shell.UI&lt;/span&gt; tag helper library provides new custom elements for integrating with the CMS shell.&lt;/p&gt;
&lt;h3&gt;Replace Navigation Helper Methods with Platform Navigation Element&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Before (CMS 12):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;@Html.CreatePlatformNavigationMenu()
&amp;lt;div @Html.ApplyPlatformNavigation()&amp;gt;
    @RenderBody()
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;After (CMS 13):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;platform-navigation /&amp;gt;
&amp;lt;div style=&quot;padding-top: 56px; padding-left: 10px; padding-right: 10px; background: white;&quot;&amp;gt;
    @RenderBody()
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The new &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;&amp;lt;platform-navigation /&amp;gt;&lt;/span&gt; element is a Tag Helper that renders the Optimizely platform navigation bar. Key things to note:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fixed positioning&lt;/strong&gt; - The &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;&amp;lt;platform-navigation /&amp;gt;&lt;/span&gt; element creates a fixed navigation bar at the top of the page&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content offset required&lt;/strong&gt; - You must add &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;padding-top: 56px&lt;/span&gt; (or similar) to your content wrapper to prevent it from being hidden behind the fixed navigation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scrolling fix&lt;/strong&gt; - The Shell CSS may set &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;overflow: hidden&lt;/span&gt; on the body, so you may need to override this:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;html, body {
    overflow: auto !important;
    height: auto !important;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Complete Layout Example&lt;/h3&gt;
&lt;p&gt;Here&#39;s a complete example of a CMS 13 compatible admin layout:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;@using EPiServer.Framework.Web.Resources
@using EPiServer.Shell.Navigation
@using EPiServer.Shell.UI.Helpers.Internal

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, EPiServer.Shell.UI

&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;My Extension&amp;lt;/title&amp;gt;

    &amp;lt;!-- Shell resources for styling --&amp;gt;
    @ClientResources.RenderResources(&quot;ShellCore&quot;)
    @ClientResources.RenderResources(&quot;ShellCoreLightTheme&quot;)

    &amp;lt;style&amp;gt;
        html, body {
            overflow: auto !important;
            height: auto !important;
        }
    &amp;lt;/style&amp;gt;

    &amp;lt;base href=&quot;~/&quot; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    @Html.AntiForgeryToken()
    &amp;lt;platform-navigation /&amp;gt;
    &amp;lt;div style=&quot;padding-top: 56px; padding-left: 10px; padding-right: 10px; background: white;&quot;&amp;gt;
        @RenderBody()
    &amp;lt;/div&amp;gt;

    &amp;lt;script src=&quot;_framework/blazor.server.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Step 8: Update the Application Model (Site Configuration)&lt;/h2&gt;
&lt;p&gt;CMS 13 replaces &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;SiteDefinition&lt;/span&gt; with a new &lt;strong&gt;Application Model&lt;/strong&gt;. After upgrading, your site will return 404 errors until you reconfigure it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; &amp;rarr; &lt;strong&gt;Applications&lt;/strong&gt; in the CMS admin&lt;/li&gt;
&lt;li&gt;Delete the default &quot;Headless&quot; application (if present)&lt;/li&gt;
&lt;li&gt;Create a new &quot;In Process&quot; application&lt;/li&gt;
&lt;li&gt;Set the start page reference&lt;/li&gt;
&lt;li&gt;Add your host entries (e.g., &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;localhost:5000&lt;/span&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Code Changes for SiteDefinition&lt;/h3&gt;
&lt;p&gt;If your extension accesses site configuration programmatically:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;// Before
var rootPage = SiteDefinition.Current.RootPage;

// After
private readonly IApplicationResolver _applicationResolver;

public async Task&amp;lt;ContentReference&amp;gt; GetRootPageAsync(CancellationToken cancellationToken)
{
    var app = await _applicationResolver.GetByContextAsync(cancellationToken);
    // Or use ContentReference.RootPage for the global root
    return ContentReference.RootPage;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Step 9: Test Thoroughly&lt;/h2&gt;
&lt;p&gt;After making all the changes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Build the solution&lt;/strong&gt; - Fix any remaining compiler warnings about obsolete APIs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Run unit tests&lt;/strong&gt; - Ensure all tests pass with the new framework&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test the admin interface&lt;/strong&gt; - Verify your extension&#39;s UI works correctly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test all functionality&lt;/strong&gt; - Go through each feature manually&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Build the solution
dotnet build src/OptiGraphExtensions.sln

# Run tests
dotnet test src/OptiGraphExtensions.Tests/OptiGraphExtensions.Tests.csproj

# Run the sample site
cd Sample/SampleCms
dotnet run
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;What Didn&#39;t Need to Change&lt;/h2&gt;
&lt;p&gt;It&#39;s worth noting what remained unchanged in the migration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Entity Framework models and DbContext&lt;/strong&gt; - Just updated package versions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MVC controllers and API endpoints&lt;/strong&gt; - No changes to routing or controller structure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blazor components&lt;/strong&gt; - Component code remained the same&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content views&lt;/strong&gt; - Page and block templates work the same way&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Module configuration&lt;/strong&gt; - The &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;module.config&lt;/span&gt; format is unchanged&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authorization policies&lt;/strong&gt; - Same approach works in CMS 13&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Summary of Changes&lt;/h2&gt;
&lt;table style=&quot;width: 62.181%; height: 235.125px;&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;th style=&quot;width: 20.7109%; height: 19.5938px;&quot;&gt;Area&lt;/th&gt;
&lt;th style=&quot;width: 75.6918%; height: 19.5938px;&quot;&gt;Change Required&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 20.7109%; height: 19.5938px;&quot;&gt;Target Framework&lt;/td&gt;
&lt;td style=&quot;width: 75.6918%; height: 19.5938px;&quot;&gt;&lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;net8.0&lt;/span&gt; &amp;rarr; &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;net10.0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 20.7109%; height: 19.5938px;&quot;&gt;EPiServer packages&lt;/td&gt;
&lt;td style=&quot;width: 75.6918%; height: 19.5938px;&quot;&gt;&lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;12.x&lt;/span&gt; &amp;rarr; &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;13.0.0-preview2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 20.7109%; height: 19.5938px;&quot;&gt;Entity Framework&lt;/td&gt;
&lt;td style=&quot;width: 75.6918%; height: 19.5938px;&quot;&gt;&lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;8.0.x&lt;/span&gt; &amp;rarr; &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;10.0.x&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 20.7109%; height: 19.5938px;&quot;&gt;PageReference&lt;/td&gt;
&lt;td style=&quot;width: 75.6918%; height: 19.5938px;&quot;&gt;Replace with &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;ContentReference&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 20.7109%; height: 19.5938px;&quot;&gt;SiteDefinition&lt;/td&gt;
&lt;td style=&quot;width: 75.6918%; height: 19.5938px;&quot;&gt;Use &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;IApplicationResolver&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 20.7109%; height: 19.5938px;&quot;&gt;Service Location&lt;/td&gt;
&lt;td style=&quot;width: 75.6918%; height: 19.5938px;&quot;&gt;Use constructor injection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 20.7109%; height: 19.5938px;&quot;&gt;Startup.cs&lt;/td&gt;
&lt;td style=&quot;width: 75.6918%; height: 19.5938px;&quot;&gt;Add &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;AddVisitorGroups()&lt;/span&gt; and &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;UpdateDatabaseCompatibilityLevel&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 39.1875px;&quot;&gt;
&lt;td style=&quot;width: 20.7109%; height: 39.1875px;&quot;&gt;Blazor (consuming project)&lt;/td&gt;
&lt;td style=&quot;width: 75.6918%; height: 39.1875px;&quot;&gt;Add &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;RequiresAspNetWebAssets&lt;/span&gt; property&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 20.7109%; height: 19.5938px;&quot;&gt;Admin Layouts&lt;/td&gt;
&lt;td style=&quot;width: 75.6918%; height: 19.5938px;&quot;&gt;Add &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;@addTagHelper *, EPiServer.Shell.UI&lt;/span&gt; and use &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;&amp;lt;platform-navigation /&amp;gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 20.7109%; height: 19.5938px;&quot;&gt;Shell Navigation&lt;/td&gt;
&lt;td style=&quot;width: 75.6918%; height: 19.5938px;&quot;&gt;Replace &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;@Html.CreatePlatformNavigationMenu()&lt;/span&gt; with &lt;span style=&quot;color: rgb(224, 62, 45);&quot;&gt;&amp;lt;platform-navigation /&amp;gt; &lt;/span&gt;element&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Migrating an Optimizely CMS extension from version 12 to 13 is relatively straightforward compared to previous major version upgrades. The main work involves updating package versions, replacing deprecated APIs with their modern equivalents, and testing thoroughly.&lt;/p&gt;
&lt;p&gt;For OptiGraphExtensions, the extension&#39;s clean architecture - using dependency injection throughout and avoiding service location - meant that most of the code required no changes at all. This is a good reminder of why following modern .NET patterns pays dividends when upgrade time comes.&lt;/p&gt;
&lt;h2&gt;Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/link/401767d8a5e8446db6e213b139618c2d.aspx&quot;&gt;From 12 to 13 preview: A Developer&#39;s Guide to testing an Optimizely CMS 13 Alloy Site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.optimizely.com/insights/cms-13-what-you-need-to-know/&quot;&gt;CMS 13: What You Need to Know - Optimizely Webinar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gulla.net/en/blog/optimizely-cms-roadmap/&quot;&gt;Optimizely CMS Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/adayinthelifeofapro/OptiGraphExtensions&quot;&gt;OptiGraphExtensions on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Note: This guide is based on the CMS 13 preview release. Some details may change before the final release. Always refer to the official Optimizely documentation for the most up-to-date information.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;img class=&quot;clickable&quot; title=&quot;Click image to zoom&quot; src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;p&gt;You can also follow me on&amp;nbsp;&lt;a href=&quot;https://adayinthelife.pro/&quot;&gt;https://adayinthelife.pro&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2026-01-26T20:00:51.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP: Opti North Manchester - January 2026 Meetup Recap</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2026/1/a-day-in-the-life-of-an-optimizely-omvp-opti-north-manchester---january-2026-meetup-recap/" /><id>&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;There&#39;s something special about the Optimizely community in the North. On 22nd January, we gathered at the Everyman Cinema in Manchester for the latest Opti North meetup, and it didn&#39;t disappoint.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Five speakers. One evening. A room full of people who genuinely care about building better digital experiences. Big thanks to &lt;strong&gt;Optimizely&lt;/strong&gt;, &lt;strong&gt;MSQ DX&lt;/strong&gt; and &lt;strong&gt;Valtech&lt;/strong&gt; for organising, and to &lt;strong&gt;Ibrar Hussain&lt;/strong&gt; (MSQ DX) and &lt;strong&gt;Paul Gruffyd&lt;/strong&gt; (Valtech) for hosting and keeping the evening running smoothly.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;img src=&quot;/link/635b0e0bd0414a9e9fae053d7c997f6f.aspx&quot; alt=&quot;&quot; width=&quot;542&quot; height=&quot;722&quot; /&gt;&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Here&#39;s what went down.&lt;/p&gt;
&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;Graham Carr &amp;ndash; Your Audience, On Demand: Opal&#39;s Virtual Focus Group&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Yes, that&#39;s me. I had the pleasure of sharing the Virtual Focus Group concept that Netcel developed as part of the Optimizely Opal Innovation Challenge &amp;ndash; which we were thrilled to win.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;I started by walking through the vision: what if you could get instant, meaningful feedback on your content from AI agents that genuinely embody your customer personas? Not generic AI responses, but feedback shaped by real audience research and behavioural data.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;I showed the 5-minute video we created for our Innovation Challenge submission, which brought the concept to life. Then I did a deep-dive into the technical side &amp;ndash; how we built the specialised agents within Opal, how we structured the workflow, and the nuts and bolts of triggers, conditions, and outputs that make it all hang together.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;It was great to share this with fellow practitioners and hear their thoughts on where it could go next. The questions afterwards showed there&#39;s real appetite for this kind of AI-assisted content validation.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;img src=&quot;/link/39dcd6be6c8649e79de1f9af048c6713.aspx&quot; alt=&quot;&quot; width=&quot;1079&quot; height=&quot;809&quot; /&gt;&lt;/p&gt;
&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;Khurram Khan &amp;ndash; Decoupling Behaviour with the Strategy Pattern&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Khurram delivered an inspiring session that really grilled into you the importance of design patterns when writing clean, maintainable code.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The strategy pattern isn&#39;t new &amp;ndash; it&#39;s been around for decades &amp;ndash; but Khurram made a compelling case for why it still matters, particularly when you&#39;re building complex Optimizely implementations. Decoupling behaviour from the classes that use it makes your code more testable, more flexible, and far easier to extend down the line.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;A good reminder that solid fundamentals never go out of fashion, no matter how shiny the new tools get.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;img src=&quot;/link/99ce4a6a72c2455c90f1e2fa39280cfc.aspx&quot; alt=&quot;&quot; width=&quot;1077&quot; height=&quot;808&quot; /&gt;&lt;/p&gt;
&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;Anil Patel &amp;ndash; Playwright Testing Integration with Optimizely CMS&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Automated testing often gets pushed down the priority list when deadlines loom, but Anil made a strong case for why it shouldn&#39;t.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;He gave a solid grounding in Playwright itself &amp;ndash; what it is, how it works, and why it&#39;s become such a popular choice for end-to-end testing. But the real value was in seeing how it can be applied to Optimizely-specific scenarios: testing Content Graph queries, validating content block rendering, and ensuring your CMS behaves as expected across different contexts.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Practical, no-nonsense, and immediately applicable. The kind of session that makes you want to go back to your codebase and start writing tests.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;img src=&quot;/link/a11993215704403b887773e23f28c292.aspx&quot; alt=&quot;&quot; width=&quot;1071&quot; height=&quot;803&quot; /&gt;&lt;/p&gt;
&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;Mark Everard &amp;ndash; Hype, Hesitation or Happening?&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Mark took a different approach with an &quot;unpanel&quot; discussion on the state of AI-enabled development for Optimizely.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Rather than slides and speeches, this was interactive, audience-led, and refreshingly candid. Mark posed a simple question: where do you sit on the AI adoption spectrum? Are you in the &lt;strong&gt;hype&lt;/strong&gt; camp (excited but not yet doing much), the &lt;strong&gt;hesitation&lt;/strong&gt; camp (sceptical or cautious), or the &lt;strong&gt;happening&lt;/strong&gt; camp (actively using AI in your day-to-day work)?&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;What followed was an honest conversation about the realities of AI adoption. We talked about the consequences of each stance &amp;ndash; what you gain, what you risk, and what you might be missing. No hard sell, no evangelism, just practitioners sharing where they&#39;re actually at.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;It was one of those sessions that stays with you afterwards.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;img src=&quot;/link/9b28b01865b9474fa7d5c235bf34041f.aspx&quot; alt=&quot;&quot; width=&quot;1056&quot; height=&quot;792&quot; /&gt;&lt;/p&gt;
&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;Simon Chapman &amp;ndash; What&#39;s New in Optimizely&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Simon rounded off the evening with an inspiring tour of what&#39;s new and what&#39;s coming from Optimizely.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;As always, Simon&#39;s enthusiasm for the platform is infectious. He covered the latest developments with particular emphasis on the upcoming &lt;strong&gt;CMS 13&lt;/strong&gt; release &amp;ndash; plenty to look forward to there &amp;ndash; and gave us a look at &lt;strong&gt;Commerce Connect 15&lt;/strong&gt; and what it means for commerce implementations.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Essential viewing for anyone working with the platform day-to-day.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;img src=&quot;/link/8ecf7ab8b31046c0816792b672a835fd.aspx&quot; alt=&quot;&quot; width=&quot;1055&quot; height=&quot;791&quot; /&gt;&lt;/p&gt;
&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;The Vibe&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Beyond the talks, it&#39;s the conversations in between that make these events worthwhile. Catching up with familiar faces, meeting new ones, and comparing notes on the challenges we&#39;re all navigating.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The Everyman Cinema was a great venue &amp;ndash; comfortable, relaxed, and a nice change from the usual conference room setup.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Thanks to everyone who came along, to Ibrar and Paul for hosting, and to Optimizely, MSQ DX and Valtech for putting it together. If you&#39;ve not been to an Opti North event yet, keep an eye out for the next one.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;See you at the next one.&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;img class=&quot;clickable&quot; title=&quot;Click image to zoom&quot; src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;p&gt;You can also follow me on&amp;nbsp;&lt;a href=&quot;https://adayinthelife.pro/&quot;&gt;https://adayinthelife.pro&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2026-01-23T08:41:40.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP: Why We Built AI Agents That Talk Back to Your Content</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2026/1/a-day-in-the-life-of-an-optimizely-omvp-why-we-built-ai-agents-that-talk-back-to-your-content/" /><id>&lt;p&gt;There&#39;s a fundamental problem in content marketing that&#39;s been bugging me for years: by the time you find out your content doesn&#39;t resonate with your audience, it&#39;s already live. The damage is done. The budget&#39;s spent.&lt;/p&gt;
&lt;p&gt;Traditional focus groups can help, but they take weeks to organise, cost a fortune, and by the time you get the insights, the campaign moment has passed. What if you could get that same depth of audience feedback in minutes, right inside your content workflow?&lt;/p&gt;
&lt;p&gt;That&#39;s exactly what we set out to build at &lt;a href=&quot;https://www.netcel.com&quot;&gt;Netcel&lt;/a&gt;. And it&#39;s why our Virtual Focus Group solution just won the Optimizely Opal Innovation Challenge 2025.&lt;/p&gt;
&lt;h2&gt;The Problem We Were Trying to Solve&lt;/h2&gt;
&lt;p&gt;Content teams are under immense pressure. Budgets are tighter. Expectations for personalisation are sky-high. And customer signals are more fragmented than ever. Everyone&#39;s creating more content, but how do you know it&#39;s actually going to land?&lt;/p&gt;
&lt;p&gt;Most teams resort to educated guessing. They rely on historical analytics, gut instinct, or wait until something&#39;s published to see what happens. That&#39;s expensive. It&#39;s slow. And it leaves a lot of value on the table.&lt;/p&gt;
&lt;h2&gt;Enter AI Personas as Your Audience Panel&lt;/h2&gt;
&lt;p&gt;Our solution flips the script entirely. Instead of waiting for real audience feedback after publication, we&#39;ve created AI agents that embody genuine customer personas - complete with their motivations, frustrations, literacy levels, and behavioural traits.&lt;/p&gt;
&lt;p&gt;These aren&#39;t generic chatbots offering surface-level opinions. They&#39;re sophisticated agents built on Optimizely&#39;s Opal AI orchestration layer, trained to reflect the nuanced characteristics of real customer segments.&lt;/p&gt;
&lt;p&gt;When you&#39;re crafting content, you can now have a conversation with your target audience before anything goes live. Ask them what they think. Get them to critique your messaging. Understand what resonates and what falls flat.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/2b18f0999b92416d8f5d05bae11e9f3d.aspx&quot; alt=&quot;&quot; width=&quot;1047&quot; height=&quot;505&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;What Makes This Different&lt;/h2&gt;
&lt;p&gt;The magic here isn&#39;t just the AI - it&#39;s the integration. Virtual Focus Groups sit directly within your content operations workflow. There&#39;s no context-switching to external tools. No waiting for research teams. The feedback loop is immediate.&lt;/p&gt;
&lt;p&gt;And because it&#39;s built on Opal, everything respects your brand&#39;s tone, compliance rules, and data governance. This isn&#39;t a Wild West AI experiment - it&#39;s an enterprise-grade solution that scales safely.&lt;/p&gt;
&lt;p&gt;The practical benefits stack up quickly:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Speed&lt;/strong&gt; - Test content variations in minutes rather than weeks. Iterate faster. Ship with confidence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cost efficiency&lt;/strong&gt; - Reduce reliance on expensive research cycles while actually improving the quality of insight.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Emotional intelligence&lt;/strong&gt; - Capture the nuance that traditional analytics miss. Understand &lt;em&gt;why&lt;/em&gt; something works, not just &lt;em&gt;that&lt;/em&gt; it works.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scale&lt;/strong&gt; - Test multiple content variations across different personas simultaneously. Find the strongest direction before committing resources.&lt;/p&gt;
&lt;h2&gt;The Bigger Picture&lt;/h2&gt;
&lt;p&gt;This project represents something I find genuinely exciting about where AI is heading. We&#39;re not replacing human creativity - we&#39;re augmenting it. Giving content creators a superpower they&#39;ve never had before: an instant audience.&lt;/p&gt;
&lt;p&gt;The insights don&#39;t just sit in isolation either. Because Virtual Focus Groups integrate with the wider Optimizely stack, teams can act immediately on feedback - triggering campaigns, informing personalisation strategies, and feeding learnings back into content creation.&lt;/p&gt;
&lt;h2&gt;What&#39;s Next&lt;/h2&gt;
&lt;p&gt;We&#39;re already in conversations with forward-thinking organisations about how this technology can extend beyond content validation. Imagine using AI personas to accelerate product research, test compliance messaging, or explore new market segments - all without the traditional time and cost barriers.&lt;/p&gt;
&lt;p&gt;The recognition from Optimizely is fantastic, but what really matters is whether this helps teams create better content that connects with real people. Early signs suggest it does. And we&#39;re just getting started.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Interested in exploring how Virtual Focus Groups could work for your organisation? &lt;a href=&quot;mailto:hello@netcel.com&quot;&gt;Get in touch with the team at Netcel&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;img class=&quot;clickable&quot; title=&quot;Click image to zoom&quot; src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;p&gt;You can also follow me on&amp;nbsp;&lt;a href=&quot;https://adayinthelife.pro/&quot;&gt;https://adayinthelife.pro&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2026-01-21T12:17:33.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP: Unlock the Power of Unified Search: Introducing Custom Data Management for Optimizely Graph</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2026/1/a-day-in-the-life-of-an-optimizely-omvp-unlock-the-power-of-unified-search-introducing-custom-data-management-for-optimizely-graph/" /><id>&lt;p&gt;&lt;strong&gt;Bring all your data together in one searchable experience&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The Challenge: Siloed Data, Fragmented Search&lt;/h2&gt;
&lt;p&gt;Every organisation has data spread across multiple systems. Your product information might live in an ERP system, customer reviews in a third-party platform, and event listings in an external calendar service. Meanwhile, your website visitors expect to find everything in one place.&lt;/p&gt;
&lt;p&gt;Traditional approaches force you to choose: either build complex custom integrations or accept that some content simply won&#39;t appear in your site search. Neither option is ideal.&lt;/p&gt;
&lt;h2&gt;The Solution: Custom Data Sources in Optimizely Graph&lt;/h2&gt;
&lt;p&gt;The Custom Data Management feature in OptiGraphExtensions bridges this gap. It allows you to bring external data into Optimizely Graph, making it searchable alongside your CMS content. The result? A unified search experience that spans your entire digital ecosystem.&lt;/p&gt;
&lt;h3&gt;What Does This Mean in Practice?&lt;/h3&gt;
&lt;p&gt;Imagine a university website where prospective students can search and find:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Course pages (from the CMS)&lt;/li&gt;
&lt;li&gt;Staff profiles (from an HR system)&lt;/li&gt;
&lt;li&gt;Research publications (from an academic database)&lt;/li&gt;
&lt;li&gt;Upcoming events (from an events platform)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All from a single search box. That&#39;s the power of Custom Data.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/eb4fb250272f4c388a9e8be09d48e28b.aspx&quot; alt=&quot;&quot; width=&quot;912&quot; height=&quot;410&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Key Features at a Glance&lt;/h2&gt;
&lt;h3&gt;Visual Schema Builder&lt;/h3&gt;
&lt;p&gt;No need to write complex code. The visual schema builder lets you define your data structure through an intuitive interface. Simply specify what fields your data will have&amp;mdash;titles, descriptions, dates, categories&amp;mdash;and the system handles the rest.&lt;/p&gt;
&lt;p&gt;For those who prefer more control, a raw JSON editor is also available for advanced configurations.&lt;/p&gt;
&lt;h3&gt;Multi-Language Support&lt;/h3&gt;
&lt;p&gt;Operating in multiple markets? Custom Data fully supports multi-language content. Define language-specific versions of your data, and Optimizely Graph will serve the right content to the right audience.&lt;/p&gt;
&lt;h3&gt;Flexible Data Entry&lt;/h3&gt;
&lt;p&gt;Whether you&#39;re adding a handful of records or thousands, you have options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual entry&lt;/strong&gt;&amp;nbsp;for small datasets or one-off additions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bulk import&lt;/strong&gt;&amp;nbsp;for larger data migrations&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;New: Automated External API Imports&lt;/h2&gt;
&lt;p&gt;The latest enhancement takes Custom Data to the next level. You can now connect directly to external REST APIs and automatically import data on a schedule.&lt;/p&gt;
&lt;h3&gt;Connect to Any REST API&lt;/h3&gt;
&lt;p&gt;Have a product catalogue exposed via API? A events feed? A jobs board? Simply provide the API endpoint, configure any required authentication, and map the fields to your custom data schema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Supported authentication methods:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No authentication (public APIs)&lt;/li&gt;
&lt;li&gt;API Key&lt;/li&gt;
&lt;li&gt;Basic authentication&lt;/li&gt;
&lt;li&gt;Bearer token&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/link/13a78f3ac2444d0b9bf62b4d7ff299a0.aspx&quot; alt=&quot;&quot; width=&quot;912&quot; height=&quot;484&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Intelligent Field Mapping&lt;/h3&gt;
&lt;p&gt;External APIs rarely match your exact requirements. The field mapping feature lets you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Select which fields to import&lt;/li&gt;
&lt;li&gt;Map API field names to your schema properties&lt;/li&gt;
&lt;li&gt;Navigate nested JSON structures with ease&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Preview your import before committing to ensure everything looks correct.&lt;/p&gt;
&lt;h3&gt;Set It and Forget It: Scheduled Imports&lt;/h3&gt;
&lt;p&gt;This is where the real time-saving begins. Configure your imports to run automatically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hourly&lt;/strong&gt;&amp;nbsp;&amp;ndash; For rapidly changing data like stock levels or availability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Daily&lt;/strong&gt;&amp;nbsp;&amp;ndash; Perfect for content that updates overnight&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Weekly&lt;/strong&gt;&amp;nbsp;&amp;ndash; Ideal for periodic updates like event listings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monthly&lt;/strong&gt;&amp;nbsp;&amp;ndash; Suitable for relatively static reference data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Choose the specific time and day that works best for your workflow.&lt;/p&gt;
&lt;h3&gt;Built-In Reliability&lt;/h3&gt;
&lt;p&gt;Things don&#39;t always go smoothly with external systems. That&#39;s why automated imports include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automatic retry with exponential backoff&lt;/strong&gt;&amp;nbsp;&amp;ndash; If an import fails, the system will retry with increasing intervals (1 minute, 5 minutes, 15 minutes, 30 minutes), giving temporary issues time to resolve&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email notifications&lt;/strong&gt;&amp;nbsp;&amp;ndash; Get alerted when imports fail, and receive confirmation when they recover&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Execution history&lt;/strong&gt;&amp;nbsp;&amp;ndash; Full audit trail of every import, including success rates, item counts, and any warnings or errors&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;Real-World Use Cases&lt;/h2&gt;
&lt;h3&gt;E-Commerce: Product Data from Your PIM&lt;/h3&gt;
&lt;p&gt;Connect your Product Information Management system to Optimizely Graph. When customers search your site, they&#39;ll find products with up-to-date pricing, availability, and specifications&amp;mdash;all synchronised automatically overnight.&lt;/p&gt;
&lt;h3&gt;Healthcare: Provider Directory&lt;/h3&gt;
&lt;p&gt;Import practitioner information from your credentialing system. Patients can search by speciality, location, or availability, with data refreshed daily to reflect the latest schedules.&lt;/p&gt;
&lt;h3&gt;Media &amp;amp; Publishing: External Content Feeds&lt;/h3&gt;
&lt;p&gt;Aggregate content from partner publications or wire services. Scheduled imports ensure your search results always include the latest articles without manual intervention.&lt;/p&gt;
&lt;h3&gt;Recruitment: Job Listings&lt;/h3&gt;
&lt;p&gt;Pull open positions from your applicant tracking system. Hourly imports ensure job seekers always see current opportunities, with closed positions automatically removed.&lt;/p&gt;
&lt;h3&gt;Education: Course Catalogues&lt;/h3&gt;
&lt;p&gt;Sync course information from your student information system. Prospective students can search across programmes, modules, and entry requirements, all updated automatically each term.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;Custom Data Management is available now in OptiGraphExtensions. Here&#39;s how to begin:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Navigate to Custom Data&lt;/strong&gt;&amp;nbsp;in the Optimizely Graph Extensions administration area&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create a new data source&lt;/strong&gt;&amp;nbsp;with a unique identifier&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Define your schema&lt;/strong&gt;&amp;nbsp;using the visual builder or JSON editor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choose your approach&lt;/strong&gt;: manual entry for small datasets, or configure an API import for automation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set up scheduling&lt;/strong&gt;&amp;nbsp;if you want data to stay synchronised automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sync to Graph&lt;/strong&gt;&amp;nbsp;and start searching&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;The Bottom Line&lt;/h2&gt;
&lt;p&gt;Custom Data Management transforms Optimizely Graph from a CMS search tool into an enterprise search platform. By bringing external data into the same index as your CMS content, you create a seamless experience for your users while reducing the technical complexity of managing multiple search systems.&lt;/p&gt;
&lt;p&gt;The new scheduled import functionality means this integration isn&#39;t a one-time project&amp;mdash;it&#39;s an ongoing, automated process that keeps your search results fresh without manual effort.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your data lives in many places. Your search shouldn&#39;t.&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;OptiGraphExtensions is an open-source add-on for Optimizely CMS 12. For technical documentation and installation instructions, visit the project repository.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;img class=&quot;clickable&quot; title=&quot;Click image to zoom&quot; src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;p&gt;You can also follow me on&amp;nbsp;&lt;a href=&quot;https://adayinthelife.pro/&quot;&gt;https://adayinthelife.pro&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2026-01-16T13:14:20.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP: Introducing Optimizely Style Manager</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2026/1/a-day-in-the-life-of-an-optimizely-omvp-introducing-optimizely-style-manager/" /><id>&lt;p&gt;Managing display templates in Optimizely CMS (SaaS) has traditionally required working directly with the REST API or managing JSON configuration files manually. Today, I&#39;m excited to share a new open-source tool that brings a visual, user-friendly interface to display template management: Optimizely SaaS Style Manager.&lt;/p&gt;
&lt;h2&gt;What Are Display Templates?&lt;/h2&gt;
&lt;p&gt;In Optimizely CMS (SaaS), display templates (also known as &quot;styles&quot;) define how content editors can customise the visual presentation of content. They allow you to create predefined styling options for Sections, Rows, and Columns within Visual Builder, giving content editors flexibility without requiring developer intervention for every design change.&lt;/p&gt;
&lt;p&gt;Each display template can include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A unique key&lt;/strong&gt; for identification&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Display name&lt;/strong&gt; shown to content editors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Base type&lt;/strong&gt; (Section, Row, or Column)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Associated content type&lt;/strong&gt; for context-specific styling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom settings&lt;/strong&gt; with various editor types (text, boolean, number, dropdown)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Challenge&lt;/h2&gt;
&lt;p&gt;While the Optimizely CMS API provides full CRUD operations for display templates, managing them through raw API calls or JSON files presents several challenges:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No visual interface&lt;/strong&gt;&amp;nbsp;for browsing existing templates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual JSON editing&lt;/strong&gt;&amp;nbsp;prone to syntax errors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Difficult to migrate&lt;/strong&gt;&amp;nbsp;templates between environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No search or filtering&lt;/strong&gt;&amp;nbsp;when you have many templates&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Enter Style Manager&lt;/h2&gt;
&lt;p&gt;Style Manager is a Blazor-based web application that connects directly to your Optimizely CMS instance via the REST API, providing a complete management interface for display templates.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/7ae0d5d562d4439492c869a8d59b4c2f.aspx&quot; alt=&quot;&quot; width=&quot;1124&quot; height=&quot;886&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/3888a06426924485b63bbc82fd2592ba.aspx&quot; alt=&quot;&quot; width=&quot;1109&quot; height=&quot;535&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Key Features&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Full CRUD Operations&lt;/strong&gt;&lt;br /&gt;Create, view, edit, and delete display templates through an intuitive form-based interface. No more hand-crafting JSON or making raw API calls.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Smart Search &amp;amp; Filtering&lt;/strong&gt;&lt;br /&gt;Quickly find templates using text search across keys and display names, or filter by base type (Section, Row, Column). With debounced input, the interface stays responsive even with large template collections.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Dynamic Settings Management&lt;/strong&gt;&lt;br /&gt;Configure template settings visually with support for multiple editor types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;String&lt;/strong&gt; - Text input fields&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Boolean&lt;/strong&gt; - Toggle switches&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Number&lt;/strong&gt; - Numeric inputs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Select&lt;/strong&gt;&amp;nbsp;- Dropdown menus with custom choices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Add, remove, and reorder settings and choices without touching JSON.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Content Type Integration&lt;/strong&gt;&lt;br /&gt;The new searchable content type dropdown fetches available content types directly from your CMS instance. Simply start typing to filter, use keyboard navigation, and select the appropriate content type for your template.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Import &amp;amp; Export&lt;/strong&gt;&lt;br /&gt;Transfer templates between environments with ease:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Export&lt;/strong&gt; all templates or select specific ones to download as JSON&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Import&lt;/strong&gt; by pasting JSON or uploading a file&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conflict resolution&lt;/strong&gt; - choose to skip or overwrite existing templates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detailed results&lt;/strong&gt;&amp;nbsp;showing success/failure for each imported template&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/link/d1525e549ebf47b48de3a4c317934dc7.aspx&quot; alt=&quot;&quot; width=&quot;1106&quot; height=&quot;608&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. Secure OAuth Authentication&lt;/strong&gt;&lt;br /&gt;Style Manager uses OAuth 2.0 client credentials flow with automatic token caching and refresh. Your API credentials are configured once, and the application handles authentication transparently.&lt;/p&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;h3&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;.NET 10.0 or later&lt;/li&gt;
&lt;li&gt;An Optimizely CMS (SaaS) instance&lt;/li&gt;
&lt;li&gt;API credentials (Client ID and Client Secret) from your Optimizely dashboard&lt;/li&gt;
&lt;li&gt;Download the repo from &lt;a href=&quot;https://github.com/adayinthelifeofapro/OptimizelySaaSStyleManager&quot;&gt;https://github.com/adayinthelifeofapro/OptimizelySaaSStyleManager&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Configuration&lt;/h3&gt;
&lt;p&gt;Update &lt;strong&gt;appsettings.json &lt;/strong&gt;with your API credentials:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;{&amp;nbsp; &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &quot;OptimizelyApi&quot;: {&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &quot;BaseUrl&quot;: &quot;https://api.cms.optimizely.com/preview3&quot;,&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &quot;TokenUrl&quot;: &quot;https://api.cms.optimizely.com/oauth/token&quot;,&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &quot;ClientId&quot;: &quot;your-client-id&quot;,&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &quot;ClientSecret&quot;: &quot;your-client-secret&quot;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp; }&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Running the Application&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;dotnet run&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Navigate to&amp;nbsp;&lt;strong&gt;https://localhost:5001&lt;/strong&gt; and start managing your display templates.&lt;/p&gt;
&lt;h2&gt;Use Cases&lt;/h2&gt;
&lt;h3&gt;Environment Migration&lt;/h3&gt;
&lt;p&gt;Developing new templates in a staging environment? Export them as JSON and import into production with a few clicks. The conflict resolution feature ensures you won&#39;t accidentally overwrite templates that have diverged.&lt;/p&gt;
&lt;h3&gt;Template Auditing&lt;/h3&gt;
&lt;p&gt;Need to review all templates for a specific content type? Use the search and filter capabilities to quickly locate and audit relevant templates.&lt;/p&gt;
&lt;h3&gt;Rapid Prototyping&lt;/h3&gt;
&lt;p&gt;Create and iterate on template configurations through the visual interface, then export the final JSON for version control or documentation.&lt;/p&gt;
&lt;h3&gt;Team Collaboration&lt;/h3&gt;
&lt;p&gt;Share exported JSON files with team members for review before importing to shared environments. The preview feature shows exactly what will be created or updated.&lt;/p&gt;
&lt;h2&gt;Technical Architecture&lt;/h2&gt;
&lt;p&gt;Style Manager is built with modern .NET technologies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ASP.NET Core Blazor&lt;/strong&gt; with Interactive Server rendering for a responsive SPA experience&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailwind CSS&lt;/strong&gt; for a clean, utility-first design&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HttpClient&lt;/strong&gt; with DelegatingHandler pattern for transparent authentication&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System.Text.Json&lt;/strong&gt;&amp;nbsp;for efficient JSON serialization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The application follows clean architecture principles with clear separation between:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pages&lt;/strong&gt; - Blazor components for UI&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Services&lt;/strong&gt; - Business logic and API communication&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Models&lt;/strong&gt;&amp;nbsp;- Data transfer objects matching the Optimizely API schema&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What&#39;s Next?&lt;/h2&gt;
&lt;p&gt;This is just the beginning. Potential future enhancements include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bulk operations&lt;/strong&gt; for managing multiple templates simultaneously&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Template versioning&lt;/strong&gt; to track changes over time&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validation rules&lt;/strong&gt;&amp;nbsp;for settings values&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Template duplication&lt;/strong&gt; for creating variations quickly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dark mode&lt;/strong&gt;&amp;nbsp;for late-night template management sessions&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Optimizely SaaS Style Manager transforms display template management from a developer-centric API task into an accessible, visual workflow. Whether you&#39;re a developer looking to speed up template creation or a technical content manager who needs to audit existing templates, Style Manager provides the tools you need.&lt;/p&gt;
&lt;p&gt;The application is open source and available for you to use, modify, and contribute to. Give it a try and let us know how it improves your Optimizely CMS workflow!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Style Manager uses the Optimizely CMS REST API to manage display templates. Ensure your API credentials have appropriate permissions for the operations you need to perform.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;img class=&quot;clickable&quot; title=&quot;Click image to zoom&quot; src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;p&gt;You can also follow me on &lt;a href=&quot;https://adayinthelife.pro&quot;&gt;https://adayinthelife.pro&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2026-01-13T14:32:44.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP: Introducing Query Library and Request Logs: Two Powerful New Features for OptiGraphExtensions v5</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2026/1/a-day-in-the-life-of-an-optimizely-omvp-introducing-query-library-and-request-logs-two-powerful-new-features-for-optigraphextensions-v5/" /><id>&lt;p&gt;I am excited to announce two new features for OptiGraphExtensions v5 that give Optimizely CMS administrators greater visibility and control over their Optimizely Graph integration:&amp;nbsp;&lt;strong&gt;Query Library&lt;/strong&gt; and &lt;strong&gt;Request Logs&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; These additions complement our existing suite of tools for managing synonyms, pinned results, and webhooks, making OptiGraphExtensions an even more comprehensive solution for Optimizely Graph management.&lt;/p&gt;
&lt;h2&gt;&amp;nbsp; Query Library: Build, Save, and Execute GraphQL Queries&lt;/h2&gt;
&lt;p&gt;&amp;nbsp; The Query Library provides a powerful interface for creating, saving, and executing GraphQL queries directly against your Optimizely Graph instance&amp;mdash;all from within the CMS admin interface.&lt;/p&gt;
&lt;h3&gt;&amp;nbsp; Visual Query Builder&lt;/h3&gt;
&lt;p&gt;&amp;nbsp; Not everyone is comfortable writing raw GraphQL. That&#39;s why we&#39;ve included an intuitive visual query builder that lets you:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - &lt;strong&gt;Select content types&lt;/strong&gt; from a dropdown populated directly from your Graph schema&lt;br /&gt;&amp;nbsp; - &lt;strong&gt;Pick fields&lt;/strong&gt; using a checkbox interface that displays all available properties&lt;br /&gt;&amp;nbsp; - &lt;strong&gt;Add filters&lt;/strong&gt; with support for operators like equals, contains, starts with, greater than, and more&lt;br /&gt;&amp;nbsp; - &lt;strong&gt;Configure sorting&lt;/strong&gt; by any available field in ascending or descending order&lt;br /&gt;&amp;nbsp; - &lt;strong&gt;Filter by language&lt;/strong&gt; for multilingual content&lt;/p&gt;
&lt;p&gt;&amp;nbsp; The visual builder automatically generates the corresponding GraphQL query, so you can learn GraphQL syntax while you work.&lt;/p&gt;
&lt;h3&gt;&amp;nbsp; Raw GraphQL Mode&lt;/h3&gt;
&lt;p&gt;&amp;nbsp; For advanced users who prefer writing queries directly, the raw query mode provides:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - A full-featured text editor for GraphQL queries&lt;br /&gt;&amp;nbsp; - Support for query variables in JSON format&lt;br /&gt;&amp;nbsp; - Syntax validation before execution&lt;br /&gt;&amp;nbsp; - The ability to switch between visual and raw modes, with automatic query conversion&lt;/p&gt;
&lt;h3&gt;&amp;nbsp; Save and Reuse Queries&lt;/h3&gt;
&lt;p&gt;&amp;nbsp; Build a library of frequently-used queries that your team can access anytime:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - Save queries with descriptive names and descriptions&lt;br /&gt;&amp;nbsp; - Mark queries as active or inactive&lt;br /&gt;&amp;nbsp; - Edit and refine queries over time&lt;br /&gt;&amp;nbsp; - Run saved queries with a single click&lt;/p&gt;
&lt;h3&gt;&amp;nbsp; Export Results to CSV&lt;/h3&gt;
&lt;p&gt;&amp;nbsp; Once you&#39;ve executed a query, export the results to CSV format for further analysis:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - Export current preview results instantly&lt;br /&gt;&amp;nbsp; - Full pagination support for large datasets (automatically fetches all pages)&lt;br /&gt;&amp;nbsp; - Progress indicator for long-running exports&lt;br /&gt;&amp;nbsp; - Automatically generated filenames with timestamps&lt;/p&gt;
&lt;h2&gt;&amp;nbsp;Request Logs: Monitor Your Graph API Interactions&lt;/h2&gt;
&lt;p&gt;&amp;nbsp; Understanding what&#39;s happening between your CMS and Optimizely Graph is crucial for debugging and performance optimization. The new Request Logs feature provides complete visibility into API communications.&lt;/p&gt;
&lt;h3&gt;&amp;nbsp; Comprehensive Log Viewing&lt;/h3&gt;
&lt;p&gt;&amp;nbsp; View detailed information about every request made to Optimizely Graph:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - &lt;strong&gt;Request details&lt;/strong&gt;: HTTP method, path, host, and timestamps&lt;br /&gt;&amp;nbsp; - &lt;strong&gt;Response data&lt;/strong&gt;: Status codes, success/failure indicators, and duration&lt;br /&gt;&amp;nbsp; - &lt;strong&gt;Operation context&lt;/strong&gt;: GraphQL operation names and user information&lt;br /&gt;&amp;nbsp; - &lt;strong&gt;Full payloads&lt;/strong&gt;: View complete request and response bodies for debugging&lt;/p&gt;
&lt;h3&gt;&amp;nbsp; Powerful Filtering Options&lt;/h3&gt;
&lt;p&gt;&amp;nbsp; Quickly find the logs you need with multiple filtering options:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;strong&gt;Server-side (API) filters:&lt;/strong&gt;&lt;br /&gt;&amp;nbsp; - Filter by request ID for tracing specific operations&lt;br /&gt;&amp;nbsp; - Filter by host or path&lt;br /&gt;&amp;nbsp; - Filter by success/failure status&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt; Client-side filters:&lt;/strong&gt;&lt;br /&gt;&amp;nbsp; - Date range selection&lt;br /&gt;&amp;nbsp; - HTTP method filter (GET, POST, PUT, DELETE, etc.)&lt;br /&gt;&amp;nbsp; - Status filter (success/failed)&lt;br /&gt;&amp;nbsp; - Free-text search across paths, operations, messages, and users&lt;/p&gt;
&lt;h3&gt;&amp;nbsp; Export Capabilities&lt;/h3&gt;
&lt;p&gt;&amp;nbsp; Need to share logs with your team or analyze them offline?&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - &lt;strong&gt;CSV export&lt;/strong&gt;: Tabular format ideal for spreadsheet analysis&lt;br /&gt;&amp;nbsp; - &lt;strong&gt;JSON export&lt;/strong&gt;: Full structured data for programmatic processing&lt;br /&gt;&amp;nbsp; - Exports respect your current filter selections&lt;/p&gt;
&lt;h3&gt;&amp;nbsp; Detail View&lt;/h3&gt;
&lt;p&gt;&amp;nbsp; Click on any log entry to see the complete picture:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - Full request headers and body&lt;br /&gt;&amp;nbsp; - Complete response data&lt;br /&gt;&amp;nbsp; - Timing information&lt;br /&gt;&amp;nbsp; - Error messages and stack traces (when applicable)&lt;/p&gt;
&lt;h3&gt;&amp;nbsp; Getting Started&lt;/h3&gt;
&lt;p&gt;&amp;nbsp; Both features are available immediately in the OptiGraphExtensions admin interface. Navigate to:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - &lt;strong&gt;Query Library&lt;/strong&gt;: `/optimizely-graphextensions/administration/query-library`&lt;br /&gt;&amp;nbsp; - &lt;strong&gt;Request Logs&lt;/strong&gt;: `/optimizely-graphextensions/administration/request-logs`&lt;/p&gt;
&lt;p&gt;&amp;nbsp; Or use the Quick Navigation links on the About page to jump directly to either feature.&lt;/p&gt;
&lt;h2&gt;&amp;nbsp; What&#39;s Next?&lt;/h2&gt;
&lt;p&gt;&amp;nbsp; These features represent our commitment to making Optimizely Graph management as seamless as possible within the CMS environment. We&#39;re continuing to improve OptiGraphExtensions based on community feedback.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; Have suggestions or found an issue? We&#39;d love to hear from you!&lt;/p&gt;
&lt;p&gt;&amp;nbsp; ---&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;em&gt;OptiGraphExtensions is an open-source add-on for Optimizely CMS 12 that provides management of synonyms, pinned results, webhooks, queries, and request logs within Optimizely Graph.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;img class=&quot;clickable&quot; title=&quot;Click image to zoom&quot; src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;p&gt;You can also follow me on &lt;a href=&quot;https://adayinthelife.pro&quot;&gt;https://adayinthelife.pro&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2026-01-12T08:19:56.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP - Introducing Webhook Management in OptiGraphExtensions v4 for Optimizely CMS 12</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2026/1/a-day-in-the-life-of-an-optimizely-omvp---introducing-webhook-management-in-optigraphextensions-for-optimizely-cms-12/" /><id>&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The OptiGraphExtensions add-on has just received a significant update that many in the Optimizely community have been waiting for: &lt;strong&gt;comprehensive webhook management&lt;/strong&gt; directly within your CMS administration interface.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;For those unfamiliar with the project, OptiGraphExtensions is an open-source add-on for Optimizely CMS 12 that brings advanced Optimizely Graph management capabilities into the familiar CMS environment. It already provided powerful features for managing synonyms and pinned results&amp;mdash;and now webhooks join the party.&lt;/p&gt;
&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Why Webhooks Matter&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Webhooks are the backbone of modern event-driven architectures. In the context of Optimizely Graph, they allow your applications to receive real-time notifications when content changes occur. Whether you&#39;re triggering a static site rebuild, invalidating a cache, updating a search index, or notifying downstream systems, webhooks eliminate the need for constant polling and enable truly reactive content workflows.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Until now, managing these webhooks meant diving into API calls or external tooling. OptiGraphExtensions changes that by bringing webhook management directly into the Optimizely CMS admin panel.&lt;/p&gt;
&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;What Can You Do With Webhook Management?&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The new webhook feature provides full CRUD operations with a clean, intuitive interface that integrates seamlessly with the existing CMS administration experience.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;Subscribe to Specific Events&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The topic selection system gives you granular control over which events trigger your webhooks. You can subscribe to individual events such as &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;doc.created&lt;/code&gt;, &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;doc.updated&lt;/code&gt;, or &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;doc.deleted&lt;/code&gt;, or use wildcard patterns like &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;doc.*&lt;/code&gt; for all document events or &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;*.*&lt;/code&gt; to receive notifications for everything. This flexibility means you can set up precisely targeted webhooks that only fire when relevant changes occur.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;Configure Filters for Precision&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Not every content change needs to trigger every webhook. The filter configuration allows you to narrow down when webhooks fire based on specific criteria. For example, you might configure a filter so that your production CDN cache only invalidates when content with a status of &quot;Published&quot; changes, ignoring draft saves and preview updates entirely.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;Control HTTP Methods and Status&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Each webhook can be configured with the appropriate HTTP method for your endpoint&amp;mdash;whether that&#39;s POST, GET, PUT, PATCH, or DELETE. You also have full control over webhook status, allowing you to enable or disable webhooks without deleting them. This is particularly useful during maintenance windows or when debugging integration issues.&lt;/p&gt;
&lt;h3 class=&quot;text-text-100 mt-2 -mb-1 text-base font-bold&quot;&gt;Real-Time Synchronisation&lt;/h3&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Like the existing synonym and pinned results features, webhook management benefits from real-time synchronisation with the Optimizely Graph API. Changes you make in the admin interface are immediately reflected in Graph, and the interface provides clear feedback on sync status.&lt;/p&gt;
&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Getting Started&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;If you&#39;re already using OptiGraphExtensions, you&#39;ll find the new Webhooks option in the Opti Graph Extensions menu within the CMS admin panel after updating to the latest version.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;For those new to the add-on, installation is straightforward. Add the new v4.0.0 NuGet package to your Optimizely CMS 12 project:&lt;/p&gt;
&lt;div class=&quot;relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg&quot;&gt;
&lt;div class=&quot;sticky opacity-0 group-hover/copy:opacity-100 top-2 py-2 h-12 w-0 float-right&quot;&gt;
&lt;div class=&quot;absolute right-0 h-8 px-2 items-center inline-flex z-10&quot;&gt;
&lt;div class=&quot;relative&quot;&gt;
&lt;div class=&quot;flex items-center justify-center transition-all opacity-100 scale-100&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;flex items-center justify-center absolute top-0 left-0 transition-all opacity-0 scale-50&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;text-text-500 font-small p-3.5 pb-0&quot;&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;dotnet &lt;span class=&quot;token&quot;&gt;add&lt;/span&gt; package OptiGraphExtensions&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Then configure the services in your &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;Program.cs&lt;/code&gt; or &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;Startup.cs&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg&quot;&gt;
&lt;div class=&quot;sticky opacity-0 group-hover/copy:opacity-100 top-2 py-2 h-12 w-0 float-right&quot;&gt;
&lt;div class=&quot;absolute right-0 h-8 px-2 items-center inline-flex z-10&quot;&gt;
&lt;div class=&quot;relative&quot;&gt;
&lt;div class=&quot;flex items-center justify-center transition-all opacity-100 scale-100&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;flex items-center justify-center absolute top-0 left-0 transition-all opacity-0 scale-50&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;text-text-500 font-small p-3.5 pb-0&quot;&gt;csharp&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token&quot;&gt;// Add services&lt;/span&gt;
services&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;AddOptiGraphExtensions&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;options &lt;span class=&quot;token&quot;&gt;=&amp;gt;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    options&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;ConnectionStringName &lt;span class=&quot;token&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;&quot;EPiServerDB&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token&quot;&gt;// Configure the application&lt;/span&gt;
app&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;UseOptiGraphExtensions&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Since OptiGraphExtensions uses Blazor for its interactive admin interface, ensure Blazor server-side is configured:&lt;/p&gt;
&lt;div class=&quot;relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg&quot;&gt;
&lt;div class=&quot;sticky opacity-0 group-hover/copy:opacity-100 top-2 py-2 h-12 w-0 float-right&quot;&gt;
&lt;div class=&quot;absolute right-0 h-8 px-2 items-center inline-flex z-10&quot;&gt;
&lt;div class=&quot;relative&quot;&gt;
&lt;div class=&quot;flex items-center justify-center transition-all opacity-100 scale-100&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;flex items-center justify-center absolute top-0 left-0 transition-all opacity-0 scale-50&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;text-text-500 font-small p-3.5 pb-0&quot;&gt;csharp&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;services&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;AddServerSideBlazor&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

app&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;UseEndpoints&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;endpoints &lt;span class=&quot;token&quot;&gt;=&amp;gt;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    endpoints&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;MapContent&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    endpoints&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;MapBlazorHub&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    endpoints&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;MapControllers&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Finally, add your Optimizely Graph configuration to &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;appsettings.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;relative group/copy bg-bg-000/50 border-0.5 border-border-400 rounded-lg&quot;&gt;
&lt;div class=&quot;sticky opacity-0 group-hover/copy:opacity-100 top-2 py-2 h-12 w-0 float-right&quot;&gt;
&lt;div class=&quot;absolute right-0 h-8 px-2 items-center inline-flex z-10&quot;&gt;
&lt;div class=&quot;relative&quot;&gt;
&lt;div class=&quot;flex items-center justify-center transition-all opacity-100 scale-100&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;flex items-center justify-center absolute top-0 left-0 transition-all opacity-0 scale-50&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;text-text-500 font-small p-3.5 pb-0&quot;&gt;json&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token&quot;&gt;&quot;Optimizely&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;&quot;ContentGraph&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token&quot;&gt;&quot;GatewayAddress&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;&quot;&amp;lt;your graph instance gateway address&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token&quot;&gt;&quot;AppKey&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;&quot;&amp;lt;your graph instance key&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token&quot;&gt;&quot;Secret&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;&quot;&amp;lt;your graph instance secret&amp;gt;&quot;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;A Note on Implementation&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;One technical detail worth mentioning: due to a limitation in the Optimizely Graph PUT endpoint (which doesn&#39;t reliably update topics and filters), OptiGraphExtensions implements webhook updates by deleting and recreating webhooks. This means webhook IDs will change after editing&amp;mdash;something to be aware of if you&#39;re tracking webhook IDs externally.&lt;/p&gt;
&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;The Bigger Picture&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;With webhook management joining synonyms and pinned results, OptiGraphExtensions now provides a comprehensive suite of Optimizely Graph administration tools. Content editors and administrators can fine-tune search experiences and configure event-driven integrations without leaving the CMS environment they know.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The add-on continues to follow clean architecture principles with intelligent caching, connection pooling via &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;IHttpClientFactory&lt;/code&gt;, and robust error handling that gracefully falls back to local data when Graph is temporarily unavailable.&lt;/p&gt;
&lt;h2 class=&quot;text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold&quot;&gt;Get Involved&lt;/h2&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;OptiGraphExtensions is open source and welcomes contributions from the community. Whether it&#39;s bug reports, feature requests, or pull requests, your input helps make this tool better for everyone in the Optimizely ecosystem.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Check out the project on GitHub: &lt;a class=&quot;underline underline underline-offset-2 decoration-1 decoration-current/40 hover:decoration-current focus:decoration-current&quot; href=&quot;https://github.com/adayinthelifeofapro/OptiGraphExtensions&quot;&gt;https://github.com/adayinthelifeofapro/OptiGraphExtensions&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;The add-on is available on NuGet and supports both .NET 6.0 and .NET 8.0 with Optimizely CMS 12+.&lt;/p&gt;
&lt;hr class=&quot;border-border-200 border-t-0.5 my-3 mx-1.5&quot; /&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&lt;em&gt;OptiGraphExtensions is an independent open-source project designed to enhance the Optimizely CMS platform.&lt;/em&gt;&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;img class=&quot;clickable&quot; title=&quot;Click image to zoom&quot; src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2026-01-07T16:26:44.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP - OptiGraphExtensions v2.0: Enhanced Search Control with Language Support and Synonym Slots</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2025/12/a-day-in-the-life-of-an-optimizely-omvp---optigraphextensions-v2.0-enhanced-search-control-with-language-support-synonym-slots-and-stop-words" /><id>&lt;p&gt;Supercharge your Optimizely Graph search experience with powerful new features for multilingual sites and fine-grained search tuning.&lt;/p&gt;
&lt;p&gt;As search continues to be a critical component of any digital experience, I am excited to announce version 2.0 of OptiGraphExtensions - an open-source add-on for managing Optimizely Graph search enhancements directly from the CMS admin interface. This release brings significant new capabilities that give content teams unprecedented control over how search works across different languages and markets.&lt;/p&gt;
&lt;h2&gt;WHAT&#39;S NEW IN VERSION 2.0&lt;/h2&gt;
&lt;h3&gt;1. Language Routing for Synonyms&lt;/h3&gt;
&lt;p&gt;One of the most requested features has been proper support for multilingual synonym management. In version 2.0, synonyms can now be configured per language, ensuring that search enhancements are contextually appropriate for each market.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why does this matter?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Consider a global e-commerce site selling clothing. In English, you might want &quot;jumper&quot; and &quot;sweater&quot; to be synonyms. But in British English, &quot;jumper&quot; means something quite different than in American English - and in other languages, these terms don&#39;t translate directly at all.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With language routing, you can now:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;- Create language-specific synonym sets (e.g., English synonyms, Swedish synonyms, German synonyms)&lt;br /&gt;- Sync synonyms to Optimizely Graph grouped by language&lt;br /&gt;- Filter and manage synonyms by language in the admin interface&lt;br /&gt;- Ensure search relevance is optimised for each locale&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When syncing to Optimizely Graph, synonyms are grouped by their assigned language and sent using the language_routing parameter:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; PUT {gatewayUrl}/resources/synonyms?language_routing=en&amp;amp;synonym_slot=ONE&lt;/p&gt;
&lt;p&gt;This means your Swedish customers searching for &quot;bil&quot; won&#39;t accidentally get results influenced by English synonyms for &quot;car&quot;.&lt;/p&gt;
&lt;h3&gt;2. Synonym Slots for Advanced Configuration&lt;/h3&gt;
&lt;p&gt;Version 2.0 introduces Synonym Slots - a powerful feature that allows you to maintain multiple synonym configurations per language. Optimizely Graph supports two synonym slots (ONE and TWO), and our add-on now gives you full control over both.&lt;/p&gt;
&lt;p&gt;Use cases for Synonym Slots:&lt;/p&gt;
&lt;p&gt;- A/B Testing: Test different synonym strategies by using Slot ONE for your control group and Slot TWO for a variant&lt;/p&gt;
&lt;p&gt;- Seasonal Campaigns: Keep your standard synonyms in Slot ONE while using Slot TWO for campaign-specific terms&lt;/p&gt;
&lt;p&gt;- Department Separation: Use different slots for different product categories or business units&lt;/p&gt;
&lt;p&gt;- Gradual Rollout: Test new synonym mappings in Slot TWO before promoting them to Slot ONE&lt;/p&gt;
&lt;p&gt;In the Admin Interface:&lt;/p&gt;
&lt;p&gt;The synonym management screen now includes a slot selector dropdown, making it easy to:&lt;/p&gt;
&lt;p&gt;- Assign new synonyms to either Slot ONE or Slot TWO&lt;br /&gt;- Filter the synonym list by slot&lt;br /&gt;- Sync synonyms to Graph by language AND slot combination&lt;/p&gt;
&lt;h3&gt;GETTING STARTED&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Run the following command to install the NuGet package:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;dotnet add package OptiGraphExtensions&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configuration&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Add the following to your Program.cs or Startup.cs:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; services.AddOptiGraphExtensions(options =&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; options.ConnectionStringName = &quot;EPiServerDB&quot;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; });&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; app.UseOptiGraphExtensions();&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Accessing the Admin Interface&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Navigate to your CMS admin area and find &quot;Opti Graph Extensions&quot; in the menu. You&#39;ll see options for:&lt;/p&gt;
&lt;p&gt;- About: Overview and quick links&lt;br /&gt;- Synonyms: Manage synonyms with language and slot support&lt;br /&gt;- Pinned Results: Control which content appears for specific searches&lt;/p&gt;
&lt;h3&gt;REAL-WORLD EXAMPLE: MULTILINGUAL E-COMMERCE&lt;/h3&gt;
&lt;p&gt;Let&#39;s walk through a practical example of setting up search enhancements for a multilingual e-commerce site operating in English, Swedish, and German.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Configure English Synonyms (Slot ONE)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; Language: en&lt;br /&gt;&amp;nbsp; &amp;nbsp; Slot: ONE&lt;br /&gt;&amp;nbsp; &amp;nbsp; Synonyms:&lt;br /&gt;&amp;nbsp; &amp;nbsp; - laptop, notebook, portable computer&lt;br /&gt;&amp;nbsp; &amp;nbsp; - phone, mobile, smartphone, cell phone&lt;br /&gt;&amp;nbsp; &amp;nbsp; - TV, television, telly&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Configure Swedish Synonyms (Slot ONE)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; Language: sv&lt;br /&gt;&amp;nbsp; &amp;nbsp; Slot: ONE&lt;br /&gt;&amp;nbsp; &amp;nbsp; Synonyms:&lt;br /&gt;&amp;nbsp; &amp;nbsp; - dator, laptop, b&amp;auml;rbar dator&lt;br /&gt;&amp;nbsp; &amp;nbsp; - telefon, mobil, smartphone&lt;br /&gt;&amp;nbsp; &amp;nbsp; - TV, television&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Sync to Graph&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Click &quot;Sync All to Graph&quot; on each management screen, or sync per-language for more control.&lt;/p&gt;
&lt;h3&gt;MIGRATION FROM VERSION 1.X&lt;/h3&gt;
&lt;p&gt;If you&#39;re upgrading from version 1.x, the migration is straightforward:&lt;/p&gt;
&lt;p&gt;1. Update the NuGet package to version 2.0&lt;/p&gt;
&lt;p&gt;2.&amp;nbsp;Existing synonyms will default to Slot ONE and retain their existing language settings&lt;/p&gt;
&lt;p&gt;3. No breaking changes to the API or configuration&lt;/p&gt;
&lt;h3&gt;CONCLUSION&lt;/h3&gt;
&lt;p&gt;OptiGraphExtensions v2.0 represents a significant step forward in giving content teams control over their Optimizely Graph search experience. With language routing, synonym slots, and stop words management, you now have the tools to create truly localised, highly relevant search experiences for your users.&lt;/p&gt;
&lt;p&gt;The add-on is open source and available on NuGet. I welcome contributions, feedback, and feature requests from the community.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;- NuGet Package: &lt;a href=&quot;https://www.nuget.org/packages/OptiGraphExtensions/&quot;&gt;https://www.nuget.org/packages/OptiGraphExtensions/&lt;/a&gt;&lt;br /&gt;- Optimizely Graph Synonyms API: &lt;a href=&quot;https://docs.developers.optimizely.com/platform-optimizely/reference/upsert-synonymhandler&quot;&gt;https://docs.developers.optimizely.com/platform-optimizely/reference/upsert-synonymhandler&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Happy searching!&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;img class=&quot;clickable&quot; title=&quot;Click image to zoom&quot; src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2025-12-16T20:59:22.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP - Optimizely Opal: Specialized Agents, Workflows, and Tools Explained</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2025/12/a-day-in-the-life-of-an-optimizely-omvp---optimizely-opal-specialized-agents-workflows-and-tools-explained/" /><id>&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;The AI landscape in digital experience platforms has shifted dramatically. At Opticon 2025, Optimizely unveiled the next evolution of &lt;strong&gt;Optimizely Opal&lt;/strong&gt; &amp;ndash; positioning it not merely as an AI feature bolted onto their DXP, but as a fully independent &lt;strong&gt;agent orchestration platform&lt;/strong&gt;. As Kevin Li, SVP of Product at Optimizely, put it: &quot;We&#39;re after 20X improvements. We need autonomous processes to run.&quot;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;This isn&#39;t just marketing speak. Optimizely has committed a dedicated team of 30-40 engineers, product managers, and designers solely focused on building Opal as a standalone platform. Let&#39;s break down what this means for marketing and digital teams.&lt;/p&gt;
&lt;h1&gt;What Is Optimizely Opal?&lt;/h1&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;Opal is Optimizely&#39;s AI-powered agent orchestration layer that sits atop Optimizely One. Built on Google&#39;s Gemini models, it combines three core elements to deliver what Optimizely calls &quot;infinite scale&quot; for marketing teams:&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l0 level1 lfo1; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Industry-leading context windows &lt;/strong&gt;&amp;ndash; Opal intelligently combines diverse data sources including your corporate knowledge, existing assets, campaign performance, and experimentation results&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l0 level1 lfo1; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Purpose-built tools &lt;/strong&gt;&amp;ndash; A library of system and custom tools that connect to your data and take action on your behalf&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l0 level1 lfo1; margin: 0cm 0cm 10.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Agentic workflows &lt;/strong&gt;&amp;ndash; The ability to orchestrate multiple AI agents working together on complex, multi-step processes&lt;/p&gt;
&lt;h1&gt;Understanding Specialized Agents&lt;/h1&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;Agents in Opal are intelligent assistants that use natural language instructions and tools to complete tasks. Rather than requiring users to understand underlying systems or APIs, you simply describe what you want, and the agent handles the rest.&lt;/p&gt;
&lt;h2&gt;Default Agents&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;Optimizely provides a library of pre-built default agents through the Agent Directory. These handle common tasks out-of-the-box such as:&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l2 level1 lfo2; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Content model creation agent &lt;/strong&gt;&amp;ndash; Analyzes URLs or images to build best-practice CMS (SaaS) content models, referencing existing models to prevent duplicates&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l2 level1 lfo2; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;GEO recommendations agent &lt;/strong&gt;&amp;ndash; Audits webpages for LLM discoverability and delivers actionable recommendations to optimize content for generative search&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l2 level1 lfo2; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Heatmap analysis agent &lt;/strong&gt;&amp;ndash; Transforms heatmap images and URLs into precise, tailored test ideas&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l2 level1 lfo2; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;AI variation development agent &lt;/strong&gt;&amp;ndash; Helps modify website elements and generate enhancement suggestions while maintaining brand consistency&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l2 level1 lfo2; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Accessibility-check agent &lt;/strong&gt;&amp;ndash; Evaluates pages against WCAG standards without manual review&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l2 level1 lfo2; margin: 0cm 0cm 10.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Keyword research agent &lt;/strong&gt;&amp;ndash; Takes a topic and returns relevant keywords using data from Optimizely Idea Lab and Google Search&lt;/p&gt;
&lt;h2&gt;Specialized Agents&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;Where default agents provide immediate value, specialized agents let you build custom AI capabilities tailored to your organization. These operate in a &quot;single-shot&quot; model &amp;ndash; you provide inputs, the agent runs once, and returns a result.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;Key characteristics of specialized agents:&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l2 level1 lfo2; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Controlled context &lt;/strong&gt;&amp;ndash; Define exactly what inputs, tools, and instructions the agent can access&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l2 level1 lfo2; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Modular design &lt;/strong&gt;&amp;ndash; Reuse agents as components within larger workflow agents&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l2 level1 lfo2; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Independent testing &lt;/strong&gt;&amp;ndash; Test, tune, and debug each agent independently for faster iteration&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l2 level1 lfo2; margin: 0cm 0cm 10.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Fine-grained optimization &lt;/strong&gt;&amp;ndash; Experiment with inference settings or prompt variants per agent without affecting the rest of your workflows&lt;/p&gt;
&lt;h1&gt;Workflow Agents: The Orchestration Layer&lt;/h1&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;This is where Opal truly differentiates itself. Workflow agents allow you to combine multiple specialized agents into complex, automated processes. The new drag-and-drop visual interface makes it possible for non-technical users to build sophisticated automations.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;Workflow agents are built from three main components:&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l1 level1 lfo3; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Triggers &lt;/strong&gt;&amp;ndash; Define the events or conditions that start the workflow (schedule-based, event-based, or manual)&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l1 level1 lfo3; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Logic &lt;/strong&gt;&amp;ndash; Configure advanced decision-making, including loops and branching through conditional rules&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l1 level1 lfo3; margin: 0cm 0cm 10.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Agents &lt;/strong&gt;&amp;ndash; Add and arrange specialized agents to create a complete workflow with intelligent hand-offs&lt;/p&gt;
&lt;h2&gt;Real-World Workflow Example&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;Shafqat Islam, Optimizely&#39;s CMO, illustrated the power of workflow agents with this example: &quot;Imagine a workflow that runs autonomously every day or every week that can look at the goal you have set, comes up with test ideas, builds two or three experiments, runs them, picks the winner, and pushes that to production.&quot;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;That&#39;s a six or seven-step workflow that Opal can run autonomously versus a marketer manually pushing buttons. The same applies to CMS tasks &amp;ndash; automatically checking accessibility across all pages and pushing updates live.&lt;/p&gt;
&lt;h1&gt;Tools: The Foundation of Agent Capabilities&lt;/h1&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;Tools are what enable Opal to take action. Each tool performs a specific task &amp;ndash; creating a campaign, uploading files, generating images, or pulling data from connected systems. You can have up to 128 tools enabled across an Opal instance.&lt;/p&gt;
&lt;h2&gt;System Tools&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;Built and maintained by Optimizely, system tools provide core functionality across the platform:&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l3 level1 lfo4; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Create campaigns, tasks, and content in CMP&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l3 level1 lfo4; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Search the web and generate images&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l3 level1 lfo4; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Analyze data from Google Analytics (GA4)&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l3 level1 lfo4; margin: 0cm 0cm 10.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Process Microsoft Office files up to 50MB using smart chunking&lt;/p&gt;
&lt;h2&gt;Custom Tools&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;The real power comes from extending Opal with custom tools. Using the Opal SDK (available in Python, JavaScript/TypeScript, and C#), organizations can connect Opal to their internal systems or third-party services.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;Custom tools can be self-hosted or deployed through Optimizely Connect Platform (OCP), giving you flexibility in how you extend the platform.&lt;/p&gt;
&lt;h2&gt;Third-Party Integrations&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;Opal makes it simple to extend agent orchestration beyond the platform itself. You can connect to existing data sources, plug in third-party tools, and even access Opal directly through Slack &amp;ndash; bringing AI into the conversations where work already happens.&lt;/p&gt;
&lt;h1&gt;What This Means for Marketing Teams&lt;/h1&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;The shift from AI as a feature to AI as an orchestration platform represents a fundamental change in how marketing teams can operate. Rather than incremental efficiency gains, Optimizely is positioning Opal as a path to exponential scale.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;Key benefits include:&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l0 level1 lfo1; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Faster AI deployment at lower cost &lt;/strong&gt;&amp;ndash; Pre-built agents and no-code workflow builders reduce time to value&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l0 level1 lfo1; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Brand consistency &lt;/strong&gt;&amp;ndash; Instructions and context ensure AI outputs align with your brand voice and guidelines&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l0 level1 lfo1; margin: 0cm 0cm 5.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;True automation &lt;/strong&gt;&amp;ndash; Workflows can run autonomously, freeing teams to focus on strategy rather than execution&lt;/p&gt;
&lt;p class=&quot;MsoListParagraph&quot; style=&quot;text-indent: -18.0pt; mso-list: l0 level1 lfo1; margin: 0cm 0cm 10.0pt 36.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;&amp;bull;&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;strong&gt;Unified platform experience &lt;/strong&gt;&amp;ndash; Opal is embedded across Optimizely One, providing consistent AI assistance wherever you work&lt;/p&gt;
&lt;h1&gt;Looking Ahead&lt;/h1&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;For organizations already invested in the Optimizely ecosystem, the path to leveraging these capabilities is clear. For those evaluating options, Opal represents a compelling vision of what AI-powered marketing operations could look like &amp;ndash; not as a collection of point solutions, but as an integrated orchestration layer that can genuinely transform how work gets done.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 10.0pt;&quot;&gt;&lt;em&gt;The question isn&#39;t whether AI will transform marketing operations &amp;ndash; it&#39;s whether your organization is ready to move from incremental improvements to exponential scale.&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;img class=&quot;clickable&quot; title=&quot;Click image to zoom&quot; src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2025-12-16T12:21:35.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP - What&#39;s New in Optimizely CMS: A Comprehensive Recap of 2025 Updates</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2025/10/a-day-in-the-life-of-an-optimizely-omvp---whats-new-in-optimizely-cms-a-comprehensive-recap-of-2025-updates/" /><id>&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Hello and welcome to another instalment of a day in the life of an Optimizely OMVP. On the back of the presentation I gave in the October 2025 happy hour (recording link here - &lt;a href=&quot;https://academy.optimizely.com/student/activity/3006974-optimizely-world-happy-hour-recording-enhancing-experience-with-cms-experimentation&quot;&gt;Optimizely World Happy Hour Recording: Enhancing Experience with CMS &amp;amp; Experimentation : Optimizely Academy&lt;/a&gt;) I thought I would provide a comprehensive recap of the 2025 updates for both Optimizely PaaS and SaaS.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The Optimizely platform has seen significant enhancements throughout 2025, bringing powerful new features and improvements to both PaaS (Platform as a Service) and SaaS (Software as a Service) deployments. Whether you&#39;re running CMS 12 on PaaS or leveraging the cloud-native SaaS offering, there&#39;s plenty to be excited about. Let&#39;s dive into the key updates that are reshaping how teams build, manage, and deliver digital experiences.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;PaaS Enhancements: Power and Flexibility for Self-Hosted Deployments&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;For organizations running Optimizely CMS 12 on PaaS, 2025 has brought a wealth of improvements focused on reliability, developer experience, and performance.&lt;/p&gt;
&lt;h3 class=&quot;whitespace-normal break-words&quot;&gt;Opal Chat for CMS 12&lt;/h3&gt;
&lt;p&gt;Opal has now been integrated into the PaaS offering available as a NuGet package installation. The pre-requisites for this are that your site is running DXP and is Opti ID enabled. (&lt;a href=&quot;https://support.optimizely.com/hc/en-us/articles/40164215255437-Optimizely-Opal-Chat-for-CMS-12&quot;&gt;Optimizely Opal Chat for CMS 12 &amp;ndash; Support Help Center&lt;/a&gt;)&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Front-End Hosting&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;A significant new capability is the addition of &lt;strong&gt;front-end hosting&lt;/strong&gt; in DXP, allowing teams to host modern JavaScript frameworks and static site generators directly within the Optimizely ecosystem. This simplifies deployment architectures and can reduce infrastructure complexity. (&lt;a href=&quot;https://docs.developers.optimizely.com/content-management-system/docs/host-a-frontend-with-optimizely&quot;&gt;Host a frontend with Optimizely&lt;/a&gt;)&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Introducing CMS Platform Plus&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;For mission-critical applications, Optimizely has introduced &lt;strong&gt;CMS Platform Plus&lt;/strong&gt;, an optional paid tier for CMS 12 PaaS and Commerce Connect 14. This premium offering is designed for businesses that demand the highest levels of availability, security, and performance&amp;mdash;think banks, hospitals, or e-commerce operations where any service interruption is unacceptable. Platform Plus provides enterprise-grade SLAs and additional support for organizations that can&#39;t afford downtime. (&lt;a href=&quot;https://docs.developers.optimizely.com/digital-experience-platform/docs/cms-platform-plus&quot;&gt;CMS Platform Plus&lt;/a&gt;)&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Enhanced Reliability and Communication&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;There is the addition of &lt;strong&gt;limited retries for undeliverable notifications&lt;/strong&gt;. This enhancement helps ensure that system notifications reach their intended destinations, even when temporary network issues occur. The platform has also seen significant improvements to import/export functionality, making content migration and backup operations more robust.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Content API Advancements&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The Content Management API now supports the &lt;strong&gt;ContentAreaItem property&lt;/strong&gt;, allowing developers to GET, CREATE, UPDATE, and PATCH ContentAreaItem properties directly through the API. This enhancement provides more granular control over content areas and enables more sophisticated programmatic content management scenarios.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Forms Innovation&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Optimizely Forms has gained support for &lt;strong&gt;PreventFieldCollision&lt;/strong&gt;, addressing a common pain point where different content types using the same field name with different data types would cause conflicts. This feature provides better data integrity and reduces the likelihood of unexpected errors in form processing.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Editor Experience Upgrades&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Content editors will appreciate the upgrade to &lt;strong&gt;TinyMCE version 7&lt;/strong&gt;, bringing the latest features and improvements from this popular rich text editor. The platform also integrates &lt;strong&gt;Optimizely Opal Chat&lt;/strong&gt;, an AI-powered assistant that helps editors research, brainstorm, and refine content directly within the CMS interface.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;CMS and CMP Integration&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Various enhancements to the CMS and Customer Managed Platform (CMP) integration provide better synchronization and data flow between these systems, enabling more cohesive omnichannel experiences.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Performance and Security&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;On the infrastructure side, &lt;strong&gt;DXP now supports the HTTP/3 protocol&lt;/strong&gt;, bringing improved performance, reduced latency, and better connection reliability. There&#39;s also a fix for an issue where the MaxMindGeolocationProvider wasn&#39;t properly resolving IP addresses to geolocation results, improving the reliability of personalization features.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;SaaS Enhancements: Cloud-Native Innovation&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The SaaS version of Optimizely CMS has also seen substantial improvements, with a strong focus on user experience, AI integration, and workflow efficiency.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;User Interface Refinements&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The platform has received numerous UI enhancements focused on easing navigation and improving pagination across the CMS. One notable change is the renaming of &quot;Blocks&quot; to &quot;&lt;strong&gt;Shared Blocks&lt;/strong&gt;&quot; in the user interface, providing clearer terminology that better reflects their reusable nature. These shared blocks can now also be used as sections within experiences, offering more flexibility in page composition.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The Visual Builder has gained &lt;strong&gt;preview highlighting&lt;/strong&gt;, making it easier to see which elements you&#39;re editing in real-time. Multiple interactions have been added to streamline common tasks and reduce the number of clicks required for routine operations.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Content Manager: A New Way to Work&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;A major addition is the &lt;strong&gt;Content Manager&lt;/strong&gt;, which displays pages, assets, and media in a table structure. This new view provides a more data-centric approach to content management, making it easier to sort, filter, and bulk-manage content items. You can even create new pages (experiences) directly from the Content Manager, streamlining content creation workflows.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;AI-Powered Translation&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Content globalization just got easier with &lt;strong&gt;automatic translation using Google Translate AI&lt;/strong&gt;. This integration allows editors to quickly translate content into multiple languages, accelerating the localization process and reducing the time to market for international campaigns.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Opal Chat: Your AI Content Assistant&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Like its PaaS counterpart, the SaaS version includes &lt;strong&gt;Optimizely Opal Chat&lt;/strong&gt;, which is now generally available. This AI assistant helps content creators research topics, brainstorm ideas, and edit content more efficiently. It&#39;s integrated directly into the editing workflow, providing contextual assistance when and where you need it.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Visual Builder Forms&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Creating forms is now easier than ever with the ability to &lt;strong&gt;build one-step forms using Visual Builder&lt;/strong&gt;. This no-code approach allows marketers to create lead capture forms, contact forms, and other interactive elements without developer assistance.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Modern Editor Experience&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The SaaS platform has also upgraded to &lt;strong&gt;TinyMCE version 7&lt;/strong&gt;, ensuring editors have access to the latest rich text editing capabilities. Additionally, the ability to &lt;strong&gt;configure preview URLs in the Edit UI&lt;/strong&gt; gives teams more control over how content is previewed before publication.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Infrastructure and Integration&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Front-end hosting is available in the SaaS offering as well, and the synchronization with &lt;strong&gt;Optimizely Graph&lt;/strong&gt; has been improved to sync directly, reducing latency and improving data consistency across the platform. (&lt;a href=&quot;https://docs.developers.optimizely.com/content-management-system/docs/host-a-frontend-with-optimizely&quot;&gt;Host a frontend with Optimizely&lt;/a&gt;)&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Looking Ahead&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The 2025 updates to Optimizely CMS demonstrate a clear commitment to innovation across three key areas: AI-assisted workflows, improved developer experience, and enhanced editor productivity. Whether you&#39;re on PaaS or SaaS, these improvements make it easier to build, manage, and deliver exceptional digital experiences.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;For teams considering their options, the introduction of CMS Platform Plus provides a clear path for enterprise organizations with stringent uptime requirements, while the SaaS offering continues to evolve with cloud-native features that reduce operational overhead.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;As always, Optimizely provides comprehensive release notes and documentation for all these features. You can explore the full details through their support portal and developer documentation sites.&lt;/p&gt;
&lt;hr class=&quot;border-border-300 my-2&quot; /&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;em&gt;To stay up to date with the latest Optimizely CMS releases, visit the&amp;nbsp;&lt;a class=&quot;underline&quot; href=&quot;https://www.optimizely.com/product-updates/content-management/&quot;&gt;Optimizely Roadmap and Releases page&lt;/a&gt; or review the detailed &lt;a class=&quot;underline&quot; href=&quot;https://support.optimizely.com/hc/en-us/sections/23974970699533-Release-notes&quot;&gt;release notes in the Support Help Center&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;img class=&quot;clickable&quot; title=&quot;Click image to zoom&quot; src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2025-11-03T08:32:49.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP - Creating a blazor add-on for CMS 12</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2025/10/a-day-in-the-life-of-an-optimizely-omvp---creating-a-blazor-add-on/" /><id>&lt;p&gt;Hello and welcome to another instalment of a day in the life of an Optimizely OMVP. In this post I will be covering how to create a blazor based add-on in CMS 12 and how you get this published on various NuGet feeds including Optimizely&#39;s own feed.&lt;/p&gt;
&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;This comprehensive guide walks you through the process of building a custom Blazor add-on for Optimizely CMS, combining the power of modern .NET development with enterprise content management.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Blazor offers CMS developers a unique opportunity to create rich, interactive admin interfaces using C# throughout the entire stack, eliminating context-switching between languages and enabling seamless integration with Optimizely&#39;s backend APIs. Whether you&#39;re building a custom dashboard widget, a specialized property editor, or a complete admin tool, Blazor&#39;s component-based architecture and real-time capabilities make it an ideal choice for extending Optimizely&#39;s functionality.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;In this tutorial, you&#39;ll learn how to set up a Blazor project within your Optimizely solution, integrate it with the CMS&#39;s authentication and routing systems, and create a polished admin interface that feels native to the platform.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;By the end of this guide, you&#39;ll have the knowledge to build production-ready Blazor add-ons that enhance your editors&#39; experience and extend Optimizely CMS to meet your specific business needs. Whether you&#39;re a seasoned Optimizely developer exploring modern UI frameworks or a Blazor enthusiast entering the CMS world, this guide provides the practical insights you need to succeed.&lt;/p&gt;
&lt;h2&gt;Setup&lt;/h2&gt;
&lt;p&gt;The following section covers how you setup your projects, enable Blazor functionality, create the menu for your add-on, enable authorisation and also how you could setup your projects into vertical sliced features.&lt;/p&gt;
&lt;h3&gt;Extension project creation&lt;/h3&gt;
&lt;p&gt;For my example extension, I created three separate projects, as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OptiGraphExtensions - the main Blazor add-on project&lt;/li&gt;
&lt;li&gt;OptiGraphExtensions.Test - the unit tests for the functionality&lt;/li&gt;
&lt;li&gt;SampleCMS - A full and running version of Optimizely CMS 12 with a reference to the OptiGraphExtensions project allows testing in a real CMS 12 application.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/link/0811a093ca9047229c29ab82b3ac38bb.aspx&quot; /&gt;&lt;/p&gt;
&lt;p&gt;To get the CMS to reflect your add-on DLL and find your add-on, you need to have a module.config in the root of your add-on project that will define the assembly so that it is picked up by the CMS. In this case the assembly refers to &quot;OptiGraphExtensions&quot; which is the same name as the project.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&amp;gt;
&amp;lt;module loadFromBin=&quot;true&quot; clientResourceRelativePath=&quot;&quot; viewEngine=&quot;Razor&quot; authorizationPolicy=&quot;OptiGraphExtensions:Security:Policy&quot; moduleJsonSerializerType=&quot;None&quot; prefferedUiJsonSerializerType=&quot;Net&quot;&amp;gt;
  &amp;lt;assemblies&amp;gt;
    &amp;lt;add assembly=&quot;OptiGraphExtensions&quot; /&amp;gt;
  &amp;lt;/assemblies&amp;gt;

  &amp;lt;clientModule&amp;gt;
    &amp;lt;moduleDependencies&amp;gt;
      &amp;lt;add dependency=&quot;CMS&quot; /&amp;gt;
    &amp;lt;/moduleDependencies&amp;gt;
  &amp;lt;/clientModule&amp;gt;
&amp;lt;/module&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Adding new menu options&lt;/h3&gt;
&lt;p&gt;To get your add-on to display in the CMS, you will need to create a new MenuProvider. As shown below you decorate the class with [MenuProvider] and inherit from the IMenuProvider interface. You then create your individual menu items within the GetMenuItems method.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;[MenuProvider]
public sealed class OptiGraphExtensionsMenuProvider : IMenuProvider
{
    public IEnumerable&amp;lt;MenuItem&amp;gt; GetMenuItems()
    {
        // Nested Menu Example
        yield return CreateMenuItem(&quot;Opti Graph Extensions&quot;, &quot;/global/cms/optigraphextensions&quot;, &quot;/optimizely-graphextensions/administration/about/&quot;, SortIndex.Last + 30);
        yield return CreateMenuItem(&quot;About&quot;, &quot;/global/cms/optigraphextensions/about&quot;, &quot;/optimizely-graphextensions/administration/about/&quot;, SortIndex.Last + 31);
        yield return CreateMenuItem(&quot;Synonyms&quot;, &quot;/global/cms/optigraphextensions/synonyms&quot;, &quot;/optimizely-graphextensions/administration/synonyms&quot;, SortIndex.Last + 32);
        yield return CreateMenuItem(&quot;Pinned Results&quot;, &quot;/global/cms/optigraphextensions/pinned.results&quot;, &quot;/optimizely-graphextensions/administration/pinned-results&quot;, SortIndex.Last + 33);
    }

    private static UrlMenuItem CreateMenuItem(string name, string path, string url, int index)
    {
        return new UrlMenuItem(name, path, url)
        {
            IsAvailable = context =&amp;gt; true,
            SortIndex = index,
            AuthorizationPolicy = OptiGraphExtensionsConstants.AuthorizationPolicy
        };
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Enabling Blazor in sample CMS&lt;/h3&gt;
&lt;p&gt;Add the following to your &quot;Program.cs&quot; or &quot;Startup.cs&quot;:&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;services.AddServerSideBlazor();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And also, in the ApplicationBuilder you need to add:&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;app.UseEndpoints(endpoints =&amp;gt;
{
    &amp;hellip;
    endpoints.MapBlazorHub();
    endpoints.MapControllerRoute(
        name: &quot;default&quot;,
        pattern: &quot;{controller=Home}/{action=Index}/{id}&quot;);
    &amp;hellip;
});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once the above has been added, this is all that is needed to allow Blazor to run in your Optimizely CMS instance.&lt;/p&gt;
&lt;h3&gt;Main Administration Controller&lt;/h3&gt;
&lt;p&gt;You need to ensure that you create a controller for your menu options, this is created in the following manner. As can be seen the routes match the routes specified in the MenuProvider shown above.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;[Authorize(Policy = OptiGraphExtensionsConstants.AuthorizationPolicy)]
public sealed class AdministrationController : Controller
{
    [HttpGet]
    [Route(&quot;~/optimizely-graphextensions/administration/about&quot;)]
    public IActionResult About()
    {
        var model = new AdministrationViewModel
        {
            Title = &quot;Opti Graph Extensions - About&quot;,
            Subtitle = &quot;OptiGraphExtensions is a comprehensive add-on for Optimizely CMS 12 that provides seamless management of both synonyms and pinned results within Optimizely Graph. This add-on enables content editors and administrators to enhance search experiences through intelligent synonym mapping and strategic result pinning capabilities, all integrated directly into your Optimizely CMS administration interface.&quot;
        };

        return View(&quot;~/Views/OptiGraphExtensions/Administration/About/Index.cshtml&quot;, model);
    }

    [HttpGet]
    [Route(&quot;~/optimizely-graphextensions/administration/synonyms&quot;)]
    public IActionResult Synonyms()
    {
        var model = new AdministrationViewModel
        {
            Title = &quot;Opti Graph Extensions - Synonyms&quot;,
        };

        return View(&quot;~/Views/OptiGraphExtensions/Administration/Synonyms/Index.cshtml&quot;, model);
    }

    [HttpGet]
    [Route(&quot;~/optimizely-graphextensions/administration/pinned-results&quot;)]
    public IActionResult PinnedResults()
    {
        var model = new AdministrationViewModel
        {
            Title = &quot;Opti Graph Extensions - Pinned Results&quot;,
        };

        return View(&quot;~/Views/OptiGraphExtensions/Administration/Pinned-Results/Index.cshtml&quot;, model);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The views that are linked to in the above controller contain the main RenderComponentAsync functionality that calls the related Razor Component that exists within its own individual feature (vertical feature slicing is covered below), an example of this is shown below:&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;@{
    Layout = &quot;/Views/Shared/Layouts/_LayoutBlazorAdminPage.cshtml&quot;;
}

@(await Html.RenderComponentAsync&amp;lt;OptiGraphExtensions.Features.PinnedResults.PinnedResultsManagementComponent&amp;gt;(Microsoft.AspNetCore.Mvc.Rendering.RenderMode.Server))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The main layout referenced looks as follows and includes the main Blazor js file:&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;@using EPiServer.Framework.Web.Resources
@using EPiServer.Shell.Navigation
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Opti Graph Extensions&amp;lt;/title&amp;gt;

    &amp;lt;!-- Shell --&amp;gt;
    @ClientResources.RenderResources(&quot;ShellCore&quot;)

    &amp;lt;!-- LightTheme --&amp;gt;
    @ClientResources.RenderResources(&quot;ShellCoreLightTheme&quot;)
    
    &amp;lt;style&amp;gt;
        main {
            display: flex;
            flex-direction: column;
            gap: 2rem;
            max-width: 1000px;
        }
        div.criteriabox {
            border: 2px solid #e0e0e0;
            border-radius: 0.5rem;
            display: flex;
            flex-direction: column;
            gap: 1rem;
            padding: 1rem;
        }
    &amp;lt;/style&amp;gt;

    &amp;lt;base href=&quot;~/&quot; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    @Html.AntiForgeryToken() &amp;lt;!-- Thanks to: https://world.optimizely.com/blogs/matthew-slim/dates/2023/6/new-menu-system-released/ --&amp;gt;
    @Html.CreatePlatformNavigationMenu()
    &amp;lt;div @Html.ApplyPlatformNavigation() style=&quot;padding-left: 10px;background: white;padding: 1rem;&quot;&amp;gt;

    @RenderBody()

    &amp;lt;/div&amp;gt;
    &amp;lt;script src=&quot;_framework/blazor.server.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Vertical Feature Slicing&lt;/h3&gt;
&lt;p&gt;There are various ways in which you can decide to structure the features within your add-on, I opted for a vertical feature sliced architecture where all code and associated razor files for a specific feature all existed under one folder, as shown below:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/f988d67a4e044bafaa3d2d6bab068f37.aspx&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This creates a clean separation of concerns and ensures that files are easily identified.&lt;/p&gt;
&lt;h3&gt;Authorisation setup&lt;/h3&gt;
&lt;p&gt;To add authorisation to your add-on, you need to add a policy to your AdministrationController as shown below:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;[Authorize(Policy = OptiGraphExtensionsConstants.AuthorizationPolicy)]
public sealed class AdministrationController : Controller&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The Authorisation Policy needs a specific name, which I add as a constant in a constants file.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;public static class OptiGraphExtensionsConstants
{
    public const string ModuleName = &quot;OptiGraphExtensions&quot;;

    public const string AuthorizationPolicy = &quot;OptiGraphExtensions:Security:Policy&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We then add that policy to the authorisation options when registering the add-on middleware.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;        services.AddOptiGraphExtensions(optiGraphExtensionsSetupOptions =&amp;gt;
        {
            optiGraphExtensionsSetupOptions.ConnectionStringName = &quot;EPiServerDB&quot;;
        },
        authorizationOptions =&amp;gt;
        {
            authorizationOptions.AddPolicy(OptiGraphExtensionsConstants.AuthorizationPolicy, policy =&amp;gt;
            {
                policy.RequireRole(&quot;WebAdmins&quot;, &quot;Everyone&quot;);
            });
        });&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Publishing to feeds&lt;/h2&gt;
&lt;p&gt;This section provides information on how you package up your extension so that you can publish it to NuGet feeds.&lt;/p&gt;
&lt;p&gt;If you are using Visual Studio, right click on the project you want to package and select properties to show the project properties screen. Under the Package section you can define all of the properties for your NuGet package.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/1d3edfaa552944c09ec40f94a63c2ccf.aspx&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I would recommend you complete the following:&lt;/p&gt;
&lt;table style=&quot;width: 100%; height: 551.437px;&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;th style=&quot;width: 8.51393%; height: 19.5938px;&quot;&gt;Property&lt;/th&gt;
&lt;th style=&quot;width: 91.4861%; height: 19.5938px;&quot;&gt;Reason&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 21px;&quot;&gt;Package Id&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 21px;&quot;&gt;This will need to be globally unique name within nuget.org and nuget.optimizely.com. If you use the&amp;nbsp;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$(AssemblyName)&lt;/code&gt;&amp;nbsp;variable, then this will match the name of the project.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 19.5938px;&quot;&gt;Title&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 19.5938px;&quot;&gt;Visual Studio describes this as the name of the package used in UI displays such as Package Manager, but this largely does not get used.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 97.9688px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 97.9688px;&quot;&gt;Package Version&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 97.9688px;&quot;&gt;This should be a semantic version number with three or four parts and an optional alpha or beta tag. For Example:&lt;br /&gt;1.0.0&lt;br /&gt;1.0.0.0&lt;br /&gt;0.1.1-alpha&lt;br /&gt;0.2.2.0-beta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 19.5938px;&quot;&gt;Authors&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 19.5938px;&quot;&gt;This should contain the names of all of the package owners.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 21px;&quot;&gt;Company&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 21px;&quot;&gt;This should contain the name of the business that is behind creating the Add-on. If this is individually owned, then seting this to&amp;nbsp;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$(Authors)&lt;/code&gt;&amp;nbsp;will mirror the value from the Authors property.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 19.5938px;&quot;&gt;Description&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 19.5938px;&quot;&gt;This should be a short description about your Add-on, this will be visible within the NuGet package feed and within the Plugin Manager screen within Optimizely CMS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 58.7812px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 58.7812px;&quot;&gt;Copyright&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 58.7812px;&quot;&gt;This should contain the name of the owner and the year. You get copyright protection automatically when creating software and you do not have to apply or pay a fee. There isn&amp;rsquo;t a register of copyright works in the UK. There are however organisations which will provide extra protection for a fee for validating your copyright. You can read more about copyright here:&amp;nbsp;&lt;a href=&quot;https://www.gov.uk/copyright&quot;&gt;How copyright protects your work&lt;/a&gt;. It is however worth you performing your own research into the matter within the country you live in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 39.1875px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 39.1875px;&quot;&gt;Project Url&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 39.1875px;&quot;&gt;This should point either to the repository for your Add-on or an appropriate project page. Developers will use this to find out more about your Add-on or to report issues that may need resolving.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 19.5938px;&quot;&gt;Readme&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 19.5938px;&quot;&gt;I have set this to the readme.md for my repositories, this will be visible to developers within the NuGet platform.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 19.5938px;&quot;&gt;Repository Url&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 19.5938px;&quot;&gt;This should point to the repository for your Add-on, assuming that your Add-on is Open Source.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19.5938px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 19.5938px;&quot;&gt;Tags&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 19.5938px;&quot;&gt;This is a delimited set of tags that make your package easier to find within the NuGet feeds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 117.562px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 117.562px;&quot;&gt;License File&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 117.562px;&quot;&gt;This should reference the license within your repository. Careful consideration should be given to the type of license for your Add-on. Certain licenses may require your users to make their code open source to utilize your package, so think carefully about the permissiveness or restrictiveness of your license. It is noteworthy that some highly popular Add-ons employ an MIT or Apache license.&lt;br /&gt;&lt;br /&gt;I am utilizing an MIT license due to its permissive nature and lack of warranty. While I do engage with my users and address any issues that are raised, my Add-ons are free and are maintained in my free time.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 58.7812px;&quot;&gt;
&lt;td style=&quot;width: 8.51393%; height: 58.7812px;&quot;&gt;Require License Acceptance&lt;/td&gt;
&lt;td style=&quot;width: 91.4861%; height: 58.7812px;&quot;&gt;If you tick this, the consumer will have to accept the license as they install the package. If you are using an MIT license, you may want to tick this to encourage the consumer to accept the warranty free nature of your Add-on.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3&gt;Nuget.org&lt;/h3&gt;
&lt;p&gt;It is advisable to get your NuGet package listed on Nuget.org before you submit it to the Optimizely NuGet feed. To submit your add-on on NuGet.org, simply visit &lt;a href=&quot;https://www.nuget.org/users/account/LogOn&quot;&gt;https://www.nuget.org/users/account/LogOn&lt;/a&gt; and sign in, once signed in you can visit the package upload screen here - &lt;a href=&quot;https://www.nuget.org/packages/manage/upload&quot;&gt;https://www.nuget.org/packages/manage/upload&lt;/a&gt; - simply select your .nupkg file and click Upload as shown below.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;/link/49c6027d3ac94ac3a6cb29ba1b97bb56.aspx&quot; /&gt;&lt;/p&gt;
&lt;p&gt;At this point your NuGet package will be uploaded, and after a few minutes will be scanned, indexed and available on the NuGet.org feed.&lt;/p&gt;
&lt;h3&gt;Optimizely Nuget&lt;/h3&gt;
&lt;p&gt;Firstly, ensure that you have an &lt;a href=&quot;/link/6c9478a8761c41d88dfc32e9ef56e714.aspx&quot;&gt;Optimizely World&lt;/a&gt;&amp;nbsp;account. You can create a new account by visiting&amp;nbsp;&lt;a href=&quot;/link/6c9478a8761c41d88dfc32e9ef56e714.aspx&quot;&gt;Optimizely World&lt;/a&gt;&amp;nbsp;and following the registration link located in the top right corner. This account will also provide access to the Optimizely NuGet feeds. Optimizely maintains two NuGet feeds:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https://nuget.optimizely.com (v2 NuGet feed)&lt;/li&gt;
&lt;li&gt;https://api.nuget.optimizely.com (v3 NuGet feed)&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;When you upload packages to the v2 NuGet feed, they&#39;re automatically synced to the v3 feed, so uploading to v2 is the recommended approach. After Optimizely receives your package, their QA team will review it to ensure your Add-on works properly with the CMS. To help expedite this process, include testing instructions in your repository&#39;s readme file.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The review typically takes at least one business day, but there&#39;s no automated notification system to update you on the testing progress or results. You&#39;ll need to check the NuGet feed periodically to see if your package has been approved.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Since Optimizely reviews all packages on their feed, it&#39;s best practice to download Add-on updates directly from them for distribution. If you need to quickly deploy a hotfix, consider using nuget.org as an alternative.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Additionally, you should upload your package to nuget.org at least once alongside the Optimizely feed. This reserves your package name on nuget.org and prevents naming conflicts across major feeds that could impact your users.&lt;/p&gt;
&lt;h2&gt;Wrap-up&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;In this guide, we&#39;ve explored the essentials of building Blazor-based add-ons for Optimizely CMS, covering everything from initial project setup to preparing for publication on NuGet feeds.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Key Takeaways:&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-2.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Blazor&#39;s Power in CMS Development&lt;/strong&gt;: By leveraging Blazor&#39;s component-based architecture, you can create rich, interactive admin interfaces using C# throughout your entire stack, eliminating the need for context-switching between frontend and backend languages.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Core Implementation Steps&lt;/strong&gt;: You&#39;ve learned how to configure module settings, create custom menu providers for seamless navigation integration, and enable Blazor functionality in your CMS with just a few lines of code in your startup configuration.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Enterprise-Ready Extensions&lt;/strong&gt;: With proper authorization policies and vertical feature slicing approaches, your add-ons can maintain clean architecture while meeting enterprise security and scalability requirements.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Whether you&#39;re building custom dashboards, specialized property editors, or complete admin tools, you now have a solid foundation for extending Optimizely CMS with modern .NET technology. The next step is packaging your add-on and sharing it with the community through NuGet, helping fellow developers enhance their Optimizely implementations.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Happy coding, and welcome to the growing community who are pushing the boundaries of what&#39;s possible with CMS development!&lt;/p&gt;
&lt;h2&gt;Reference Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/adayinthelifeofapro/OptiGraphExtensions&quot;&gt;https://github.com/adayinthelifeofapro/OptiGraphExtensions&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.epinova.se/en/blog/2024/use-blazor-components-in-optimizely-cms-adminedit-interface/&quot;&gt;https://www.epinova.se/en/blog/2024/use-blazor-components-in-optimizely-cms-adminedit-interface/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.stott.pro/article/creating-an-optimizely-addon-part-3&quot;&gt;https://www.stott.pro/article/creating-an-optimizely-addon-part-3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;img src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2025-10-14T13:58:19.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP - Opticon London 2025</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2025/9/a-day-in-the-life-of-an-optimizely-omvp---opticon-london-2025/" /><id>&lt;p&gt;This installment of a day in the life of an Optimizely OMVP gives an in-depth coverage of my trip down to London to attend Opticon London 2025 held at the Barbican centre. In this post you will get a sense of what the event was like and what information and takeaways were learnt.&lt;/p&gt;
&lt;h2&gt;The Venue&lt;/h2&gt;
&lt;p&gt;The Barbican Centre is a Grade II listed brutalist complex in London, built on the 40-acre site of Cripplegate, destroyed by bombing during World War II. Designed by architects Chamberlin, Powell and Bon, it began construction in 1965 as part of a larger housing estate and was officially opened by Queen Elizabeth II in 1982. The ambitious project aimed to create a self-contained &quot;city within a city&quot; for middle-class professionals, featuring residential towers, public spaces, and the cultural hub that is the Barbican Centre.&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;image align-center&quot;&gt;&lt;img src=&quot;/link/e33bd8e4b1934cda9afd5e359f80e60e.aspx&quot; alt=&quot;&quot; width=&quot;735&quot; height=&quot;478&quot; /&gt;
&lt;figcaption&gt;The Barbican Centre&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After attending the OMVP summit which was also held at the Barbican on Monday 29th September, I arrived early at the venue at 7:30am to help setup the Netcel booth. The booth was located in the main networking area along with all of the other sponsors. At around 8am the customers, clients, partners all started to turn up so it was time for some networking.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure class=&quot;image align-center&quot;&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; src=&quot;/link/f8d2a6e6f3834d879db6b2b88de18cfe.aspx&quot; alt=&quot;&quot; width=&quot;601&quot; height=&quot;801&quot; /&gt;
&lt;figcaption&gt;At the Netcel stand&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;image align-center&quot;&gt;&lt;img src=&quot;/link/af4a8a51603747f99ee1dc67a260bf6a.aspx&quot; alt=&quot;&quot; width=&quot;697&quot; height=&quot;522&quot; /&gt;
&lt;figcaption&gt;The main networking area&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;General Session 1&lt;br /&gt;&lt;br /&gt;&lt;/h2&gt;
&lt;figure class=&quot;image align-center&quot;&gt;&lt;img src=&quot;/link/1749a1f269d147308910c25d7f9c5285.aspx&quot; alt=&quot;&quot; width=&quot;686&quot; height=&quot;514&quot; /&gt;
&lt;figcaption&gt;Welcome to Opticon London 2025&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;At 9am it was time to join the first general session of the day which was led by Optimizely&#39;s CEO Alex Atzberger.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;How AI Changes What&#39;s Possible&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Alex started off by highlighting how the landscape of digital experience is undergoing a fundamental transformation. Artificial intelligence isn&#39;t just enhancing our existing workflows&amp;mdash;it&#39;s fundamentally changing what we can accomplish and how quickly we can bring our vision to life. With Opal, organizations can now reimagine their approach to content management, experimentation, and digital orchestration.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Three Core Principles Guiding Our AI Journey&lt;/h2&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;1. Customer First&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;At the heart of every AI innovation must be a relentless focus on customer value. Technology for technology&#39;s sake misses the point. Opal&#39;s AI capabilities are designed to help you deliver better experiences, faster responses, and more personalized interactions that truly serve your customers&#39; needs.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;2. Rethink How You Work&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The traditional ways of working are no longer sufficient in an AI-enabled world. This means:&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Breaking Down Silos and Tapping Into AI&lt;/strong&gt; Organizations can no longer afford to operate in isolated departments with disconnected tools. AI thrives on connected data and collaborative workflows. Opal enables teams to break through these barriers.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Opal&#39;s AI Architecture&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Embedded&lt;/strong&gt;: AI capabilities are woven directly into your existing workflows, not bolted on as an afterthought&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Enriched&lt;/strong&gt;: Every piece of content and data is enhanced with intelligent metadata and insights&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Purpose-built&lt;/strong&gt;: Specialized AI agents designed specifically for marketing and content management challenges&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Autonomous&lt;/strong&gt;: Intelligent systems that can take action, make decisions, and optimize without constant human intervention&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;3. Lead with Courage&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;AI implementation requires bold leadership. This technology won&#39;t simply fit into your existing organizational charts and processes. Leaders must have the courage to:&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Challenge established workflows&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Experiment with new approaches&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Empower teams to work alongside AI&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Make decisions even when the path isn&#39;t completely clear&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;AI for Orchestration: The Power of Specialized Agents&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Rather than a single, monolithic AI system, Opal leverages &lt;strong&gt;highly specialized agents&lt;/strong&gt;&amp;mdash;each designed for specific tasks within your digital ecosystem. This approach allows you to:&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Create&lt;/strong&gt;: Generate content, assets, and experiences with AI assistance&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Optimize&lt;/strong&gt;: Continuously improve performance based on real-time data and insights&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Scale&lt;/strong&gt;: Expand successful strategies across channels and markets without proportional resource increases&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Now Available: Opal&#39;s Current AI Capabilities&lt;/h2&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Opal AI for CMS&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Transform your content management system into an intelligent workspace where AI assists with content creation, organization, and optimization.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;AI-Powered Asset Management&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Never lose track of digital assets again. Opal&#39;s AI automatically tags, categorizes, and surfaces the right assets at the right time, understanding context and content to make intelligent recommendations.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Connect Platform&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Integrate your entire marketing technology stack, allowing AI agents to work across systems and create unified, intelligent workflows.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Live Demo: Nazanin Ramezani Showcases Opal in Action&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;In a demonstration, Nazanin Ramezani revealed what&#39;s possible when AI meets content management, showing real-world applications of Opal&#39;s current capabilities and offering a glimpse into the near future.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Coming Soon: Next-Generation Features&lt;/h2&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Agent-Powered Page Creation&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Imagine describing what you want and having AI agents assemble, design, and optimize entire pages based on your goals and brand guidelines.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Site-Wide Optimization&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;AI that doesn&#39;t just optimize individual pages but understands your entire digital presence, making holistic recommendations that improve the overall user journey.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;GEO Analytics&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Location-aware insights that help you understand how your content performs across different markets and demographics, with AI-powered recommendations for localization and personalization.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Experimentation Reimagined: Britt Hall&#39;s Demo&lt;/h2&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Start with the Finish Line in Sight&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Britt Hall demonstrated a revolutionary approach to experimentation: rather than working backwards from what you can test, start with your desired outcome and let AI help you design the experiments that will get you there.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Opal Building Experiments&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Watch as AI agents construct sophisticated A/B and multivariate tests, automatically:&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Identifying what to test&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Creating variations&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Determining sample sizes&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Setting success metrics&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;All-New Visual Editor&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The newly available visual editor makes experimentation accessible to everyone on your team, not just developers or analysts. Design, launch, and analyze experiments all from one intuitive interface.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Build Your Own AI Future&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Opal isn&#39;t just providing pre-built solutions&amp;mdash;it&#39;s giving you the tools to create your own AI-powered workflows:&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Build Your Own Agents&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Create custom AI agents tailored to your specific business needs and workflows.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Tools for Extensibility&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Open APIs and integration points allow you to extend Opal&#39;s capabilities and connect with your unique tech stack.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Canvas&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Allows artifacts to be created, edited, and displayed collaboratively, providing a visual and interactive layer for agent outputs&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Agent Workflows&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Chain multiple AI agents together to create sophisticated, multi-step automated processes that handle complex marketing challenges.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;The Human Side of AI: Insights from Kian Gohar&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Kian Gohar, AI researcher at Geolabs, shared critical perspectives on making AI work in real organizations:&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;AI as a Thought Partner&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The most effective AI implementations treat AI not as a replacement for human creativity and judgment, but as an amplifier. AI should be your thought partner&amp;mdash;challenging assumptions, offering alternatives, and expanding what&#39;s possible.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;AI is a People Issue&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Technology is only part of the equation. The real challenge and opportunity lies in how people adapt to, adopt, and ultimately thrive alongside AI. Change management, training, and cultural transformation are just as important as the technology itself.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;The ABCs of AI&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Gohar pointed attendees to &lt;strong&gt;learnabc.ai&lt;/strong&gt;, a resource for organizations looking to build foundational AI literacy across their teams. Because successful AI implementation requires that everyone&amp;mdash;not just technologists&amp;mdash;understands the basics.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;The Path Forward&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The future of digital experience is intelligent, adaptive, and autonomous. With Opal, that future is already here. Whether you&#39;re optimizing content, managing assets, running experiments, or building custom AI agents, the tools are ready.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The question isn&#39;t whether AI will transform how you work&amp;mdash;it&#39;s whether you&#39;ll lead that transformation or be left behind. As Opal demonstrates, the organizations that embrace AI with courage, keep customers at the center, and fundamentally rethink their workflows will be the ones that thrive in this new era.&lt;/p&gt;
&lt;h2&gt;Cleared For Takeoff&lt;/h2&gt;
&lt;figure class=&quot;image align-center&quot;&gt;&lt;img src=&quot;/link/f1f2bbfe1fed49d19bfe1457fee77486.aspx&quot; alt=&quot;&quot; width=&quot;755&quot; height=&quot;566&quot; /&gt;
&lt;figcaption&gt;Cleared for Take Off&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;The Challenge: A Critical Digital Overhaul&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Leeds Bradford Airport serves the largest catchment area in the UK&amp;mdash;a unique advantage born from its strategic geographic location. However, this opportunity was being undermined by a struggling digital presence. The airport&#39;s website was plagued with issues that were hampering both the customer experience and revenue generation potential across their dual revenue streams: aeronautical (flight-related services) and non-aeronautical (retail, parking, lounges, and other commercial activities).&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Strategic Focus: Revenue-Driving Priorities&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The airport identified two critical phases that needed digital optimization:&lt;/p&gt;
&lt;ol class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Final Planning&lt;/strong&gt; - The pre-travel stage where customers make crucial decisions about parking, lounge access, and other ancillary services&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Ready to Go&lt;/strong&gt; - The immediate pre-departure phase when customers are most likely to make last-minute purchases and upgrades&lt;/li&gt;
&lt;/ol&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;By focusing their digital strategy on these high-value touchpoints, Leeds Bradford Airport positioned themselves to maximize revenue opportunities at the moments that matter most.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;The Implementation Approach: Building Smart Foundations&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Rather than attempting a complete overhaul from day one, the team adopted a pragmatic, component-based approach:&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Starting with Blocks and Components&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Reduced initial build time significantly&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Created reusable elements for faster iteration&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Made the platform easier to manage from the outset&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;Allowed for rapid deployment of key features&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Three-Pillar Strategy:&lt;/strong&gt;&lt;/p&gt;
&lt;ol class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Build a Single Customer View&lt;/strong&gt; - Consolidating customer data across touchpoints to create personalized, cohesive experiences&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Integrate Seamlessly&lt;/strong&gt; - Ensuring the new platform connected smoothly with existing systems and third-party services&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Set Strong Foundations&lt;/strong&gt; - Establishing scalable infrastructure for long-term growth and optimization&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Why SaaS Made the Difference&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The decision to go with Optimizely&#39;s SaaS solution over on-premise alternatives came down to two compelling factors:&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Faster Time to Market&lt;/strong&gt; - With the urgency to fix critical website issues and capture revenue opportunities, the SaaS model eliminated lengthy infrastructure setup and accelerated the launch timeline.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Simplified Hosting&lt;/strong&gt; - By removing the burden of managing hosting infrastructure, the airport&#39;s team could focus their resources on optimization, content, and customer experience rather than technical maintenance.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;This strategic choice enabled Leeds Bradford Airport to &quot;clear for take off&quot; quickly, delivering value to both the business and travelers while building a foundation for continuous improvement.&lt;/p&gt;
&lt;h2&gt;Under The Hood&lt;/h2&gt;
&lt;figure class=&quot;image align-center&quot;&gt;&lt;img style=&quot;display: block; margin-left: auto; margin-right: auto;&quot; src=&quot;/link/b293aea365804446b344d3ca409ea8fa.aspx&quot; alt=&quot;&quot; width=&quot;765&quot; height=&quot;574&quot; /&gt;
&lt;figcaption&gt;Under the hood of Opal&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;One of the most technically illuminating sessions of the day was &quot;Under the Hood - A technical look at Opal architecture and inter-agent dynamics,&quot; led by Lauren Hammarstedt and Nikita Bakil. This session provided valuable insights into how Opal is tackling one of the most pressing challenges facing organizations today: making AI agents actually work in enterprise environments.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;The Challenge: C-Suite Frustration with AI Implementation&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The session opened by addressing a problem many organizations face when it comes to AI adoption. Despite the C-suite mandate to implement AI solutions, many teams find themselves paralyzed by:&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Too much noise&lt;/strong&gt; - The AI landscape is cluttered with vendors, solutions, and competing approaches&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Unclear starting points&lt;/strong&gt; - Without a clear roadmap, teams don&#39;t know where to begin their AI journey&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Integration complexity&lt;/strong&gt; - Existing tools often don&#39;t fit seamlessly into current workflows&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;This creates a gap between executive vision and practical implementation, leaving many AI initiatives stalled before they even begin.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;How Agents Are Changing the Calculus&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Hammarstedt and Bakil explained how Opal&#39;s approach to AI agents fundamentally shifts this dynamic through four key principles:&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;1. &lt;strong&gt;Embedded in Your Workflows&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Rather than requiring users to adapt to a new system, Opal agents integrate directly into existing workflows. This reduces friction and accelerates adoption by meeting teams where they already work.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;2. &lt;strong&gt;Enriched with Your Context&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Opal agents don&#39;t operate in a vacuum. They leverage your organization&#39;s specific context - your data, your processes, your business logic - to deliver relevant, actionable results rather than generic outputs.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;3. &lt;strong&gt;Purpose-Built with Sophisticated Tools&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Each agent comes equipped with specialized capabilities designed for specific use cases. With access to over &lt;strong&gt;80+ system tools&lt;/strong&gt;, these agents can perform complex tasks that go far beyond simple chatbot interactions.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;4. &lt;strong&gt;Autonomous Agents Working for You&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Perhaps most importantly, these agents can operate autonomously, handling tasks end-to-end without constant human intervention. This transforms them from assistants into true force multipliers.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Key Platform Features&lt;/h2&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Canvas: A Shared Interactive Workspace&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;One of the standout features discussed was &lt;strong&gt;Canvas&lt;/strong&gt; - Opal&#39;s shared, interactive workspace. Canvas allows artifacts to be created, edited, and displayed collaboratively, providing a visual and interactive layer for agent outputs. This bridges the gap between AI generation and human refinement, making it easy to iterate on agent-produced work.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Agent Directory: Pre-Built and Custom Solutions&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Opal provides an &lt;strong&gt;Agent Directory&lt;/strong&gt; featuring pre-built agents for common use cases, allowing teams to get started quickly without building from scratch. For more specialized needs, the platform also supports the creation of custom agents tailored to unique organizational requirements.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Flexible Workflow Initiation&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The session highlighted Opal&#39;s flexible approach to workflow triggers. Agents can be initiated through multiple channels:&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Chat&lt;/strong&gt; - Conversational triggers for ad-hoc requests&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Webhooks&lt;/strong&gt; - Programmatic integration with other systems&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Email&lt;/strong&gt; - Natural language requests via email&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Scheduling&lt;/strong&gt; - Time-based automation for recurring tasks&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;This multi-modal approach ensures agents can fit into various operational patterns and user preferences.&lt;/p&gt;
&lt;p&gt;Following this technical deep dive, it was time for lunch and I felt energized by the possibilities of what purpose-built, context-aware agents could mean for organisations.&lt;/p&gt;
&lt;h2&gt;Commerce in the age of AI&lt;/h2&gt;
&lt;figure class=&quot;image align-center&quot;&gt;&lt;img src=&quot;/link/744f801f77fb4727af1765c436d1e3b0.aspx&quot; alt=&quot;&quot; width=&quot;732&quot; height=&quot;549&quot; /&gt;
&lt;figcaption&gt;AI features for Commerce Connect&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;image align-center&quot;&gt;&lt;img src=&quot;/link/72886cf664d14d81aeec0f92c83d1718.aspx&quot; alt=&quot;&quot; width=&quot;738&quot; height=&quot;554&quot; /&gt;
&lt;figcaption&gt;AI features for configured commerce&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The third breakout session of the day, &lt;strong&gt;&quot;Commerce in the Age of AI,&quot;&lt;/strong&gt; provided valuable insights into how Opal is transforming the commerce landscape. The session outlined the technical requirements, strategic vision, and key features that are positioning Opal as a leader in AI-powered commerce solutions.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Technical Prerequisites&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Before diving into the AI capabilities, the session clarified the foundational requirements for implementing Opal in commerce environments:&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Commerce Connect&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Organizations need to ensure they&#39;re running the &lt;strong&gt;latest NuGet package&lt;/strong&gt; of Commerce Connect. This updated version provides the necessary infrastructure to support AI-enhanced workflows and integrations.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Configured Commerce&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The platform requires the &lt;strong&gt;latest Long-Term Support (LTS) version&lt;/strong&gt; of Configured Commerce, ensuring stability while accessing cutting-edge AI features.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;The AI Roadmap: A Three-Pillar Strategy&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The session outlined Opal&#39;s strategic approach to AI integration through three key pillars:&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;1. &lt;strong&gt;Embedding AI&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Rather than treating AI as a separate add-on, Opal is integrating AI capabilities directly into core commerce workflows. This embedded approach ensures that AI enhancements feel natural and intuitive within existing processes.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;2. &lt;strong&gt;Extensible AI&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Recognizing that every business has unique needs, Opal&#39;s AI framework is built to be extensible. This allows organizations to customize and extend AI capabilities to match their specific commerce requirements and use cases.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;3. &lt;strong&gt;Scaling AI&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;As AI adoption grows, Opal is focused on ensuring these capabilities can scale effectively across enterprise environments, handling increased load while maintaining performance and reliability.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Commerce Connect: AI-Powered Capabilities&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Commerce Connect serves as the backbone for AI integration, offering several key capabilities:&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;AI-Charged Workflows&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The platform enables workflows that leverage AI to automate decision-making, optimize processes, and provide intelligent recommendations throughout the commerce lifecycle.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;RAG Ready (Retrieval-Augmented Generation)&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Commerce Connect is designed to support RAG architecture, allowing AI systems to access and utilize relevant business data, product catalogs, and customer information to generate more accurate and contextual responses.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Customer Agents&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;AI-powered customer agents can handle inquiries, provide personalized recommendations, and assist with purchase decisions, creating more engaging and efficient customer experiences.&lt;/p&gt;
&lt;h3 class=&quot;text-lg font-bold text-text-100 mt-1 -mb-1.5&quot;&gt;Additional Features&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;em&gt;See the image above for details on what is availabe now, what is coming soon and future considerations.&lt;/em&gt;&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Configured Commerce Enhancements&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Configured Commerce also receives significant AI capabilities that complement Commerce Connect:&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;em&gt;See the image above for details on what is availabe now, what is coming soon and future considerations.&lt;/em&gt;&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The &quot;Commerce in the Age of AI&quot; session demonstrated that Opal is taking a comprehensive, strategic approach to AI integration in commerce. By combining the technical foundations of Commerce Connect and Configured Commerce with a clear AI roadmap, Opal is positioning organizations to leverage AI effectively&amp;mdash;from embedding intelligence in everyday workflows to scaling AI capabilities across the enterprise.&lt;/p&gt;
&lt;h2&gt;General Session 2&lt;/h2&gt;
&lt;figure class=&quot;image align-center&quot;&gt;&lt;img src=&quot;/link/affb7fb00c524d63bb1acf8c2fb567be.aspx&quot; alt=&quot;&quot; width=&quot;727&quot; height=&quot;545&quot; /&gt;
&lt;figcaption&gt;Scott MacKintosh, Marketoonist&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The second general session started straight after lunch and was showcased by both Grant Thornton and Tom Fishburn.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Grant Thornton undertook a significant digital transformation initiative, dramatically streamlining their web presence by consolidating 150 content blocks down to just 19. This radical simplification represents a major shift toward cleaner, more user-focused design&amp;mdash;eliminating redundancy and creating a more intuitive digital experience for visitors.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Enhanced Cookie Management&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;As part of their digital overhaul, Grant Thornton implemented a comprehensive cookie management tool, addressing growing privacy concerns and regulatory requirements. This solution puts users in control of their data preferences while ensuring compliance with global privacy standards.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Building an Experimentation Culture&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Perhaps most notably, Grant Thornton has invested in creating a robust experimentation framework with four key pillars:&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Governance&lt;/strong&gt;: Establishing clear protocols and decision-making structures for testing initiatives&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Onboarding&lt;/strong&gt;: Creating pathways for team members to engage with experimentation practices&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Experimentation Leads&lt;/strong&gt;: Appointing champions who drive testing initiatives across different departments&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Community&lt;/strong&gt;: Fostering a collaborative environment where insights and learnings are shared across the organization&lt;/li&gt;
&lt;/ul&gt;
&lt;hr class=&quot;border-border-300 my-2&quot; /&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Luminary Keynote: Tom Fishburn on AI&#39;s Awkward Adolescence&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;The Marketoonist&#39;s Take on AI Adoption&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Tom Fishburn, the renowned &quot;Marketoonist&quot; known for his insightful business cartoons, delivered a keynote addressing the current state of AI adoption in marketing and business. His perspective? We&#39;re in an &quot;awkward adolescence&quot; phase.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Why AI Adoption is Tricky&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Fishburn highlighted that while AI promises transformative capabilities, actual implementation remains challenging. Organizations are grappling with:&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Friction in Integration&lt;/strong&gt;: AI tools don&#39;t seamlessly fit into existing workflows, creating resistance and implementation challenges&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;The Awkward Adolescence Phase&lt;/strong&gt;: Like teenagers, AI technology is powerful but ungainly&amp;mdash;full of potential but not yet mature, sometimes unpredictable, and requiring patience as it develops&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;His message resonated with many leaders who recognize AI&#39;s potential but struggle with the messy reality of making it work effectively in their organizations.&lt;/p&gt;
&lt;h2&gt;Building on Optimizely Connect Platform&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The fourth breakout session I attended proved to be one of the most technically illuminating of the event. Led by Andrew Markham, &quot;Building on Optimizely Connect Platform - Architecture, APIs + Extensibility&quot; offered a comprehensive look at how developers can leverage OCP to create powerful integrations and custom solutions.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Understanding Optimizely Connect Platform (OCP)&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;At its core, Optimizely Connect Platform (OCP) is designed to serve as a central hub for connecting external systems to your Optimizely ecosystem. What makes OCP particularly interesting is that it&#39;s built on top of the same Connect Platform that powers Optimizely Data Platform (ODP), giving it a robust and proven foundation.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The platform takes a flexible approach to integrations, supporting both pre-built applications that you can deploy immediately and custom apps tailored to your specific business needs. This dual approach means you can get up and running quickly with standard integrations while still having the power to build specialized solutions when required.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Core Capabilities That Power the Platform&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Andrew highlighted three key capabilities that make OCP a compelling development platform:&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Serverless Compute Platform&lt;/strong&gt;: OCP provides a serverless architecture, meaning you can deploy and run applications without worrying about infrastructure management. This removes the operational overhead and lets developers focus on building functionality rather than managing servers.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Integrated Development Environment&lt;/strong&gt;: The platform includes development tools built right in, streamlining the process of creating, testing, and deploying applications directly within the Optimizely ecosystem.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;App Marketplace&lt;/strong&gt;: OCP features a marketplace where you can discover and deploy apps, whether they&#39;re built by Optimizely, partners, or your own team. This creates an ecosystem approach to extensibility.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Two Distinct App Types for Different Use Cases&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;One of the key architectural decisions in OCP is the distinction between two types of applications:&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Data-Sync Apps&lt;/strong&gt; are designed to synchronize data from external systems into the OCP database. These apps excel at keeping your Optimizely environment up-to-date with information from other tools in your stack, creating a unified view of your data.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;End-to-End Apps&lt;/strong&gt; offer deeper configurability and handle complete workflows from start to finish. These apps provide more comprehensive functionality and can orchestrate complex processes across multiple systems.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Navigating the User Interface&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Andrew walked through the OCP interface, highlighting several key features that make managing your integrations straightforward:&lt;/p&gt;
&lt;ul class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;App Directory&lt;/strong&gt;: Your central location for browsing, installing, and managing applications&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Sync Manager&lt;/strong&gt;: Provides visibility and control over data synchronization processes&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Objects + Fields&lt;/strong&gt;: A schema management interface where you can define and customize data structures&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Object Explorer&lt;/strong&gt;: A tool for viewing and inspecting the actual data flowing through your system&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;From Theory to Practice: Building an App&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The session concluded with a practical demonstration of the app-building process, showing attendees how to move from concept to working application. While the specifics of the demo would require more detail to fully capture, it was clear that OCP is designed to make the development process as accessible as possible while still providing the power and flexibility that enterprise integrations demand.&lt;/p&gt;
&lt;h2&gt;AI-Powered Feature Experimentation&lt;/h2&gt;
&lt;figure class=&quot;image align-center&quot;&gt;&lt;img src=&quot;/link/7586a87312a34c9d955eef14c6c0fa19.aspx&quot; alt=&quot;&quot; width=&quot;717&quot; height=&quot;538&quot; /&gt;
&lt;figcaption&gt;AI-powered Feature Experimentation&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The final breakout session of the day proved to be one of the most forward-thinking discussions I attended. Led by Dejan Dragusin, &quot;AI-powered Feature Experimentation - The emerging MCP server and beyond&quot; explored how AI is transforming the developer experience in feature management and experimentation.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;The Pain Points of Modern Development&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Dejan began by painting a familiar picture of today&#39;s development reality&amp;mdash;one that resonated with many developers in the room. He outlined four critical challenges that teams face daily:&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Context Switching&lt;/strong&gt;: Developers constantly juggle between their IDE, documentation sites, Slack conversations, and experimentation platforms. This mental overhead not only fragments focus but significantly impacts productivity. Every switch between tools means losing valuable momentum and having to rebuild your mental model of the problem at hand.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Slow Onboarding&lt;/strong&gt;: New team members often spend weeks trying to understand existing feature flag implementations, experimentation frameworks, and the various tools in the stack. The learning curve for feature management platforms can be steep, with developers needing to master REST APIs, authentication flows, and platform-specific concepts before they can be productive.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Flag Debt Piles Up&lt;/strong&gt;: Like technical debt, &quot;flag debt&quot; accumulates when feature flags aren&#39;t properly maintained or removed. Old flags linger in the codebase, creating confusion and potential bugs. Teams struggle to keep track of which flags are active, which experiments have concluded, and which flags can safely be removed.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Complex REST API Integrations&lt;/strong&gt;: Working with feature experimentation platforms typically requires understanding intricate REST API documentation, handling authentication, managing rate limits, and writing boilerplate code just to perform basic operations.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Introducing Optimizely&#39;s MCP Server for Experience&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Dejan then presented Optimizely&#39;s MCP (Model Context Protocol) Server for Experience, currently in closed beta. This represents a fundamental shift in how developers interact with experimentation platforms.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The promise? A dramatically improved developer experience characterized by:&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Zero Documentation Lookups&lt;/strong&gt;: Imagine never having to tab over to API documentation mid-workflow. The MCP server enables AI assistants to understand the platform natively, eliminating the need for constant reference checking.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Zero UI Navigation&lt;/strong&gt;: No more clicking through multiple screens to create a flag, set up an experiment, or check results. Developers can accomplish these tasks directly from their development environment through natural language interactions.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Zero Copy-Paste from Examples&lt;/strong&gt;: Gone are the days of hunting for code snippets and adapting boilerplate. The system generates correct, contextual implementations on demand.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Perfect Implementation First Time Round&lt;/strong&gt;: Perhaps most impressively, the integration promises accurate implementations from the start, reducing the debugging cycle that typically follows initial integration attempts.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;The Power of Open Standards&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;What makes this approach particularly exciting is that it&#39;s not locked to a single AI provider. The MCP server architecture allows connection with any LLM, giving teams flexibility in their AI tooling choices. Whether you&#39;re using Claude, GPT-4, or another language model, the same powerful feature experimentation capabilities remain accessible.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;This open approach represents a mature understanding of the AI landscape&amp;mdash;rather than betting on a single AI provider, Optimizely has built infrastructure that can work with the rapidly evolving AI ecosystem.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Closing Thoughts and Networking&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;As Dejan wrapped up his presentation, the energy in the room was palpable. The session had given us a glimpse into a future where feature experimentation becomes seamless, integrated, and genuinely intelligent. Following this final breakout session, attendees moved into the closing reception, where conversations continued over food and canap&amp;eacute;s. The networking buzz was filled with discussions about AI&#39;s potential to transform not just feature experimentation, but the entire development workflow.&lt;/p&gt;
&lt;h2&gt;Final thoughts and takeaways&lt;/h2&gt;
&lt;h3 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;The Central Theme: AI is Here, But Implementation Requires Courage&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;This year&#39;s Opticon revealed how people are grappling with a fundamental tension: AI&#39;s transformative potential versus the messy reality of implementation. Tom Fishburn&#39;s &quot;awkward adolescence&quot; metaphor perfectly captures where the industry stands&amp;mdash;powerful but ungainly, full of promise but not yet fully mature.&lt;/p&gt;
&lt;h3 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Key Strategic Takeaways&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;1. Start with Outcomes, Not Technology&lt;/strong&gt; The most compelling insight from Britt Hall&#39;s experimentation demo was the shift from &quot;what can we test?&quot; to &quot;what outcome do we want, and how do we get there?&quot; This reversal of traditional approaches should inform all AI adoption strategies&amp;mdash;begin with business value, then leverage AI to achieve it.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;2. Components Over Complexity&lt;/strong&gt; Leeds Bradford Airport&#39;s approach offers a blueprint: start with reusable blocks, focus on high-value touchpoints (their &quot;Final Planning&quot; and &quot;Ready to Go&quot; phases), and build incrementally. This pragmatic strategy counters the tendency to attempt transformative overhauls that stall before delivering value.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;3. The &quot;People Issue&quot; is Paramount&lt;/strong&gt; Kian Gohar&#39;s emphasis that &quot;AI is a people issue&quot; cuts through the technical noise. No amount of sophisticated agents or embedded workflows will succeed without change management, AI literacy (hence learnabc.ai), and cultural transformation. Organizations fixating solely on technology will struggle.&lt;/p&gt;
&lt;h3 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Technical Insights Worth Acting On&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Specialized Agents Over Monolithic AI&lt;/strong&gt; Opal&#39;s architecture of purpose-built, specialized agents (rather than one-size-fits-all AI) represents a more practical approach. With 80+ system tools and the ability to build custom agents, this modular strategy allows organizations to solve specific problems rather than boiling the ocean.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;MCP Server: A Genuinely Disruptive Development&lt;/strong&gt; The Model Context Protocol server for feature experimentation deserves particular attention. By eliminating context switching, documentation lookups, and complex REST integrations, it addresses real developer pain points. Its open standard approach (works with any LLM) is strategically smart&amp;mdash;it future-proofs the investment.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Embedded &amp;gt; Bolted-On&lt;/strong&gt; A recurring theme across sessions: AI that&#39;s woven into existing workflows succeeds where add-ons fail. Whether it&#39;s Opal&#39;s embedded architecture or Commerce Connect&#39;s AI-charged workflows, integration beats isolation.&lt;/p&gt;
&lt;h3 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;The Experimentation Culture Imperative&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Grant Thornton&#39;s four-pillar framework (Governance, Onboarding, Experimentation Leads, Community) provides a practical roadmap for organizations moving beyond ad-hoc testing. The radical simplification from 150 to 19 content blocks underscores an important principle: sometimes transformation requires subtraction, not addition.&lt;/p&gt;
&lt;h3 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Practical Next Steps for Attendees&lt;/h3&gt;
&lt;ol class=&quot;[&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Audit Your Starting Point&lt;/strong&gt;: Where are you genuinely experiencing pain that AI could address? Don&#39;t solve theoretical problems.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Build AI Literacy&lt;/strong&gt;: Invest in foundational understanding across teams&amp;mdash;the technology moves too fast for knowledge to remain siloed with specialists.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Start Small, Think Big&lt;/strong&gt;: Follow the Leeds Bradford Airport model&amp;mdash;pragmatic components that build toward ambitious goals.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Champion the Culture Shift&lt;/strong&gt;: Identify your experimentation leads, establish governance, create community. The technical capabilities mean nothing without organizational readiness.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot;&gt;&lt;strong&gt;Evaluate Your Tech Stack&lt;/strong&gt;: If you&#39;re on older versions of Commerce Connect or Configured Commerce, the upgrade path to AI capabilities is clear&amp;mdash;and necessary.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;The Underlying Question&lt;/h3&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Alex Atzberger framed it perfectly in the opening session: &quot;The question isn&#39;t whether AI will transform how you work&amp;mdash;it&#39;s whether you&#39;ll lead that transformation or be left behind.&quot;&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The information that I learnt during my day at Opticon suggests the tools are ready, the roadmap is clear, but success will belong to those who couple technical capability with organizational courage&amp;mdash;leaders willing to challenge workflows, empower teams, and make decisions even when the path isn&#39;t completely clear.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The awkward adolescence phase won&#39;t last forever. The organizations that learn to work alongside AI now, imperfections and all, will be the ones who thrive when it matures.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;author__image col-sm-5&quot;&gt;&lt;img src=&quot;/link/e6418e9a3a8743e69f1390b78628d8ef.aspx&quot; alt=&quot;&quot; width=&quot;288&quot; height=&quot;270&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;author__content col-sm-7 keep-margin-bottom&quot;&gt;
&lt;h2&gt;Graham Carr, Solutions Architect&lt;/h2&gt;
&lt;div class=&quot;rich-text aos-init aos-animate&quot;&gt;
&lt;p&gt;I am an experienced Solutions Architect with over 28 years&amp;rsquo; experience in a wide range of products and technologies. I have helped companies deliver their digital vision from concept all the way through to delivery. I have a particular passion for DXPs (Digital Experience Platforms) and am a certified developer for Optimizely as well as a Platinum OMVP.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2025-10-02T08:14:12.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP - Opti Graph Extensions add-on v1.0.0 released</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2025/9/a-day-in-the-life-of-an-optimizely-mvp---opti-graph-extensions-add-on-v1.0.0-released" /><id>&lt;div&gt;I am pleased to announce that the official v1.0.0 of the Opti Graph Extensions add-on has now been released and is generally available. Refer to my previous blog post for further details on this package (&lt;a href=&quot;/link/5a8ecd0f40c6459e8b8601da970e4152.aspx&quot;&gt;A day in the life of an Optimizely OMVP - Introducing the beta of&lt;/a&gt;)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;NuGet Links&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://www.nuget.org/packages/OptiGraphExtensions/1.0.0&quot;&gt;NuGet Gallery | OptiGraphExtensions 1.0.0&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;https://api.nuget.optimizely.com/packages/optigraphextensions/1.0.0&quot;&gt;OptiGraphExtensions 1.0.0 - Optimizely Nuget&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;Installing OptiGraph Extensions is straightforward:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;1. Add the NuGet package to your Optimizely CMS project:&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;dotnet add package OptiGraphExtensions&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;2. Configure the services in your Startup.cs:&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;services.AddOptiGraphExtensions(options =&amp;gt;
{
    options.ConnectionStringName = &quot;EPiServerDB&quot;;
});

app.UseOptiGraphExtensions();&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;3. As this is a Blazor-based admin interface, ensure that Blazor server-side is set up in your Optimizely CMS project.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;// Add Blazor services
services.AddServerSideBlazor();

// Map Blazor hub
app.UseEndpoints(endpoints =&amp;gt;
{
    endpoints.MapContent();
    endpoints.MapBlazorHub();
    endpoints.MapControllers();
});&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;p&gt;4. Add your Graph instance configuration to appsettings.json, this information can be found within PaaSPortal for a PaaS instance of Optimizely CMS12 and within the dashboard of a SaaS instance of Optimizely CMS 12&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;  &quot;Optimizely&quot;: {
    &quot;ContentGraph&quot;: {
      &quot;GatewayAddress&quot;: &quot;&amp;lt;your graph instance gateway address&amp;gt;&quot;,
      &quot;AppKey&quot;: &quot;&amp;lt;your graph instance key&amp;gt;&quot;,
      &quot;Secret&quot;: &quot;&amp;lt;your graph instance secret&amp;gt;&quot;
    }
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;5.&amp;nbsp;Additional Configuration Customisation&lt;/p&gt;
&lt;p&gt;The configuration of the module has some scope for modification by providing configuration in the service extension methods. &amp;nbsp;Both the provision of &lt;strong&gt;optiGraphExtensionsSetupOptions&lt;/strong&gt; and &lt;strong&gt;authorizationOptions&lt;/strong&gt;&amp;nbsp;are optional in the following example.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;services.AddOptiGraphExtensions(optiGraphExtensionsSetupOptions =&amp;gt;
{
    optiGraphExtensionsSetupOptions.ConnectionStringName = &quot;EPiServerDB&quot;;
},
authorizationOptions =&amp;gt; 
{
    authorizationOptions.AddPolicy(OptiGraphExtensionsConstants.AuthorizationPolicy, policy =&amp;gt;
    {
        policy.RequireRole(&quot;WebAdmins&quot;);
    });
});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Authentication With Optimizely Opti ID&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you are using the new Optimizely Opti ID package for authentication into Optimizely CMS and the rest of the Optimizely One suite, then you will need to define the `authorizationOptions` for this module as part of your application start up. &amp;nbsp;This should be a simple case of adding `policy.AddAuthenticationSchemes(OptimizelyIdentityDefaults.SchemeName);` to the `authorizationOptions` as per the example below.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;serviceCollection.AddOptiGraphExtensions(optiGraphExtensionsSetupOptions =&amp;gt;
{
    optiGraphExtensionsSetupOptions.ConnectionStringName = &quot;EPiServerDB&quot;;
},
authorizationOptions =&amp;gt;
{
    authorizationOptions.AddPolicy(OptiGraphExtensionsConstants.AuthorizationPolicy, policy =&amp;gt;
    {
        policy.AddAuthenticationSchemes(OptimizelyIdentityDefaults.SchemeName);
        policy.RequireRole(&quot;WebAdmins&quot;);
    });
});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;6. Navigate to the Optimizely admin interface where you&#39;ll find the new &quot;Opti Graph Extensions&quot; menu item.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Get Involved&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I believe great tools are built through collaboration. Try Opti Graph Extensions in your environment and let me know what you think. Your feedback is invaluable in shaping the future of this extension.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download version 1 today&lt;/strong&gt; and take your Optimizely search experience to the next level!&lt;/p&gt;
&lt;/div&gt;</id><updated>2025-09-25T14:11:50.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP - Introducing the beta of Opti Graph Extensions add-on</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2025/9/a-day-in-the-life-of-an-optimizely-omvp---introducing-opti-graph-extensions-add-on/" /><id>&lt;div&gt;
&lt;p&gt;&lt;strong&gt;Introducing Opti Graph Extensions: Enhanced Search Management for Optimizely CMS&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I am excited to announce the beta release of &lt;strong&gt;**Opti Graph Extensions**&lt;/strong&gt;, a powerful new AddOn package for Optimizely CMS 12 that brings advanced Graph management capabilities directly into your CMS administration interface.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is Opti Graph Extensions?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Opti Graph Extensions is an open-source AddOn that seamlessly integrates with Optimizely Graph to provide comprehensive management of search synonyms and pinned results. Built specifically for Optimizely CMS 12+, this package empowers content editors and administrators to fine-tune search experiences without leaving the familiar CMS environment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#128269; Synonym Management&lt;/p&gt;
&lt;p&gt;Create and manage search synonyms to ensure users find what they&#39;re looking for, regardless of the terminology they use. Whether it&#39;s industry jargon, product variations, or common misspellings, synonym management helps bridge the gap between user intent and content discovery.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;/link/ac2cc0e3c432415885e96cfbeccc02e4.aspx&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&#128204; Pinned Results&lt;/p&gt;
&lt;p&gt;Take control of search result rankings by pinning specific content to the top of search results for particular queries. Perfect for promoting important content, seasonal campaigns, or ensuring critical information is always easily discoverable.&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;/link/4f87a3903702464a8c994874dff66e46.aspx&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&#128260; Automatic Graph Synchronization&lt;/p&gt;
&lt;p&gt;All changes are automatically synchronized with Optimizely Graph, ensuring your search enhancements are immediately reflected in your site&#39;s search functionality. The bi-directional sync keeps your local data and Graph data perfectly aligned.&lt;/p&gt;
&lt;p&gt;&#127912; Modern Administration Interface&lt;/p&gt;
&lt;p&gt;Built with Blazor components for a responsive, interactive experience, the administration interface integrates seamlessly with the Optimizely CMS admin panel. The clean, intuitive design makes managing search configurations effortless.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Built for .NET6.0 and .NET 8.0&lt;/strong&gt;&amp;nbsp;and Optimizely CMS 12+&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;Installing OptiGraph Extensions is straightforward:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;1. Add the NuGet package to your Optimizely CMS project:&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;dotnet add package OptiGraphExtensions --version 0.1.2-beta&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;2. Configure the services in your Startup.cs:&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;services.AddOptiGraphExtensions(options =&amp;gt;
{
    options.ConnectionStringName = &quot;EPiServerDB&quot;;
});

app.UseOptiGraphExtensions();&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;3. As this is a Blazor-based admin interface, ensure that Blazor server-side is set up in your Optimizely CMS project.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;// Add Blazor services
services.AddServerSideBlazor();

// Map Blazor hub
app.UseEndpoints(endpoints =&amp;gt;
{
    endpoints.MapContent();
    endpoints.MapBlazorHub();
    endpoints.MapControllers();
});&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;p&gt;4. Add your Graph instance configuration to appsettings.json, this information can be found within PaaSPortal for a PaaS instance of Optimizely CMS12 and within the dashboard of a SaaS instance of Optimizely CMS 12&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;  &quot;Optimizely&quot;: {
    &quot;ContentGraph&quot;: {
      &quot;GatewayAddress&quot;: &quot;&amp;lt;your graph instance gateway address&amp;gt;&quot;,
      &quot;AppKey&quot;: &quot;&amp;lt;your graph instance key&amp;gt;&quot;,
      &quot;Secret&quot;: &quot;&amp;lt;your graph instance secret&amp;gt;&quot;
    }
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;5. Navigate to the Optimizely admin interface where you&#39;ll find the new &quot;Opti Graph Extensions&quot; menu item.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Open Source and Community Driven&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Opti Graph Extensions is open source and I welcome contributions from the community. Whether it&#39;s bug reports, feature requests, or pull requests, your input helps make this tool better for everyone in the Optimizely ecosystem.&lt;/p&gt;
&lt;p&gt;Visit my GitHub repository (&lt;a href=&quot;https://github.com/adayinthelifeofapro/OptiGraphExtensions&quot;&gt;https://github.com/adayinthelifeofapro/OptiGraphExtensions&lt;/a&gt;) to:&lt;/p&gt;
&lt;p&gt;- View the source code&lt;/p&gt;
&lt;p&gt;- Report issues&lt;/p&gt;
&lt;p&gt;- Contribute improvements&lt;/p&gt;
&lt;p&gt;- Access detailed documentation&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Beta Release Notes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As this is a beta release, I am actively seeking feedback from the community. While the core functionality is stable and thoroughly tested, I am particularly interested in hearing about:&lt;/p&gt;
&lt;p&gt;- Integration experiences with different Optimizely CMS configurations&lt;/p&gt;
&lt;p&gt;- Performance with large volumes of synonyms and pinned results&lt;/p&gt;
&lt;p&gt;- Additional features that would enhance your search management workflows&lt;/p&gt;
&lt;p&gt;- Any edge cases or scenarios we should consider&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Get Involved&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I believe great tools are built through collaboration. Try Opti Graph Extensions in your development environment and let me know what you think. Your feedback during this beta phase is invaluable in shaping the final release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download the beta today&lt;/strong&gt;&amp;nbsp;and take your Optimizely search experience to the next level!&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Opti Graph Extensions is an independent open-source project designed to enhance the Optimizely CMS platform. For questions, support, or contributions, please visit my GitHub repository.&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;</id><updated>2025-09-15T12:24:52.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP - Enhancing Search Relevance with Optimizely Graph: Synonyms and Pinned Results</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2025/9/a-day-in-the-life-of-an-optimizely-omvp---introducing-the-optigraphextensions-add-on/" /><id>&lt;p class=&quot;whitespace-normal break-words&quot;&gt;When building search experiences for modern digital platforms, relevance is everything. Users expect search to understand their intent, even when they use different terminology than what&#39;s in your content. They also expect the most important results to appear prominently. Optimizely Graph addresses these challenges with two powerful features: synonyms and pinned results.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Understanding Synonyms in Optimizely Graph&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Synonyms in Optimizely Graph allow you to define equivalent terms that should return similar search results. This feature bridges the gap between how your content authors describe things and how your users search for them.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Consider an e-commerce site selling athletic footwear. Your product catalog might consistently use the term &quot;running shoes,&quot; but customers might search for &quot;sneakers,&quot; &quot;trainers,&quot; or &quot;athletic shoes.&quot; Without synonym mapping, these searches could return incomplete or irrelevant results. Optimizely Graph&#39;s synonym functionality ensures that all these terms connect users to the products they&#39;re seeking.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The implementation of synonyms in Optimizely Graph supports both uni-directional and bi-directional relationships. Uni-directional synonyms work in one direction only&amp;mdash;searching for &quot;TV&quot; might return results for &quot;television,&quot; but searching for &quot;television&quot; won&#39;t necessarily include results specifically tagged as &quot;TV.&quot; Bi-directional synonyms create a two-way relationship where both terms are treated as fully interchangeable.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Implementing Synonyms&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Setting up synonyms in Optimizely Graph involves defining synonym sets through the Graph&#39;s configuration. You can create these mappings at different levels of granularity, from simple one-to-one relationships to complex multi-term equivalencies.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The synonym configuration supports several patterns. Single-term synonyms map individual words to their alternatives. Multi-word synonyms handle phrases like mapping &quot;customer service&quot; to &quot;support&quot; or &quot;help desk.&quot; You can also implement expansion synonyms where a single term expands to multiple possibilities, useful for abbreviations or acronyms that might have multiple meanings in different contexts.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;One particularly valuable aspect of Optimizely Graph&#39;s synonym implementation is its ability to handle context-aware synonyms. This means you can define different synonym sets for different parts of your content or different search contexts, preventing irrelevant matches when terms have multiple meanings across your domain.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;The Power of Pinned Results&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;While synonyms help users find what they&#39;re searching for regardless of terminology, pinned results ensure that certain content appears prominently for specific queries. This feature gives content managers and marketers direct control over search results for critical business terms or campaigns.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Pinned results serve multiple strategic purposes. They can highlight promotional content during specific campaigns, ensure compliance by surfacing important legal or safety information for relevant searches, or guide users toward preferred content when multiple valid results exist. For instance, when users search for &quot;return policy,&quot; you might want to pin both your standard return policy page and any temporary holiday return policy at the top of results.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Configuring Pinned Results&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Optimizely Graph allows you to pin results at specific positions in search results. You can pin single items or multiple items for any given query, with fine-grained control over their ordering. The configuration supports both exact match and partial match triggers, giving you flexibility in how broadly your pinned results apply.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The pinning mechanism in Optimizely Graph is sophisticated enough to handle overlapping rules gracefully. When multiple pinning rules might apply to a single query, the system follows a precedence order that you can configure, ensuring predictable and manageable behavior even in complex scenarios.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Pinned results can also be time-bound, allowing you to schedule when certain content should be promoted. This temporal control is invaluable for seasonal campaigns, limited-time offers, or content that should only be prominent during specific events or periods.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Best Practices for Synonyms and Pinned Results&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Successfully implementing these features requires thoughtful planning and ongoing refinement. For synonyms, start by analyzing your search logs to identify common query patterns and terminology mismatches. Look for searches that return few or no results despite relevant content existing in your system. These gaps often reveal synonym opportunities.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Regular review and updates are essential for maintaining synonym quality. Language evolves, new products or services introduce new terminology, and your user base&#39;s vocabulary might shift over time. Establish a review cycle to evaluate and update your synonym mappings based on actual search behavior and user feedback.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;When implementing pinned results, resist the temptation to over-pin. Excessive pinning can make search results feel artificial and might actually decrease user satisfaction if pinned content consistently doesn&#39;t match user intent. Use pinning strategically for high-value scenarios rather than trying to control every possible search.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Consider implementing measurement and testing frameworks for both features. A/B testing different synonym configurations or pinned result strategies can provide valuable insights into what genuinely improves user experience versus what might seem helpful but actually creates friction.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Integration Considerations&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Both synonyms and pinned results in Optimizely Graph integrate seamlessly with the platform&#39;s other search capabilities. They work alongside faceting, filtering, and relevance tuning to create comprehensive search experiences. The Graph API provides programmatic access to manage these configurations, enabling dynamic updates based on business logic or external data sources.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Performance implications are minimal, as Optimizely Graph processes synonyms and pinned results at query time with optimized algorithms that maintain fast response times even with extensive synonym dictionaries or pinning rules.&lt;/p&gt;
&lt;h2 class=&quot;text-xl font-bold text-text-100 mt-1 -mb-0.5&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;Synonyms and pinned results in Optimizely Graph represent powerful tools for creating more intuitive and business-aligned search experiences. Synonyms ensure users find what they&#39;re looking for regardless of the terminology they use, while pinned results give you direct control over search results for critical queries. Together, they enable you to build search functionality that serves both user needs and business objectives effectively.&lt;/p&gt;
&lt;p class=&quot;whitespace-normal break-words&quot;&gt;The key to success with these features lies in thoughtful implementation, regular maintenance, and continuous optimization based on user behavior and business requirements. When properly configured and managed, they transform search from a simple matching exercise into a sophisticated discovery tool that connects users with the content they need, when they need it.&lt;/p&gt;</id><updated>2025-09-14T18:56:38.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP - AEO &amp; GEO: The Future of Digital Visibility with Optimizely</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2025/9/a-day-in-the-life-of-an-optimizely-developer---aeo--geo-the-future-of-digital-visibility-with-optimizely/" /><id>&lt;p&gt;The way people discover content online is undergoing a seismic shift. Traditional SEO is no longer enough. With AI-powered tools like ChatGPT, Gemini, and Perplexity reshaping search behavior, two new disciplines have emerged:&amp;nbsp;&lt;strong&gt;Answer Engine Optimization (AEO)&lt;/strong&gt;&amp;nbsp;and&amp;nbsp;&lt;strong&gt;Generative Engine Optimization (GEO)&lt;/strong&gt;. For brands, this means one thing&amp;mdash;adapt or risk invisibility.&lt;/p&gt;
&lt;p&gt;Optimizely, as a leader in digital experience platforms, is at the forefront of this transformation. Let&amp;rsquo;s explore what AEO and GEO mean, why they matter, and how Optimizely empowers businesses to thrive in this new era.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;What Are AEO and GEO?&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AEO (Answer Engine Optimization)&lt;/strong&gt;&amp;nbsp;focuses on structuring content so it can provide&amp;nbsp;&lt;strong&gt;clear, concise answers&lt;/strong&gt;&amp;nbsp;to user queries. Think voice assistants, featured snippets, and AI-driven Q&amp;amp;A responses.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GEO (Generative Engine Optimization)&lt;/strong&gt;&amp;nbsp;is about making your content&amp;nbsp;&lt;strong&gt;discoverable and usable by generative AI models&lt;/strong&gt;. These models don&amp;rsquo;t just link&amp;mdash;they summarize, synthesize, and present answers without sending traffic back to your site. If your content isn&amp;rsquo;t machine-readable and trustworthy, it won&amp;rsquo;t make the cut.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both strategies aim to ensure your brand remains visible in a world where&amp;nbsp;&lt;strong&gt;AI agents, not humans, are often the first audience&lt;/strong&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;Why This Matters Now&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Generative AI is changing the rules of engagement:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Website traffic is predicted to drop by 25% by 2026&lt;/strong&gt;&amp;nbsp;as AI tools replace traditional search engines for many queries.&lt;/li&gt;
&lt;li&gt;AI agents&amp;nbsp;&lt;strong&gt;scan and summarize&lt;/strong&gt;&amp;nbsp;content rather than browse, meaning your site structure and metadata are critical.&lt;/li&gt;
&lt;li&gt;Visibility now depends on&amp;nbsp;&lt;strong&gt;EEAT principles&lt;/strong&gt;&amp;nbsp;(Experience, Expertise, Authoritativeness, Trustworthiness) and machine readability.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;How Optimizely Enables AEO &amp;amp; GEO Success&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Optimizely is introducing &lt;strong&gt;AI-ready capabilities&lt;/strong&gt;&amp;nbsp;across its CMS and experimentation platform to help brands stay discoverable and competitive.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;1. GEO-Ready CMS&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Optimizely&amp;rsquo;s CMS now acts as a&amp;nbsp;&lt;strong&gt;visibility engine&lt;/strong&gt;, optimized for AI-driven discovery. Key features that are planned for the CMS include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Page Optimization&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Auto-generated&amp;nbsp;&lt;strong&gt;Q&amp;amp;A fields&lt;/strong&gt;&amp;nbsp;for AEO&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GEO-specific metadata&lt;/strong&gt;&amp;nbsp;(titles, descriptions, EEAT elements)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown summaries&lt;/strong&gt;&amp;nbsp;for AI scanning&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Site-Wide Optimization&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;llms.txt auto-generation&lt;/strong&gt;&amp;nbsp;to signal which pages should be indexed by AI models&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bulk metadata population&lt;/strong&gt;&amp;nbsp;for existing content&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GEO topic templates&lt;/strong&gt;&amp;nbsp;for AI-friendly content structure&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GEO Analytics&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GEO health index&lt;/strong&gt;&amp;nbsp;to score pages against AEO/GEO best practices&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crawl-to-refer ratio&lt;/strong&gt;&amp;nbsp;to measure AI bot engagement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crawl rate by model&lt;/strong&gt;&amp;nbsp;to see which LLMs are consuming your content&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;strong&gt;2. Adaptive Experimentation &amp;amp; Personalization&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Optimizely&amp;rsquo;s&amp;nbsp;&lt;strong&gt;Feature Experimentation platform&lt;/strong&gt;&amp;nbsp;complements AEO/GEO by enabling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI-powered optimization&lt;/strong&gt;&amp;nbsp;with multi-armed bandits for real-time performance improvements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contextual personalization&lt;/strong&gt;&amp;nbsp;to deliver the right experience to the right audience&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Experimentation at scale&lt;/strong&gt;&amp;nbsp;across web, mobile, and edge environments&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stats Engine&lt;/strong&gt;&amp;nbsp;for statistically rigorous results, reducing guesswork and risk&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;Why Optimizely Is Your AEO/GEO Partner&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;With&amp;nbsp;&lt;strong&gt;Optimizely Opal AI&lt;/strong&gt;, brands can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generate&amp;nbsp;&lt;strong&gt;AI-ready summaries and metadata&lt;/strong&gt;&amp;nbsp;automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analyze GEO performance metrics&lt;/strong&gt;&amp;nbsp;in real time&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Experiment and personalize&lt;/strong&gt;&amp;nbsp;experiences to maximize engagement and conversions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short, Optimizely helps you&amp;nbsp;&lt;strong&gt;future-proof your digital presence&lt;/strong&gt;&amp;nbsp;for a world where AI is the new search engine.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;AEO and GEO are no longer optional&amp;mdash;they&amp;rsquo;re essential for visibility in the AI era.&lt;/li&gt;
&lt;li&gt;Optimizely&amp;rsquo;s CMS and experimentation tools provide&amp;nbsp;&lt;strong&gt;built-in AEO/GEO capabilities&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Brands that adapt now will lead in discoverability, trust, and engagement.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;✅&amp;nbsp;&lt;strong&gt;Next Steps:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Attend our upcoming webinar &lt;a href=&quot;https://www.netcel.com/events/ai-search/&quot;&gt;https://www.netcel.com/events/ai-search/&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Audit your content for AEO/GEO readiness.&lt;/li&gt;
&lt;li&gt;Explore Optimizely&amp;rsquo;s&amp;nbsp;&lt;strong&gt;GEO-ready CMS&lt;/strong&gt;&amp;nbsp;and&amp;nbsp;&lt;strong&gt;Feature Experimentation platform&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Start building a strategy for&amp;nbsp;&lt;strong&gt;AI-driven discoverability&lt;/strong&gt; today.&lt;/li&gt;
&lt;/ul&gt;</id><updated>2025-09-12T08:17:05.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP - The Optimizely Opal Tools SDK: How to Extend Opal with Your Own Superpowers</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2025/8/a-day-in-the-life-of-an-optimizely-developer---the-optimizely-opal-tools-sdk-how-to-extend-opal-with-your-own-superpowers/" /><id>&lt;p&gt;If you&amp;rsquo;ve spent any time with&amp;nbsp;&lt;strong&gt;Optimizely Opal&lt;/strong&gt;&amp;mdash;Optimizely&amp;rsquo;s cross‑platform AI assistant&amp;mdash;you&amp;rsquo;ll know it can already plan, generate, analyze, and automate across Optimizely One. Under the hood, Opal orchestrates&amp;nbsp;&lt;em&gt;agents&lt;/em&gt;&amp;nbsp;and&amp;nbsp;&lt;em&gt;tools&lt;/em&gt;&amp;nbsp;to decide what to do next, and it even routes requests through Google Gemini so your data stays private.&lt;/p&gt;
&lt;p&gt;The&amp;nbsp;&lt;strong&gt;Opal Tools SDK&lt;/strong&gt; is how you add your own capabilities to that ecosystem. In this post, I will cover what it is, how it works, and show quick starts in Python and C#.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;What is the Opal Tools SDK?&lt;/h2&gt;
&lt;p&gt;At a high level, the Opal Tools SDK lets you publish&amp;nbsp;&lt;strong&gt;HTTP‑addressable tools&lt;/strong&gt;&amp;nbsp;that Opal can&amp;nbsp;&lt;em&gt;discover&lt;/em&gt;&amp;nbsp;and&amp;nbsp;&lt;em&gt;invoke&lt;/em&gt;&amp;mdash;think &amp;ldquo;plugins&amp;rdquo; that Opal can call to fetch data, trigger workflows, or render interactive responses. Each tool self‑describes via a&amp;nbsp;/discovery&amp;nbsp;&lt;strong&gt;endpoint&lt;/strong&gt;&amp;nbsp;(so Opal knows the functions, parameters, and auth it supports) and exposes one or more execution endpoints for runtime calls.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;C# SDK (NuGet):&lt;/strong&gt;&amp;nbsp;Provides attributes like&amp;nbsp;[Tool]&amp;nbsp;and&amp;nbsp;[RequiresAuth], an&amp;nbsp;AddOpalToolsService()&amp;nbsp;extension to wire everything up in ASP.NET Core, and built‑in discovery output.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Python SDK (PyPI):&lt;/strong&gt;&amp;nbsp;Adds decorators for defining tools, automatically generates discovery, validates parameters, and includes helpers for authentication and interactive &amp;ldquo;Island&amp;rdquo; UI responses.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JavaScript/TypeScript:&lt;/strong&gt;&amp;nbsp;Community examples show tools implemented with the&amp;nbsp;@optimizely-opal/opal-tools-sdk&amp;nbsp;npm package and deployed to edge/serverless environments like Cloudflare Workers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why extend Opal? Because while Opal ships with a lot of built‑in tools across Optimizely One, the SDK lets you integrate proprietary APIs, automate domain‑specific workflows, and expose differentiated capabilities that fit your organization&amp;rsquo;s processes.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;How Opal selects and uses tools&lt;/h2&gt;
&lt;p&gt;When a user asks for something, Opal enriches the prompt with workspace context,&amp;nbsp;&lt;strong&gt;selects the best agent and supporting tools&lt;/strong&gt;, calls an LLM to plan, and&amp;mdash;if needed&amp;mdash;invokes tools to act, then returns a result in chat. Your custom tools become first‑class citizens in that loop.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Quick start: C# (ASP.NET&amp;nbsp;Core)&lt;/h2&gt;
&lt;p&gt;The .NET SDK targets .NET 6+ and uses attributes to mark tool methods and declare auth requirements.&lt;/p&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-3589fui-FluentProviderr24 loop-host ___jdtuxv0 f19n0e5 fxugw4r f1o700av fk6fouc fkhj508 figsok6 f1i3iumi&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block ___18l6njp fjp19u1 f19mstbe f22iagw f1vx9l62 f1erghxr f1ehz9de f1spoy8 fmb70yw f5ogflp f1hqa2wf f1f09k3d finvdd3 fzkkow9 fcdblym fg706s2 fjik90z fowmxj1 fu36uob f1te0ok0 f1mz5xvh fsbatw6 f1fwfn16 f1tqpug4 f1sz03h2 f1ni9pe4&quot;&gt;
&lt;div class=&quot;___1oy5zc6 f22iagw f1063pyq f4d9j23 f122n59 fzki0ko f1xpgbo1 f15wwbgh f1jhi6b8 f19g0ac f1kcqot9 f81rol6 fpe6lb7 frdkuqy f18w1nra fd7ph1c fi64zpg f1rmlqtg&quot;&gt;
&lt;div class=&quot;___7alnn30 frevy5r f1j7mq28 f1a3p1vp&quot;&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;        [Tool(&quot;cmp_campaigns&quot;, &quot;Retrieves a list of campaigns&quot;)]
        public static async Task&amp;lt;object&amp;gt; GetCampaigns(GetCampaignListParameters parameters)
        {
            var service = GetCmpService();

            return await service.GetCampaigns(parameters);
        }

        [Tool(&quot;cmp_create_campaign&quot;, &quot;Allows the user to create a campaign in CMP.&quot;)]
        public static async Task&amp;lt;object&amp;gt; CreateCampaign(CreateCampaignParameters parameters)
        {
            var service = GetCmpService();

            var result = await service.CreateCampaign(parameters.ToCreateCampaignModel());

            return (result is null) ?
                new { Success = false, Message = &quot;Failed to create campaign. Please check the parameters and try again.&quot; } :
                new { Success = true, Event = result };
        }

        [Tool(&quot;cmp_create_task&quot;, &quot;Allows the user to create a task in CMP.&quot;)]
        public static async Task&amp;lt;object&amp;gt; CreateTask(CreateTaskParameters parameters)
        {
            var service = GetCmpService();

            var result = await service.CreateTask(parameters.ToCreateTaskModel());

            return (result is null) ?
                new { Success = false, Message = &quot;Failed to create task. Please check the parameters and try again.&quot; } :
                new { Success = true, Event = result };
        }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Add&amp;nbsp;&lt;strong&gt;[RequiresAuth(&quot;google&quot;,&quot;calendar&quot;)]&amp;nbsp;&lt;/strong&gt;for OAuth‑based flows.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Quick start: Python (FastAPI)&lt;/h2&gt;
&lt;p&gt;The Python package streamlines everything with a&amp;nbsp;@tool&amp;nbsp;decorator and a service that auto‑registers discovery at&lt;strong&gt;&amp;nbsp;/discovery&lt;/strong&gt;. You also get optional&amp;nbsp;&lt;strong&gt;auth requirements&lt;/strong&gt;&amp;nbsp;and&amp;nbsp;&lt;strong&gt;interactive Islands&lt;/strong&gt;&amp;nbsp;(lightweight UI components Opal can render to capture inputs and trigger follow‑up actions).&lt;/p&gt;
&lt;pre class=&quot;language-python&quot;&gt;&lt;code&gt;from fastapi import FastAPI
from pydantic import BaseModel
from opal_tools_sdk import ToolsService, tool

app = FastAPI()
tools_service = ToolsService(app)

class WeatherParams(BaseModel):
    location: str
    units: str = &quot;metric&quot;

@tool(&quot;get_weather&quot;, &quot;Get current weather for a location&quot;)
async def get_weather(params: WeatherParams):
    return {&quot;location&quot;: params.location, &quot;temperature&quot;: 22, &quot;units&quot;: params.units}
&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-565fui-FluentProviderr1p loop-host ___jdtuxv0 f19n0e5 fxugw4r f1o700av fk6fouc fkhj508 figsok6 f1i3iumi&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block ___18l6njp fjp19u1 f19mstbe f22iagw f1vx9l62 f1erghxr f1ehz9de f1spoy8 fmb70yw f5ogflp f1hqa2wf f1f09k3d finvdd3 fzkkow9 fcdblym fg706s2 fjik90z fowmxj1 fu36uob f1te0ok0 f1mz5xvh fsbatw6 f1fwfn16 f1tqpug4 f1sz03h2 f1ni9pe4&quot;&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Discovery&lt;/strong&gt;&amp;nbsp;is exposed automatically at&amp;nbsp;GET /discovery.&lt;/li&gt;
&lt;li&gt;Add auth with&amp;nbsp;@requires_auth(provider=&quot;google&quot;, scope_bundle=&quot;calendar&quot;, required=True).&lt;/li&gt;
&lt;li&gt;Build&amp;nbsp;&lt;strong&gt;interactive Islands&lt;/strong&gt;&amp;nbsp;with&amp;nbsp;IslandConfig&amp;nbsp;and&amp;nbsp;IslandResponse&amp;nbsp;for multi‑step flows.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;JavaScript/TypeScript patterns&lt;/h2&gt;
&lt;p&gt;Examples show how to publish tools in TypeScript with Express or Workers, expose&amp;nbsp;&lt;strong&gt;GET /discovery,&lt;/strong&gt; and process&amp;nbsp;&lt;strong&gt;POST&amp;nbsp;&lt;/strong&gt;calls for execution. Deployment tips include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keep&amp;nbsp;&lt;strong&gt;/discovery&lt;/strong&gt;&amp;nbsp;public so Opal can read your capabilities.&lt;/li&gt;
&lt;li&gt;Apply auth only to execution routes.&lt;/li&gt;
&lt;li&gt;Handle CORS for serverless environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;Authentication &amp;amp; security&lt;/h2&gt;
&lt;p&gt;Both SDKs let you express&amp;nbsp;&lt;strong&gt;auth requirements per tool&lt;/strong&gt;, so Opal can obtain user consent and pass provider‑scoped credentials to you at runtime. Your handler receives&amp;nbsp;AuthData&amp;nbsp;with provider identity and tokens you can use against Google, Microsoft, or other APIs&amp;mdash;without building the consent UX yourself.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Interactive responses with &amp;ldquo;Islands&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;A standout feature in the Python SDK is&amp;nbsp;&lt;strong&gt;Islands&lt;/strong&gt;&amp;mdash;a way for your tool to return structured UI (fields, buttons) inside the chat, enabling multi‑step interactions without building a front end.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Architecture in practice&lt;/h2&gt;
&lt;p&gt;A typical tool service exposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GET /discovery&lt;/strong&gt;&amp;nbsp;&amp;rarr; JSON describing functions, endpoints, and auth requirements.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;POST /tools/&amp;lt;function&amp;gt;&lt;/strong&gt;&amp;nbsp;&amp;rarr; Executes your business logic.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Opal discovers your service via the discovery URL you register in the Opal admin UI.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Real‑world use cases&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Events Management&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Internal system lookup&lt;/strong&gt;&amp;nbsp;(CMS, ERP, PIM)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Marketing ops automations&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Experimentation helpers&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;Best practices&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Keep&amp;nbsp;/discovery&amp;nbsp;public.&lt;/li&gt;
&lt;li&gt;Validate parameters and return clear errors.&lt;/li&gt;
&lt;li&gt;Handle CORS for edge deployments.&lt;/li&gt;
&lt;li&gt;Design for chat UX with concise, markdown‑formatted results.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;Final thoughts&lt;/h2&gt;
&lt;p&gt;The Opal Tools SDK gives you a straightforward way to&amp;nbsp;&lt;strong&gt;meet your users where they already work&lt;/strong&gt;&amp;mdash;inside Opal&amp;mdash;while enforcing your own security, governance, and business logic. Start small (one tool, one endpoint), keep discovery simple, and iterate toward richer, interactive flows.&lt;/p&gt;</id><updated>2025-09-04T06:41:01.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>A day in the life of an Optimizely OMVP - We Hacked the Future: Netcel&#39;s Opal Hackathon Adventure</title><link href="https://world.optimizely.com/blogs/allthingsopti/dates/2025/8/a-day-in-the-life-of-an-optimizely-developer---we-hacked-the-future-our-opal-hackathon-adventure/" /><id>&lt;p&gt;Ever wondered what happens when you mix&amp;nbsp;&lt;strong&gt;AI&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;creativity&lt;/strong&gt;, and a dash of competitive spirit? Welcome to the&amp;nbsp;&lt;strong&gt;Opal Hackathon 2025&lt;/strong&gt;&amp;mdash;where we rolled up our sleeves and built something game-changing.&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;&lt;strong&gt;So, what&amp;rsquo;s Opal anyway?&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Think of Opal as your&amp;nbsp;&lt;strong&gt;AI-powered co-pilot&lt;/strong&gt;&amp;nbsp;inside the Optimizely Digital Experience Platform. It helps marketers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automate repetitive tasks&lt;/li&gt;
&lt;li&gt;Surface actionable insights&lt;/li&gt;
&lt;li&gt;Personalize content like a pro&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Basically, it&amp;rsquo;s the smart assistant you didn&amp;rsquo;t know you needed.&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;&lt;strong&gt;The Hackathon Challenge&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;This isn&#39;t just any hackathon. It&#39;s an&amp;nbsp;&lt;strong&gt;exclusive playground for OMVPs&lt;/strong&gt;&amp;nbsp;(and their teams) to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get&amp;nbsp;&lt;strong&gt;early access&lt;/strong&gt;&amp;nbsp;to the Opal Tools SDK&lt;/li&gt;
&lt;li&gt;Build tools that make digital experiences smarter&lt;/li&gt;
&lt;li&gt;Show off some serious innovation chops&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our mission?&amp;nbsp;&lt;strong&gt;Create an Opal integration that manages events through natural language chat.&lt;/strong&gt;&lt;br /&gt;Imagine saying:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Show me upcoming events&amp;rdquo;&lt;br /&gt;or&lt;br /&gt;&amp;ldquo;Create a new event in Eventbrite and sync it to CMS&amp;rdquo;&lt;br /&gt;&amp;hellip;and it just happens. No more juggling spreadsheets, CMS, and Eventbrite tabs. Just chat, done.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h4&gt;&lt;strong&gt;Why This Matters&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No context switching&lt;/strong&gt;&amp;nbsp;= more focus&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fewer errors&lt;/strong&gt;&amp;nbsp;= happier teams&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faster delivery&lt;/strong&gt; = better experiences&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h4&gt;&lt;strong&gt;What We Learned&lt;/strong&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;How to wrap APIs into Opal tools&lt;/li&gt;
&lt;li&gt;Building advanced workflows and agents&lt;/li&gt;
&lt;li&gt;Deploying tools via Opal Connect Platform (OCP)&lt;/li&gt;
&lt;li&gt;Using SDKs in JS, Python, and .NET&lt;br /&gt;Basically, we leveled up big time.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h4&gt;&lt;strong&gt;What&amp;rsquo;s Next?&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;We&amp;rsquo;re not stopping here. Expect&amp;nbsp;&lt;strong&gt;smarter workflows&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;deeper integrations&lt;/strong&gt;, and maybe even a&amp;nbsp;&lt;strong&gt;killer demo at Opticon&lt;/strong&gt;. The future of digital experience? We&amp;rsquo;re building it&amp;mdash;one hack at a time.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Stay tuned.&lt;/strong&gt;&amp;nbsp;Big things are coming.&lt;br /&gt;&lt;br /&gt;&#128073; Want to know more? Get in touch with us.&lt;/p&gt;</id><updated>2025-08-31T19:20:26.0000000Z</updated><summary type="html">Blog post</summary></entry></feed>