From eb807787d3e9b23fe3c1b9db615fe3c5ee322f6b Mon Sep 17 00:00:00 2001 From: Naiyuan Qing <145280634+NevilleQingNY@users.noreply.github.com> Date: Wed, 11 Feb 2026 17:46:00 +0800 Subject: [PATCH] feat(desktop): redesign connect step with single column layout - Single column centered layout matching other steps - Improved copy: "Your agent, everywhere" - Info box explaining direct connection to local agent - Coming soon hint for Discord, Slack, Mobile app - Simplified button logic: Skip (outline) + Continue Co-Authored-By: Claude Opus 4.5 --- .../onboarding/components/connect-step.tsx | 282 ++++++++++-------- 1 file changed, 156 insertions(+), 126 deletions(-) diff --git a/apps/desktop/src/renderer/src/pages/onboarding/components/connect-step.tsx b/apps/desktop/src/renderer/src/pages/onboarding/components/connect-step.tsx index 1d553ee4..6a6c304e 100644 --- a/apps/desktop/src/renderer/src/pages/onboarding/components/connect-step.tsx +++ b/apps/desktop/src/renderer/src/pages/onboarding/components/connect-step.tsx @@ -2,12 +2,23 @@ import { useState } from 'react' import { Button } from '@multica/ui/components/ui/button' import { Input } from '@multica/ui/components/ui/input' import { Badge } from '@multica/ui/components/ui/badge' +import { Separator } from '@multica/ui/components/ui/separator' +import { + HoverCard, + HoverCardContent, + HoverCardTrigger, +} from '@multica/ui/components/ui/hover-card' import { HugeiconsIcon } from '@hugeicons/react' -import { ArrowLeft02Icon, Loading03Icon } from '@hugeicons/core-free-icons' +import { + ArrowLeft02Icon, + Loading03Icon, + HelpCircleIcon, + Share08Icon, + Tick02Icon, + InformationCircleIcon, +} from '@hugeicons/core-free-icons' import { useChannels } from '../../../hooks/use-channels' -import { TutorialStep } from '../../../components/onboarding/tutorial-step' import { StepDots } from './step-dots' -import { useOnboardingStore } from '../../../stores/onboarding' function statusVariant( status: string @@ -30,8 +41,7 @@ interface ConnectStepProps { } export default function ConnectStep({ onNext, onBack }: ConnectStepProps) { - const { states, config, saveToken, loading: channelLoading } = useChannels() - const { setClientConnected } = useOnboardingStore() + const { states, config, saveToken } = useChannels() const [token, setToken] = useState('') const [saving, setSaving] = useState(false) @@ -56,141 +66,161 @@ export default function ConnectStep({ onNext, onBack }: ConnectStepProps) { setLocalError(result.error ?? 'Failed to connect') } else { setToken('') - setClientConnected(true) } setSaving(false) } return ( -
- {/* Left column */} -
-
- +
+
+ {/* Back button */} + -
-

- Connect a client -

-

- Connect a Telegram bot so you can chat with your agent from - anywhere. You can always set this up later in settings. -

+ {/* Header */} +
+

+ Your agent, everywhere +

+

+ Create bots on messaging platforms that talk to your local agent. +

+
+ + {/* Info box */} +
+

+ Your bot connects directly to this machine — + chat from your phone, tablet, or any device. +

+

+ + Telegram now. Discord, Slack, Mobile app coming soon. +

+
+ + {/* Telegram card */} +
+
+
+
+ +
+
+

Telegram

+

+ Bot API long polling +

+
+
+ +
+ {/* Status badge */} + {state && ( + + {state.status} + + )} + + {/* Help hover card */} + + + + + +

+ Get a bot token +

+
    +
  1. + 1. + Open @BotFather in Telegram +
  2. +
  3. + 2. + Send /newbot and name your bot +
  4. +
  5. + 3. + Copy the token and paste below +
  6. +
+
+
+
- {channelLoading ? ( -
- ) : hasToken ? ( -
-
-

Telegram Bot

- {state && ( - - {state.status} - - )} +
+ {hasToken ? ( +
+ +

+ {isRunning + ? 'Bot is running. Send it a message to test.' + : isStarting + ? 'Starting bot...' + : 'Bot configured.'} +

- {state?.status === 'error' && state.error && ( -

{state.error}

- )} - {isRunning && ( -

- Your bot is running. Send it a message on Telegram to test. -

- )} - {isStarting && ( -

- Starting your bot... -

- )} -
- ) : ( -
- setToken(e.target.value)} - onKeyDown={(e) => e.key === 'Enter' && handleConnect()} - /> - {localError && ( -

{localError}

- )} - -
- )} - -
- -
- {!hasToken && ( - - )} - -
+
+ )} + + {localError && ( +

{localError}

+ )} + {state?.status === 'error' && state.error && ( +

{state.error}

+ )}
-
- {/* Right column — BotFather tutorial */} -
-
-
-

Create a Telegram bot

-

- Follow these steps to create your bot: -

-
+ -
- - - - -
- -
-

- Why connect Telegram? -

-

- Once connected, you can chat with your Multica agent directly - from Telegram on any device — phone, tablet, or desktop. -

+ {/* Footer */} +
+ +
+ +