Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion nuxt/composables/useResolveHref.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ import site from '../../src/_data/site.json'
// Mirrors the "resolveHref" Eleventy filter: an href of "site:<key>" is a
// pointer into site.json rather than a literal URL, so values like the job
// board link stay single-sourced there instead of duplicated in chrome.json.
// A dotted key walks into a nested object, as SiteValue's `path` does.
export function useResolveHref() {
return (href?: string) => href?.startsWith('site:') ? site[href.slice('site:'.length)] : href
return (href?: string): string | undefined => href?.startsWith('site:')
? href.slice('site:'.length).split('.').reduce<any>((value, key) => value?.[key], site)
: href
}
69 changes: 69 additions & 0 deletions nuxt/content.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,75 @@ export default defineContentConfig({
answer: z.string(),
})).optional(),
}).optional(),

})
}),
// The three competitor comparison pages. They shared the same seven sections with
// per-page copy, so they are one collection rendered by pages/vs/[slug].vue.
vsPages: defineCollection({
type: 'data',
source: 'vs/*.yml',
schema: z.object({
slug: z.string(),
// Display name, used in the table column and the section headings.
competitor: z.string(),
// Drives the hero border, the section icon badges and the table heading.
accent: z.enum(['orange', 'red', 'indigo']),
seoMeta: z.object({
title: z.string(),
description: z.string(),
}),
heroTitle: z.string(),
heroImage: z.string(),
heroImageAlt: z.string(),
hero: z.object({
buttonText: z.string(),
buttonLink: z.string(),
// PostHog `reference` prop on the migration-expert button.
buttonReference: z.string(),
}),
// The two tinted cards under the hero. /vs/kepware/ has none.
cards: z.array(z.object({
title: z.string(),
content: z.string(),
})).optional(),
sectionTitle: z.string(),
sectionIntro: z.string().optional(),
sections: z.array(z.object({
// A NavIcon registry key.
svgPath: z.string(),
title: z.string(),
description: z.string(),
})),
tableHeading: z.string(),
columnFlowFuse: z.string(),
columnCompetitor: z.string(),
table: z.array(z.object({
feature: z.string(),
flowFuse: z.string(),
// Keyed by the competitor's own name in the .njk; one key here so one
// renderer can read every page.
competitor: z.string(),
})),
switch: z.object({
title: z.string(),
content: z.array(z.string()),
// The .njk carried cta/ctaUrl here but rendered the same
// migration-expert button as the hero, so neither was read.
cta: z.string().optional(),
ctaUrl: z.string().optional(),
}),
socialProofText: z.string(),
cta: z.object({
title: z.string(),
content: z.string(),
// The closing line ends on a link to the same meeting booker the hero
// button uses, so it is a field resolved through useResolveHref rather
// than an <a> pasted into the prose. linkSuffix carries the full stop.
linkText: z.string(),
linkHref: z.string(),
linkSuffix: z.string().optional(),
}),
})
}),
ebooks: defineCollection({
Expand Down
69 changes: 69 additions & 0 deletions nuxt/content/vs/ignition.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Lifted from src/vs/ignition.njk (11ty). The three /vs/ pages shared the same seven sections
# with per-page copy, so they are one data collection rendered by pages/vs/[slug].vue.
slug: ignition
competitor: "Ignition"
accent: orange
heroImage: /vs/images/flowfuse-vs-ignition-hero.png
heroImageAlt: "Industrial engineer reviewing data pipelines on a laptop in a manufacturing facility"
heroTitle: "Modernize your Ignition stack <span class='text-orange-600'>without rebuilding everything</span>"
seoMeta:
title: "A Modern Alternative to Ignition by Inductive Automation"
description: "FlowFuse is the cloud-native platform for teams running Ignition who want to build new applications without Java, Jython, or per-Gateway licensing. Connect OPC-UA and MQTT devices today, then migrate existing projects at your own pace."
hero:
buttonText: "Talk to a Migration Expert"
buttonLink: "site:meetings.salesRoundRobin"
buttonReference: "vs-ignition"
sectionTitle: "Why Industrial Teams Choose <span class='text-orange-600'>FlowFuse Instead of Ignition</span>"
sections:
- svgPath: "cloud"
title: "Cloud-native by design"
description: "FlowFuse runs as a fully managed cloud platform, with no Java gateways to provision, patch, or operate. The same applications run identically at the edge, on-premises, or in the cloud."
- svgPath: "code-bracket"
title: "Low-code, drag-and-drop development"
description: "Build applications visually by wiring nodes together, with no scripting required for most use cases. Drop to JavaScript only when you need custom logic. FlowFuse Expert, our industrial-tuned AI copilot, takes it further: describe what you want in plain language and it assembles flows, wires nodes, and generates code in your workspace. No Java IDE, no proprietary Designer, no Jython."
- svgPath: "puzzle-piece"
title: "Open integration ecosystem"
description: "Connect to any device, API, or cloud service using thousands of community-contributed nodes, with MQTT, OPC-UA, Modbus, HTTP, and SQL available at no extra licensing cost."
table:
- feature: "Programming Model & Scripting"
flowFuse: "<span class='font-medium'>Low-code, drag-and-drop Node-RED.</span> Build applications visually by connecting nodes, with JavaScript available for custom logic when you need it. Flows are human-readable, portable JSON that you can version-control, audit, and run anywhere."
competitor: "<span class='font-medium'>Proprietary Java-based Designer.</span> Scripting uses Jython (Python 2.7). Inductive Automation maintains its own Jython 2.7 build, but Python 3 libraries with C extensions, which include most modern data-science and ML packages, do not run natively in it."
- feature: "Cloud & Managed Deployment"
flowFuse: "<span class='font-medium'>Fully managed SaaS.</span> Nothing to provision or maintain. Build once and run the same application at the edge, on-premises, or in the cloud without changing your developer experience."
competitor: "<span class='font-medium'>On-premises first.</span> Cloud deployments run on self-managed VMs or marketplace images, and there is no fully hosted Ignition SaaS. Ignition Cloud Edition ships without device drivers and cannot connect to PLCs directly; an on-prem Gateway or MQTT bridge handles device connectivity."
- feature: "MQTT & Protocol Costs"
flowFuse: "<span class='font-medium'>Included at no extra cost.</span> MQTT, OPC-UA, Modbus, HTTP, and thousands of community integrations come with the platform itself. There's no separate module to buy for any of them."
competitor: "<span class='font-medium'>Core OPC-UA drivers are included; MQTT is a paid add-on.</span> Bidirectional MQTT/Sparkplug runs on the Cirrus Link MQTT Engine and MQTT Transmission modules, sold within Inductive Automation's Enterprise Integration Solution Suite rather than the base platform."
- feature: "Developer Workflow & Version Control"
flowFuse: "<span class='font-medium'>DevOps-native.</span> Git integration, team workspaces, and deployment pipelines are built in, so flows ship like modern software instead of backup files passed around manually."
competitor: "<span class='font-medium'>No native Git integration.</span> Projects live in the Gateway and export as <code>.gwbk</code> backup files. Teams often rely on certified integrators for deployment rather than self-service pipelines."
- feature: "Multi-Site & Team Management"
flowFuse: "<span class='font-medium'>Built for many teams and sites.</span> Manage every team, customer, and site from a single FlowFuse platform and switch between them in one UI, designed for managed service providers and multi-site operations."
competitor: "<span class='font-medium'>Each Gateway managed separately.</span> Ignition centers on the individual Gateway, so multi-site estates are typically administered Gateway by Gateway rather than from one unified multi-tenant console."
- feature: "AI-Assisted Development"
flowFuse: "<span class='font-medium'>FlowFuse Expert, built in.</span> Describe what you want in plain language and the copilot assembles nodes, wires them, and generates the underlying code right in the editor, grounded in your live data through Model Context Protocol (MCP)."
competitor: "<span class='font-medium'>No built-in AI copilot.</span> Ignition ships no first-party natural-language flow or code generation; scripting is written by hand in Jython within the Designer. AI assistance is only available through third-party modules or external tools like GitHub Copilot, not as part of the platform."
switch:
title: How to Move Workloads <span class='text-orange-600'>from Ignition to FlowFuse</span>
content:
- "<span class='font-semibold'>Map what's costing you time today:</span> We look at where Jython scripting, Gateway backups, or per-module licensing are slowing your team down, and identify which application makes sense to build in FlowFuse first."
- "<span class='font-semibold'>Validate FlowFuse against your stack:</span> Connect your OT assets over MQTT or OPC-UA and build the same application in FlowFuse. Compare the workflow directly rather than take our word for it."
- "<span class='font-semibold'>Roll out gradually, with our team alongside you:</span> Begin with new use cases and migrate existing applications whenever it makes sense for your plant."
cta: TALK TO A MIGRATION EXPERT
ctaUrl: "/book-demo"
cta:
title: "Exploring Alternatives to Ignition?"
content: "Most teams don't replace Ignition overnight, they start by building the next application somewhere else."
linkText: "Book a demo with a FlowFuse expert"
linkHref: "site:meetings.salesRoundRobin"
linkSuffix: "."
cards:
- title: "No per-protocol licensing"
content: "MQTT, OPC-UA, Modbus, and thousands of community nodes come standard with FlowFuse. Bidirectional MQTT on Ignition typically runs through the Cirrus Link modules, sold as part of Inductive Automation's <span class='font-medium'>Enterprise Integration Solution Suite</span> rather than the base platform."
- title: "One console, every site"
content: "Ignition centers on the individual Gateway, so multi-site estates get administered one Gateway at a time. FlowFuse manages <span class='font-medium'>every team, customer, and site from a single platform</span>, which matters most once you're running more than one facility."
sectionIntro: "Ignition's reputation was built on Java and Jython, two technologies most engineering teams have spent the last decade moving away from. FlowFuse runs the same edge connectivity, OPC-UA and MQTT integrations, and operational dashboards, without that legacy stack, through a managed cloud platform instead of a Gateway you patch yourself."
tableHeading: "<span class='text-orange-600'>FlowFuse and Ignition</span> at a Glance"
columnFlowFuse: "FlowFuse (Open & Cloud-Native)"
columnCompetitor: "Ignition (Proprietary, On-Prem)"
socialProofText: "Trusted by industrial teams worldwide to modernize their OT‑IT data infrastructure and edge architectures."
63 changes: 63 additions & 0 deletions nuxt/content/vs/kepware.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Lifted from src/vs/kepware.njk (11ty). The three /vs/ pages shared the same seven sections
Comment thread
dimitrieh marked this conversation as resolved.
# with per-page copy, so they are one data collection rendered by pages/vs/[slug].vue.
slug: kepware
competitor: "Kepware"
accent: indigo
heroImage: /vs/images/kepware.png
heroImageAlt: "Plant manager with a laptop in a factory setting"
heroTitle: "A Modern Alternative to <span class='text-indigo-600'>Kepware</span>"
seoMeta:
title: "A Modern Alternative to Kepware"
description: "FlowFuse is the open, cloud-ready solution engineers choose to replace legacy tools like PTC Kepware. Build faster, integrate easier, and modernize your industrial workflows, without vendor lock-in."
hero:
buttonText: "Talk to a Migration Expert"
buttonLink: "site:meetings.salesRoundRobin"
buttonReference: "vs-kepware"
sectionTitle: "Why Industrial Teams Are <span class='text-indigo-600'>Moving Away from Kepware to FlowFuse</span>"
sections:
- svgPath: "cloud"
title: "Built for the cloud"
description: "Run your automation flows wherever you need: edge, on-prem or cloud."
- svgPath: "arrows-pointing-out"
title: "Open & extensible"
description: "Based on open-source Node-RED. No more black boxes."
- svgPath: "puzzle-piece"
title: "Faster integrations"
description: "Native support for MQTT, OPC-UA, REST, and custom APIs."
table:
- feature: "Open-source base"
flowFuse: "Node-RED & OSS ecosystem"
competitor: "Proprietary stack"
- feature: "Vendor lock-in"
flowFuse: "None"
competitor: "Strong lock-in"
- feature: "Integration flexibility"
flowFuse: "MQTT, OPC-UA, REST, SQL…"
competitor: "Limited/custom connectors"
- feature: "License & scaling model"
flowFuse: "Transparent & usage-based"
competitor: "Expensive & tiered"
- feature: "Community and transparency"
flowFuse: "Active OSS community"
competitor: "Closed ecosystem"
- feature: "Future-proof architecture"
flowFuse: "Portable & cloud-ready"
competitor: "Uncertainty post-acquisition"
switch:
title: How to Switch from Kepware to FlowFuse
content:
- "<span class='font-semibold'>Migration consultation:</span> We analyze your current setup and challenges."
- "<span class='font-semibold'>Try FlowFuse with your data:</span> Build real flows using your industrial environment."
- "<span class='font-semibold'>Go live with expert support:</span> From pilot to full rollout, we’ve got your back."
cta: BOOK A DEMO
ctaUrl: "/book-demo"
cta:
title: "Ready to Leave Kepware Behind?"
content: "See how FlowFuse helps teams like yours modernize their industrial automation infrastructure, faster, more flexibly, and at lower cost."
linkText: "Book a Demo with a FlowFuse Expert"
linkHref: "site:meetings.salesRoundRobin"
linkSuffix: "."
tableHeading: "<span class='text-indigo-600'>FlowFuse and Kepware</span> at a Glance"
columnFlowFuse: "FlowFuse"
columnCompetitor: "Kepware"
socialProofText: "Trusted by industrial teams worldwide to modernize their OT‑IT data infrastructure and edge architectures."
Loading