From de49e0e3fae509f07b3b48b0907acf982ccb7559 Mon Sep 17 00:00:00 2001 From: Dimitrie Hoekstra Date: Thu, 10 Sep 2026 17:45:20 +0200 Subject: [PATCH 1/5] landing: serve /landing/ from Nuxt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 10 routes move off 11ty, in three shapes: - The four ABM pages (layouts/abm-landing.njk) and the three gated briefs (layouts/landing-comparison.njk) were pure frontmatter, so they become one `landingPages` collection with a `kind`, routed by pages/landing/[slug].vue through and . - /landing/plc/, /tulip/ and /factory-efficiency/ had real markup bodies and stay hand-written Vue pages. The gated briefs' `skipIndex` kept them out of 11ty's sitemap; they carry a robots noindex now, which is what that flag was for. replaces testimonials.njk, whose script queried the DOM and ran a 10-second interval with no teardown - fine for a page that never unmounts, a leak in an SPA. It also clears the interval on unmount. replaces hs-book-meeting.njk and the non-form branch of consent-fallback.njk. The embed stays gated on analytics consent: the component registers window._ffLoadMeetings for cookieconsent-config.js to call on accept rather than loading the script on mount, so declining analytics still means no third-party scheduler. The "Choose a time to talk" panel is what a visitor without consent sees, not an error state, so it renders until the embed is up. scripts/gen-site-art.py generates nuxt/utils/siteArt.ts from the icon keys the pages and content actually name. 87 keys was past hand-maintaining, and an eager glob of that directory would inline ~137 KB of mostly unused art. It fails only on a literal with no file; a key some other renderer resolves is reported, not fatal. One content fix: /landing/edge-connectivity/'s heading carried "‑". rich-text.mjs escapes & by design, so that rendered as literal text; the content holds the U+2011 character it meant. Verified all 10 against production, with no structural differences. --- nuxt/components/HubSpotMeetings.vue | 84 +-- nuxt/components/SiteArt.vue | 20 + nuxt/components/landing/Abm.vue | 184 ++++++ nuxt/components/landing/Comparison.vue | 138 +++++ nuxt/composables/useScrollToAnchor.ts | 9 + nuxt/content.config.ts | 88 +++ ...ng-and-scaling-industrial-applications.yml | 40 +- ...ordinating-industrial-systems-at-scale.yml | 36 +- .../content/landing/edge-connectivity.yml | 36 +- .../landing/enterprise-integration.yml | 32 +- .../content/landing/line-control.yml | 34 +- .../content/landing/plant-orchestration.yml | 34 +- .../unified-real-time-data-platform.yml | 36 +- nuxt/nuxt.config.ts | 17 + nuxt/pages/landing/[slug].vue | 41 ++ nuxt/pages/landing/factory-efficiency.vue | 152 +++++ nuxt/pages/landing/plc.vue | 573 ++++++++++++++++++ nuxt/pages/landing/tulip.vue | 235 +++++++ .../images/abrasive-technology-icon.png | Bin 0 -> 1365 bytes nuxt/public/images/arch-icon.png | Bin 0 -> 1359 bytes nuxt/public/images/home/home-arch.png | Bin 0 -> 228702 bytes nuxt/public/images/home/pidd.png | Bin 0 -> 86109 bytes nuxt/public/images/home/power.png | Bin 0 -> 171514 bytes .../public/images/icons-large/centralized.svg | 18 + nuxt/public/images/icons-large/connect.svg | 11 + nuxt/public/images/icons-large/data-silos.svg | 6 + .../images/icons-large/disconnected.svg | 6 + nuxt/public/images/icons-large/expensive.svg | 5 + nuxt/public/images/icons-large/incomplete.svg | 21 + nuxt/public/images/icons-large/launch.svg | 11 + nuxt/public/images/icons-large/reduce.svg | 14 + nuxt/public/images/pidd-icon.png | Bin 0 -> 1898 bytes nuxt/public/images/power-workplace-icon.png | Bin 0 -> 1917 bytes nuxt/public/images/stories/walter.png | Bin 0 -> 326673 bytes nuxt/public/images/walter-icon.png | Bin 0 -> 2125 bytes nuxt/server/middleware/legacy.ts | 2 +- nuxt/utils/siteArt.ts | 196 ++++++ scripts/gen-site-art.mjs | 103 ++++ src/landing/factory-efficiency.njk | 149 ----- src/landing/plc.njk | 474 --------------- src/landing/tulip.njk | 230 ------- 41 files changed, 2028 insertions(+), 1007 deletions(-) create mode 100644 nuxt/components/SiteArt.vue create mode 100644 nuxt/components/landing/Abm.vue create mode 100644 nuxt/components/landing/Comparison.vue create mode 100644 nuxt/composables/useScrollToAnchor.ts rename src/landing/building-and-scaling-industrial-applications.md => nuxt/content/landing/building-and-scaling-industrial-applications.yml (79%) rename src/landing/coordinating-industrial-systems-at-scale.md => nuxt/content/landing/coordinating-industrial-systems-at-scale.yml (78%) rename src/landing/edge-connectivity.njk => nuxt/content/landing/edge-connectivity.yml (86%) rename src/landing/enterprise-integration.njk => nuxt/content/landing/enterprise-integration.yml (87%) rename src/landing/line-control.njk => nuxt/content/landing/line-control.yml (85%) rename src/landing/plant-orchestration.njk => nuxt/content/landing/plant-orchestration.yml (87%) rename src/landing/unified-real-time-data-platform.md => nuxt/content/landing/unified-real-time-data-platform.yml (79%) create mode 100644 nuxt/pages/landing/[slug].vue create mode 100644 nuxt/pages/landing/factory-efficiency.vue create mode 100644 nuxt/pages/landing/plc.vue create mode 100644 nuxt/pages/landing/tulip.vue create mode 100644 nuxt/public/images/abrasive-technology-icon.png create mode 100644 nuxt/public/images/arch-icon.png create mode 100644 nuxt/public/images/home/home-arch.png create mode 100644 nuxt/public/images/home/pidd.png create mode 100644 nuxt/public/images/home/power.png create mode 100644 nuxt/public/images/icons-large/centralized.svg create mode 100644 nuxt/public/images/icons-large/connect.svg create mode 100644 nuxt/public/images/icons-large/data-silos.svg create mode 100644 nuxt/public/images/icons-large/disconnected.svg create mode 100644 nuxt/public/images/icons-large/expensive.svg create mode 100644 nuxt/public/images/icons-large/incomplete.svg create mode 100644 nuxt/public/images/icons-large/launch.svg create mode 100644 nuxt/public/images/icons-large/reduce.svg create mode 100644 nuxt/public/images/pidd-icon.png create mode 100644 nuxt/public/images/power-workplace-icon.png create mode 100644 nuxt/public/images/stories/walter.png create mode 100644 nuxt/public/images/walter-icon.png create mode 100644 nuxt/utils/siteArt.ts create mode 100755 scripts/gen-site-art.mjs delete mode 100644 src/landing/factory-efficiency.njk delete mode 100644 src/landing/plc.njk delete mode 100644 src/landing/tulip.njk diff --git a/nuxt/components/HubSpotMeetings.vue b/nuxt/components/HubSpotMeetings.vue index d825ae51a9..6a50507ea9 100644 --- a/nuxt/components/HubSpotMeetings.vue +++ b/nuxt/components/HubSpotMeetings.vue @@ -1,47 +1,61 @@