Skip to content

Commit 19f2475

Browse files
authored
fix(comparisons): lead Flowise copy with its end of life, qualify Retool self-hosting, and note the Zapier Agents migration (#9267)
* fix(comparisons): lead Flowise copy with its end of life, qualify Retool self-hosting, and note the Zapier Agents migration * fix(comparisons): end generated FAQ summaries at real sentence boundaries * fix(comparisons): keep closing quotes in sentence summaries and scope Flowise's end of life to the open-source project * fix(comparisons): don't add a period after a quoted sentence ending
1 parent 96ab7c8 commit 19f2475

6 files changed

Lines changed: 36 additions & 14 deletions

File tree

‎apps/sim/app/(landing)/comparisons/utils.ts‎

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,14 +198,27 @@ function formatClaim(item: { title: string; description: string }): string {
198198
return `${lowercaseFirst(item.title)}: ${item.description}`
199199
}
200200

201+
const SENTENCE_END = /[.!?]["')]?(?=\s+["'(A-Z]|$)/g
202+
203+
/** A period that closes "vs.", "incl.", "etc.", or a single letter ("e.g.", "U.S."), not a sentence. */
204+
const ABBREVIATION_END = /(?:^|[\s(.-])(?:vs|incl|etc|[A-Za-z])\.$/
205+
206+
/**
207+
* Returns the first sentence of `value`: text up to the first `.`, `!`, or `?`
208+
* (plus any closing quote or paren) followed by whitespace and a capital, quote,
209+
* or paren, or by the end of the string. Decimals ("2.0", "$0.005") and abbreviations ("vs.", "U.S.") never end it.
210+
*/
201211
function firstSentence(value: string): string {
202-
const match = value.match(/^[^.]+\./)
203-
return match ? match[0] : value
212+
for (const match of value.matchAll(SENTENCE_END)) {
213+
const candidate = value.slice(0, match.index + match[0].length)
214+
if (!ABBREVIATION_END.test(value.slice(0, match.index + 1))) return candidate
215+
}
216+
return value
204217
}
205218

206-
/** Appends a period if `value` doesn't already end in sentence-closing punctuation. */
219+
/** Appends a period unless `value` already ends in sentence-closing punctuation, optionally followed by a closing quote or paren. */
207220
export function ensurePeriod(value: string): string {
208-
return /[.!?]$/.test(value) ? value : `${value}.`
221+
return /[.!?]["')]?$/.test(value) ? value : `${value}.`
209222
}
210223

211224
/**

‎apps/sim/lib/compare/data/competitors/flowise.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export const flowiseProfile: CompetitorProfile = {
1919
asOf: '2026-07-02',
2020
},
2121
oneLiner:
22-
'Flowise is an open-source, low-code visual builder for LLM chains, RAG pipelines, and multi-agent AI workflows, owned by Workday since August 2025, which reached end of life on August 31, 2026 after its team announced it was winding the project down.',
22+
'The Flowise open-source project reached end of life on August 31, 2026: Flowise is a low-code visual builder for LLM chains, RAG pipelines, and multi-agent AI workflows, owned by Workday since August 2025, and flowiseai.com still lists its Cloud plans.',
2323
leadAnswer: [
2424
'Flowise was an open-source, Apache 2.0-licensed, low-code visual builder for LLM chains, RAG pipelines, and multi-agent workflows, owned by Workday since August 2025. Its team ',
2525
{ text: 'announced the sunset of Flowise', href: 'https://flowiseai.com/sunset' },
@@ -160,7 +160,7 @@ export const flowiseProfile: CompetitorProfile = {
160160
},
161161
selfHostOption: {
162162
value:
163-
"Yes: Flowise's Community Edition is Apache 2.0 and can be self-hosted, including via Docker, on your own infrastructure. The repository has been archived since August 2026 and the project reached end of life on August 31, 2026, so a self-hosted deployment runs the final release or a fork you maintain.",
163+
"Only the archived code: Flowise's Community Edition reached end of life on August 31, 2026, and its Apache 2.0 code can still be self-hosted, including via Docker, on your own infrastructure. The repository has been archived since August 2026, so a self-hosted deployment runs the final release or a fork you maintain.",
164164
shortValue: 'Yes, but the archived code is no longer maintained',
165165
confidence: 'verified',
166166
sources: [

‎apps/sim/lib/compare/data/competitors/retool.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export const retoolProfile: CompetitorProfile = {
2424
oneLiner:
2525
'Retool is a low-code platform for building, deploying, and managing internal software (apps, workflows, and AI agents) that connect to databases, APIs, and LLMs.',
2626
leadAnswer: [
27-
'Retool is a proprietary low-code platform for building internal software: React-based apps, workflows, and a separate Agents product connected to databases, APIs, and LLMs, on Retool Cloud or self-hosted with a Retool-issued license key. Sim is an open-source AI workspace with an Apache 2.0-licensed core, where teams build, deploy, and manage AI agents visually, conversationally, or with code, on Sim Cloud or self-hosted. Choose Retool when the deliverable is an internal app with a user interface on top of production data, such as an admin panel or dashboard. Choose Sim when the deliverable is the agent or automation itself, built in one workflow builder and deployed as a REST API, chat interface, or MCP tool, with built-in evaluation and guardrail blocks.',
27+
'Retool is a proprietary low-code platform for building internal software: React-based apps, workflows, and a separate Agents product connected to databases, APIs, and LLMs, on Retool Cloud or, on the Enterprise plan, self-hosted with a Retool-issued license key. Sim is an open-source AI workspace with an Apache 2.0-licensed core, where teams build, deploy, and manage AI agents visually, conversationally, or with code, on Sim Cloud or self-hosted. Choose Retool when the deliverable is an internal app with a user interface on top of production data, such as an admin panel or dashboard. Choose Sim when the deliverable is the agent or automation itself, built in one workflow builder and deployed as a REST API, chat interface, or MCP tool, with built-in evaluation and guardrail blocks.',
2828
],
2929
faqs: [
3030
{
@@ -188,8 +188,8 @@ export const retoolProfile: CompetitorProfile = {
188188
},
189189
deploymentOptions: {
190190
value:
191-
'Retool Cloud (multi-tenant SaaS), or self-hosted via Docker Compose (non-prod/testing) or Kubernetes with Helm chart (production).',
192-
shortValue: 'Cloud, or self-hosted via Docker/Kubernetes',
191+
'Retool Cloud (multi-tenant SaaS), or, on the Enterprise plan only, self-hosted via Docker Compose (non-prod/testing) or Kubernetes with Helm chart (production).',
192+
shortValue: 'Cloud, or self-hosted on Enterprise',
193193
confidence: 'verified',
194194
sources: [
195195
{

‎apps/sim/lib/compare/data/competitors/zapier.ts‎

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ export const zapierProfile: CompetitorProfile = {
3030
oneLiner:
3131
'Zapier is a cloud-based, proprietary no-code/low-code automation platform built around "Zaps": trigger-action workflows connecting thousands of web apps. It recently added AI features, including Copilot for building, Agents for autonomous multi-step tasks, and an MCP server.',
3232
leadAnswer: [
33-
"Zapier is a proprietary, cloud-only automation platform built around trigger-action Zaps across 9,000+ apps, with Copilot for natural-language building, a separate Agents product, and a hosted MCP server. Sim is an open-source AI workspace with an Apache 2.0-licensed core, where teams build, deploy, and manage AI agents visually, conversationally, or with code, on Sim Cloud or self-hosted. Choose Zapier when you need the largest catalog of prebuilt app connectors for trigger-action automations that run entirely on Zapier's cloud. Choose Sim when AI agents are the core of the workflow, or when you need self-hosting, live multiplayer editing, native parallel branches, or a knowledge base with hybrid search that continuously syncs external sources.",
33+
"Zapier is a proprietary, cloud-only automation platform built around trigger-action Zaps across 9,000+ apps, with Copilot for natural-language building, a separate Agents product that Zapier is migrating into AI by Zapier, and a hosted MCP server. Sim is an open-source AI workspace with an Apache 2.0-licensed core, where teams build, deploy, and manage AI agents visually, conversationally, or with code, on Sim Cloud or self-hosted. Choose Zapier when you need the largest catalog of prebuilt app connectors for trigger-action automations that run entirely on Zapier's cloud. Choose Sim when AI agents are the core of the workflow, or when you need self-hosting, live multiplayer editing, native parallel branches, or a knowledge base with hybrid search that continuously syncs external sources.",
3434
],
3535
faqs: [
3636
{
3737
question: 'How does Sim compare to Zapier for building AI agents?',
3838
answer:
39-
'Sim builds agents inside the same workflow builder as the rest of the automation, while Zapier runs AI agents in a separate Agents product alongside its trigger-action Zaps. Zapier Agents can reference FAQs, docs, and public links as knowledge, but Zapier does not publicly detail the retrieval implementation or document dedicated evaluation or guardrail tooling. Sim provides agent blocks across 28 LLM provider integrations, a knowledge base with hybrid vector and full-text search plus connectors that continuously sync sources such as Google Drive and Confluence, and Evaluator and Guardrails blocks that score outputs and detect or mask PII. Both products offer a dedicated human approval step that pauses a run mid-workflow.',
39+
'Sim builds agents inside the same workflow builder as the rest of the automation, while Zapier runs AI agents in a separate Agents product alongside its trigger-action Zaps. Zapier is migrating Agents into AI by Zapier, which bills in tasks, and has not set a date to turn off Agents. Zapier Agents can reference FAQs, docs, and public links as knowledge, but Zapier does not publicly detail the retrieval implementation or document dedicated evaluation or guardrail tooling. Sim provides agent blocks across 28 LLM provider integrations, a knowledge base with hybrid vector and full-text search plus connectors that continuously sync sources such as Google Drive and Confluence, and Evaluator and Guardrails blocks that score outputs and detect or mask PII. Both products offer a dedicated human approval step that pauses a run mid-workflow.',
4040
},
4141
{
4242
question: 'Is there a Zapier alternative that can be self-hosted?',
@@ -407,11 +407,16 @@ export const zapierProfile: CompetitorProfile = {
407407
agentReasoningBlocks: {
408408
value: 'Yes',
409409
detail:
410-
'Zapier Agents is a distinct product for building autonomous, multi-step AI agents, separate from plain trigger-action Zaps, that reason across tasks and act across 9,000+ apps.',
410+
'Zapier Agents is a distinct product for building autonomous, multi-step AI agents, separate from plain trigger-action Zaps, that reason across tasks and act across 9,000+ apps. Zapier is migrating Agents into AI by Zapier, which bills in tasks, and has not set a date to turn off Agents.',
411411
shortValue: 'Dedicated Agents product for multi-step AI tasks',
412412
confidence: 'estimated',
413413
sources: [
414414
{ url: 'https://zapier.com/agents', label: 'Zapier Agents overview', asOf: '2026-07-02' },
415+
{
416+
url: 'https://help.zapier.com/hc/en-us/articles/47402591569805-Migrating-from-Agents-to-AI-by-Zapier',
417+
label: 'Migrating from Agents to AI by Zapier',
418+
asOf: '2026-10-20',
419+
},
415420
],
416421
},
417422
naturalLanguageBuilding: {

‎apps/sim/lib/landing/routes.ts‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
* root. The single source of truth for "is this the marketing surface", because
44
* a route group is not a path prefix and nothing else can derive the answer.
55
*
6-
* Two consumers depend on this list being complete, and both fail silently when
7-
* it is not:
6+
* Three consumers depend on this list being complete, and all three fail
7+
* silently when it is not:
88
*
99
* - `next.config.ts` exempts these paths from COEP. The header is a *document*
1010
* header inherited across client-side navigations, so an unlisted landing page
@@ -64,6 +64,7 @@ export function isLandingPath(pathname: string): boolean {
6464
* {@link isLandingPath} does not cover them.
6565
*/
6666
const MARKETING_DOCUMENT_PATHS: ReadonlySet<string> = new Set([
67+
'/index.md',
6768
'/llms.txt',
6869
'/llms-full.txt',
6970
'/changelog.xml',

‎apps/sim/proxy.test.ts‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ describe('proxy indexing policy', () => {
175175

176176
it('keeps the marketing documents of a self-hosted deployment out of search results', () => {
177177
setEnvFlags({ isHosted: false })
178+
expect(robotsTag('/index.md')).toBe('noindex, nofollow')
178179
expect(robotsTag('/llms.txt')).toBe('noindex, nofollow')
179180
expect(robotsTag('/llms-full.txt')).toBe('noindex, nofollow')
180181
expect(robotsTag('/changelog.xml')).toBe('noindex, nofollow')
@@ -184,6 +185,7 @@ describe('proxy indexing policy', () => {
184185
setEnvFlags({ isHosted: true })
185186
expect(robotsTag('/comparisons/n8n')).toBeNull()
186187
expect(robotsTag('/pricing')).toBeNull()
188+
expect(robotsTag('/index.md')).toBeNull()
187189
expect(robotsTag('/llms.txt')).toBeNull()
188190
expect(robotsTag('/llms-full.txt')).toBeNull()
189191
expect(robotsTag('/changelog.xml')).toBeNull()
@@ -210,6 +212,7 @@ describe('proxy matcher', () => {
210212
})
211213

212214
it('runs for the marketing documents, so the indexing policy reaches them', () => {
215+
expect(matches('/index.md')).toBe(true)
213216
expect(matches('/llms.txt')).toBe(true)
214217
expect(matches('/llms-full.txt')).toBe(true)
215218
expect(matches('/changelog.xml')).toBe(true)

0 commit comments

Comments
 (0)