From 680b42fe9813fa7313f195d9dca5ca12df933c52 Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Wed, 12 Aug 2026 11:18:42 +0100 Subject: [PATCH 1/4] fix(webapp): hard-navigate after creating a project --- .../route.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx index 6f44617d35..2d13cacd7f 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx @@ -1,11 +1,16 @@ import { getFormProps, getInputProps, useForm } from "@conform-to/react"; import { parseWithZod } from "@conform-to/zod"; import { CommandLineIcon, FolderIcon } from "@heroicons/react/20/solid"; -import { json, type ActionFunction, type LoaderFunctionArgs } from "@remix-run/node"; +import { + json, + redirectDocument, + type ActionFunction, + type LoaderFunctionArgs, +} from "@remix-run/node"; import { Form, useActionData, useNavigation } from "@remix-run/react"; import type { Prisma } from "@trigger.dev/database"; import React, { useEffect, useState } from "react"; -import { redirect, typedjson, useTypedLoaderData } from "remix-typedjson"; +import { typedjson, useTypedLoaderData } from "remix-typedjson"; import invariant from "tiny-invariant"; import { z } from "zod"; import { BackgroundWrapper } from "~/components/BackgroundWrapper"; @@ -285,14 +290,17 @@ export const action: ActionFunction = async ({ request, params }) => { if (next) { params.set("next", next); } - return redirect(`/vercel/connect?${params.toString()}`); + return redirectDocument(`/vercel/connect?${params.toString()}`); } - return redirectWithSuccessMessage( - v3ProjectPath(project.organization, project), + const destination = v3ProjectPath(project.organization, project); + const response = await redirectWithSuccessMessage( + destination, request, `${submission.value.projectName} created` ); + + return redirectDocument(destination, { headers: response.headers }); } catch (error) { if (error instanceof ExceededProjectLimitError) { return redirectWithErrorMessage( From 8ce93b81fca92a10ef31d83945a48b5f20318f61 Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Wed, 12 Aug 2026 11:25:23 +0100 Subject: [PATCH 2/4] fix(webapp): retain project creation loader redirect --- .../routes/_app.orgs.$organizationSlug_.projects.new/route.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx index 2d13cacd7f..b8c630d2e0 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx @@ -3,6 +3,7 @@ import { parseWithZod } from "@conform-to/zod"; import { CommandLineIcon, FolderIcon } from "@heroicons/react/20/solid"; import { json, + redirect, redirectDocument, type ActionFunction, type LoaderFunctionArgs, From f674da435af5be3572f6bf5ddcd307e8e00f77dc Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Wed, 12 Aug 2026 11:26:48 +0100 Subject: [PATCH 3/4] fix(webapp): add project creation release note --- .server-changes/fix-project-creation-navigation.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .server-changes/fix-project-creation-navigation.md diff --git a/.server-changes/fix-project-creation-navigation.md b/.server-changes/fix-project-creation-navigation.md new file mode 100644 index 0000000000..a4b8dde5a0 --- /dev/null +++ b/.server-changes/fix-project-creation-navigation.md @@ -0,0 +1,6 @@ +--- +area: webapp +type: fix +--- + +Ensure creating a project completes instead of returning to its creation form after a navigation error. From 17a36f8ef22436ef45885cd20877680be80ebd3e Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Wed, 12 Aug 2026 11:31:49 +0100 Subject: [PATCH 4/4] fix(webapp): preserve project creation loader types --- .../routes/_app.orgs.$organizationSlug_.projects.new/route.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx index b8c630d2e0..38b4ab932b 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx @@ -3,7 +3,6 @@ import { parseWithZod } from "@conform-to/zod"; import { CommandLineIcon, FolderIcon } from "@heroicons/react/20/solid"; import { json, - redirect, redirectDocument, type ActionFunction, type LoaderFunctionArgs, @@ -11,7 +10,7 @@ import { import { Form, useActionData, useNavigation } from "@remix-run/react"; import type { Prisma } from "@trigger.dev/database"; import React, { useEffect, useState } from "react"; -import { typedjson, useTypedLoaderData } from "remix-typedjson"; +import { redirect, typedjson, useTypedLoaderData } from "remix-typedjson"; import invariant from "tiny-invariant"; import { z } from "zod"; import { BackgroundWrapper } from "~/components/BackgroundWrapper";