<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><language>en</language><title>Blog posts by Scott Reed</title> <link>https://world.optimizely.com/blogs/scott-reed/</link><description></description><ttl>60</ttl><generator>Optimizely World</generator><item> <title>WebMCP providing understandable actions to agents in Optimizely</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2026/9/webmcp-providing-understandable-actions-to-agents-in-optimizely/</link>            <description>&lt;h1&gt;WebMCP is coming to Optimizely: a strategic view for CMS and Commerce teams&lt;/h1&gt;
&lt;p&gt;At Opticon 2026 in New York, Alex Atzberger framed Optimizely&#39;s strategy around three experiences: the marketer experience, the customer experience, and the agent experience. The first two are familiar territory. The third is the one that changes how we plan a site, and WebMCP is the most concrete piece of it.&lt;/p&gt;
&lt;p&gt;The premise is simple. Your site now has two audiences. Humans arrive through search, ads and email, and interact with the interface you designed for them. AI agents arrive on a customer&#39;s behalf, running in that customer&#39;s browser, and try to complete the same tasks through the same interface. Today they do that badly. They read the screen, guess which button does what, and break the moment a designer moves something. The result is a slow, unreliable experience that the brand has no control over and no visibility into.&lt;/p&gt;
&lt;p&gt;WebMCP is the proposed fix, and the shift it represents is worth understanding before the implementation detail arrives.&lt;/p&gt;
&lt;p&gt;And what&#39;s more it was announced that WebMCP support will be coming automatically to the platform, so similar to how we can help fix AEO and GEO issues, agents and the DXP platform will give you features to be able to add this to your website!&lt;/p&gt;
&lt;h2&gt;What WebMCP?&lt;/h2&gt;
&lt;p&gt;Instead of leaving an agent to work out what your interface does, the site tells it.&lt;/p&gt;
&lt;p&gt;A page can publish a short, structured list of the actions it supports: search the catalogue, choose a size, book an appointment, request a brochure, check an order, start a return. Each action has a name, a description, and a defined set of inputs. The agent picks from that menu rather than guessing, and the action runs in the customer&#39;s own browser window, visibly, so the person can see what is happening and step in.&lt;/p&gt;
&lt;p&gt;That last part matters commercially. The action executes inside your site, in your session, under your rules. Your brand, your pricing logic, your validation and your design decisions all stay intact. This is the opposite of the alternative future, where agents scrape your content, complete tasks in an interface you do not own, and reduce your brand to a data source.&lt;/p&gt;
&lt;p&gt;WebMCP is a proposed web standard being incubated at the W3C, led largely by engineers from Google and Microsoft. It is the browser-side counterpart to the server-side integrations many teams have already started building. Optimizely shipped a server-side MCP server for Experimentation earlier in 2026, which lets an agent work with your experimentation programme on behalf of an authorised user. WebMCP addresses the other side of the equation: not your team&#39;s tools, but your customers&#39; journeys on your live site.&lt;/p&gt;
&lt;h2&gt;Where the standard actually is&lt;/h2&gt;
&lt;p&gt;Set expectations carefully, because this is early.&lt;/p&gt;
&lt;p&gt;Chrome and Edge both have developer trials running. Brave and ChatGPT&#39;s desktop app have shipped early support. Firefox and Apple are engaged in the standards process but have not committed to implementing it, and the specification is still changing. Nobody should be building a business case on WebMCP delivering measurable revenue this quarter.&lt;/p&gt;
&lt;p&gt;What it does justify is a place on the roadmap and a set of preparatory decisions, most of which have value whether or not the standard lands as expected. That is the useful framing for a client conversation: this is not a bet on one specification, it is groundwork for agent-mediated traffic that is already arriving. Optimizely reported agent-related traffic growing around 6% month over month in its own data.&lt;/p&gt;
&lt;h2&gt;What Optimizely showed, and what is still unclear&lt;/h2&gt;
&lt;p&gt;Optimizely previewed WebMCP as part of the agent experience story at Opticon 2026, alongside agent-facing measurement: AI citations, brand mentions, share of voice, and which pages are receiving machine rather than human requests. The stated direction is that these capabilities become part of the platform rather than a per-project custom build.&lt;/p&gt;
&lt;p&gt;What has not been published in detail, at the time of writing, is the shape of that delivery: which products get it first, whether it surfaces through Forms and Visual Builder or through developer tooling, and on what timeline. If you are planning around specifics, get them from your Optimizely contact rather than from conference coverage, including this article.&lt;/p&gt;
&lt;h2&gt;Where this is useful on a content site&lt;/h2&gt;
&lt;p&gt;The strategic question is not &quot;how do we support agents&quot;. It is &quot;which actions on our site are worth an agent completing reliably&quot;. That list is usually shorter and more obvious than people expect.&lt;/p&gt;
&lt;p&gt;On a content-led site, the strongest candidates are the interactions that already have a clear structure and a clear business value attached:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enquiry and lead capture.&lt;/strong&gt; Brochure requests, contact forms, event registration, quote requests. These are the highest-intent actions on most sites and the ones most damaged by friction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Booking and appointments.&lt;/strong&gt; Complex date and time selection is exactly where agents struggle and where drop-off is highest for humans too.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search and filtered discovery.&lt;/strong&gt; A faceted listing is a set of choices you have expressed as an interface. The underlying capability is easy for an agent to use well.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-step journeys.&lt;/strong&gt; Applications, eligibility checks, configurators. Anywhere a visitor currently works through several screens to reach an answer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Account self-service.&lt;/strong&gt; Change a detail, download a document, check a status.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quinnipiac University, which runs around 17 sites on Optimizely, pointed at precisely this class of task at Opticon: booking a campus visit, requesting information. Nothing exotic. Just the things people came to the site to do.&lt;/p&gt;
&lt;p&gt;There is a second-order effect worth raising with content teams. Nazanin Ramezani made the point at Opticon that as generating channel variations gets easier, managing the source content repository becomes the harder part of the job. The same logic applies to actions. If your taxonomy is thin and your product data is inconsistent, the descriptions of your actions will be vague, and vague descriptions get used incorrectly or ignored. Content and data quality stop being a hygiene issue and become a performance issue.&lt;/p&gt;
&lt;h2&gt;Where this is useful on a B2C storefront such as Customized Commerce&lt;/h2&gt;
&lt;p&gt;For consumer commerce on Customized Commerce, the value concentrates in three places.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Getting the right product into the basket.&lt;/strong&gt; Consumer catalogues are option-heavy, and the valid combinations are messy. The navy is out of stock in a 12; the longer leg length only comes in three colours. An agent reading two dependent dropdowns will get this wrong some of the time, and it will get it wrong quietly, putting the wrong item into a basket the shopper then buys. Your product data already holds the correct answer. Letting the site resolve an option request, rather than letting an agent infer it, turns the most likely failure into a point of difference. On a fashion, homeware or consumer electronics site, this is the single most valuable action to get right.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Repeat and low-consideration purchases.&lt;/strong&gt; Reordering consumables, refilling a subscription, adding to a wishlist, registering interest in an out-of-stock line. These are the journeys where the customer has no interest whatsoever in your interface and every interest in the outcome. They are also, conveniently, low risk.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Post-purchase self-service.&lt;/strong&gt; Order tracking, delivery changes, returns and exchanges. High volume, low margin for error, and a direct line to both customer service cost and repeat purchase rate.&lt;/p&gt;
&lt;p&gt;Running these actions inside the shopper&#39;s own session is what makes them viable. The session already knows the market and currency, the signed-in customer, the delivery preferences, the current basket and the promotions applied to it. An external integration has to reconstruct all of that before it can answer a question as ordinary as &quot;what does this cost me, delivered, by Friday?&quot;. Keeping the action on your site means it simply answers.&lt;/p&gt;
&lt;h2&gt;Where to start&lt;/h2&gt;
&lt;p&gt;Three things are worth doing in the next quarter, none of which depend on the specification settling.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Inventory your actions.&lt;/strong&gt; List the things customers actually come to your site to do, and rank them by business value. If an action cannot be described clearly and briefly, that tells you something about the journey rather than about WebMCP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit the data underneath the top three.&lt;/strong&gt; Product options, availability, taxonomy, form routing. This is the work that determines whether agent-assisted journeys succeed, and it improves the human experience in the meantime.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decide how you will recognise agent traffic.&lt;/strong&gt; Before it grows large enough to distort your reporting and your testing programme.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The technology here will not be the hard part. The hard part is the same thing every Opticon takeaway eventually circles back to: knowing which actions matter, having data structured well enough to describe them, and having governance robust enough to let something other than a human trigger them. None of that is blocked on a specification reaching maturity. It can start now.&lt;/p&gt;
&lt;p&gt;When we have more information about the specifics of the Optimizely implementation, I&#39;ll provide another article. Until then, I wanted this article to highlight where Optimizely is going around the agent experience and the new WebMCP technology.&amp;nbsp;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2026/9/webmcp-providing-understandable-actions-to-agents-in-optimizely/</guid>            <pubDate>Tue, 08 Sep 2026 09:11:49 GMT</pubDate>           <category>Blog post</category></item><item> <title>Opticon New York &amp; The Strategy on Upgrading to CMS 13 &amp; Commerce 15</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2026/9/opticon-new-york--the-strategy-on-upgrading-to-cms-13-/</link>            <description>&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;Well, another exciting Opticon in New York City wrapped up last week and it was certainly one of the most fun and exciting ones I&#39;ve been to,&lt;/p&gt;
&lt;p&gt;Niteco was there in force with our whole leadership and delivery team for UK and USA and it was a blast!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/5b71901e80a54069a99c19bd8ae160fe.aspx&quot; width=&quot;666&quot; height=&quot;466&quot; /&gt;&lt;/p&gt;
&lt;div&gt;As part of my takeaways from Opticon, I&#39;m going to break it down into two sections:
&lt;ol&gt;
&lt;li&gt;All the key announcements and what it means for your company and organisation&lt;/li&gt;
&lt;li&gt;A bit more about the strategy around CMS13 and Commerce15 upgrades&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Opticon Takeaways&lt;/h2&gt;
&lt;p&gt;Obviously, as expected, this year, one of the biggest pieces of excitement following the launch of Opal a year ago is everything that has been achieved and delivered on that platform and the amazing heights that the platform has grown to in the last year.&lt;/p&gt;
&lt;h3&gt;Opal is now a fully agentic platform and had a rename&lt;/h3&gt;
&lt;p&gt;Opal has now expanded in masses of capabilities in its agentic structure, workflows, and the addition of new features at Opticon. As part of this, there was a rename in how we talk about this&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The platform as a whole is now the Optimizely agent platform&lt;/li&gt;
&lt;li&gt;The specific marketing operational models (that are post trained) and agent experience are specifically now called Mark (Mark - Eting :p)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Virtual Teamates allow automomous operation&lt;/h3&gt;
&lt;p&gt;Although we have had workflows for a little while now that can be scheduled or triggered, Virtual Teamates now bring a layer of autonomous operation as an AI specific teammate that can do specific operations and work with the team &lt;a href=&quot;https://www.optimizely.com/solutions/virtual-teammates&quot;&gt;https://www.optimizely.com/solutions/virtual-teammates&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Teamates have an Opti ID identity, making them a unique member of the team&lt;/li&gt;
&lt;li&gt;They have user memory to allow all the activities they are working on to be remembered the same way as any user&lt;/li&gt;
&lt;li&gt;Teammates have specific profiles with resume style skills that explain they goals such as SEO &amp;amp; AI Search Analyst or Chief of Staff&lt;/li&gt;
&lt;li&gt;Teammates are optimised for the AI operations they do, which means using Mark&#39;s post-training models. This is faster, more effective, and cheaper!&lt;/li&gt;
&lt;li&gt;Teammates are autonomous and can interact on their own and can collaborate using chat with other agents and humans in the platform and with connected systems like Microsoft Teams and Slack&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Marketing Benchmark&lt;/h3&gt;
&lt;p&gt;While many AI models out there have specific benchmarking profiles that allow models to be tested and validated (which is a continuous source of how different frontier models are graded when they are released), there has been no benchmark system for marketing-specific models.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Therefore, Optimizely has created one and has open sourced it so it can be used with any other marketing AI models. They are using this to grade their own system of their post-trained models and can show that not only is it 10 to 20 times cheaper for the marketing models they are better that their tasks&lt;/p&gt;
&lt;p&gt;There are 285 tasks, 6,523 criteria. Optimizely Agent Platform scored 67% vs. Claude Code&#39;s 60%, at 2x efficiency.&lt;/p&gt;
&lt;h3&gt;Optimization and personalization updates&lt;/h3&gt;
&lt;p&gt;Optimizely covered more around continuous optimisation and one-to-one limitless personalization.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;With the new agentic experience in filters, dynamic landing pages can be created based upon any request, allowing true one-to-one, limitless personalization and newer &amp;nbsp;self-improving digital experiences will allow personalization to continually optimise itself based upon a loop of optimisation processes with built-in guardrails allow true optimized automation.&lt;/p&gt;
&lt;h3&gt;AI is not a cost cutter. It is a growth strategy&lt;/h3&gt;
&lt;p&gt;One of the key takeaways from Alex here was that we should look at these AI tools as a way of providing growth and reducing areas of friction for our human employees. By taking away painstaking and laborious tasks from employees and providing them to AI, we should be opening those employees up to empower their ability to drive growth and creativity in their areas of expertise. Allow the humans to be the ones driving creativity and driving new ideas, and take away the stuff that they dislike doing, the stuff that&#39;s monotonous, and give that to AI.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Instead of seeing AI as a way of reducing human employees or cutting costs, we look at it as a way of freeing up those employees to do things that they can do to make the company better.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;strong&gt;Support growth instead of reducing costs.&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Optimizely CMS 13 + Commerce 15: A platform upgrade for connectivity&lt;/h2&gt;
&lt;p&gt;It has not been that long since we had the big CMS 12 and Commerce 14 releases, which were so much of a major re-platform (as they moved from .NET Framework to .NET Core) that they required large amounts of investment in doing upgrades. They had masses of technical changes that needed to be actioned based upon whether plugins still existed, whether the technology still existed, or whether we needed to strategically change how the solutions were worked. This large amount of investment has had customers questioning whether they need to move to CMS 13 and Commerce 15, and if the level of investment is going to be the same cost.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;strong&gt;No, it isn&#39;t&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;CMS13 and Commerce15 are still on the same fundamental technology, now supporting .NET 10. This means that a lot of the challenges that we faced when it comes to an upgrade (because we had a large technology change) are not the same ones we will be facing when it comes to an upgrade.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;What CMS 13 and Commerce 15 do include is a couple of key pieces of technology that are integrated with the platforms that have changed.&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Opti ID&lt;/strong&gt; - Opti ID is a single sign-on solution through Optimizely&#39;s own identity platform built on Okta, which then allows you to use your own identity platforms, such as Entra, to identify individual users. Opti ID is a framework upgrade that is required for CMS 13 because it connects that single identity across all Optimizely products, such as Graph, CMS, Commerce, CMP, and, most importantly, the Optimizely agent platform.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Graph&amp;nbsp;&lt;/strong&gt;- Search and navigation is an old platform by now and has many architectural, performance, and technological issues that have been solved with Optimizely Graph. However, the key part of Optimizely Graph is that this platform allows the indexing of all of your CMS and commerce content, and even external content, into one single source of truth. This source of truth can be integrated not only through backend keys but through frontend keys, when it comes to frontend hosting (such as the Optimizely frontend hosting, Vercel or Netlify), but also to any other connected system, such as a chatbot or AI. This is a key piece of technology for connectivity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Agent Platform (Mark)&amp;nbsp;&lt;/strong&gt;- With Opti ID and Graph connected, we can get the CMS properly, fully integrated with context and knowledge of the user and all of the data into the Optimizely agent platform (which allows us to have complex agent-based workflows across CMS, commerce, and CMP). Now, with the new Virtual Teamates, 1 to 1 personalization and complicated workflows, we can automate aspects of website optimisation around GEO/AEO experimentation and delivering fresh content personalised to the individual user&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely Connect Platform&amp;nbsp;&lt;/strong&gt;- With direct native integration into the Optimizely Connect platform, we can now connect CMS13 directly into other external data sources and workflows so that the platforms can integrate seamlessly without needing development effort. And with Graph here, we have all of the data to connect these systems together as effortlessly as possible.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimizely DAM&amp;nbsp;&lt;/strong&gt;- With Graph being the fundamental connectivity system, we can now have the Optimizely DAM, the CMS, and the Optimizely Agent platform all connected together. With the new pricing model from Optimizely, we can also move content assets that used to be in Azure Blob Storage over to the Optimizely DAM, which is included for any CMS13 customer, saving licence costs.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;strong&gt;Why CMS 13 and Commerce 15 are a strategy for your organisation&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;As we have mentioned here, these products that we&#39;re integrating, which are the core heart of an upgrade, are there to be able to drive connectivity and integration for your system. You can now see that the content management system is not just a siloed place for content for your website. Now that it&#39;s connected via graph, through the agent platform, through the connect platform, through the DAM, it can be directly integrated across the workflow of your marketing organisation.&lt;/p&gt;
&lt;p&gt;It is now a central place to connect all of your strategy around your website, to connect your agentic vision, and integrate with any of your systems that you need it to be able to provide a forward strategy for 2026 and beyond.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here at Niteco, we have invested in the last number of years in providing AI-driven accelerators to take you from CMS 11 to 12 and 12 to 13, and from Commerce 13 to 14 and 14 to 15. We have delivered over 500 upgraded websites with our expertise through our AI delivery and upgrade teams and our specialist solution architects. We can help you drive your path to upgrade faster, providing your business with the tools it needs without needing to wait for the delivery. Our automated processes, validation, and testing processes can drive this delivery in weeks rather than quarters, contact us today to help with your staregy and upgrade delivery &lt;a href=&quot;https://niteco.com/contact-us/&quot;&gt;https://niteco.com/contact-us/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;As you can see, Optimizely has been pushing the boundaries on their agentic platform throughout the last year and is providing many, many new features. The velocity of feature deliveries has gone up over double what was delivered in 2025, to what&#39;s been delivered in 2026. With the addition of Virtual Teamates, limitless personalization, autonomous optimisation, and the upgrades that we can deliver into CMS 13 and Commerce 15, we are truly connecting Optimizely into the best platform for marketers. Where the operation of both human creativity and agentic comes together to provide the best opportunity for your organisation and its future. And on top of everything they&#39;ve delivered by providing an open-source framework for grading marketing models, Optimizely are showing their continued investment and drive into making their platform the best in the world as an AI agentic platform for marketers.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For help realising this workflow or providing streamlined, super-fast upgrades, contact Niteco, and we can help you with your digital strategy and accelerating fast, optimised upgrades.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://niteco.com/contact-us/&quot;&gt;https://niteco.com/contact-us/&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2026/9/opticon-new-york--the-strategy-on-upgrading-to-cms-13-/</guid>            <pubDate>Mon, 07 Sep 2026 10:25:20 GMT</pubDate>           <category>Blog post</category></item><item> <title>Optimizely London developer meetup 2026: a round up </title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2026/7/optimizely-london-developer-meetup-2026-a-round-up-/</link>            <description>&lt;p&gt;Well, what can I say?&lt;/p&gt;
&lt;p&gt;Last night we wrapped up! Yet another London Developer Meetup, hosted at the superb Lightwell venue&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/76833ab648a340cda1bd972ff738f2f5.aspx&quot; width=&quot;638&quot; height=&quot;336&quot; /&gt;&lt;/p&gt;
&lt;p&gt;And this is also a celebration of my 10th year of co-hosting/hosting this meetup, something that has been very dear to my heart because of my love of the Optimizely community. It&#39;s always been the greatest of pleasures to organise these and help people get together, because the people I&#39;ve met, the friends I&#39;ve made, and the conversations we&#39;ve had over a couple of beers have always made everything seem more vibrant and exciting and have really made my life so much better. Thank you to everyone who&#39;s been to any of these and connected with me. You&#39;re all amazing.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;So the night, we had a great packed line up of talks&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img src=&quot;/link/e95702782ac841ea9c0db1f42bd290d4.aspx&quot; width=&quot;830&quot; height=&quot;725&quot; /&gt;&lt;/p&gt;
&lt;p&gt;So we kicked off with a bit of an intro and a retro from myself and Mark, talking a little bit about where we were ten years ago and sharing a number of photos!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As a really touching point, our Niteco UK/US leader and friend Mark Welland (&lt;a href=&quot;https://www.linkedin.com/in/markwelland/&quot;&gt;https://www.linkedin.com/in/markwelland/&lt;/a&gt;) arranged a couple of videos to celebrate my 10 years from Patrick Lam &lt;a href=&quot;https://www.linkedin.com/in/patrickpclam/&quot;&gt;https://www.linkedin.com/in/patrickpclam/&lt;/a&gt; Nicola Ayan (&lt;a href=&quot;https://www.linkedin.com/in/nicolaayan/)&quot;&gt;https://www.linkedin.com/in/nicolaayan/)&lt;/a&gt; and the big dog and CEO of Optimizely Alex Atzberger (&lt;a href=&quot;https://www.linkedin.com/in/aatzberger/)&quot;&gt;https://www.linkedin.com/in/aatzberger/)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;these are all such lovely videos, and it was really, really kind of everyone to put together such touching thoughts. It really meant the world to me.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And then we had all of the talks. Every single one of the talks was well thought out, well presented, and engaging, and I want to thank every single one of the speakers. Rather than recap it all here, you can actually view the recorded and live streamed output masterfully created by my good friend Jacob Pretorius (&lt;a href=&quot;https://www.linkedin.com/in/jacobpretorius/&quot;&gt;https://www.linkedin.com/in/jacobpretorius/&lt;/a&gt;) here&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ocnckRb179s&quot;&gt;&lt;img src=&quot;/link/e5c3a7bebafc4f94a2fbc3c7f94177a1.aspx&quot; width=&quot;948&quot; height=&quot;554&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and also a big thank you to Techspace and the amazing food spread that they put on. We&#39;ve been coming here a number of years, and it really is a great venue. Also, thank you so much to Satata (&lt;a href=&quot;https://www.linkedin.com/in/satatasatez/&quot;&gt;https://www.linkedin.com/in/satatasatez/&lt;/a&gt;). Patrick and Shamim (&lt;a href=&quot;https://www.linkedin.com/in/shamim605/&quot;&gt;https://www.linkedin.com/in/shamim605/&lt;/a&gt;) for helping organise this and a big thank you to every one of the speakers today.&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mark Evard - &lt;a href=&quot;https://www.linkedin.com/in/everard/&quot;&gt;https://www.linkedin.com/in/everard/&lt;/a&gt; and thank you so much for all the kind words.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Guilherme Menezes -&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/in/guilherme-menezes-0521a715a/&quot;&gt;https://www.linkedin.com/in/guilherme-menezes-0521a715a/&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Minesh Shah - &lt;a href=&quot;https://www.linkedin.com/in/minesh-shah-dev/&quot;&gt;https://www.linkedin.com/in/minesh-shah-dev/&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Graham Carr - &lt;a href=&quot;https://www.linkedin.com/in/carrgraham/&quot;&gt;https://www.linkedin.com/in/carrgraham/&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Simon Chapman - &lt;a href=&quot;https://www.linkedin.com/in/sgchapman/&quot;&gt;https://www.linkedin.com/in/sgchapman/&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Andrew Markham - &lt;a href=&quot;https://www.linkedin.com/in/markham-andrew/&quot;&gt;https://www.linkedin.com/in/markham-andrew/&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks everyone for attending, and I look forward to next year.&amp;nbsp;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2026/7/optimizely-london-developer-meetup-2026-a-round-up-/</guid>            <pubDate>Fri, 03 Jul 2026 11:50:58 GMT</pubDate>           <category>Blog post</category></item><item> <title>Optimizely London Dev Meetup 2026</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2026/5/optimizely-london-dev-meetup-2026/</link>            <description>&lt;p&gt;Well, everyone, it&#39;s that time of the year again, and we have another London Developer meet up coming for this summer. The date is set for the 2nd of July, and we&#39;re back at the Lightwell in London &lt;a href=&quot;https://www.techspace.co/locations/worship-street/events&quot;&gt;https://www.techspace.co/locations/worship-street/events&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This year marks a whole 10 years of either helping or directly planning the London developer meet up for Optimizely. It has been the greatest of pleasures to help support the community, and I&#39;ve made so many great friends in this time. I hope you can all come down to London to celebrate with me this year and celebrate what a great community we have.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This year, we have speakers from a range of MVPs. We have Optimizely coming, and hopefully Cloudflare as well, to talk about AI within the Cloudflare platform.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The register link will be up soon, and I will update this blog post, but for now please mark this on your calendar. If you&#39;re interested in contributing at this dev meetup, please contact me on Slack.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/fe078acbc4644ca98c1f89d69630712b.aspx&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2026/5/optimizely-london-dev-meetup-2026/</guid>            <pubDate>Fri, 15 May 2026 08:02:56 GMT</pubDate>           <category>Blog post</category></item><item> <title>Supercharging Optimizely Forms: Introducing Dynamic Email Routing &amp; Conditional Submissions</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2026/3/supercharging-optimizely-forms-introducing-dynamic-email-routing--conditional-submissions/</link>            <description>&lt;h1&gt;Supercharging Optimizely Forms: Introducing Dynamic Email Routing &amp;amp; Conditional Submissions&lt;/h1&gt;
&lt;p&gt;Optimizely Forms is a powerhouse for gathering user data, but as implementations grow in complexity, we often run into a common limitation with the built-in &quot;Send email after form submission&quot; actor: it&#39;s a bit static.&lt;/p&gt;
&lt;p&gt;In a typical enterprise scenario, you don&#39;t just want one email going to one place. You might need to route a lead to the &quot;Sales&quot; team if they select a specific department, or perhaps you only want an email sent if the user ticks a &quot;Request Callback&quot; box.&lt;/p&gt;
&lt;p&gt;To solve this, I&amp;rsquo;ve released an open-source package: &lt;strong&gt;ScottReed.Optimizely.Forms.DynamicEmailRouting&lt;/strong&gt;. It&amp;rsquo;s a custom post-submission actor for CMS 12 that brings dynamic routing and complex conditional logic directly into the Forms UI.&lt;/p&gt;
&lt;h2&gt;The Problem: The &quot;One-Size-Fits-All&quot; Email&lt;/h2&gt;
&lt;p&gt;The default email actor is great for simple notifications. However, once you need logic like &lt;em&gt;&quot;If Department is &#39;Support&#39;, send to support@company.com&quot;&lt;/em&gt; or &lt;em&gt;&quot;Only send this internal alert if &#39;Priority&#39; is &#39;Critical&#39;&quot;&lt;/em&gt;, you&#39;re usually forced to write custom code for every specific form or clutter the CMS with multiple overlapping actors.&lt;/p&gt;
&lt;h2&gt;The Solution: Dynamic Email Routing&lt;/h2&gt;
&lt;p&gt;This package extends the core functionality of the built-in email actor but adds two powerful layers: &lt;strong&gt;Email Routing&lt;/strong&gt; and &lt;strong&gt;Conditional Logic&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/link/c78d0dec2dd1401caeb7a445717a36e7.aspx&quot; width=&quot;1050&quot; height=&quot;272&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;1. Dynamic Email Routing&lt;/h3&gt;
&lt;p&gt;Instead of a single hardcoded &quot;To&quot; address, you can now define a mapping table. You select a form field, define a value to match, and specify the recipient. If no match is found, it gracefully falls back to the primary &quot;To&quot; address.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/link/f80e3f2362264b098a27fa060e82694f.aspx&quot; width=&quot;869&quot; height=&quot;133&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;2. Conditional Logic (AND/OR)&lt;/h3&gt;
&lt;p&gt;Sometimes you don&#39;t want an email sent at all unless specific criteria are met. The actor allows you to add multiple conditions using &quot;is&quot; and &quot;is not&quot; operators. You can toggle between &quot;Match ALL&quot; (AND) or &quot;Match ANY&quot; (OR) logic.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/link/47e7253160a4452bb7a5f3c1042093c5.aspx&quot; width=&quot;869&quot; height=&quot;167&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Technical Implementation: Under the Hood&lt;/h2&gt;
&lt;p&gt;For the developers curious about how this is built, the package leverages several Optimizely extension points to ensure a &quot;native&quot; feel.&lt;/p&gt;
&lt;h3&gt;The Actor &amp;amp; Model&lt;/h3&gt;
&lt;p&gt;The core logic resides in &lt;code&gt;DynamicEmailRoutingActor&lt;/code&gt;, which inherits from &lt;code&gt;SendEmailAfterSubmissionActor&lt;/code&gt;. This is crucial because it allows us to reuse the existing &lt;code&gt;EmailTemplateActorModel&lt;/code&gt; features&amp;mdash;like the rich text editor, the &quot;Insert Placeholder&quot; dropdown, and the standard From/Subject fields&amp;mdash;without reinventing the wheel.&lt;/p&gt;
&lt;h3&gt;The UI (Dojo &amp;amp; Protected Modules)&lt;/h3&gt;
&lt;p&gt;To provide a seamless editor experience, the package uses the &lt;strong&gt;Protected Module pattern&lt;/strong&gt;. On build, the client-side resources (Dojo editors and language files) are zipped into a protected module folder.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve implemented three custom Dojo editors:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;EmailRoutingEditor.js&lt;/code&gt;: Handles the dynamic table for routing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ConditionMatchEditor.js&lt;/code&gt;: A simple dropdown for logic selection.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ConditionsEditor.js&lt;/code&gt;: Manages the conditional rules.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Localization&lt;/h3&gt;
&lt;p&gt;All labels and the actor name are localized via XML files embedded within the module, ensuring it fits perfectly into the Optimizely UI language settings.&lt;/p&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;Installation is a standard NuGet affair. Because it uses an &lt;code&gt;IConfigurableModule&lt;/code&gt; for auto-registration, there&#39;s zero configuration required in your &lt;code&gt;Startup.cs&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Install via NuGet:&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://nuget.optimizely.com/packages/scottreed.optimizely.forms.dynamicemailrouting/&quot;&gt;https://nuget.optimizely.com/packages/scottreed.optimizely.forms.dynamicemailrouting/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dotnet add package ScottReed.Optimizely.Forms.DynamicEmailRouting
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Configuration:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Ensure your SMTP is configured in &lt;code&gt;appsettings.json&lt;/code&gt; (the actor uses the standard Optimizely SMTP client).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the CMS, add the &lt;strong&gt;Dynamic email routing&lt;/strong&gt; actor to your Form Container.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Define your routes and conditions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;[Image Placeholder: Selecting the Dynamic Email Routing actor in the Form Settings tab]&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Extensibility&lt;/h2&gt;
&lt;p&gt;The project is built with extensibility in mind. If you need more complex operators (like &quot;contains&quot; or &quot;starts with&quot;), you can easily extend the &lt;code&gt;EvaluateConditions&lt;/code&gt; logic in the actor or contribute to the repository!&lt;/p&gt;
&lt;h2&gt;Wrap Up&lt;/h2&gt;
&lt;p&gt;By moving this logic into the CMS UI, we empower editors to manage complex workflows themselves without needing a deployment for every routing change.&lt;/p&gt;
&lt;p&gt;You can find the full source code, documentation, and a test Alloy site on GitHub: &#128073; &lt;a title=&quot;null&quot; href=&quot;https://github.com/scottreed/Optimizely-Dynamic-Form-Submission&quot;&gt;scottreed/Optimizely-Dynamic-Form-Submission&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d love to hear your feedback or see your PRs!&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2026/3/supercharging-optimizely-forms-introducing-dynamic-email-routing--conditional-submissions/</guid>            <pubDate>Mon, 30 Mar 2026 15:46:11 GMT</pubDate>           <category>Blog post</category></item><item> <title>Reducing Web Experimentation MAU Using the REST API</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2026/2/reducing-web-experimentation-mau-using-the-rest-api/</link>            <description>&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;Optimizely Web Experimentation counts an MAU based upon the script snippet rendering for evauluation of web experiement. Therefore when you globally install a snippet in a website you can be counting MAUs with pages that don&#39;t need to be counted. There could also be some page types that don&#39;t need web ex as there will never be an experiement on it. See&amp;nbsp;&lt;a href=&quot;https://support.optimizely.com/hc/en-us/articles/4410284235789-Monitor-monthly-active-users-MAUs&quot;&gt;https://support.optimizely.com/hc/en-us/articles/4410284235789-Monitor-monthly-active-users-MAUs&lt;/a&gt; for imformation around this consumption.&lt;/p&gt;
&lt;p&gt;It&#39;s suggested in the article to not render the script or opt out using the following script&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
  window[&quot;optimizely&quot;] = window[&quot;optimizely&quot;] || [];
  window[&quot;optimizely&quot;].push({
   &quot;type&quot;: &quot;optOut&quot;,
   &quot;isOptOut&quot;: true
  });
&amp;lt;/script&amp;gt;
&amp;lt;script src=&amp;rdquo;https://cdn.optimizely.com/js/{project_id].js&amp;rdquo;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;However how do we know!&lt;/p&gt;
&lt;p&gt;I&#39;m Scott Reed, a solution architect at Niteco &lt;a href=&quot;https://niteco.com/&quot;&gt;https://niteco.com/&lt;/a&gt;. In this blog post, I&#39;ll set out a POC I&#39;ve created to test resolving this decision.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Solution&lt;/h2&gt;
&lt;p&gt;The REST API for web experimentation can return active experiments for a specific project using a user bearer token &lt;a href=&quot;https://docs.developers.optimizely.com/web-experimentation/reference/list_experiments&quot;&gt;https://docs.developers.optimizely.com/web-experimentation/reference/list_experiments&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Therefore it&#39;s possible for us to plug in logic to know if a domain/subpage has an active experiment.&lt;/p&gt;
&lt;p&gt;As a proof of concept (I have not used in a real project yet) I have created &lt;a href=&quot;https://github.com/scottreed/Optimizely-Web-Experimentation-Evaluator/&quot;&gt;https://github.com/scottreed/Optimizely-Web-Experimentation-Evaluator/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This project is a POC around evaulating Optimizely Web Experimentation via the REST API using the bearer token for a web experimentaion user.&lt;/p&gt;
&lt;p&gt;Web experimentation Counts its monthly active users based upon a script being just rendered into the page to evaluate if an experiment needs to be run. This means that whenever you render a web experimentation snippet, even if there is no need to run it, it will evaluate and for an unique user count as an MAU.&lt;/p&gt;
&lt;p&gt;This can increase costs as you&#39;re counting users that don&#39;t need to run this is especially important with multi-site where you might not be running experiments on specific sections of pages or subsites.&lt;/p&gt;
&lt;div class=&quot;markdown-heading&quot;&gt;
&lt;h2 class=&quot;heading-element&quot;&gt;Project Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;This is a standard project with the following&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.NET 8.0&lt;/li&gt;
&lt;li&gt;ASP.NET Core 8.0&lt;/li&gt;
&lt;li&gt;Optimizely SDK&lt;/li&gt;
&lt;li&gt;Minimal API&lt;/li&gt;
&lt;li&gt;In Memory Cache&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;markdown-heading&quot;&gt;
&lt;h2 class=&quot;heading-element&quot;&gt;Features&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The project has the following features&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Return a list of experiments from the web experimentation REST API based upon the past in status flags.&lt;/li&gt;
&lt;li&gt;Filtering the list of experiments based upon multiple path criteria (e.g., a sub-path or the route of the website).&lt;/li&gt;
&lt;li&gt;A Boolean in the&amp;nbsp;&lt;code&gt;ExperimentFilterService&lt;/code&gt;&amp;nbsp;service to allow returning experiments if they have no URL matching criteria.&lt;/li&gt;
&lt;li&gt;In-memory caching of experiments so they don&#39;t need to be constantly re-evaluated with a 15-minute window.&lt;/li&gt;
&lt;li&gt;A minimal API that matches the webhook JSON Post format. This webhook can be configured in the settings for a project and notifies you when a project has a change. This minimal API will clear the cache based upon the project ID.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;markdown-heading&quot;&gt;&lt;img src=&quot;/link/d470289b073f44bca839c9fdca6e9ff9.aspx&quot; width=&quot;1237&quot; height=&quot;1034&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;markdown-heading&quot;&gt;To note on the above image, I set it to return archived projects as well because I needed to do some testing. However, when running this project, it would be better to adjust it to be just active and running projects.&amp;nbsp;&lt;/div&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Using this we can actively know from backend code if we need not render (or opt) the web experiementation script. This way we can specifically stop MAU counting and reduce cost to ONLY what&#39;s needed!&lt;/p&gt;
&lt;p&gt;To note this is just the evaulator so if you need to override this and still render (for tracking / audience criteria or other features) you can adapt this.&lt;/p&gt;
&lt;p&gt;As this is just a POC and a thought idea let me know if you have an concer&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2026/2/reducing-web-experimentation-mau-using-the-rest-api/</guid>            <pubDate>Fri, 13 Feb 2026 09:27:28 GMT</pubDate>           <category>Blog post</category></item><item> <title>Connecting the Dots Between Research and Specification to Implementation using NotebookLM</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2025/10/connecting-the-dots-between-research-and-specification-to-implementation-using-notebooklm/</link>            <description>&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;As part of my day to day role as a solution architect I overlap with many clients, partners, solutions and technologies. I am often documenting meetings, requirements, technical solutions and having to provide my team information for the sprint work to action the required goals for the client. Also in my case the development team is in Vietnam and non english native speakers.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;There&#39;s a lot of challenges I face&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Having accurate documentation that is easy query, adapt and output in anyway I want&lt;/li&gt;
&lt;li&gt;Creating great output for the teams that overcome questions and technical or language barriers&lt;/li&gt;
&lt;li&gt;Maintaining information over multiple meetings and across different sources&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have created a video using NotebookLM of this blog post after publishing to show how it can easily create video outputs&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=E3IbCCQ-XA4&quot;&gt;https://www.youtube.com/watch?v=E3IbCCQ-XA4&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Enter NotebookLM, the Google AI research tool with amazing features&lt;/h2&gt;
&lt;p&gt;Think of NotebookLM not just as a note-taking app, but as a dynamic knowledge management system powered by the latest in AI. It&#39;s designed to take all your scattered information, understand it, and then help you synthesize it into something truly useful. Here are some of its core features that will make your dev heart flutter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Source Connectivity on Steroids:&lt;/strong&gt; Forget copy-pasting entire articles or losing track of where that crucial snippet came from. NotebookLM lets you upload various sources &amp;ndash; PDFs, Google Docs, even web pages &amp;ndash; and treats them as a unified knowledge base. Imagine having all your project&#39;s architectural diagrams, API documentation, and sprint retrospective notes in one searchable, interconnected space. No more &quot;where did I see that again?&quot; moments. This is a game-changer for solution architects like me, who need to cross-reference multiple documents to ensure design consistency and avoid technical debt.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AI-Powered Summarization &amp;amp; Key Takeaways:&lt;/strong&gt; This is where the magic truly happens. Once your sources are loaded, NotebookLM can instantly generate summaries, extract key concepts, and even answer specific questions &lt;em&gt;based on the content of your sources&lt;/em&gt;. Need a quick overview of the authentication flow discussed in three different design documents? Ask NotebookLM. Want to know the estimated effort for a particular feature based on your team&#39;s past sprint reviews? It can do that too. This feature is invaluable for developers trying to quickly grasp the essence of complex systems or for solution architects presenting high-level overviews to stakeholders.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Intelligent Q&amp;amp;A and Brainstorming:&lt;/strong&gt; Ever wish you could just &lt;em&gt;talk&lt;/em&gt; to your documentation? Now you can! NotebookLM allows you to ask natural language questions about your sources. It&#39;s like having a rubber duck debugging session, but with an AI that actually &lt;em&gt;understands&lt;/em&gt; your project&#39;s context. Beyond answering direct questions, it can also act as a brainstorming partner, helping you generate new ideas, explore different approaches, or even draft initial code snippets based on your project&#39;s specifications. Imagine asking, &quot;Given these API specs, what are some potential error handling strategies?&quot; and getting intelligent, context-aware suggestions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&quot;Ask Your Sources&quot; &amp;ndash; The Ultimate Debugging Buddy:&lt;/strong&gt; Picture this: you&#39;re debugging a tricky issue, and you&#39;re pretty sure the answer is buried deep within a technical spec or a previous incident report. Instead of endless scrolling and searching, simply ask NotebookLM, &quot;What are the known limitations of the &lt;code&gt;UserService&lt;/code&gt; regarding concurrent requests?&quot; It will scan all your connected sources and pinpoint the relevant information, saving you precious hours of head-scratching. This is where NotebookLM truly shines as a productivity booster for every developer.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple Outputs Allowing Many Ways To Absort&lt;/strong&gt;: The sources fed in in to a Notebook can be outputted in many ways. Want an Audio output for a podcast or a video overview on any specific topic that can easily be created with Veo 3 giving flavour to the videos. Want to create a Mind map, a report, flashcard or quiz and you can do all this. It really allows you to output the documentation any way you like, empowering different ways of learning&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Notebooks for Every Occasion:&lt;/strong&gt; Organize your knowledge into distinct notebooks for different projects, features, or even personal learning. This keeps everything tidy and ensures that your AI assistant is always focused on the relevant context. As a solution architect, I can create separate notebooks for each project, encompassing everything from initial discovery to deployment strategies, ensuring all information is readily accessible and logically grouped.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seamless Integration (with Google Workspace):&lt;/strong&gt; If your team lives in Google Docs, you&#39;re in luck! NotebookLM integrates seamlessly, allowing you to easily pull in your existing documents and leverage your current collaborative workflows. This reduces friction and makes adoption a breeze.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How NotebookLM Benefits Your Learning and Investigation&lt;/h2&gt;
&lt;p&gt;I have been using NotebookLM to collate information on projects, technologies and integration in to a single source of truth that I can query and output in many different source.&lt;/p&gt;
&lt;p&gt;In a very real example I have used a very cool extension called NotebookLM Web Importer &lt;a href=&quot;https://chromewebstore.google.com/detail/notebooklm-web-importer/ijdefdijdmghafocfmmdojfghnpelnfn?hl=en&quot;&gt;https://chromewebstore.google.com/detail/notebooklm-web-importer/ijdefdijdmghafocfmmdojfghnpelnfn?hl=en&lt;/a&gt; to do the following for my own learning&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Import all of Jon Jones Optimizely YouTube videos in to a NotebookLM for querying and exploration&lt;/li&gt;
&lt;li&gt;Import each of the Optimizely document sections in to a NotebookLM for querying&lt;/li&gt;
&lt;li&gt;Importing integration meetings from Integration overlap meetings a client has started using to generate formatted Requirements in text and video&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For example here is the CMS 12 documentation&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/f2b3a2f989fb4f238f4a912264c64ab8.aspx&quot; width=&quot;1089&quot; height=&quot;706&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This then allows me to query the information via Mind maps, videos and queries outputs as it&#39;s own AI chatbot.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/c86c5a7fd7ab4509a9965a62c2eded16.aspx&quot; width=&quot;1094&quot; height=&quot;628&quot; /&gt;&lt;/p&gt;
&lt;p&gt;or many other types of output&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/32959d9f1f1b4e8784cfc398da20e000.aspx&quot; width=&quot;405&quot; height=&quot;720&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is a really amazing tool and the fact it can do this from URLs, Documents, YouTube Videos and notes is amazing.&lt;/p&gt;
&lt;p&gt;It also allows you take outputs from the chat and convert them in to notes or create your own notes then even reference them back as sources creating a great feedback loop.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/66b35c185d764e929e7c3d51a2375211.aspx&quot; width=&quot;731&quot; height=&quot;369&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;How NotebookLM Benefits Your Development Team (and Makes Your Solution Architect Happy!)&lt;/h2&gt;
&lt;p&gt;This also translates in to creating better documentation for the team you can copy in to DevOps, Jira or your solution of choice with rich mind maps, audio podcasts, video allowing faster and easier adoption of information.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Faster Onboarding for New Devs:&lt;/strong&gt; New team members can quickly get up to speed by having all project documentation, design decisions, and common FAQs consolidated and easily digestible through NotebookLM&#39;s summarization and Q&amp;amp;A features.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reduced Context Switching:&lt;/strong&gt; Spend less time hunting for information across different tools and platforms. With NotebookLM, your critical knowledge is centralized, allowing you to stay focused on coding and problem-solving.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Improved Design Cohesion &amp;amp; Reduced Rework:&lt;/strong&gt; Solution architects can ensure that development teams are consistently referencing the latest approved designs and technical specifications. NotebookLM can highlight discrepancies or areas needing clarification, leading to more robust and aligned solutions from the get-go.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Smarter Decision-Making:&lt;/strong&gt; By quickly accessing and synthesizing information from various sources, teams can make more informed decisions, whether it&#39;s choosing a new technology, refining an architectural pattern, or resolving a critical bug.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Empowered Developers:&lt;/strong&gt; Give your developers the tools to self-serve information, reducing reliance on senior team members for basic queries and freeing up valuable time for more complex problem-solving.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A Solution Architect&#39;s Dream:&lt;/strong&gt; For us solution architects, NotebookLM is like having an extra brain. It helps us quickly synthesize complex information from multiple stakeholders, validate architectural decisions against existing documentation, and communicate design rationales more effectively. Imagine being able to instantly pull up all the discussions around a specific design constraint before a review meeting!&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Optimizely Setup and Extension&lt;/h2&gt;
&lt;p&gt;By using &lt;span class=&quot;truncate font-medium text-sm&quot;&gt;NotebookLM Web Importer for bulk URLs and Gemini to parse and extract links from the Docs pages I&#39;ve connected the following.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;truncate font-medium text-sm&quot;&gt;&lt;img src=&quot;/link/589aeb0d0b2145d3be5a6583b9ceab51.aspx&quot; width=&quot;659&quot; height=&quot;417&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span class=&quot;truncate font-medium text-sm&quot;&gt;CMS 12 Documentation&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span class=&quot;truncate font-medium text-sm&quot;&gt;Bulk import the following URLs&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;truncate font-medium text-sm&quot;&gt;https://docs.developers.optimizely.com/content-management-system/docs/getting-started&lt;br /&gt;https://support.optimizely.com/hc/en-us/articles/33309043090189&lt;br /&gt;https://support.optimizely.com/hc/en-us/articles/25432213670413&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/hipaa-enabled-cms&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/learning-path&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/developer-prerequisites&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/what-is-a-cms&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/technology-stack&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/pluggable-ui&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/alloy-demonstration-templates&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/installing-and-upgrading&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/initial-configuration&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/content-model-and-views&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/creating-and-editing-content&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/media-support&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/content-tree-and-routing&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/listings-and-navigation&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/security-checklist&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/deployment-learning-path&lt;br /&gt;https://support.optimizely.com/hc/en-us/articles/19965302094989-User-interface&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/set-up-a-development-environment&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/learn-basic-editing&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/creating-a-starter-project&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/documentation-videos&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/set-up-cms-12&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/system-requirements-for-optimizely&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/installing-optimizely-net-5&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/nuget-package-families-in-cms&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/resolving-nuget-dependency-conflicts-in-project-sdk-packagereference-model&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/upgrade-to-cms-12&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/breaking-changes-in-content-cloud-cms-12&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/why-upgrade-to-content-cloud-cms-12&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/upgrade-assistant&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/upgrade-to-cms-core-12170&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configuration&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configuring-cms&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configuring-cmsui&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configuring-dataaccess-and-dynamicdatastore&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configuring-moduleconfig&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/changing-edit-and-admin-view-urls&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/link-validation&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/initialization&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/creating-an-initialization-module&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/dependency-injection&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/deploying-content-cloud&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/planning-deployments&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/deployment-scenarios&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/managing-cloud-licenses&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/deploying-to-azure-webapps&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/deploying-to-windows-servers&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/setting-up-multiple-sites&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/installing-database-schema&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/automatic-schema-updates&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/content-delivery-network-cdn-configuration&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/database-mode&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configuring-your-email-server&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/create-a-docker-file&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/storing-utc-date-and-time-in-the-database-legacy&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/host-a-frontend-with-optimizely&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/develop-the-cms&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/blob-storage-and-providers&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configure-a-custom-blob-provider&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/how-to-add-azure-blob-provider-to-your-net-core-application&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/caching&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/object-caching&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/read-only-object-cache&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/monitoring-memorycache&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/client-resources&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/dynamic-data-store&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configuring-dynamic-data-store&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/indexing-properties&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/mapping-stores&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/supporting-linq&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/identity-and-date-and-time-management&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/event-management&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/developing-an-event-provider&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/how-to-add-azure-event-provider-to-your-net-core-application&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/event-management-api&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/file-providers&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/globalization&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/globalization-scenarios&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/localizing-the-user-interface&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configuring-a-custom-localization-provider&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/localization-service-1&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/localization-service&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/determining-languages&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/add-a-custom-language&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/activity-logging&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/logging-options&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/logging&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/routing&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/partial-routing&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/example-of-news-partial-routing&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/blob-routing&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/internationalized-resource-identifiers-iris&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/scheduled-jobs&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/search&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/searching-and-filtering&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/adding-search-providers&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/searching-for-pages-based-on-page-type&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/security&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/content-security-policy&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/cookie-usage&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/integrate-azure-ad-using-openid-connect&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/aspnetidentity&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/mixed-mode-authentication&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/permissions-to-functions&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/decoupled-setup&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/virtual-roles&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/filter-javascript-from-properties-and-files&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/synchronization&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/using-notifications&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/usage-examples&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/user-interface&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/adding-a-module-initializer&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/command-pattern&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/global-toolbar-commands-plug-in&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/plugging-in-commands&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/command-builders&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configuring-cms-user-interface&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configuring-shell-modules&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/context-sensitive-components&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/creating-a-react-component&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/creating-a-component&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/debugging-cms-ui&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/describing-content-in-the-ui&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/dialogs&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/introduction-to-dojo&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/drag-and-drop&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/editing-objects&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/ui-wrapper-types&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configuring-the-default-editor-wrapper&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/enabling-headless-content&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/extending-the-navigation&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/using-menu-providers&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/upgrading-navigation&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/adding-and-configuring-menu-items&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/how-to-highlight-parent-menu-items&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/extending-the-tasks-pane-with-custom-queries&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/message-service-pool&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/plug-in-areas&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/plugging-in-a-gadget&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/publish-and-subscribe-messaging-system&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/service-locator&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/shell-profile&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/store-architecture&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/views&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/creating-a-view&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/modifying-a-view-through-configuration&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/creating-a-component-1&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/creating-a-container&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/replacing-a-component-globally&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/hiding-or-controlling-access-to-a-component&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/plugging-in-components-into-a-view&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/websocket-support&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/develop-content&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/content&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/content-types&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/content-templates&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/content-versions&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/content-approvals&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/selecting-content&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/multilingual-content&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/grouping-content-types-and-properties&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/icontentrepository-and-datafactory&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/persisting-icontent-instances&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/validating-object-instances&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/attributes&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/resolving-current-content-context&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/refactoring-content-type-classes&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/creating-a-page-programmatically&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/edit-hints-in-mvc&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/inline-edit-settings&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/properties&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/built-in-property-types&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/property-attributes&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/generic-propertylist&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/property-value-list&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/content-metadata-properties&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/custom-properties&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/writing-custom-attributes&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/restricting-content-types-in-properties&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/single-or-multiple-list-options&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/built-in-auto-suggestion-editor&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/using-a-block-as-a-property&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/editing&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/on-page-editing-with-client-side-rendering&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/creating-an-editor-widget&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/registering-a-custom-editor&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/assets-and-media&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/media-types-and-templates&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/working-with-media&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/content-assets-and-folders&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/custom-editing-preview-for-media&lt;br /&gt;https://docs.developers.optimizely.com/content-marketing-platform/docs/cmp-dam-asset-picker&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/cmp-dam-in-cms&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/cmp-dam-in-cms&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/cmp-content-repository&lt;br /&gt;https://docs.developers.optimizely.com/content-marketing-platform/docs/dam-assets-migration-using-the-api&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/configured-commerce-cms&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/install-configured-commerce-cms&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/manage-website-elements-with-configured-commerce-and-cms&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/odp-cms-1&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/odp-cms&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/architecture&lt;br /&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/dxp-overview&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/install-and-configure-optimizely-graph-on-your-site&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/synchronize-from-optimizely-content-management-system&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/event-driven-synchronization&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/scheduled-synchronization&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/conventions-api&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/smooth-rebuild&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/enable-and-disable-website-languages&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/paas-cms-core-openid&lt;br /&gt;https://docs.developers.optimizely.com/content-management-system/docs/upgrade-to-cms-12&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span class=&quot;truncate font-medium text-sm&quot;&gt;Commerce Conect Documentation&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span class=&quot;truncate font-medium text-sm&quot;&gt;Bulk import the following URLs&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/system-overview&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/breaking-changes-for-commerce-14&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/getting-started&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/setting-up-your-development-environment&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/creating-your-project&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/adding-e-commerce-functionality&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/recommendations-for-commerce-projects&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/caching&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/events&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/globalization&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/initialization&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/logging&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/metadata-plus&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/routing&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/scheduled-jobs&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/workflows-and-activities&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/set-up-opal-ai&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/dashboard-overview&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/business-foundation&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/object-configuration&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/generating-typed-business-foundation-classes&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/sql-meta-model&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/extending-meta-models&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/exporting-and-importing-meta-models&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/working-with-sql-records&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/working-with-entity-objects&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/filtering-and-sorting&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/business-meta-model&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/metaclassmanager-class&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/metaclass-class&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/metaenum-class&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/metafield-class&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/metafieldbuilder-class&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/metatype-class&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/meta-class-references&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/catalogs&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/guidelines-for-working-with-catalogs&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/importing-catalog-data&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/multi-site-for-catalogs&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/catalog-content&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/product-variants&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/bundles-and-packages&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/dynamic-packages&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/url-segment-and-seo-uri&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/categorizations&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/related-entries&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/catalog-events&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/commerce-rendering-templates&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/catalog-content-provider&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/properties&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/publish-content-version-setting&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/lowest-price-in-a-period-of-time&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/translate-content-with-optimizely-opal&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/assets-and-media&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/asset-url-resolver&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/asset-importer&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/product-associations-relations&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/event-driven-catalog-indexing&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/catalog-product-search&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/low-level-apis&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/catalog-object-model&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/catalog-dto-and-object-models&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/meta-classes-and-meta-fields&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/configuration&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/option-configuration-classes&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/feature-specific-commerce-configurations&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/user-interface-configuration&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/customers&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/customer-object-model-and-database-diagrams&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/customer-groups&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/organization-models&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/deployment&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/deploying-commerce-to-azure-web-apps&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/single-server-deployment&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/performance-optimization&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/automatic-schema-updates&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/marketing&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/new_promotions&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/promotions-engine&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/custom-promotions&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/hiding-promotion-types&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/exclude-products-from-promotions&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/promotion-exclusions&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/coupons&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/custom-facets-in-the-marketing-overview&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/markets&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/countries-and-regions&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/currencies&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/multi-market-examples&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/orders&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/multi-site-for-orders&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/order-system-overview&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/order-manipulation&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/order-processing&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/extend-components&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/extend-search-result-display&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/extending-order-classes&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/extending-order-status&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/changing-default-implementation&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/rounding-totals-for-currencies&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/order-events&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/recording-order-activities&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/shopping-carts&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/serializable-carts&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/searching-for-orders-using-ordercontext&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/searching-for-orders-using-abstractions&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/using-the-return-order-form&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/calculating-orders-intro&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/calculating-orders-line-item-calculator&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/calculating-orders-shipping-calculator&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/calculating-orders-tax-calculator&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/calculating-orders-order-form-calculator&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/calculating-orders-order-group-calculator&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/calculating-orders-return-line-item-calculator&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/calculating-orders-return-order-form-calculator&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/calculating-orders-return-purchase-order-calculator&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/payments&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/payment-gateways&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/payment-plugins&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/set-up-payment-service&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/authorizetokenex-installation-and-configuration&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/bolt-installation&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/personalization&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/recommendations&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/installing-and-configuring-the-native-integration-package&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/exporting-your-catalog-to-episerver-perform&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/activating-widgets&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/tracking-and-recommendations&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/an-api-overview&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/server-side-api-integration&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/client-side-api-integration&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/improvements-with-tracking&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/customizing-exported-product-information&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/pricing&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/pricetype-examples&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/pricing-examples&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/reports&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/collect-data-for-reports&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/collecting-subscription-data&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/search&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/configuring-optimizely-find-search-provider&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/creating-a-search-provider&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/customizing-search&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/configuring-facets-and-filters&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/find-integration&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/indexing-catalog-content&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/filtering-catalog-content&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/overriding-default-conventions&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/disabling-product-update-events&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/raise-price-and-inventory-event-updates&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/indexing-variants-in-a-product-document&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/indexing-poco-objects-instead-of-catalogcontentbase&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/exclude-market-filter-from-filter-for-visitor&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/controlling-automatic-indexing-when-content-changes&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/security&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/authorization-and-authentication&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/support-for-openid-connect-in-customized-commerce&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/shipping&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/shipping-methods&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/shipping-gateways-and-providers&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/multi-shipment-examples&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/transaction-tracking&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/warehouses-and-inventories&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/inventory-requests&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/database-changes-for-inventory-service&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/warehouses-and-inventories-examples&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/multi-warehouse-implementations&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/optimizely-graph-for-commerce-connect&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/commerce-connect-14-odp&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/commerce-connect/docs/commerce-connect-campaign&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;span class=&quot;truncate font-medium text-sm&quot;&gt;DXP Documentation&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span class=&quot;truncate font-medium text-sm&quot;&gt;Bulk import the following URLs&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/dxp-overview&lt;/div&gt;
&lt;div&gt;https://support.optimizely.com/hc/en-us/articles/39443611409037&lt;/div&gt;
&lt;div&gt;https://www.google.com/search?q=https://docs.developers.optimizely.com/digital-experience-platform/docs/hipaa-enabled-cms&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/cms-platform-plus&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/requirements&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/getting-started-with-dxp&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/cloud-accelerator-package&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/development-considerations&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/environments&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/performance-considerations&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/content-management-system/docs/cookie-usage&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/delivery-assurance-concepts&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/failover&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/login-options&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/content-management-system/v1.0.0-CMS-SaaS/docs/host-a-front-end-with-optimizely&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/headless-optimizely&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/environment-configurations&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/multisite-development&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/cdn-recommendations&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/bring-your-own-cloudflare-zone&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/image-resizing-using-cdn&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/configure-cache-headers&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/consumption-metrics&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/logging&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/content-management-system/docs/logging-options&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/custom-database-tables&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/custom-maintenance-page&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/configuring-the-email-server&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/session-state&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/warming-up-sites&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/customize-health-checks&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/optimizely-and-seo&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/accessing-azure-information&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/troubleshooting&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/application-performance-management&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/vpn-connections&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/deploying&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/smooth-deploy&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/creating-a-new-cms-site-and-deploying&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/deploying-an-existing-cms-site&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/creating-a-new-commerce-site-and-deploying&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/deploying-an-existing-commerce-site&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/going-live&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/deployment-api&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/deploy-using-code-packages&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/deploy-using-source-environment&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/deploy-using-powershell&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/code-package-format&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/internal-namespaces&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/authentication&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/storage-containers&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/export-database&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/self-service-for-dxp&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/optimizely-foundation-demo-sites&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/creating-an-optimizely-cloud-account&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/content-authoring&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/dxp-self-deployment-guide&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/manage-app-settings&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/content-synchronization&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/purging-cdn-cache&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/restarting-a-web-app&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/export-the-database-to-bacpac-file&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/optimizely-platform-security&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/user-interface-security&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/web-application-firewall&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/restricting-environment-access&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/gdpr-guidelines&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/asking-for-consent&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/using-data&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/collecting-data&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/storing-data&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/fetching-and-updating-data&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/deleting-data&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/data-breaches&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/product-specific-gdpr-guidelines&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/optimizely-content-cloud&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/optimizely-commerce-cloud&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/optimizely-campaign&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/optimizely-search-navigation&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/optimizely-personalization&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/optimizely-forms&lt;/div&gt;
&lt;div&gt;https://docs.developers.optimizely.com/digital-experience-platform/docs/optimizely-community-api&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Using NotebookLM creates an amazing space for combining all of the information together and joining the dots. It allows output that you can consume as videos, audio (which allows for a podcast style custom learning), mid maps and note outputs. It really revolutionises learning and combining information and by plugging this in to development teams as well it creates a powerful place for many different activies either research, task planning or anything else.&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2025/10/connecting-the-dots-between-research-and-specification-to-implementation-using-notebooklm/</guid>            <pubDate>Wed, 22 Oct 2025 14:49:36 GMT</pubDate>           <category>Blog post</category></item><item> <title>Optimizely London Dev Meetup 10th July 2025</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2025/7/optimizely-london-dev-meetup-10th-july-2024/</link>            <description>&lt;h2&gt;Overview &amp;amp; Agenda&lt;/h2&gt;
&lt;p&gt;As 2025 rolled around this year it was time for another one of our much beloved developer meetups in London.&lt;/p&gt;
&lt;p&gt;This year, I took us back to the Lightwell in London &lt;a href=&quot;https://www.techspace.co/locations/worship-street/events&quot;&gt;https://www.techspace.co/locations/worship-street/events&lt;/a&gt; as last year&#39;s dev meetup had been so successful. So with eager eyes and much excitement Niteco UK took to London to host this years events.&lt;/p&gt;
&lt;p&gt;A a great bonus this year we had a great UK Niteco team roster with the additions of Jill George&amp;nbsp;as our Senior Sales and Client Director in the UK and Polly Walton joining as Director of Growth and Innovation (and Platinum OMVP) along side Mark,&amp;nbsp;Jacob&amp;nbsp;and Myself.&lt;/p&gt;
&lt;p&gt;For the lineup we had a range of amazing speakers from agency&#39;s and OMVPs and Optimizely&lt;/p&gt;
&lt;p&gt;18:30 &amp;ndash; 18:50 :: &lt;strong&gt;Minesh Shah (Netcel) - Frontend Hosting With Optimizely&lt;/strong&gt;&lt;br /&gt;18:55 - 19:15 :: &lt;strong&gt;Tom Bramley (Optimizely) - Content Manager, AI translations, Opal and CMS 13&lt;/strong&gt;&lt;br /&gt;19:20 - 19:40 :: &lt;strong&gt;Scott Reed (Niteco) - Application Insights, Refining Data and View Logs&lt;/strong&gt;&lt;br /&gt;20:10 - 20:30 :: &lt;strong&gt;Andrew Markham (UNRVLD) - Introduction to the new Opti Connect Platform&lt;/strong&gt;&lt;br /&gt;20:35 - 20:55 :: &lt;strong&gt;Jacob Pretorius (Niteco) &amp;ndash; Edge Logs&lt;/strong&gt;&lt;br /&gt;21:00 - 21:20 :: &lt;strong&gt;Daniel Halse (Netcel) - Graph Integration with Configured Commerce&lt;/strong&gt;&lt;br /&gt;21:25 - 21:45 :: &lt;strong&gt;Jeremey Brown (UNRVLD) - Laying the Foundation: PaaS CMS for Greenfield Projects&lt;/strong&gt; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here is my round up of the different talks which can be reviewed @ &lt;a href=&quot;https://www.youtube.com/watch?v=yqtleljncDg&quot;&gt;https://www.youtube.com/watch?v=yqtleljncDg&lt;/a&gt; and thanks to the excellent Jacob Pretorius who is not only an OMVP but a master of video recording and kindly recorded all the sessions for us :-) !!!&lt;/p&gt;
&lt;h2&gt;Minesh Shah (Netcel) - Frontend Hosting With Optimizely&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=76s&quot;&gt;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=76s&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Minesh from Netcel is a long time speaker, OMVP and friend and as per usual kicking us off with an exciting talk on another new beta/platform feature. For this talk we would be delving in to the new Optimizely Frontend Beta offered as a new hosting option to the head when working with Optimizely.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/086ba5e44fe14c3981510a00449cdd0f.aspx&quot; width=&quot;447&quot; height=&quot;254&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Key takeaways from this talk for me were&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.optimizely.com/beta/&quot;&gt;https://www.optimizely.com/beta/&lt;/a&gt; the place to get all the latest cutting edge features&lt;/li&gt;
&lt;li&gt;Optimizely now provides an Azure based hosting platform for the CMS hosting as apposed to needing services like Vecel or Netlify therefore keeping the service all within Optimizely&lt;/li&gt;
&lt;li&gt;The same great features such as the PaaS portal and WAF/CDN with Cloudflare come as part of it&lt;/li&gt;
&lt;li&gt;Deploy using the same Deployment API we use for CMS 12&lt;/li&gt;
&lt;li&gt;Does not compile the solution just deploys the packaged code&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tom Bramley (Optimizely) - Content Manager, AI translations, Opal and CMS 13&lt;/h2&gt;
&lt;p&gt;From Optimizely for a second year in a row we had the amazing Tom Bramley joining this year to talk all things CMS and AI. I was very excited for some of these updates especially around CMS 13&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=1248s&quot;&gt;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=1248s&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/e173de990d7443ddb1ca9ffad429b5a0.aspx&quot; width=&quot;444&quot; height=&quot;333&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Visual Builder will be even better that expected and is coming early 2026 with a pre released in Q4 with full documentation&lt;/li&gt;
&lt;li&gt;Opal will have a range of new features for CMS PaaS content creation with more information coming soon&lt;/li&gt;
&lt;li&gt;New graph improvements to match some of the missing Search and Navigation functions which is very cool&lt;/li&gt;
&lt;li&gt;Embedded DAM for SaaS and for PaaS will become the future replacing the standard Asset system&lt;/li&gt;
&lt;li&gt;Content Manager allows management of content outside of just page structures with a robust editing platform. Very much feels like the labs addon &lt;a href=&quot;https://github.com/episerver/episerver-labs-content-manager-docs&quot;&gt;https://github.com/episerver/episerver-labs-content-manager-docs&lt;/a&gt; coming to the main product&lt;/li&gt;
&lt;li&gt;Frontend Beta and Optimizely Connect Platform are exciting new featues (covered in other talks in this blog)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Below are core details on the public available CMS 13 release as it was discussed in Tom&#39;s talk!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drive.google.com/file/d/1gKlHbnapUNQFuQYZgwgE6lhg54GMLHjI/view?usp=sharing&quot;&gt;https://drive.google.com/file/d/1gKlHbnapUNQFuQYZgwgE6lhg54GMLHjI/view?usp=sharing&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Scott Reed (Niteco): Application Insights, Refining Data and View Logs&lt;/h2&gt;
&lt;p&gt;For my talk I wanted to go over the core features of Application Insights and how to debug issues to allow developers to fully make use of their toolbox.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=2329s&quot;&gt;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=2329s&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/b3fce81bc50a4377a210e2f6b42a4f64.aspx&quot; width=&quot;435&quot; height=&quot;326&quot; /&gt;&lt;/p&gt;
&lt;p&gt;My core aims on this talk are that developers should understand application insights and it&#39;s core parts.&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Application Map for dependency and error investigation&lt;/li&gt;
&lt;li&gt;Performance, Failure, Metrics and KQL for investigating sources of errors and performance problems&lt;/li&gt;
&lt;li&gt;Missing features and things I&#39;d like&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For investigating errors and service problems follow &lt;a href=&quot;/link/9b7a4d80dff74b2e90265a700f872459.aspx&quot;&gt;https://world.optimizely.com/blogs/scott-reed/dates/2025/4/identifying-spike-requests-and-issues-in-application-insights/&lt;/a&gt; which covers the points discussed in my talk and below is my full presentation&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.google.com/presentation/d/1STQvBxWjkiQzRQQwDEOcRA7Njae9MBs6/edit?usp=sharing&amp;amp;ouid=114149295479135606577&amp;amp;rtpof=true&amp;amp;sd=true&quot;&gt;https://docs.google.com/presentation/d/1STQvBxWjkiQzRQQwDEOcRA7Njae9MBs6/edit?usp=sharing&amp;amp;ouid=114149295479135606577&amp;amp;rtpof=true&amp;amp;sd=true&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Andrew Markham (UNRVLD) - Introduction to the new Opti Connect Platform&lt;/h2&gt;
&lt;p&gt;We welcomed back multiple speaker and long time friend Andy back today to talk about the new Opti Connect Platform. This feature is basically the apps feature from ODP split out and enhanced with new features to allow for seamless CMS integration with other platforms.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=3624s&quot;&gt;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=3624s&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/4db0417c16154992967e11d10e66a728.aspx&quot; width=&quot;447&quot; height=&quot;335&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is a very exciting feature for me and comes with a number of cool areas I want to explore more&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Free and paid tiers (paid has a database for data storage and private apps)&lt;/li&gt;
&lt;li&gt;Realtime sync mode or database driven scheduler service powers the platform&lt;/li&gt;
&lt;li&gt;Many apps being built or the ability to create private apps for your client/organization&lt;/li&gt;
&lt;li&gt;Direct integrations for SaaS CMS and PaaS to allow external content in the CMS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Jacob Pretorius (Niteco) &amp;ndash; Edge Logs&lt;/h2&gt;
&lt;p&gt;My friend and fellow Niteco OMVP Jacob today was covering all things Edge Logs, allowing us to take use of the amazing data we have from Cloudflare and another beta.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=5157s&quot;&gt;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=5157s&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/ad25d5b66c16497db7c5691995c04e74.aspx&quot; width=&quot;436&quot; height=&quot;327&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The Edge logs feature is a very powerful dataset from Cloudflare and really helps us to see where challenges, bots and decisions were made by cloudflare and the traffic stats of real users vs non real. Using Grafana we can pull all of this information down and create rich and power dashboards so we can explore it and see exactly what we need. Sign up here &lt;a href=&quot;https://www.optimizely.com/beta-signup/&quot;&gt;https://www.optimizely.com/beta-signup/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Below is Jacob&#39;s full presentation for your viewing and download below&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://drive.google.com/file/d/1OulYCNskMwCeEWe5uK2yw3iONyvgjb5N/view?usp=sharing&quot;&gt;https://drive.google.com/file/d/1OulYCNskMwCeEWe5uK2yw3iONyvgjb5N/view?usp=sharing&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And his blog on the subject here &lt;a href=&quot;/link/fec3217a2b6f43c88d6af804815bb8f5.aspx&quot;&gt;https://world.optimizely.com/blogs/jacob-pretorius/dates/2025/4/visualise-cloudflare-edge-logs-with-grafana/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Daniel Halse (Netcel): CMS 12 / Graph Integration with Configured Commerce&lt;/h2&gt;
&lt;p&gt;Today for Daniel&#39;s talk he covered connecting CMS 12 and Configured commerce together so that clients get the great and amazing features of CMS 12 editing with the robust and powerful B2B commerce features.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=5807s&quot;&gt;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=5807s&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/e0bf9e4be6cb41749e73b912024646dc.aspx&quot; width=&quot;444&quot; height=&quot;333&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Key thoughts for me on this are&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We can connect these products to give the best of both worlds&lt;/li&gt;
&lt;li&gt;Routing is not easy in spire and need some creating development to get it working&lt;/li&gt;
&lt;li&gt;Graph is great for powering the integration between products&lt;/li&gt;
&lt;li&gt;Spire is limited in CMS capibilities&lt;/li&gt;
&lt;li&gt;Security locks down a number of features due to restrictions in the platform around code and packages for Spire&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Jeremy Brown (UNRVLD): PaaS CMS Foundation for Greenfield Projects&lt;/h2&gt;
&lt;p&gt;Jeremy joined us for the first time giving a great talk on the fundamentals of creating a CMS 12 project from scratch and the core areas to be aware of&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=6988s&quot;&gt;https://www.youtube.com/watch?v=yqtleljncDg&amp;amp;t=6988s&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/13cc3075a6bb4d839e9254a77ec1cc63.aspx&quot; width=&quot;447&quot; height=&quot;335&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Implement core properties for your common page types for best practices such as SEO/GEO/Graph&lt;/li&gt;
&lt;li&gt;Use the off the shelf open source nuget packages to save a lot of time&lt;/li&gt;
&lt;li&gt;Understand core configuration such as redirects, security and sign on options such as Opti ID&lt;/li&gt;
&lt;li&gt;Be familar with the DXP configuration and go live process for CMS 12&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;We have a great speaker set this year covering a range of topics and as per usual it was all about community and coming together to make Optimizely the best platform it can be. Find more about how great our community was from my friend and boss Mark Welland (Executive Vice President of Niteco) here &lt;a href=&quot;https://www.linkedin.com/pulse/optimizely-developer-meet-up-non-techies-mark-welland-fp0ie/?trackingId=GrCWnv%2BHRs6wPgYBW8Ku9Q%3D%3D&quot;&gt;https://www.linkedin.com/pulse/optimizely-developer-meet-up-non-techies-mark-welland-fp0ie/?trackingId=GrCWnv%2BHRs6wPgYBW8Ku9Q%3D%3D&lt;/a&gt;&amp;nbsp;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2025/7/optimizely-london-dev-meetup-10th-july-2024/</guid>            <pubDate>Tue, 15 Jul 2025 09:21:16 GMT</pubDate>           <category>Blog post</category></item><item> <title>Identifying Spike Requests and Issues in Application Insights</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2025/4/identifying-spike-requests-and-issues-in-application-insights/</link>            <description>&lt;p&gt;Sometimes within the DXP we see specific Azure App Instances having request spikes causing performance degredation and we need to investigate. I find the performance tab often lacking to narrow down to the specifics of what I want to look at, so this helps me get to the bottom of things easily&lt;/p&gt;
&lt;p&gt;Here&#39;s some of my easy steps to figure these out&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Identify Instance&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Open Application Insights and navigate to the Monitoring -&amp;gt; Metrics area and set the following filters&lt;/p&gt;
&lt;p&gt;Metric: Log-based metrics, Server response time, Avg aggregation&lt;/p&gt;
&lt;p&gt;Split by: Cloud role instance&lt;/p&gt;
&lt;p&gt;Set the time range (&lt;strong&gt;IN UTC)&amp;nbsp;&lt;/strong&gt;to when the issue occured and keep narrowing it in until you have a 30 minute or so window&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/f125e7aeb05a41d3a95fd6a1c69f3bf0.aspx&quot; width=&quot;717&quot; height=&quot;589&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Make a note of the affending instance that&#39;s causing the issue, in our case &lt;strong&gt;2a9f3a38c4ac&amp;nbsp;&lt;/strong&gt;and the 10 minute time range (IN UTC) when the issue occured&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Extract High Performance Bucket Requests&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Navigate to the Monitoring -&amp;gt; Logs area and set the following KQL, replacing the INSTANCE with your noted instance. Also in the run area set the time frame in UTC to the 10 minute range noted above&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;union isfuzzy=true requests
| where cloud_RoleInstance in (&quot;INSTANCE&quot;)
| order by duration desc
| take 100
| project timestamp, id, name, url, duration, performanceBucket&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will give you a list you can export to CSV of high requests&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/9914b70254f84cbca81bc0b1b5613f68.aspx&quot; width=&quot;736&quot; height=&quot;229&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Viewing Request Details&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now navigate to Investigate -&amp;gt; Transaction Search&lt;/p&gt;
&lt;p&gt;Set the filter Event Types = Request and in the search copy and of the id values from our list and search. You can then open the request and drill in to dependency issues or profiler traces, in our case to see a slow Find query&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/608148f445114da3b4e99ea09a70bc8d.aspx&quot; width=&quot;739&quot; height=&quot;274&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Let me know if you have other easier or fun ways to drill in to these types of issues.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2025/4/identifying-spike-requests-and-issues-in-application-insights/</guid>            <pubDate>Fri, 25 Apr 2025 09:29:19 GMT</pubDate>           <category>Blog post</category></item><item> <title>Frontend hosting for PaaS &amp; SaaS CMS</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2025/4/frontend-hosting-for-paas--saas-cms/</link>            <description>&lt;p&gt;Just announced on the DXP, we FINALLY have a front end hosting solution coming as part of the DXP for modern decoupled solutions in both the PaaS and SaaS space&lt;/p&gt;
&lt;p&gt;Supporting&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enterprise search engine&lt;/li&gt;
&lt;li&gt;CDN&lt;/li&gt;
&lt;li&gt;WAP&lt;/li&gt;
&lt;li&gt;Managed service support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/link/1485d3c95df74f3395cfc14de067e79f.aspx&quot; alt=&quot;&quot; width=&quot;604&quot; height=&quot;322&quot; /&gt;&lt;/p&gt;
&lt;p&gt;See &lt;a href=&quot;https://www.optimizely.com/beta/&quot;&gt;https://www.optimizely.com/beta/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2025/4/frontend-hosting-for-paas--saas-cms/</guid>            <pubDate>Tue, 22 Apr 2025 07:56:29 GMT</pubDate>           <category>Blog post</category></item><item> <title>Save The Date - London 2025 Summer Meetup</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2025/3/save-the-date---london-2025-summer-meetup/</link>            <description>&lt;p&gt;Following last years very succesful meetup in London July 2024 &lt;a href=&quot;/link/ca9925b7807b44f5a248fed3dd4d2888.aspx&quot;&gt;https://world.optimizely.com/blogs/scott-reed/dates/2024/7/optimizely-london-dev-meetup-11th-july-2024/&lt;/a&gt; we are returning to the Lightwell venue for the 2025 event.&lt;/p&gt;
&lt;p&gt;The agenda is TBD but save the date and time&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;10th July 2025 : 6pm until 10pm&lt;/li&gt;
&lt;li&gt;Food and Drink&lt;/li&gt;
&lt;li&gt;Talks to be deterimined (reach out to me on LinkedIn or slack if you&#39;d like to talk)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hope you all can make it&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/f7e2e5a6a5964183855bc37477153266.aspx&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2025/3/save-the-date---london-2025-summer-meetup/</guid>            <pubDate>Tue, 25 Mar 2025 12:28:45 GMT</pubDate>           <category>Blog post</category></item><item> <title>CMS 12 DXP Migrations - Time Zones</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2025/3/cms-12-dxp-migrations---time-zones/</link>            <description>&lt;p&gt;When it comes to migrating a project from CMS 11 and .NET Framework on the DXP to CMS 12 and .NET Core one thing you need to be aware of is the infrastructure.&lt;/p&gt;
&lt;p&gt;On CMS 11 .NET Framework we are running on direct Windows WebApps in Azure&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/054d1b949fa54dcb8ed35f4a6b6e66b6.aspx&quot; width=&quot;749&quot; height=&quot;242&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Whereas on CMS 12 .NET Core we are running on Docker contained Lixux WebApps&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/b7c9abc8f8f846ab9f9dc8915be2cde8.aspx&quot; width=&quot;754&quot; height=&quot;421&quot; /&gt;&lt;/p&gt;
&lt;p&gt;One of the issues we&#39;ve faced on this during migrations that something to be aware of is the website timezone value which might be set on directly in the settings for the WebApps on the DXP when running under CMS 11. For example for sites we&#39;ve had running in USA&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/1a7f957a33f3466183586344a42b09f6.aspx&quot; width=&quot;508&quot; height=&quot;134&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This can cause an issue as when going through the project migration process in the DXP to migrate a project over the new infrastructure running in Docker is set to run under UTC and thefore if you have an C# calls to ToLocalTime() in your code you make get different values on this in the new infrastructure.&lt;/p&gt;
&lt;p&gt;Luckily however there&#39;s an easy way to solve this, you can add a setting in to the &quot;App Settings&quot; area of your new project to tell the Docker container what timezone to run under,&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/3476aacf4a9c4575aa139461431fdb2c.aspx&quot; width=&quot;752&quot; height=&quot;259&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Example values supported are as follows (Should support any that Docker supports &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_tz_database_time_zones&quot;&gt;https://en.wikipedia.org/wiki/List_of_tz_database_time_zones&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Time Zone Identifier&lt;/strong&gt;&lt;br /&gt;GMT&lt;br /&gt;Pacific/Apia&lt;br /&gt;HST&lt;br /&gt;AST&lt;br /&gt;America/Los_Angeles&lt;br /&gt;America/Phoenix&lt;br /&gt;America/Mazatlan&lt;br /&gt;America/Denver&lt;br /&gt;America/Belize&lt;br /&gt;America/Chicago&lt;br /&gt;America/Mexico_City&lt;br /&gt;America/Regina&lt;br /&gt;America/Bogota&lt;br /&gt;America/New_York&lt;br /&gt;America/Indianapolis&lt;br /&gt;America/Halifax&lt;br /&gt;America/Caracas&lt;br /&gt;America/Santiago&lt;br /&gt;America/St_Johns&lt;br /&gt;America/Sao_Paulo&lt;br /&gt;America/Buenos_Aires&lt;br /&gt;America/Godthab&lt;br /&gt;Atlantic/South_Georgia&lt;br /&gt;Atlantic/Azores&lt;br /&gt;Atlantic/Cape_Verde&lt;br /&gt;Africa/Casablanca&lt;br /&gt;Europe/Dublin&lt;br /&gt;Europe/Berlin&lt;br /&gt;Europe/Belgrade&lt;br /&gt;Europe/Paris&lt;br /&gt;Europe/Warsaw&lt;br /&gt;ECT&lt;br /&gt;Europe/Athens&lt;br /&gt;Europe/Minsk&lt;br /&gt;Europe/Bucharest&lt;br /&gt;Africa/Cairo&lt;br /&gt;Africa/Harare&lt;br /&gt;Europe/Helsinki&lt;br /&gt;Asia/Jerusalem&lt;br /&gt;Asia/Baghdad&lt;br /&gt;Asia/Kuwait&lt;br /&gt;Europe/Moscow&lt;br /&gt;Africa/Nairobi&lt;br /&gt;Asia/Tehran&lt;br /&gt;Asia/Muscat&lt;br /&gt;Asia/Baku&lt;br /&gt;Asia/Kabul&lt;br /&gt;Asia/Yekaterinburg&lt;br /&gt;Asia/Karachi&lt;br /&gt;Asia/Calcutta&lt;br /&gt;Asia/Katmandu&lt;br /&gt;Asia/Almaty&lt;br /&gt;Asia/Dhaka&lt;br /&gt;Asia/Colombo&lt;br /&gt;Asia/Rangoon&lt;br /&gt;Asia/Bangkok&lt;br /&gt;Asia/Krasnoyarsk&lt;br /&gt;Asia/Hong_Kong&lt;br /&gt;Asia/Irkutsk&lt;br /&gt;Asia/Kuala_Lumpur&lt;br /&gt;Australia/Perth&lt;br /&gt;Asia/Taipei&lt;br /&gt;Asia/Tokyo&lt;br /&gt;Asia/Seoul&lt;br /&gt;Asia/Yakutsk&lt;br /&gt;Australia/Adelaide&lt;br /&gt;Australia/Darwin&lt;br /&gt;Australia/Brisbane&lt;br /&gt;Australia/Sydney&lt;br /&gt;Pacific/Guam&lt;br /&gt;Australia/Hobart&lt;br /&gt;Asia/Vladivostok&lt;br /&gt;Pacific/Noumea&lt;br /&gt;Pacific/Auckland&lt;br /&gt;Pacific/Fiji&lt;br /&gt;Pacific/Tongatapu&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2025/3/cms-12-dxp-migrations---time-zones/</guid>            <pubDate>Tue, 04 Mar 2025 09:47:58 GMT</pubDate>           <category>Blog post</category></item><item> <title>Optimizely London Dev Meetup 11th July 2024</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2024/7/optimizely-london-dev-meetup-11th-july-2024/</link>            <description>&lt;p&gt;On 11th July 2024 in London Niteco and Netcel along with Optimizely ran the London Developer meetup.&lt;/p&gt;
&lt;p&gt;There was an great agenda of talks that we put on and everyone had a great amount of fun.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/bb508683340140abab08e14616e39b76.aspx&quot; width=&quot;821&quot; height=&quot;418&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I&#39;m not going to go through it all as Graham has already created a cracking summary here &lt;a href=&quot;/link/cbed8a11f3a142b08fa091adacd34698.aspx&quot;&gt;https://world.optimizely.com/blogs/allthingsopti/dates/2024/7/a-day-in-the-life-of-an-optimizely-developer---london-meetup-2024/&lt;/a&gt; but here is all the talk material for anyone who wants to see it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tips and Tricks for CMS12/Commerce 14 - &lt;a href=&quot;/link/e923f00f08f24dfb8961f607971b820c.aspx&quot;&gt;https://world.optimizely.com/globalassets/community/meetups/london/dev-meet-2024---upgrades.pptx&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Get started with Visual Builder - Live demo only!&lt;/li&gt;
&lt;li&gt;Guide to SaaS CMS and Hybrid Headless - &lt;a href=&quot;https://www.youtube.com/watch?v=-cFsPUdIVFY&quot;&gt;https://www.youtube.com/watch?v=-cFsPUdIVFY&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Creating AddOns for PaaS CMS - &lt;a href=&quot;/link/f6859e4b7dbe4f50baff410bce6b25e4.aspx&quot;&gt;https://world.optimizely.com/globalassets/community/meetups/london/creating-addons-for-optimizely.pptx&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Azure AI Speech Integration with Optimizely CMS - &lt;a href=&quot;/link/b4c59c4e505343b88a044fd2ec435ae5.aspx&quot;&gt;https://world.optimizely.com/globalassets/community/meetups/london/azure-ai-speech-integration-with-optimizely-cms.pptx&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Opal in PaaS Commerce + New Stuff - &lt;a href=&quot;/link/2abbdf21e92149d0af82f88cfad91ba8.aspx&quot;&gt;https://world.optimizely.com/globalassets/community/meetups/london/optimizely_commerce-connect_roadmap_3q24.pdf&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Implementing Optimizely flags through Vercel - &lt;a href=&quot;/link/460519ced4de4af7b1f7a27087423c4d.aspx&quot;&gt;https://world.optimizely.com/globalassets/community/meetups/london/dom_opti_vercel_toolbar_flags.pdf&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It was a pleasure to host this one and was one of the best we&#39;ve had I think in a long while, hope to see you next year or at the North event :-)&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2024/7/optimizely-london-dev-meetup-11th-july-2024/</guid>            <pubDate>Fri, 19 Jul 2024 15:36:57 GMT</pubDate>           <category>Blog post</category></item><item> <title>New ODP Connector For Customized Commerce</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2023/6/new-odp-connector-for-customized-commerce/</link>            <description>&lt;p&gt;When you have both Customized Commerce and the ODP one core aim is to connect the data to the platform so that it can be used within the ODP for functions such as campaigns, reports and real time segmentation.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Although the ODP has a powerful API that allows you to interact with it, the standard approach in Optimizely has been to connect it using the ODP App for Commerce Cloud&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/e0c267ab45ab4a2cb4d8dc1dac01c2c0.aspx&quot; width=&quot;696&quot; height=&quot;309&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This connector pulls Products, Customers and Orders in to the ODP using the Service API package which needs installing in to your commerce solution. It then pulls the data at a frequency from Commerce in to the ODP platform at a specifically set regular interval. However this comes with a number of issues&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Problems with high volume of data in larger solutions&lt;/li&gt;
&lt;li&gt;Problems with combatibility with different versions of Service API&lt;/li&gt;
&lt;li&gt;Reliance on Optimizely managing it as an application for features and scheduler&lt;/li&gt;
&lt;li&gt;Import interval slow for use with real time segments&lt;/li&gt;
&lt;li&gt;Lack of ease to control syncing of custom attributes for customers/products&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Alternate options have been to use custom code or third parter connectors to directly interact with the ODP via the API stack, however in Commere 14.13.1 there now comes an offical connector &lt;a href=&quot;https://docs.developers.optimizely.com/customized-commerce/docs/integrate-commerce-and-odp&quot;&gt;https://docs.developers.optimizely.com/customized-commerce/docs/integrate-commerce-and-odp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This connector has the following features&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Runs as a scheduled job which you can control the timings of&lt;/li&gt;
&lt;li&gt;Can push products, customers and orders&lt;/li&gt;
&lt;li&gt;Support for Products and Customer custom attributes by the us of an &lt;span&gt;ICustomerCustomFieldsHandler /&lt;/span&gt; IProductCustomFieldsHandler (see the link for code example)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is the first version and will be enhanced I&#39;m sure but now give us a better option for offically connecting Customized Commerce and the ODP!&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2023/6/new-odp-connector-for-customized-commerce/</guid>            <pubDate>Thu, 29 Jun 2023 14:59:45 GMT</pubDate>           <category>Blog post</category></item><item> <title>DXP Beta Features &amp; Cloudflare Edge Image Resizing</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2023/6/dxp-beta-features--cloudflare-edge-image-resizing/</link>            <description>&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;We all love access to the latest and greatest features on the Optimizely DXP platform, as by using the cutting edge we can create faster Optimizely experiences that provide a better customer experience to end users! Optimizely has a lot of great features as part of the DXP and is continuing to innovate by providing new features and opening up areas of the DXP more and more for our use.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Recently it&#39;s very exciting to the see a beta signup page some to Optimizely &lt;a href=&quot;https://www.optimizely.com/beta&quot;&gt;https://www.optimizely.com/beta&lt;/a&gt; that allows us to see beta features in progress and sign up to for use on our own projects, such as just to name a few key ones&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Edge Image Resizing&lt;/li&gt;
&lt;li&gt;ODP real time segmentation&lt;/li&gt;
&lt;li&gt;GA 4 Web Experimentation Reporting&lt;/li&gt;
&lt;li&gt;Vendor Manged Invetory for Configured Commerce (B2B)&lt;/li&gt;
&lt;li&gt;Opti ID Single Sign On across all the Optimizely provided products&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However I&#39;d like to call out one specifically I&#39;m very excitied about on this list&lt;/p&gt;
&lt;h2&gt;Cloudflare Edge Image Resizing&lt;/h2&gt;
&lt;p&gt;In the modern world we are serving websites across many different devices such as mobile, tablet and desktop and it&#39;s been common for some time for developers to be using responsive design and CSS to provide optimized delivery of the content. As part of that as we also want to serve the images at the right size with the smallest physical size and request footprint to users loading on every different device profile.&lt;/p&gt;
&lt;p&gt;For some time now a common solution would be to install a package such as ImageResizer, ImageSharp or build your own (which has been even more needed with changes in CMS 12 with .NET 6)&lt;/p&gt;
&lt;p&gt;However, this gives us a few downsides&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Building and maintenance of the library or updating it due to bugs&lt;/li&gt;
&lt;li&gt;Potential issues that may exist in the library&lt;/li&gt;
&lt;li&gt;CPU overhead of the webapps/server running the image resizing code on Azure&lt;/li&gt;
&lt;li&gt;Increase in blob storage assets if caching resized version which can cause environment restoring to be a hassle&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cloudflare Edge Image Resizing &lt;a href=&quot;https://developers.cloudflare.com/images/image-resizing/&quot;&gt;https://developers.cloudflare.com/images/image-resizing/&lt;/a&gt; gives us a solution to this as it&#39;s a feature long provided in Cloudflare which can resizie images to WebP and AVIF formats on cloudflares edge platform based upon the parameters defined in the URL.&lt;/p&gt;
&lt;p&gt;This allows us to offload the resizing processing and the caching off the images through to cloudflare eliminating the pain points in using a .NET library. Image configurations &lt;a href=&quot;https://developers.cloudflare.com/images/image-resizing/url-format/&quot;&gt;https://developers.cloudflare.com/images/image-resizing/url-format/&lt;/a&gt; can be defined by passing the OPTIONs part of the URL allowing the height, width and quality to be set.&lt;/p&gt;
&lt;p&gt;On the DXP right now this can be enabled by signing up on the beta page and once given access this will be enabled for the DXP. This means that for any environments such as preproduction and production with custom hostnames (as direct dxcloud domains bypass the CDN) the images will be resized.&lt;/p&gt;
&lt;p&gt;This should be a simple development activity to replace by steps such as&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Removing your resizer package&lt;/li&gt;
&lt;li&gt;Creating an application service that can rewrite image URLs in the desired format&lt;/li&gt;
&lt;li&gt;Deploying to prep for testing&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can also test once enabled by directly navigating to the URL in the browser!&lt;/p&gt;
&lt;h2&gt;Picture Renderer&lt;/h2&gt;
&lt;p&gt;A quick update (01-07-2022) that the Picture Rendered by Erik Henningson has been updated to support cloudflare image resizing &lt;a href=&quot;https://github.com/ErikHen/PictureRenderer.Optimizely&quot;&gt;https://github.com/ErikHen/PictureRenderer.Optimizely&lt;/a&gt; so this gives anyone a head start with using this feature for picture element based image resizing&lt;/p&gt;
&lt;p&gt;Hopefully this has been useful! Thanks all!&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2023/6/dxp-beta-features--cloudflare-edge-image-resizing/</guid>            <pubDate>Fri, 16 Jun 2023 09:52:36 GMT</pubDate>           <category>Blog post</category></item><item> <title>Fixing Optimizely Content Syncing/Caching Issues on the DXP pre CMS.Core 12.13.0</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2023/3/fixing-optimizely-content-syncingcaching-issues-on-the-dxp-pre-cms-core-12-13-0/</link>            <description>&lt;p&gt;Hi all,&lt;/p&gt;
&lt;p&gt;With our recent deployments to the DXP for .NET 6 projects (one a new build and one an upgrade) our clients had raised issues where there were seeing different data for the same items within the CMS. For one of our clients on Optimizely Commerce they were seeing 1 variant on a product and a different editor was seeing 3 variants.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/6236cd5af9c4438f8be73d891e97b9c0.aspx&quot; width=&quot;972&quot; height=&quot;135&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vs&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/304f81154ef24eb89bc103eb2f9b8680.aspx&quot; width=&quot;971&quot; height=&quot;231&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This&amp;nbsp;was a big issue and raised the problem that not only would this be affecting users, end customer would be seeing the different data.&lt;/p&gt;
&lt;p&gt;We managed to replicate this by faking the users ARRAffinity value so we could see that this was related to specific instances.&lt;/p&gt;
&lt;p&gt;On an investgation by support this has raised that there was a scaling bug on the caching system fixed on bug &lt;a href=&quot;/link/1933ba72787346df9003b7a4c7d1cff8.aspx?epsremainingpath=bug/CMS-26486&quot;&gt;https://world.optimizely.com/support/bug-list/bug/CMS-26486&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As this is a fairly critical issue I wanted to highlight this and strongly suggest customers on the DXP to upgrade to a minimum version of &lt;span style=&quot;text-decoration:&amp;#32;line-through;&quot;&gt;12.13.0&lt;/span&gt; (12.13.1 See below)&amp;nbsp;as we are doing for our client.&lt;/p&gt;
&lt;p&gt;Thanks!!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update to this: Quan Mai pointed out some other fixes recently which means we should be upgrading to 13.13.1 &lt;a href=&quot;/link/e4389195afa3428b8cf16df6d578ccfc.aspx&quot;&gt;https://world.optimizely.com/blogs/Quan-Mai/Dates/2023/3/upgrade-to-episerver-cms-core-12-13-1-as-soon-as-you-can/&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2023/3/fixing-optimizely-content-syncingcaching-issues-on-the-dxp-pre-cms-core-12-13-0/</guid>            <pubDate>Thu, 23 Mar 2023 13:53:47 GMT</pubDate>           <category>Blog post</category></item><item> <title>Restoring Help Text For Description in Latest Optimizely CMS</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2023/3/restoring-help-text-for-display-name/</link>            <description>&lt;p&gt;It&#39;s been a well known CSS hack for a while to force the showing of the description text for a property in to the editor view rather than a hover as per these articles&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://buildoptimizely.com/episerver/optimizely-cms-12-help-text-and-expanded-input-text-boxes/&quot;&gt;https://buildoptimizely.com/episerver/optimizely-cms-12-help-text-and-expanded-input-text-boxes/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://talk.alfnilsson.se/2014/12/18/display-help-text-in-on-page-editing/&quot;&gt;https://talk.alfnilsson.se/2014/12/18/display-help-text-in-on-page-editing/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;However in a recent version of CMS this broke due to updated UI around the all properties view.&lt;/p&gt;
&lt;p&gt;With the following replacement CSS this will restore a similar features&lt;/p&gt;
&lt;pre class=&quot;language-css&quot;&gt;&lt;code&gt;div.dijitTabPaneWrapper div:has(div.oui-pop--over) {
    display: block !important;
}


div.dijitTabPaneWrapper div.click-area {
    display: none !important;
}

div.dijitTabPaneWrapper div.oui-pop--over {
    border: none !important;
    max-width: 600px;
    font-style: italic;
    color: red;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With this applied you&#39;ll get an interface that looks like this&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/5f3c78b4eb9c4d829d0cc76969784734.aspx&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is working in Chrome and Edge and will restore the inline text and remove the popup icon, only for the main properties area.&lt;/p&gt;
&lt;p&gt;I&#39;ve highlighted it red but feel free to modify.&lt;/p&gt;
&lt;p&gt;As per the previous guides this needs to be placed in a CSS file such as this editmode.css&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/8f5e3e159aca4316bdb85d3ddecdd3ff.aspx&quot; /&gt;&lt;/p&gt;
&lt;p&gt;And then registered in a module.config in the application root (not wwwroot) such as&lt;/p&gt;
&lt;pre class=&quot;language-markup&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&amp;gt;
&amp;lt;module&amp;gt;
	&amp;lt;clientResources&amp;gt;
		&amp;lt;add name=&quot;epi-cms.widgets.base&quot; path=&quot;Styles/editmode.css&quot; resourceType=&quot;Style&quot;/&amp;gt;
	&amp;lt;/clientResources&amp;gt;
&amp;lt;/module&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2023/3/restoring-help-text-for-display-name/</guid>            <pubDate>Tue, 14 Mar 2023 18:04:48 GMT</pubDate>           <category>Blog post</category></item><item> <title>Optimizely DXP Health Checks and Creating Custom Checks</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2023/3/optimizely-dxp-health-checks-and-creating-custom-checks/</link>            <description>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In this blog I&#39;m going to be talking through the standard Azure health checking system and how the DXP is setup to operate health checks. Then I&#39;m going to explain how to easily create your own health checks to allow monitoring parts of the system so that unhealthy instances can be easily removed.&lt;/p&gt;
&lt;p&gt;Thanks as well to Valdis and Mark Hall who helped me get this point!&lt;/p&gt;
&lt;h2&gt;Azure Heath Checks&lt;/h2&gt;
&lt;p&gt;Within Azure there is a feature called a heath check &lt;a href=&quot;https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check?tabs=dotnet&quot;&gt;https://learn.microsoft.com/en-us/azure/app-service/monitor-instances-health-check?tabs=dotnet&lt;/a&gt; which is designed to allow you to provide information about the state of your application and if it&#39;s healthy or unhealthy. This allows the load balancer to deterimine if there are any unhealthy instances and remove them so that the overall health of the application can recover quickly as shown.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://learn.microsoft.com/en-us/azure/app-service/media/app-service-monitor-instances-health-check/azure-portal-navigation-health-check.png&quot; width=&quot;507&quot; alt=&quot;Health&amp;#32;check&amp;#32;navigation&amp;#32;in&amp;#32;Azure&amp;#32;Portal&quot; height=&quot;329&quot; /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Optimizely DXP Health Checks&lt;/h2&gt;
&lt;p&gt;Optimizely has a specific setup of heathcheck that&#39;s set up in the middleware and configured as standard in the Azure WebApps hosted by the DXP.&lt;/p&gt;
&lt;p&gt;The following is setup as standard within the DXP WebApps&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/899f1d321da542518c237c869e319521.aspx&quot; width=&quot;460&quot; height=&quot;237&quot; /&gt;&lt;/p&gt;
&lt;p&gt;As you can see there is a specific route that has been configured for Optimizely health checks. So how does this all work?&lt;/p&gt;
&lt;p&gt;Within a typical DXP startup.cs you&#39;ll have a call to&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;.AddCmsCloudPlatformSupport(_configuration)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And if we decomiple this code we see a specific bit of code that sets up this health check configuration&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt; public static IServiceCollection AddCloudPlatformHealthCheck(this IServiceCollection services)
 {
   services.TryAddEnumerable(ServiceDescriptor.Singleton&amp;lt;IEndpointRoutingExtension, CloudPlatformHealthCheckEndpointRoutingExtension&amp;gt;());
   services.AddHealthChecks().AddCmsHealthCheck(tags: ((IEnumerable&amp;lt;string&amp;gt;) new string[2]
   {
     &quot;episerver&quot;,
     &quot;content-api&quot;
   })).AddCmsWarmupHealthCheck(tags: ((IEnumerable&amp;lt;string&amp;gt;) new string[1]
   {
     &quot;warmup&quot;
   }));
   return services; 
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This code does a few things&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Sets up the routing for the /episerver/health&lt;/li&gt;
&lt;li&gt;Adds the CmsHeathCheck which loads the class CmsHealthCheck (This checks some information about the schema / database version)&lt;/li&gt;
&lt;li&gt;Adds the AddCmsWarmupHealthCheck which does checks for a warm up using pings defined in the environments WEBSITE_HEALTHCHECK_MAXPINGFAILURES&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So this does a few things to allow Optimizely to report if the Instance is healthy or unhealthy but what about if we want to add to this?&lt;/p&gt;
&lt;h2&gt;Adding Custom Checks&lt;/h2&gt;
&lt;p&gt;This is actually really easy based upon what we&#39;ve seen here&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a class that inherits IHealthCheck&lt;/li&gt;
&lt;li&gt;Create an extension method to register is part of the IHealthChecksBuilder&lt;/li&gt;
&lt;li&gt;Add it to the startup.cs using the AddHealthChecks() extension&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Create a class that inherits IHealthCheck&lt;/h3&gt;
&lt;p&gt;My class will specifically force an unhealthy state so we can test it in postman but in your own code obviously do a check for whatever you want and return Healthy if it&#39;s all okay!&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;public class CustomHealthCheck : IHealthCheck
{
    public Task&amp;lt;HealthCheckResult&amp;gt; CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = new CancellationToken())
    {
        return Task.FromResult&amp;lt;HealthCheckResult&amp;gt;(HealthCheckResult.Unhealthy(&quot;Test failed&quot;));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Create an extension method to register is part of the IHealthChecksBuilder&lt;/h3&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;public static class CustomHeathCheckExtensions
{
    public static IHealthChecksBuilder AddCustomHealthCheck(
        this IHealthChecksBuilder builder,
        string name = &quot;custom-health-check&quot;,
        HealthStatus status = HealthStatus.Unhealthy,
        IEnumerable&amp;lt;string&amp;gt; tags = null)
    {
        return builder.AddCheck&amp;lt;CustomHealthCheck&amp;gt;(name, new HealthStatus?(status), tags);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Add it to the startup.cs using the AddHealthChecks() extension&lt;/h3&gt;
&lt;p&gt;Add it on the end of the services expressions as shown here for Alloy&lt;/p&gt;
&lt;pre class=&quot;language-markup&quot;&gt;&lt;code&gt;services
   .AddCmsCloudPlatformSupport(_configuration)
   .AddCmsAspNetIdentity&amp;lt;ApplicationUser&amp;gt;()
   .AddCms()
   .AddAlloy()
   .AddAdminUserRegistration()
   .AddEmbeddedLocalization&amp;lt;Startup&amp;gt;()
   .AddHealthChecks()
   .AddCustomHealthCheck();&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Testing&lt;/h3&gt;
&lt;p&gt;A quick note on this is that adding .AddCmsCloudPlatformSupport(_configuration) locally will cause an error so a way to test this locally is to comment this out and manually register the .AddCloudPlatformHealthCheck() as shown below&lt;/p&gt;
&lt;pre class=&quot;language-markup&quot;&gt;&lt;code&gt;services
   //.AddCmsCloudPlatformSupport(_configuration)
   .AddCmsAspNetIdentity&amp;lt;ApplicationUser&amp;gt;()
   .AddCms()
   .AddAlloy()
   .AddAdminUserRegistration()
   .AddEmbeddedLocalization&amp;lt;Startup&amp;gt;()
   .AddCloudPlatformHealthCheck()
   .AddHealthChecks()
   .AddCustomHealthCheck();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then with this is place you&#39;ll get an unhealthy response back, as shown in postman when hitting that endpoint&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/cee128a0273c40ec9f573c07298b06ec.aspx&quot; width=&quot;538&quot; height=&quot;295&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Hopefully this helps explain exactly how the heath checking system is working in a bit more detail and gives you some ideas should you want to be able to have greater control is telling the load balancer when your instance is unhealthy :-)&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2023/3/optimizely-dxp-health-checks-and-creating-custom-checks/</guid>            <pubDate>Thu, 09 Mar 2023 16:42:33 GMT</pubDate>           <category>Blog post</category></item><item> <title>Hiding Visitor Group Criteria In CMS 12</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2022/6/hiding-visitor-group-criteria-in-cms-12/</link>            <description>&lt;p&gt;In CMS 12 the Visitor Group managment system has been moved to a client side component the same as the standard editing experience and the .NET 5/6 framework has moved away from StructureMap.&lt;/p&gt;
&lt;p&gt;Therefore the old way we had to filter out Visitior Group Criteria we don&#39;t want such as described here &lt;a href=&quot;/link/d74f767710cc4bd6bcd7732a28227bb0.aspx&quot;&gt;https://world.optimizely.com/forum/developer-forum/CMS/Thread-Container/2019/6/hide-episerver-visitor-group-criteria/&lt;/a&gt; does not work as described.&lt;/p&gt;
&lt;p&gt;Therefore here is a solution you can implement to do the same job, configurable from appSettings.json&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stage 1: Implement A Custom Filtered Version of the IVisitorGroupsUIApiService&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This class simply filters the API to return everything apart from types we want removed (from Stage 2)&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using EPiServer.Cms.UI.VisitorGroups.Api.Builders;
using EPiServer.Cms.UI.VisitorGroups.Api.Services;
using EPiServer.Cms.UI.VisitorGroups.Api.ViewModels;
using EPiServer.Framework.Localization;
using EPiServer.Personalization.VisitorGroups;
using Microsoft.Extensions.Configuration;

namespace AlloyTemplates.Business.VisitorGroups
{
    public class FilteredVisitorGroupsUIApiService : IVisitorGroupsUIApiService
    {
        private readonly IVisitorGroupRepository _visitorGroupRepository;
        private readonly IVisitorGroupCriterionRepository _visitorGroupCriterionRepository;
        private readonly VisitorGroupDtoBuilder _visitorGroupDtoBuilder;
        private readonly LocalizationService _localizationService;
        private readonly IVisitorGroupsStatisticsLoggerRegistry _visitorGroupsStatisticsLoggerRegistry;
        private readonly IConfiguration _configuration;

        public FilteredVisitorGroupsUIApiService(
          IVisitorGroupRepository visitorGroupRepository,
          IVisitorGroupCriterionRepository visitorGroupCriterionRepository,
          VisitorGroupDtoBuilder visitorGroupDtoBuilder,
          LocalizationService localizationService,
          IVisitorGroupsStatisticsLoggerRegistry visitorGroupsStatisticsLoggerRegistry,
            IConfiguration configuration
          )
        {
            this._visitorGroupRepository = visitorGroupRepository;
            this._visitorGroupCriterionRepository = visitorGroupCriterionRepository;
            this._visitorGroupDtoBuilder = visitorGroupDtoBuilder;
            this._localizationService = localizationService;
            this._visitorGroupsStatisticsLoggerRegistry = visitorGroupsStatisticsLoggerRegistry;
            _configuration = configuration;
        }

        public IEnumerable&amp;lt;VisitorGroupListViewItemDto&amp;gt; ListAllGroups() =&amp;gt; (IEnumerable&amp;lt;VisitorGroupListViewItemDto&amp;gt;)this._visitorGroupRepository.List().Select&amp;lt;VisitorGroup, VisitorGroupListViewItemDto&amp;gt;((Func&amp;lt;VisitorGroup, VisitorGroupListViewItemDto&amp;gt;)(visitorGroup =&amp;gt; new VisitorGroupListViewItemDto(visitorGroup))).ToList&amp;lt;VisitorGroupListViewItemDto&amp;gt;();

        public VisitorGroupDto GetGroup(Guid id) =&amp;gt; this._visitorGroupDtoBuilder.Build(this._visitorGroupRepository.Load(id));

        public VisitorGroup SaveGroup(VisitorGroup visitorGroup)
        {
            if (visitorGroup.Id == Guid.Empty)
                visitorGroup.Id = Guid.NewGuid();
            this._visitorGroupRepository.Save(visitorGroup);
            return visitorGroup;
        }

        public VisitorGroupDto CopyGroup(Guid id) =&amp;gt; this._visitorGroupDtoBuilder.Build(this._visitorGroupRepository.Copy(this._visitorGroupRepository.Load(id), this._localizationService.GetString(&quot;/shell/cms/visitorgroups/index/copy&quot;)));

        public void DeleteGroup(Guid id) =&amp;gt; this._visitorGroupRepository.Delete(id);

        public IEnumerable&amp;lt;VisitorGroupCriterionDto&amp;gt; ListAllVisitorGroupCriterion()
        {
            var filteredTypes = _configuration.GetSection(&quot;FilteredVisitorGroups:ExcludedCriterionFullTypes&quot;).Get&amp;lt;string[]&amp;gt;();

            var filteredList = filteredTypes == null || !filteredTypes.Any() ? _visitorGroupCriterionRepository.List() : _visitorGroupCriterionRepository.List()
                .Where(item =&amp;gt; !filteredTypes.Contains(item.TypeName));

            return (from criterion in filteredList select _visitorGroupDtoBuilder.Build(criterion)).ToList();
        }

        public void DeleteStatisticsForGroup(Guid id) =&amp;gt; this._visitorGroupsStatisticsLoggerRegistry.RemoveStatistics((IEnumerable&amp;lt;Guid&amp;gt;)new Guid[1]
        {
      id
        });
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Make sure also to register this in your DI code&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;services.AddTransient&amp;lt;IVisitorGroupsUIApiService, FilteredVisitorGroupsUIApiService&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Stage 2: Add settings to appSettings.json&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this section of the root of the of the JSON file we can configure the full type name of the Criterion type we want removed.&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code&gt;  &quot;FilteredVisitorGroups&quot;: {
    &quot;ExcludedCriterionFullTypes&quot;: [
      &quot;EPiServer.Personalization.VisitorGroups.Criteria.UserProfileCriterion, EPiServer.Cms.UI.AspNetIdentity&quot;
    ] 
  } &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This example shows removing the UserProfileCriterion but will work with any type&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/a8e90c7df48d42319b373e3abae029d0.aspx&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Thanks all :-)&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2022/6/hiding-visitor-group-criteria-in-cms-12/</guid>            <pubDate>Mon, 20 Jun 2022 11:55:04 GMT</pubDate>           <category>Blog post</category></item><item> <title>Optimizey London Developer Group Casual Christmas Meetup</title>            <link>https://world.optimizely.com/blogs/scott-reed/dates/2021/12/optimizey-casual-christmas-meetup/</link>            <description>&lt;p&gt;&lt;span&gt;As it&#39;s been such a very long time since the London Developer Group got together, we thought it would be nice to have a Christmas (or holiday/December if you don&#39;t celebrate) meetup for all us Optimizely fans, developers, users.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;This is open to anyone really but it is primarily focused towards the Optimizely platform and a chance to meetup /chat with people we&#39;ve not seen for ages.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;There&#39;s no formal presentations as it&#39;s more casual but they&#39;ll be Scott Reed (MVP / Solution Architect @ Niteco) &amp;amp; Mark Everard (Technology Director @ Made to Engage) there to talk to. We&#39;re hoping to catch up and discuss everything going on in the Optimizely world.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;The Meetup will be @ Fountain and Ink, London at 6PM&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Meetup link here &lt;a href=&quot;https://www.meetup.com/EPiServer-London/events/282424657/&quot;&gt;https://www.meetup.com/EPiServer-London/events/282424657/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/scott-reed/dates/2021/12/optimizey-casual-christmas-meetup/</guid>            <pubDate>Wed, 01 Dec 2021 15:23:01 GMT</pubDate>           <category>Blog post</category></item></channel>
</rss>