-
+
);
}
diff --git a/frontend/src/routes/_context/_cloud/join.tsx b/frontend/src/routes/join.tsx
similarity index 54%
rename from frontend/src/routes/_context/_cloud/join.tsx
rename to frontend/src/routes/join.tsx
index 04d118f8ac..5f0c58a391 100644
--- a/frontend/src/routes/_context/_cloud/join.tsx
+++ b/frontend/src/routes/join.tsx
@@ -1,9 +1,17 @@
-import { createFileRoute } from "@tanstack/react-router";
+
+import { createFileRoute, redirect } from "@tanstack/react-router";
import { Logo } from "@/app/logo";
import { SignUp } from "@/app/sign-up";
+import { waitForClerk } from "@/lib/waitForClerk";
-export const Route = createFileRoute("/_context/_cloud/join")({
+export const Route = createFileRoute("/join")({
component: RouteComponent,
+ beforeLoad: async ({context}) => {
+ await waitForClerk(context.clerk);
+ if (context.clerk.user) {
+ throw redirect({to: "/"})
+ }
+ }
});
function RouteComponent() {
diff --git a/frontend/src/routes/login.tsx b/frontend/src/routes/login.tsx
new file mode 100644
index 0000000000..b74e1896d8
--- /dev/null
+++ b/frontend/src/routes/login.tsx
@@ -0,0 +1,25 @@
+import { createFileRoute, redirect } from "@tanstack/react-router";
+import { Login } from "@/app/login";
+import { Logo } from "@/app/logo";
+import { waitForClerk } from "@/lib/waitForClerk";
+
+export const Route = createFileRoute("/login")({
+ component: RouteComponent,
+ beforeLoad: async ({ context }) => {
+ await waitForClerk(context.clerk);
+ if (context.clerk.user) {
+ throw redirect({ to: "/" });
+ }
+ },
+});
+
+function RouteComponent() {
+ return (
+
+ );
+}
diff --git a/frontend/src/routes/sso-callback.tsx b/frontend/src/routes/sso-callback.tsx
new file mode 100644
index 0000000000..9779a2cf04
--- /dev/null
+++ b/frontend/src/routes/sso-callback.tsx
@@ -0,0 +1,16 @@
+import { AuthenticateWithRedirectCallback } from "@clerk/clerk-react";
+import { createFileRoute } from "@tanstack/react-router";
+import { FullscreenLoading } from "@/components";
+
+export const Route = createFileRoute("/sso-callback")({
+ component: RouteComponent,
+});
+
+function RouteComponent() {
+ return (
+ <>
+
+
+ >
+ )
+}
diff --git a/package.json b/package.json
index a61fb8306e..01849bb735 100644
--- a/package.json
+++ b/package.json
@@ -23,6 +23,6 @@
},
"resolutions": {
"rivetkit": "https://pkg.pr.new/rivet-dev/rivetkit@1296",
- "@clerk/shared": "3.26.1"
+ "@clerk/shared": "3.27.1"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d648aab346..3c483fc0ae 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6,7 +6,7 @@ settings:
overrides:
rivetkit: https://pkg.pr.new/rivet-dev/rivetkit@1296
- '@clerk/shared': 3.26.1
+ '@clerk/shared': 3.27.1
importers:
@@ -57,17 +57,17 @@ importers:
frontend:
dependencies:
'@clerk/clerk-js':
- specifier: ^5.92.1
- version: 5.95.0(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76)
+ specifier: ^5.97
+ version: 5.97.0(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76)
'@clerk/clerk-react':
- specifier: ^5.47.0
- version: 5.48.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^5.49.1
+ version: 5.49.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@clerk/elements':
specifier: ^0.23.63
version: 0.23.63(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(next@15.5.2(@babel/core@7.28.4)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.93.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@clerk/shared':
- specifier: 3.26.1
- version: 3.26.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: 3.27.1
+ version: 3.27.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@clerk/themes':
specifier: ^2.4.18
version: 2.4.21
@@ -1318,22 +1318,15 @@ packages:
cpu: [x64]
os: [win32]
- '@clerk/clerk-js@5.95.0':
- resolution: {integrity: sha512-SLIgFPymcL9tV0D/c02TF86F5+C5NecPrd0qVkMzbnQ0cqo5W6RPuQE4ogOHuV+4NH4kQRu2hRHm8crBei2fOg==}
+ '@clerk/clerk-js@5.97.0':
+ resolution: {integrity: sha512-bFaghDHoXni1m8gW0iHadyF1PR6/hV5FID5Ec8S3L3TvhU90LCpU3blakaRKHuoINfPXhk6UwIqSpEbKrYB/iA==}
engines: {node: '>=18.17.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0 || ^19.0.0-0
react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-0
- '@clerk/clerk-react@5.47.0':
- resolution: {integrity: sha512-of2Y6dg36eL7TwAP4DbGOMWW6DJpJSIuCn6g1jJqJkh4NGljHC7vz3H18OERRM5UQXmBG3twjC8CNAQxQrquRA==}
- engines: {node: '>=18.17.0'}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0 || ^19.0.0-0
- react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-0
-
- '@clerk/clerk-react@5.48.1':
- resolution: {integrity: sha512-RXaP5+LzgHURWXmunCj129s79qFLuvsKFu7JHBhvClP6FhY/UbgHi5jaIwvDh5JpmTtuvcTZsBViqQgxPoxOvQ==}
+ '@clerk/clerk-react@5.49.1':
+ resolution: {integrity: sha512-0yphUDJztg95eAARovx9NbgC5dWNVWhfBQ3klRKupA1hSB8+5VtkE4AugcUU7GMF9XK1jl0yrqMuOGp0U1BTqw==}
engines: {node: '>=18.17.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0 || ^19.0.0-0
@@ -1350,12 +1343,12 @@ packages:
next:
optional: true
- '@clerk/localizations@3.25.3':
- resolution: {integrity: sha512-9/R3PzktThQTmcimUGeag1TGSCwAVf1ZtEsJcpSbzQYe/RpWjSg13CiHsvw+jegFkSEuDcI0nH73k+KgYlMDHw==}
+ '@clerk/localizations@3.25.5':
+ resolution: {integrity: sha512-CRksWw5kTnxYaCfwpfQw2t0YswPnP3PML/9SpZecZYOZVnvqVkl1VriMONhV7IXrMq1PuAIw5eurKagFdzEhpw==}
engines: {node: '>=18.17.0'}
- '@clerk/shared@3.26.1':
- resolution: {integrity: sha512-84dAJutr7JAwKwRI0fRj6mFy3D521okNIiCkJ+ffMp0lniQr5IXQSFqkCEd+cQ3bImr1YHKCGVMLkahZI6s9Ng==}
+ '@clerk/shared@3.27.1':
+ resolution: {integrity: sha512-xvlc1LktFvVGt7T25Obg5vDyhGh9pVK8X976k7oGsqaJ9SWCdKVKj4cFIXh5bo0o7HkvJKdbz/gRl9GWk+IyoQ==}
engines: {node: '>=18.17.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0 || ^19.0.0-0
@@ -1378,6 +1371,10 @@ packages:
resolution: {integrity: sha512-OAepuiszOrheIThdCtBRiRSq0A3grlD2yhUUO8kvMFv4Uys95gSzkzuvQjUWXZZ23yOdTl6eRUXjtjCGto116w==}
engines: {node: '>=18.17.0'}
+ '@clerk/types@4.90.0':
+ resolution: {integrity: sha512-AnXeCkyFdM+3icdeKElajVKV73IvlQ6eeWTaLG700CzL+Zw9iD2YV4t8qAhNhwo0FFtkcI9EKDblw6G9Rn1Onw==}
+ engines: {node: '>=18.17.0'}
+
'@codemirror/autocomplete@6.18.7':
resolution: {integrity: sha512-8EzdeIoWPJDsMBwz3zdzwXnUpCzMiCyz5/A3FIPpriaclFCGDkAzK13sMcnsu5rowqiyeQN2Vs2TsOcoDPZirQ==}
@@ -8579,12 +8576,12 @@ snapshots:
'@cbor-extract/cbor-extract-win32-x64@2.2.0':
optional: true
- '@clerk/clerk-js@5.95.0(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76)':
+ '@clerk/clerk-js@5.97.0(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76)':
dependencies:
'@base-org/account': 2.0.1(@types/react@18.3.24)(react@19.1.1)(typescript@5.9.2)(use-sync-external-store@1.5.0(react@19.1.1))(zod@3.25.76)
- '@clerk/localizations': 3.25.3
- '@clerk/shared': 3.26.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@clerk/types': 4.88.0
+ '@clerk/localizations': 3.25.5
+ '@clerk/shared': 3.27.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@clerk/types': 4.90.0
'@coinbase/wallet-sdk': 4.3.0
'@emotion/cache': 11.11.0
'@emotion/react': 11.11.1(@types/react@18.3.24)(react@19.1.1)
@@ -8617,26 +8614,18 @@ snapshots:
- utf-8-validate
- zod
- '@clerk/clerk-react@5.47.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
- dependencies:
- '@clerk/shared': 3.26.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@clerk/types': 4.86.0
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- tslib: 2.8.1
-
- '@clerk/clerk-react@5.48.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@clerk/clerk-react@5.49.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@clerk/shared': 3.26.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@clerk/types': 4.88.0
+ '@clerk/shared': 3.27.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@clerk/types': 4.90.0
react: 19.1.1
react-dom: 19.1.1(react@19.1.1)
tslib: 2.8.1
'@clerk/elements@0.23.63(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(next@15.5.2(@babel/core@7.28.4)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(sass@1.93.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@clerk/clerk-react': 5.47.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@clerk/shared': 3.26.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@clerk/clerk-react': 5.49.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@clerk/shared': 3.27.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
'@clerk/types': 4.86.0
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-form': 0.1.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
@@ -8654,13 +8643,13 @@ snapshots:
- '@types/react'
- '@types/react-dom'
- '@clerk/localizations@3.25.3':
+ '@clerk/localizations@3.25.5':
dependencies:
- '@clerk/types': 4.88.0
+ '@clerk/types': 4.90.0
- '@clerk/shared@3.26.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@clerk/shared@3.27.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
dependencies:
- '@clerk/types': 4.88.0
+ '@clerk/types': 4.90.0
dequal: 2.0.3
glob-to-regexp: 0.4.1
js-cookie: 3.0.5
@@ -8683,6 +8672,10 @@ snapshots:
dependencies:
csstype: 3.1.3
+ '@clerk/types@4.90.0':
+ dependencies:
+ csstype: 3.1.3
+
'@codemirror/autocomplete@6.18.7':
dependencies:
'@codemirror/language': 6.11.3