From 60c836d164050da033997146c47497f17d4c4925 Mon Sep 17 00:00:00 2001 From: Theodore Li Date: Tue, 7 Apr 2026 16:11:31 -0700 Subject: [PATCH 1/3] v0.6.29: login improvements, posthog telemetry (#4026) * feat(posthog): Add tracking on mothership abort (#4023) Co-authored-by: Theodore Li * fix(login): fix captcha headers for manual login (#4025) * fix(signup): fix turnstile key loading * fix(login): fix captcha header passing * Catch user already exists, remove login form captcha --- apps/sim/app/workspace/[workspaceId]/home/home.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/sim/app/workspace/[workspaceId]/home/home.tsx b/apps/sim/app/workspace/[workspaceId]/home/home.tsx index 1687a1973d..ec053fd6ce 100644 --- a/apps/sim/app/workspace/[workspaceId]/home/home.tsx +++ b/apps/sim/app/workspace/[workspaceId]/home/home.tsx @@ -229,6 +229,14 @@ export function Home({ chatId }: HomeProps = {}) { void stopGeneration().catch(() => {}) }, [stopGeneration, workspaceId]) + const handleStopGeneration = useCallback(() => { + captureEvent(posthogRef.current, 'task_generation_aborted', { + workspace_id: workspaceId, + view: 'mothership', + }) + stopGeneration() + }, [stopGeneration, workspaceId]) + const handleSubmit = useCallback( (text: string, fileAttachments?: FileAttachmentForApi[], contexts?: ChatContext[]) => { const trimmed = text.trim() From ca27adce4aeb82cf87aac4ca832a5064d7291566 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Wed, 15 Apr 2026 11:33:48 -0700 Subject: [PATCH 2/3] fix(landing): return 404 for invalid dynamic route slugs Add `dynamicParams = false` to all landing page dynamic routes so Next.js returns a proper 404 instead of a client-side exception for slugs not in generateStaticParams. Co-Authored-By: Claude Opus 4.6 --- apps/sim/app/(landing)/blog/[slug]/page.tsx | 2 ++ apps/sim/app/(landing)/integrations/[slug]/page.tsx | 2 ++ apps/sim/app/(landing)/models/[provider]/[model]/page.tsx | 2 ++ apps/sim/app/(landing)/models/[provider]/page.tsx | 2 ++ 4 files changed, 8 insertions(+) diff --git a/apps/sim/app/(landing)/blog/[slug]/page.tsx b/apps/sim/app/(landing)/blog/[slug]/page.tsx index 2333ddb67a..0130489be5 100644 --- a/apps/sim/app/(landing)/blog/[slug]/page.tsx +++ b/apps/sim/app/(landing)/blog/[slug]/page.tsx @@ -9,6 +9,8 @@ import { getBaseUrl } from '@/lib/core/utils/urls' import { BackLink } from '@/app/(landing)/blog/[slug]/back-link' import { ShareButton } from '@/app/(landing)/blog/[slug]/share-button' +export const dynamicParams = false + export async function generateStaticParams() { const posts = await getAllPostMeta() return posts.map((p) => ({ slug: p.slug })) diff --git a/apps/sim/app/(landing)/integrations/[slug]/page.tsx b/apps/sim/app/(landing)/integrations/[slug]/page.tsx index d48ea6f405..8915a64349 100644 --- a/apps/sim/app/(landing)/integrations/[slug]/page.tsx +++ b/apps/sim/app/(landing)/integrations/[slug]/page.tsx @@ -20,6 +20,8 @@ const baseUrl = SITE_URL const bySlug = new Map(allIntegrations.map((i) => [i.slug, i])) const byType = new Map(allIntegrations.map((i) => [i.type, i])) +export const dynamicParams = false + /** * Returns up to `limit` related integration slugs. * diff --git a/apps/sim/app/(landing)/models/[provider]/[model]/page.tsx b/apps/sim/app/(landing)/models/[provider]/[model]/page.tsx index c8ab7d8c42..b88871460b 100644 --- a/apps/sim/app/(landing)/models/[provider]/[model]/page.tsx +++ b/apps/sim/app/(landing)/models/[provider]/[model]/page.tsx @@ -20,6 +20,8 @@ import { const baseUrl = SITE_URL +export const dynamicParams = false + export async function generateStaticParams() { return ALL_CATALOG_MODELS.map((model) => ({ provider: model.providerSlug, diff --git a/apps/sim/app/(landing)/models/[provider]/page.tsx b/apps/sim/app/(landing)/models/[provider]/page.tsx index ae2acbe273..20ff3a2026 100644 --- a/apps/sim/app/(landing)/models/[provider]/page.tsx +++ b/apps/sim/app/(landing)/models/[provider]/page.tsx @@ -22,6 +22,8 @@ import { const baseUrl = SITE_URL +export const dynamicParams = false + export async function generateStaticParams() { return MODEL_PROVIDERS_WITH_CATALOGS.map((provider) => ({ provider: provider.slug, From 33c29cc12451e352896b467b6989ce6251872592 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Wed, 15 Apr 2026 11:41:51 -0700 Subject: [PATCH 3/3] fix(home): remove duplicate handleStopGeneration declaration Co-Authored-By: Claude Opus 4.6 --- apps/sim/app/workspace/[workspaceId]/home/home.tsx | 8 -------- 1 file changed, 8 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/home/home.tsx b/apps/sim/app/workspace/[workspaceId]/home/home.tsx index ec053fd6ce..1687a1973d 100644 --- a/apps/sim/app/workspace/[workspaceId]/home/home.tsx +++ b/apps/sim/app/workspace/[workspaceId]/home/home.tsx @@ -229,14 +229,6 @@ export function Home({ chatId }: HomeProps = {}) { void stopGeneration().catch(() => {}) }, [stopGeneration, workspaceId]) - const handleStopGeneration = useCallback(() => { - captureEvent(posthogRef.current, 'task_generation_aborted', { - workspace_id: workspaceId, - view: 'mothership', - }) - stopGeneration() - }, [stopGeneration, workspaceId]) - const handleSubmit = useCallback( (text: string, fileAttachments?: FileAttachmentForApi[], contexts?: ChatContext[]) => { const trimmed = text.trim()