From 8813f9e90ab9c311ae56f7fe4bae45eb0ee30bad Mon Sep 17 00:00:00 2001 From: David Kaya Date: Sun, 29 Mar 2026 18:02:49 +0200 Subject: [PATCH] feat: improve onboarding and first-run experience Redesigned WelcomePane with context-aware onboarding: - Getting Started progress tracker with animated progress bar showing Copilot connection + project setup completion - Adaptive CTAs: highlights 'Connect GitHub Copilot' when not connected, or 'Try a Quick Scratchpad' when connected - Setup steps with checkmarks for completed items - Keyboard shortcut hints for returning users - First-run vs returning-user messaging Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/renderer/App.tsx | 1 + src/renderer/components/WelcomePane.tsx | 120 ++++++++++++++++++++++-- 2 files changed, 111 insertions(+), 10 deletions(-) diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index b570be8..604318d 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -592,6 +592,7 @@ export default function App() { content = ( void api.addProject()} onNewScratchpad={() => handleCreateScratchpad()} onOpenSettings={() => setShowSettings(true)} diff --git a/src/renderer/components/WelcomePane.tsx b/src/renderer/components/WelcomePane.tsx index 8e7ece7..9367615 100644 --- a/src/renderer/components/WelcomePane.tsx +++ b/src/renderer/components/WelcomePane.tsx @@ -1,10 +1,12 @@ -import { FolderPlus, MessageSquarePlus, Settings } from 'lucide-react'; +import { CheckCircle2, Circle, FolderPlus, MessageSquarePlus, Settings, Zap } from 'lucide-react'; import { motion } from 'motion/react'; +import type { SidecarConnectionStatus } from '@shared/contracts/sidecar'; import appIconUrl from '../../../assets/icons/icon.png'; interface WelcomePaneProps { hasProjects: boolean; + connectionStatus?: SidecarConnectionStatus; onNewScratchpad: () => void; onAddProject: () => void; onOpenSettings: () => void; @@ -22,14 +24,19 @@ interface ActionCardProps { title: string; description: string; onClick: () => void; + highlight?: boolean; } -function ActionCard({ icon, title, description, onClick }: ActionCardProps) { +function ActionCard({ icon, title, description, onClick, highlight }: ActionCardProps) { return (