diff --git a/frontend/src/app/components/OnboardingV3/beats/BeatConnect.tsx b/frontend/src/app/components/OnboardingV3/beats/BeatConnect.tsx
index 3e35db89..c1fd1429 100644
--- a/frontend/src/app/components/OnboardingV3/beats/BeatConnect.tsx
+++ b/frontend/src/app/components/OnboardingV3/beats/BeatConnect.tsx
@@ -67,8 +67,6 @@ const BeatConnect: React.FC<{
// Which provider rows are live, so the tab itself shows "Connected", not a floating label below.
const connections = useAppSelector(selectSubscriptionConnections);
const connectedIds = new Set(connections.filter((cx) => cx.isActive !== false).map((cx) => cx.provider));
- const identityFor = (pid: string): ProviderIdentity | undefined =>
- identity.find((id) => id.provider === pid) ?? (pid === 'antigravity' ? identity.find((id) => id.provider === 'gemini') : undefined);
// The whole flow leans on a real connection (identity, chat-history read, personalized reveal), so
// there is no skip: Continue stays locked until a provider is connected or the free trial is armed.
const canContinue = connected || freeTrial;
@@ -89,7 +87,6 @@ const BeatConnect: React.FC<{
{SUBSCRIPTION_PROVIDERS.map((p, i) => {
const isThis = connecting === p.id;
const isConnected = connectedIds.has(p.id);
- const ident = isConnected ? identityFor(p.id) : undefined;
return (
{p.name}
- {isConnected
- ? Connected{ident?.email ? ` as ${ident.email}` : ''}
- : isThis && !connected
- ? waiting for sign-in...
- : null}
+ {/* The green ring + filled radio already signal connected, so no redundant "Connected" text. */}
+ {!isConnected && isThis && !connected
+ ? waiting for sign-in...
+ : null}
{/* Arc's icon tile: a full-height soft-tinted zone on the row's right edge, real brand mark inside. */}