{"id":1348,"date":"2026-02-05T17:57:23","date_gmt":"2026-02-05T17:57:23","guid":{"rendered":"https:\/\/www.naveedulhaq.com\/?p=1348"},"modified":"2026-02-05T18:15:37","modified_gmt":"2026-02-05T18:15:37","slug":"optimizely-paas-figma-ai-auto-generate-blocks-with-cursor","status":"publish","type":"post","link":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/","title":{"rendered":"Optimizely PaaS + Figma + AI: Auto\u2011Generate Blocks with Cursor"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>What if your design handoff wrote itself?<\/strong><\/h2>\n\n\n\n<p>In this end\u2011to\u2011end demo, I use an <strong>AI Agent (inside Cursor)<\/strong> to translate a <strong>Figma design<\/strong> into an <strong>Optimizely Block\/Page<\/strong>\u2014including <strong>C# Models, ViewModels, Razor Views, and CSS<\/strong> mapped from design tokens\u2014while respecting <strong>SOLID<\/strong>, clean folder structure, and maintainable naming.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Optimizely + Figma + AI: Auto\u2011Generate Blocks with Cursor\" width=\"706\" height=\"397\" data-lazy=\"true\" data-src=\"https:\/\/www.youtube.com\/embed\/5C1CAhWos2E?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Based on your requirements, you can go further: every time the design changes, the <strong>agent re\u2011generates diffs<\/strong> and creates a <strong>Pull Request<\/strong> so developers can review, test, and merge. It\u2019s a <strong>repeatable prompt\u2011driven workflow<\/strong> to eliminate handoffs, reduce CSS drift, and ship faster.<\/p>\n\n\n\n<p><strong>You\u2019ll see how to:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Parse Figma components\/tokens \u2192 <strong>typed C# Models &amp; ViewModels<\/strong><\/li>\n\n\n\n<li>Generate <strong>Razor Views<\/strong> and <strong>BEM\/utility CSS<\/strong> aligned with the design<\/li>\n\n\n\n<li>Keep spacing, colour, and typography <strong>consistent<\/strong> across code &amp; design<\/li>\n\n\n\n<li>Standardise a <strong>prompt template<\/strong> your whole team can reuse<\/li>\n<\/ul>\n\n\n\n<p><strong>Tech Stack &amp; Tools<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Optimizely CMS 12 (Content Cloud, formerly Episerver)<\/strong><\/li>\n\n\n\n<li><strong>ASP.NET Core MVC<\/strong> with <strong>Razor<\/strong><\/li>\n\n\n\n<li><strong>Figma<\/strong> (design tokens, components)<\/li>\n\n\n\n<li><strong>Cursor<\/strong> (AI coding environment\/agent orchestration)<\/li>\n\n\n\n<li><strong>GitHub PRs \/ Actions<\/strong> (or your CI system)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">AI Prompt<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;C] CONTEXT\nYou are a senior Optimizely CMS 12 architect &amp; full\u2011stack .NET developer working inside my repository in Cursor.\n\nPrimary Goal\nGiven a Figma component URL (and optionally a screenshot), analyze our existing codebase conventions and generate either:\n  (A) a new Block type (BlockData + AsyncBlockComponent + Razor view), or\n  (B) a new Page type (PageData + controller + Razor view),\nfaithfully matching the design and our established patterns for models, rendering, styling, and editor experience.\n\nAutodetection (no hard-coded namespaces\/paths)\n- Namespace &amp; base class detection:\n  \u2022 Search the repo for classes with &#91;ContentType] or &#91;SiteContentType] inheriting from BlockData to detect the dominant block namespace and any custom base class (e.g., SiteBlockData).\n  \u2022 Search for &#91;ContentType]\/&#91;SiteContentType] inheriting from PageData to detect page namespace and any custom base class (e.g., SitePageData).\n  \u2022 Reuse the predominant\/most recent namespace and base class. If multiple candidates exist, ask me to confirm before generating.\n- Folder structure detection:\n  \u2022 Infer paths from the repo for models (e.g., \/Models\/Blocks, \/Models\/Pages), rendering components\/controllers (e.g., \/Business\/Rendering or \/Features\/*), and Razor views (e.g., \/Views\/Shared\/Components\/&lt;BlockName&gt;\/Default.cshtml).\n  \u2022 Mirror the discovered patterns in the generated files.\n- Rendering &amp; styling conventions:\n  \u2022 Detect if blocks render via AsyncBlockComponent&lt;T&gt; and whether views use epi Tag Helpers (epi-property).\n  \u2022 Detect CSS strategy and tokens (Tailwind, BEM\/SCSS, CSS variables). Prefer reusing tokens\/utilities already present.\n- Display Options &amp; Preview:\n  \u2022 Detect whether DisplayOptions and\/or a block Preview controller\/template are present and wire them accordingly.\n\nFigma API usage (secure)\n- Read Figma via REST APIs to fetch structure\/metadata (file JSON) and export node images.\n- NEVER print or log the access token. Read it from the environment variable FIGMA_API_TOKEN. If not set, ask me to set\/export it.\n- Parse file key and node id from the Figma URL. If node id is missing\/unclear, ask me.\n\n&#91;L] LOGIC\n0) Repository Scan (Autodetect)\n   - Find existing BlockData and PageData classes, their namespaces, and any custom base types.\n   - Identify typical paths for models, rendering components\/controllers, and Razor views.\n   - Identify styling conventions (CSS\/SCSS\/Tailwind) and token locations.\n\n1) Figma Analysis (via API; fall back to screenshot if no API)\n   - Extract layer names, types, and exportable assets (images\/icons).\n   - Derive content properties (text, images, links, options\/variants), layout structure, spacing, and map to our utilities\/tokens.\n\n2) Layer \u2192 Property Mapping Rules (hard requirements)\n   - If a Figma asset is an IMAGE (exportable bitmap\/vector used as an image), create a property:\n       public virtual ContentReference &lt;Name&gt; { get; set; }\n     with &#91;UIHint(UIHint.Image)] and &#91;Display(...)] and &#91;CultureSpecific].\n     Property name is PascalCase derived from the layer name (e.g., \u201chero-image\u201d \u2192 HeroImage).\n   - If any layer name equals \"heading\" (case-insensitive), create a string property:\n       public virtual string Heading { get; set; }\n     with &#91;Display(...)] and &#91;CultureSpecific].\n   - For links\/CTAs (if detected: a text label + URL), propose either:\n       (a) string Label + Url LinkUrl, or\n       (b) LinkItem\/LinkItemCollection if our repo uses them.\n     Ask me which to use if not obvious.\n\n3) Ambiguity Checks (Ask-First)\n   - Before generating code, ask concise clarification questions if the Figma data is incomplete or conflicting. Examples:\n     \u2022 Should this be a Block or a Page (does it need its own URL)?\n     \u2022 Confirm final property names\/labels for editors.\n     \u2022 Confirm list\/repeater behavior if a group of items appears.\n\n4) Proposal\n   - Present the content model (properties + types + attributes), explain key decisions (e.g., IList&lt;TBlock&gt; vs ContentArea for repeaters, enum + SelectionFactory for variants), and reference where the values come from in Figma.\n\n5) Code Generation\n   - Create the content type class in the detected namespace and folder.\n   - Create AsyncBlockComponent&lt;T&gt; (or controller for a Page) and Razor view using epi Tag Helpers (epi-property \/ epi-property-item).\n   - Apply DisplayOptions\/preview patterns if our repo uses them.\n   - If images were exported, reference them from the assets folder.\n\n6) Validation\n   - Provide a CMS test checklist (editor steps, OPE validation, responsive checks, accessibility notes).\n   - Include a short diff\/patch list of added files.\n\n&#91;E] EXAMPLES\n Canonical patterns to follow (do not paste long docs\u2014only compact snippets with comments):\n- Models: &#91;ContentType]\/&#91;SiteContentType] attributes on BlockData\/PageData with &#91;Display], &#91;CultureSpecific], &#91;UIHint(...)] as needed.\n- Rendering: AsyncBlockComponent&lt;T&gt; (or controller) + Razor view using epi Tag Helpers for OPE.\n- Repeaters: Prefer IList&lt;TBlock&gt; or ContentArea over complex PropertyList&lt;T&gt; unless trivial and explicitly requested.\n- Figma API:\n  \u2022 Structure: GET \/v1\/files\/:key\n  \u2022 Image export: GET \/v1\/images\/:key?ids=:nodeId&amp;format=png|svg\n  \u2022 Keep FIGMA_API_TOKEN in env; never print token. If absent, ask me to set it.\n- Example of an existing block in this repo (style to learn from): classes under namespaces similar to Alloy12.Models.Blocks inheriting from SiteBlockData; views under \/Views\/Shared\/Components\/&lt;BlockName&gt;\/Default.cshtml; use epi Tag Helpers for OPE.\n\n&#91;A] ACTION\nWhen I paste a Figma component URL:\n1) Summarize detected conventions (namespaces, base classes, folder paths, styling, Tag Helpers, DisplayOptions).\n2) Ask me any necessary clarification questions (minimum set; no code generation until answered).\n3) After confirmation, propose the content model (properties + attributes) following the Layer \u2192 Property Mapping Rules above.\n4) Generate code under the inferred folders with correct namespaces and using directives:\n   - Model class (.cs)\n   - Rendering component\/controller (.cs)\n   - Razor view (.cshtml) with epi Tag Helpers and our styling\n   - Must do DisplayOptions tag mapping and preview template\n   - All html\/css code should be responsive\n   - Make sure you used colour from figma designs\n   - Generate frontend build after code changes\n5) Provide a diff-ready patch list and a \u201cHow to test in CMS\u201d checklist (including OPE).\n6) Figma assets:\n   - If FIGMA_API_TOKEN is set and you have the file key and node id, write or run a small Node\/TS script to:\n       \u2022 GET \/v1\/files\/:key to confirm nodes\n       \u2022 GET \/v1\/images\/:key?ids=:nodeId&amp;format=png|svg to export images\n     Save them under an inferred assets folder (e.g., \/wwwroot\/assets\/&lt;component&gt;\/) and wire them in the Razor view.\n7) Mandatory actions\n\tBefore generating any Block or Page code, you MUST:\n\tAsk me these clarification questions (every time):\n\t\tShould this be a Block or a Page?\n\t\tWhat should the CMS type name be (e.g. TestBlock)?\n\t\tFor links\/CTAs: use Label + Url, or LinkItem\/collection?\n\t\tRendering: simple partial only, or ViewComponent + view model?\n\tWait for my answers.\n\tOnly after I confirm, propose the content model (properties and Figma layer mapping) and then generate code.\n\tDo NOT generate or modify any model, view, or component files until I have answered these questions and confirmed the proposal. If you are unsure, ask; do not assume\n\tDo not do development if you can not able to read Figma\n&#91;R] REFINEMENT\n- After generating v1, ask me to confirm editor-facing property names\/labels.\n- Offer an alternative using IList&lt;TBlock&gt; vs ContentArea if repeaters exist.\n- If the repo is headless-first (Content Delivery API + Next.js), also propose the headless mapping and React component\/registry entry instead of\/alongside Razor.\n- Re-check accessibility (focus indicators, target size, semantics) and token usage before finalizing.\n- If you had to guess a namespace or folder, explicitly state the guess and ask me to confirm.\n\n\u2014 Paste here each time \u2014\nFIGMA URL: &lt;&lt;FIGMA URL&gt;&gt;<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>What if your design handoff wrote itself? In this end\u2011to\u2011end demo, I use an AI Agent (inside Cursor) to translate a Figma design into an&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,4],"tags":[11,34,62,37,13,90],"class_list":["post-1348","post","type-post","status-publish","format-standard","hentry","category-dot-net-core","category-episerver","tag-dot-net-core","tag-ai","tag-asp-net","tag-c","tag-episerver","tag-optimizely-cms"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Optimizely PaaS + Figma + AI: Auto\u2011Generate Blocks with Cursor - Naveed Ul-Haq&#039;s blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Optimizely PaaS + Figma + AI: Auto\u2011Generate Blocks with Cursor - Naveed Ul-Haq&#039;s blog\" \/>\n<meta property=\"og:description\" content=\"What if your design handoff wrote itself? In this end\u2011to\u2011end demo, I use an AI Agent (inside Cursor) to translate a Figma design into an...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/\" \/>\n<meta property=\"og:site_name\" content=\"Naveed Ul-Haq&#039;s blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-05T17:57:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-05T18:15:37+00:00\" \/>\n<meta name=\"author\" content=\"Naveed Ul-Haq\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Naveed Ul-Haq\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\\\/\"},\"author\":{\"name\":\"Naveed Ul-Haq\",\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/#\\\/schema\\\/person\\\/dd6db5980b965fcae41e096d357c65c9\"},\"headline\":\"Optimizely PaaS + Figma + AI: Auto\u2011Generate Blocks with Cursor\",\"datePublished\":\"2026-02-05T17:57:23+00:00\",\"dateModified\":\"2026-02-05T18:15:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\\\/\"},\"wordCount\":191,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/#\\\/schema\\\/person\\\/dd6db5980b965fcae41e096d357c65c9\"},\"keywords\":[\".net core\",\"AI\",\"asp.net\",\"c#\",\"episerver\",\"Optimizely Content cloud\"],\"articleSection\":[\".NET\",\"Optimizely\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\\\/\",\"url\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\\\/\",\"name\":\"Optimizely PaaS + Figma + AI: Auto\u2011Generate Blocks with Cursor - Naveed Ul-Haq&#039;s blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/#website\"},\"datePublished\":\"2026-02-05T17:57:23+00:00\",\"dateModified\":\"2026-02-05T18:15:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/index.php\\\/episerver\\\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.naveedulhaq.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Optimizely PaaS + Figma + AI: Auto\u2011Generate Blocks with Cursor\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/#website\",\"url\":\"https:\\\/\\\/www.naveedulhaq.com\\\/\",\"name\":\"Naveed Ul-Haq's blog\",\"description\":\"AI, Optimizely, Azure &amp; more\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/#\\\/schema\\\/person\\\/dd6db5980b965fcae41e096d357c65c9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.naveedulhaq.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.naveedulhaq.com\\\/#\\\/schema\\\/person\\\/dd6db5980b965fcae41e096d357c65c9\",\"name\":\"Naveed Ul-Haq\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g\",\"caption\":\"Naveed Ul-Haq\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g\"},\"description\":\"I lead engineering delivery teams for digital commerce and digital experience platforms, combining hands-on architecture experience with strong delivery governance. Over 20+ years, I\u2019ve built and led cross\u2011functional teams (engineering, BA, QA) delivering modern cloud solutions on Azure, microservices, APIs and eCommerce\\\/CMS platforms. My recent focus includes AI-enabled commerce automation: product ingestion and enrichment workflows, content optimisation for SEO and shopping feeds, and agentic tooling to improve marketing and accessibility workflows. I\u2019m passionate about building high-performing teams, establishing quality\\\/release standards, and delivering measurable outcomes across performance, reliability, and speed of change.\",\"sameAs\":[\"https:\\\/\\\/www.naveedulhaq.com\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/naveedulhaq\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Optimizely PaaS + Figma + AI: Auto\u2011Generate Blocks with Cursor - Naveed Ul-Haq&#039;s blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/","og_locale":"en_GB","og_type":"article","og_title":"Optimizely PaaS + Figma + AI: Auto\u2011Generate Blocks with Cursor - Naveed Ul-Haq&#039;s blog","og_description":"What if your design handoff wrote itself? In this end\u2011to\u2011end demo, I use an AI Agent (inside Cursor) to translate a Figma design into an...","og_url":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/","og_site_name":"Naveed Ul-Haq&#039;s blog","article_published_time":"2026-02-05T17:57:23+00:00","article_modified_time":"2026-02-05T18:15:37+00:00","author":"Naveed Ul-Haq","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Naveed Ul-Haq","Estimated reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/#article","isPartOf":{"@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/"},"author":{"name":"Naveed Ul-Haq","@id":"https:\/\/www.naveedulhaq.com\/#\/schema\/person\/dd6db5980b965fcae41e096d357c65c9"},"headline":"Optimizely PaaS + Figma + AI: Auto\u2011Generate Blocks with Cursor","datePublished":"2026-02-05T17:57:23+00:00","dateModified":"2026-02-05T18:15:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/"},"wordCount":191,"commentCount":0,"publisher":{"@id":"https:\/\/www.naveedulhaq.com\/#\/schema\/person\/dd6db5980b965fcae41e096d357c65c9"},"keywords":[".net core","AI","asp.net","c#","episerver","Optimizely Content cloud"],"articleSection":[".NET","Optimizely"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/","url":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/","name":"Optimizely PaaS + Figma + AI: Auto\u2011Generate Blocks with Cursor - Naveed Ul-Haq&#039;s blog","isPartOf":{"@id":"https:\/\/www.naveedulhaq.com\/#website"},"datePublished":"2026-02-05T17:57:23+00:00","dateModified":"2026-02-05T18:15:37+00:00","breadcrumb":{"@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.naveedulhaq.com\/index.php\/episerver\/optimizely-paas-figma-ai-auto-generate-blocks-with-cursor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.naveedulhaq.com\/"},{"@type":"ListItem","position":2,"name":"Optimizely PaaS + Figma + AI: Auto\u2011Generate Blocks with Cursor"}]},{"@type":"WebSite","@id":"https:\/\/www.naveedulhaq.com\/#website","url":"https:\/\/www.naveedulhaq.com\/","name":"Naveed Ul-Haq's blog","description":"AI, Optimizely, Azure &amp; more","publisher":{"@id":"https:\/\/www.naveedulhaq.com\/#\/schema\/person\/dd6db5980b965fcae41e096d357c65c9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.naveedulhaq.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/www.naveedulhaq.com\/#\/schema\/person\/dd6db5980b965fcae41e096d357c65c9","name":"Naveed Ul-Haq","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g","caption":"Naveed Ul-Haq"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/362536aba6cc66917d7558cacd015a81c7cdf1a69b9a28c994764847c487b692?s=96&d=mm&r=g"},"description":"I lead engineering delivery teams for digital commerce and digital experience platforms, combining hands-on architecture experience with strong delivery governance. Over 20+ years, I\u2019ve built and led cross\u2011functional teams (engineering, BA, QA) delivering modern cloud solutions on Azure, microservices, APIs and eCommerce\/CMS platforms. My recent focus includes AI-enabled commerce automation: product ingestion and enrichment workflows, content optimisation for SEO and shopping feeds, and agentic tooling to improve marketing and accessibility workflows. I\u2019m passionate about building high-performing teams, establishing quality\/release standards, and delivering measurable outcomes across performance, reliability, and speed of change.","sameAs":["https:\/\/www.naveedulhaq.com","https:\/\/www.linkedin.com\/in\/naveedulhaq\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/posts\/1348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/comments?post=1348"}],"version-history":[{"count":5,"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/posts\/1348\/revisions"}],"predecessor-version":[{"id":1354,"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/posts\/1348\/revisions\/1354"}],"wp:attachment":[{"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/media?parent=1348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/categories?post=1348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.naveedulhaq.com\/index.php\/wp-json\/wp\/v2\/tags?post=1348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}