From fd01c665e2fbb820f4761ce83b67bbb0cf5813fe Mon Sep 17 00:00:00 2001
From: Danny White <3104761+dnywh@users.noreply.github.com>
Date: Thu, 14 May 2026 12:13:10 +1000
Subject: [PATCH] feat(studio): move Stripe Projects to connect interstitial
(#45862)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.
YES
## What kind of change does this PR introduce?
Feature update. Resolves DEPR-553.
## What is the current behavior?
Stripe Projects login still uses the older `APIAuthorizationLayout`
surface, so it does not match the newer shared connect interstitial
pattern used by organisation invites and CLI login.
## What is the new behavior?
Moves `/partners/stripe/projects/login` onto the shared
`InterstitialLayout` while preserving the existing `ar_id` account
request lookup, confirmation mutation, wrong-account sign-out path, and
missing-parameter redirect.
The temporary reviewer mocks have been removed after approval.
## Testing instructions
Automated checks run locally:
- `pnpm --dir apps/studio exec prettier --write
pages/partners/stripe/projects/login.tsx
components/layouts/InterstitialLayout.tsx`
- `pnpm --dir apps/studio exec eslint
pages/partners/stripe/projects/login.tsx
components/layouts/InterstitialLayout.tsx`
- `git diff --check`
`pnpm --dir apps/studio exec tsc --noEmit` was also run earlier on this
branch, but still fails on existing unrelated issues in
`components/interfaces/Integrations/Landing/useAvailableIntegrations.tsx`
and `packages/common/marketplace-client.ts`.
Manual Stripe Projects testing requires a real account request. Opening
`/partners/stripe/projects/login` without an `ar_id` redirects to `/404`
by design.
If you need the real flow:
1. Use the Stripe staging provider. In the Stripe CLI flow, run `export
DEV_MODE=true` so the provider is `Supabase_Staging_Env`.
2. From a local project directory, run `stripe projects init` and
complete the Stripe setup flow.
3. Run `stripe projects add Supabase_Staging_Env`.
4. When the browser opens the Supabase authorization URL, keep the
generated path and query string exactly as-is, including `ar_id`, but
replace only the origin with this PR preview deployment origin.
Note: the staging Stripe Projects flow can still incur real Stripe
costs; use the staging provider and coordinate refunds with team billing
if needed.
## Additional context
This is a deliberately small stacked slice toward the broader shared
connect interstitial work.
## Summary by CodeRabbit
* **User Interface**
* Redesigned Stripe authorization login page with improved layout and
visual state management
* Enhanced account row component to support flexible action buttons and
styling
* Added clearer messaging and UI states for authorization scenarios
(pending, success, errors, and account mismatches)
[](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/45862)
---
.../components/layouts/InterstitialLayout.tsx | 20 +-
.../pages/partners/stripe/projects/login.tsx | 269 +++++++++++-------
2 files changed, 177 insertions(+), 112 deletions(-)
diff --git a/apps/studio/components/layouts/InterstitialLayout.tsx b/apps/studio/components/layouts/InterstitialLayout.tsx
index ba7981cca87..7259e6ca7d3 100644
--- a/apps/studio/components/layouts/InterstitialLayout.tsx
+++ b/apps/studio/components/layouts/InterstitialLayout.tsx
@@ -103,15 +103,30 @@ export const SupabaseLogo = () => (
)
+export const PartnerLogo = ({ src, alt }: { src: string; alt: string }) => (
+
+
+
+)
+
export const InterstitialAccountRow = ({
avatarUrl,
displayName,
+ action,
+ className,
}: {
avatarUrl?: string
displayName?: string
+ action?: ReactNode
+ className?: string
}) => (
-
-
+
+ Loading account}
- Stripe Projects wants to connect to the Supabase account for{' '}
- {accountRequest?.email}.
- {emailMatches && !linkedOrg && (
- <> This will create a new Supabase organization linked to Stripe.>
- )}
-
- {!emailMatches ? (
- <>
-
-
- You're signed in as a different account. Sign out and sign back in as{' '}
- {accountRequest?.email}. Then
- return to Stripe to restart the request.
-
+
+ You're signed in to a different account. Sign out and sign back in as{' '}
+ {accountRequest?.email}.
+ Then return to Stripe to restart the request.
+ >
+ }
+ />
+