From 407d92c956986e3580ec95c01d142097fb0f0f91 Mon Sep 17 00:00:00 2001 From: Yndira-E Date: Fri, 31 Jul 2026 18:51:09 +0200 Subject: [PATCH 1/8] Update copy, styles and add a best fit for section --- nuxt/content.config.ts | 1 + nuxt/content/plans/edge.yml | 18 ++++++++++-------- nuxt/content/plans/hub.yml | 14 +++++++++----- nuxt/pages/pricing/index.vue | 29 ++++++++++++++++++++++++++--- 4 files changed, 46 insertions(+), 16 deletions(-) diff --git a/nuxt/content.config.ts b/nuxt/content.config.ts index 3b2ca98e0e..be1492459e 100644 --- a/nuxt/content.config.ts +++ b/nuxt/content.config.ts @@ -145,6 +145,7 @@ export default defineContentConfig({ highlight: z.boolean().optional(), order: z.number(), features: z.array(z.string()), + bestFitFor: z.array(z.string()).optional(), button: z.object({ label: z.string(), to: z.string(), diff --git a/nuxt/content/plans/edge.yml b/nuxt/content/plans/edge.yml index f8bff5ea23..4f7744ccd9 100644 --- a/nuxt/content/plans/edge.yml +++ b/nuxt/content/plans/edge.yml @@ -1,17 +1,19 @@ title: Edge tierId: edge order: 1 -description: Deploy, manage and scale industrial applications across production sites with centralized governance and certified industrial connectivity. +description: Deploy, manage, and scale industrial applications across your sites with centralized governance and certified industrial connectivity. badge: For OT teams features: - - Industrial applications - - PLC & machine connectivity - - OT-certified nodes - - MQTT Broker - - DevOps Pipelines + - Device Fleet Updates - Device Group Management + - "Certified Nodes: OT" + - Blueprints - OT APPS +bestFitFor: + - OT teams connecting PLCs, machines, and systems + - Businesses standardising and deploying automation across multiple sites + - Standard deployments across multiple sites. button: - label: Contact us - to: /contact-us/ + label: START FREE TRIAL + to: https://app.flowfuse.com/account/create external: true variant: solid \ No newline at end of file diff --git a/nuxt/content/plans/hub.yml b/nuxt/content/plans/hub.yml index e65d608349..4219d3f793 100644 --- a/nuxt/content/plans/hub.yml +++ b/nuxt/content/plans/hub.yml @@ -1,15 +1,19 @@ title: Hub tierId: hub order: 2 -description: Integrate and orchestrate data across enterprise systems, APIs and databases with centralized governance. +description: Integrate and orchestrate data across enterprise systems, APIs and databases with centralised governance. badge: For IT teams features: - - Business system integration - - Data orchestration - - IT-certified nodes - Git Integration - High Availability - - DevOps Pipelines + - BAA for HIPAA + - Protected Instances + - Certified Nodes - IT + - Blueprints - IT APPS +bestFitFor: + - IT teams moving data between ERPs, databases, and cloud APIs. + - Complex data sets that need governed integration and orchestration. + - Custom deployments at the data and orchestration level. button: label: Contact us to: /contact-us/ diff --git a/nuxt/pages/pricing/index.vue b/nuxt/pages/pricing/index.vue index 5f7c505a53..95d5c5748f 100644 --- a/nuxt/pages/pricing/index.vue +++ b/nuxt/pages/pricing/index.vue @@ -7,6 +7,8 @@ const tableTiers = computed(() => (plans.value ?? []).map(p => ({ id: p.tierId, title: p.title, highlight: p.highlight, + button: p.button, + bestFitFor: p.bestFitFor, }))) const faqAccordionItems = computed(() => (faq.value?.items ?? []).map(item => ({ @@ -38,10 +40,11 @@ useSchemaOrg([

FlowFuse Pricing

Choose the package that fits your team

-

Machines on the shop floor, scaling to more plants? Or business systems and data sources to bring under governance? There’s a FlowFuse package for both.

+

Whether you’re connecting one plant or standardizing across hundreds of business systems, FlowFuse scales with you. Pick the package that works for you and the work you do.

- + + @@ -53,12 +56,32 @@ useSchemaOrg([ :tiers="tableTiers" :sections="featureCatalog.sections" :ui="{ + tier: 'border-x border-t border-b border-default rounded-t-lg bg-radial-[at_bottom_right] from-indigo-50 to-white', + td: 'border-x border-default', + th: 'px-6 border-l border-default', + tr: '*:py-4', + tbody: '[&>tr[data-slot]]:bg-indigo-50/50 [&>tr:first-child>th]:border-t [&>tr:first-child>th]:border-default [&>tr:first-child>th]:rounded-t-lg [&>tr:last-child>th]:rounded-b-lg [&>tr:last-child>td]:rounded-b-lg', tierWrapper: 'items-center text-center', tierTitleWrapper: 'justify-center', - tierDescription: 'hidden', + tierDescription: 'w-full', tierPriceWrapper: 'hidden', + tierButton: 'w-full', }" > + + +
+

FlowFuse Core Features

+

Included in every FlowFuse plan

+
+
+

{{ section.title }}

+
    +
  • + + {{ feature.title }} +
  • +
+
+
+
+

From a6b67ee8da97a347d3b50d6e8de032589ec71cca Mon Sep 17 00:00:00 2001 From: Yndira-E Date: Fri, 31 Jul 2026 19:08:46 +0200 Subject: [PATCH 3/8] Add title for features on cards and smooth scroll to each section --- nuxt/pages/pricing/index.vue | 22 ++++++++++++++++++---- src/css/style.css | 1 + 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/nuxt/pages/pricing/index.vue b/nuxt/pages/pricing/index.vue index 88832b1b52..f06725fa92 100644 --- a/nuxt/pages/pricing/index.vue +++ b/nuxt/pages/pricing/index.vue @@ -54,14 +54,28 @@ useSchemaOrg([

Choose the package that fits your team

Whether you’re connecting one plant or standardizing across hundreds of business systems, FlowFuse scales with you. Pick the package that works for you and the work you do.

- + + + + -

FlowFuse Comparison

+

FlowFuse Comparison

-
+

FlowFuse Core Features

-

Included in every FlowFuse plan

+

Included in every FlowFuse plan

{{ section.title }}

diff --git a/src/css/style.css b/src/css/style.css index 88e522ae3f..5150bbe45d 100644 --- a/src/css/style.css +++ b/src/css/style.css @@ -151,6 +151,7 @@ html, body { font-size: 16px; font-family: var(--font-sans); scroll-padding-top: 75px; + scroll-behavior: smooth; background-color: white; } From 52ebc0b7a351559c5bfee7eea4c0757e1b1fa8ec Mon Sep 17 00:00:00 2001 From: Yndira-E Date: Fri, 31 Jul 2026 19:19:59 +0200 Subject: [PATCH 4/8] Add onClick to capture data for posthog --- nuxt/content.config.ts | 1 + nuxt/content/plans/edge.yml | 3 ++- nuxt/content/plans/hub.yml | 3 ++- nuxt/pages/pricing/index.vue | 21 ++++++++++++++++++++- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/nuxt/content.config.ts b/nuxt/content.config.ts index be1492459e..76d07e872c 100644 --- a/nuxt/content.config.ts +++ b/nuxt/content.config.ts @@ -152,6 +152,7 @@ export default defineContentConfig({ external: z.boolean().optional(), color: z.enum(['primary', 'secondary', 'highlight']).optional(), variant: z.enum(['solid', 'outline', 'soft', 'subtle', 'ghost', 'link']).optional(), + event: z.string().optional(), }), }) }), diff --git a/nuxt/content/plans/edge.yml b/nuxt/content/plans/edge.yml index 4f7744ccd9..c8384e6fb4 100644 --- a/nuxt/content/plans/edge.yml +++ b/nuxt/content/plans/edge.yml @@ -16,4 +16,5 @@ button: label: START FREE TRIAL to: https://app.flowfuse.com/account/create external: true - variant: solid \ No newline at end of file + variant: solid + event: cta-join \ No newline at end of file diff --git a/nuxt/content/plans/hub.yml b/nuxt/content/plans/hub.yml index 4219d3f793..c7f419eeb5 100644 --- a/nuxt/content/plans/hub.yml +++ b/nuxt/content/plans/hub.yml @@ -18,4 +18,5 @@ button: label: Contact us to: /contact-us/ external: true - variant: solid \ No newline at end of file + variant: solid + event: cta-contact-us \ No newline at end of file diff --git a/nuxt/pages/pricing/index.vue b/nuxt/pages/pricing/index.vue index f06725fa92..f6214b49d4 100644 --- a/nuxt/pages/pricing/index.vue +++ b/nuxt/pages/pricing/index.vue @@ -28,6 +28,16 @@ const coreFeatureSections = computed(() => (featureCatalog.value?.sections ?? [] .map(section => ({ ...section, features: section.features.filter(f => f.tiers.edge === f.tiers.hub) })) .filter(section => section.features.length > 0)) +// window.capture is injected by the site's analytics script (see +// src/_includes/analytics/body.html) and is a no-op wrapper around +// posthog.capture — it's absent outside production, hence the guard. +function capture (eventName?: string, props?: Record) { + if (!eventName) return + if (typeof (window as any).capture === 'function') { + (window as any).capture(eventName, props) + } +} + // UPricingTable's feature-title slot types `feature` without `description`, // even though the featureCatalog content schema does define it. interface CatalogFeature { @@ -68,6 +78,12 @@ useSchemaOrg([ See all + @@ -95,7 +111,10 @@ useSchemaOrg([ }" > - From a6c1ea2d33322274df228d3a9fabc3a2c6c5e6cd Mon Sep 17 00:00:00 2001 From: Yndira-E Date: Fri, 31 Jul 2026 19:30:35 +0200 Subject: [PATCH 6/8] Fix CTAs --- nuxt/content/plans/edge.yml | 6 +++--- nuxt/content/plans/hub.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/nuxt/content/plans/edge.yml b/nuxt/content/plans/edge.yml index c8384e6fb4..3484ee3804 100644 --- a/nuxt/content/plans/edge.yml +++ b/nuxt/content/plans/edge.yml @@ -13,8 +13,8 @@ bestFitFor: - Businesses standardising and deploying automation across multiple sites - Standard deployments across multiple sites. button: - label: START FREE TRIAL - to: https://app.flowfuse.com/account/create + label: Contact us + to: /contact-us/ external: true variant: solid - event: cta-join \ No newline at end of file + event: cta-contact-us \ No newline at end of file diff --git a/nuxt/content/plans/hub.yml b/nuxt/content/plans/hub.yml index c7f419eeb5..8130a26031 100644 --- a/nuxt/content/plans/hub.yml +++ b/nuxt/content/plans/hub.yml @@ -15,8 +15,8 @@ bestFitFor: - Complex data sets that need governed integration and orchestration. - Custom deployments at the data and orchestration level. button: - label: Contact us - to: /contact-us/ + label: START FREE TRIAL + to: https://app.flowfuse.com/account/create external: true variant: solid - event: cta-contact-us \ No newline at end of file + event: cta-join \ No newline at end of file From 862cbe97344b544905bfcebd70c9a40af564c668 Mon Sep 17 00:00:00 2001 From: Yndira-E Date: Mon, 3 Aug 2026 11:50:11 +0200 Subject: [PATCH 7/8] Update description --- nuxt/pages/pricing/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nuxt/pages/pricing/index.vue b/nuxt/pages/pricing/index.vue index 961d6cde36..0144132226 100644 --- a/nuxt/pages/pricing/index.vue +++ b/nuxt/pages/pricing/index.vue @@ -62,7 +62,7 @@ useSchemaOrg([

FlowFuse Pricing

Choose the package that fits your team

-

Whether you’re connecting one plant or standardizing across hundreds of business systems, FlowFuse scales with you. Pick the package that works for you and the work you do.

+

Whether you’re connecting one plant or standardizing across hundreds of business systems, FlowFuse has a product for you.