From 8154f9a50f576bb86eca2a7e918031efda8a4066 Mon Sep 17 00:00:00 2001
From: Alex Carpenter
Date: Mon, 2 Feb 2026 15:29:00 -0500
Subject: [PATCH 1/6] init
---
.../devPrompts/KeylessPrompt/index.tsx | 115 +++++++++++-------
1 file changed, 70 insertions(+), 45 deletions(-)
diff --git a/packages/ui/src/components/devPrompts/KeylessPrompt/index.tsx b/packages/ui/src/components/devPrompts/KeylessPrompt/index.tsx
index 77be3ce743f..b1e427f6a46 100644
--- a/packages/ui/src/components/devPrompts/KeylessPrompt/index.tsx
+++ b/packages/ui/src/components/devPrompts/KeylessPrompt/index.tsx
@@ -5,7 +5,6 @@ import React, { useMemo, useState } from 'react';
import { Portal } from '../../../elements/Portal';
import { MosaicThemeProvider, useMosaicTheme } from '../../../mosaic/theme-provider';
-import { handleDashboardUrlParsing } from '../shared';
import { useRevalidateEnvironment } from './use-revalidate-environment';
type KeylessPromptProps = {
@@ -14,16 +13,7 @@ type KeylessPromptProps = {
onDismiss: (() => Promise) | undefined | null;
};
-/**
- * If we cannot reconstruct the url properly, then simply fallback to Clerk Dashboard
- */
-function withLastActiveFallback(cb: () => string): string {
- try {
- return cb();
- } catch {
- return 'https://dashboard.clerk.com/last-active';
- }
-}
+const LIST_ITEMS = ['Add SSO connections (eg. GitHub)', 'Setup B2B Auth.', 'Enable MFA'] as const;
function KeylessPromptInternal(props: KeylessPromptProps) {
const { isSignedIn } = useUser();
@@ -33,7 +23,7 @@ function KeylessPromptInternal(props: KeylessPromptProps) {
const appName = environment.displayConfig.applicationName;
const isLocked = claimed || success;
- const [isOpen, setIsOpen] = useState(isSignedIn || isLocked);
+ const [isOpen, setIsOpen] = useState(true);
const [hasMounted, setHasMounted] = useState(false);
const id = React.useId();
const containerRef = React.useRef(null);
@@ -66,24 +56,14 @@ function KeylessPromptInternal(props: KeylessPromptProps) {
return url.href;
}, [claimed, props.copyKeysUrl, props.claimUrl]);
- const instanceUrlToDashboard = useMemo(() => {
- return withLastActiveFallback(() => {
- const redirectUrlParts = handleDashboardUrlParsing(props.copyKeysUrl);
- const url = new URL(
- `${redirectUrlParts.baseDomain}/apps/${redirectUrlParts.appId}/instances/${redirectUrlParts.instanceId}/user-authentication/email-phone-username`,
- );
- return url.href;
- });
- }, [props.copyKeysUrl]);
-
function getStatusText() {
if (success) {
- return 'Claim completed';
+ return 'Your app is ready';
}
if (claimed) {
return 'Missing environment keys';
}
- return 'Clerk is in keyless mode';
+ return 'Configure your application';
}
React.useEffect(() => {
@@ -127,7 +107,7 @@ function KeylessPromptInternal(props: KeylessPromptProps) {
--accent: ${theme.colors.purple[700]};
--offset: ${theme.spacing[5]};
--width-opened: 18rem;
- --width-closed: 13rem;
+ --width-closed: 14rem;
-webkit-font-smoothing: auto;
-moz-osx-font-smoothing: auto;
position: fixed;
@@ -412,17 +392,7 @@ function KeylessPromptInternal(props: KeylessPromptProps) {
>
{appName}
{' '}
- has been claimed. Configure settings from the{' '}
-
- Clerk Dashboard
-
+ has been configured. Customize your settings in the Clerk dashboard.
) : claimed ? (
@@ -430,17 +400,72 @@ function KeylessPromptInternal(props: KeylessPromptProps) {
Dashboard.
) : isSignedIn ? (
-
- You've created your first user! Link this application to your Clerk account to explore the
- Dashboard.
-
- ) : (
<>
-
Temporary API keys are enabled so you can get started immediately.
- Claim this application to access the Clerk Dashboard where you can manage auth settings and
- explore more Clerk features.
+ Head to the dashboard to customize authentication settings, view user info, and explore more
+ features.
+
+ {LIST_ITEMS.map(item => (
+
+ {item}
+
+ ))}
+
+ >
+ ) : (
+ <>
+
Temporary API keys are enabled so you can get started immediately.
+
+ {LIST_ITEMS.map(item => (
+
+ {item}
+
+ ))}
+
+
Access the dashboard to customize auth settings and explore Clerk features.
>
)}
@@ -558,7 +583,7 @@ function KeylessPromptInternal(props: KeylessPromptProps) {
z-index: 1;
`}
>
- {claimed ? 'Get API keys' : 'Claim application'}
+ {claimed ? 'Get API keys' : 'Configure your application'}