From 0b36c8bcb6e007fb18ef5aa782c5139ca64b8216 Mon Sep 17 00:00:00 2001 From: Waleed Date: Wed, 15 Apr 2026 11:48:39 -0700 Subject: [PATCH] fix(landing): return 404 for invalid dynamic route slugs (#4182) * 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 * 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 * fix(home): remove duplicate handleStopGeneration declaration Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Theodore Li 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,