fix: enhance Quick Start card layout for improved responsiveness and usability

This commit is contained in:
Dries Augustyns
2026-05-10 13:57:46 +02:00
parent e43f70d8a1
commit 649bbf6d6b
2 changed files with 14 additions and 19 deletions
+10 -10
View File
@@ -33,7 +33,7 @@ function HelpResources() {
}; };
return ( return (
<div className="mt-4 pt-4 border-t border-neutral-200"> <div className="px-6 pb-6 pt-4 border-t border-neutral-200">
<p className="text-xs font-medium text-neutral-500 mb-3">Need help?</p> <p className="text-xs font-medium text-neutral-500 mb-3">Need help?</p>
<div className="flex flex-col sm:flex-row gap-2"> <div className="flex flex-col sm:flex-row gap-2">
<Button asChild variant="outline" size="sm" className="flex-1"> <Button asChild variant="outline" size="sm" className="flex-1">
@@ -101,12 +101,12 @@ export function QuickStart({setupState, isLoading}: QuickStartProps) {
if (isLoading || !setupState) { if (isLoading || !setupState) {
return ( return (
<Card> <Card className="flex flex-col h-full">
<CardHeader> <CardHeader>
<CardTitle>Quick Start</CardTitle> <CardTitle>Quick Start</CardTitle>
<CardDescription>Get started with Plunk in minutes</CardDescription> <CardDescription>Get started with Plunk in minutes</CardDescription>
</CardHeader> </CardHeader>
<CardContent> <CardContent className="flex-1 min-h-0 overflow-y-auto">
<div className="space-y-3"> <div className="space-y-3">
{[1, 2, 3].map(i => ( {[1, 2, 3].map(i => (
<div <div
@@ -122,8 +122,8 @@ export function QuickStart({setupState, isLoading}: QuickStartProps) {
</div> </div>
))} ))}
</div> </div>
<HelpResources />
</CardContent> </CardContent>
<HelpResources />
</Card> </Card>
); );
} }
@@ -217,12 +217,12 @@ export function QuickStart({setupState, isLoading}: QuickStartProps) {
// If core setup is complete and they're actively sending, show success message // If core setup is complete and they're actively sending, show success message
if (setupState.hasVerifiedDomain && hasContacts && hasSentCampaign && hasRecentCampaign) { if (setupState.hasVerifiedDomain && hasContacts && hasSentCampaign && hasRecentCampaign) {
return ( return (
<Card> <Card className="flex flex-col h-full">
<CardHeader> <CardHeader>
<CardTitle>Quick Start</CardTitle> <CardTitle>Quick Start</CardTitle>
<CardDescription>Your project is fully set up</CardDescription> <CardDescription>Your project is fully set up</CardDescription>
</CardHeader> </CardHeader>
<CardContent> <CardContent className="flex-1 min-h-0 overflow-y-auto">
<div className="flex items-start gap-4 p-4 bg-green-50 rounded-lg border border-green-200"> <div className="flex items-start gap-4 p-4 bg-green-50 rounded-lg border border-green-200">
<div className="h-10 w-10 rounded-lg bg-green-100 border border-green-200 flex items-center justify-center flex-shrink-0"> <div className="h-10 w-10 rounded-lg bg-green-100 border border-green-200 flex items-center justify-center flex-shrink-0">
<CheckCircle2 className="h-5 w-5 text-green-700" /> <CheckCircle2 className="h-5 w-5 text-green-700" />
@@ -234,8 +234,8 @@ export function QuickStart({setupState, isLoading}: QuickStartProps) {
</p> </p>
</div> </div>
</div> </div>
<HelpResources />
</CardContent> </CardContent>
<HelpResources />
</Card> </Card>
); );
} }
@@ -244,14 +244,14 @@ export function QuickStart({setupState, isLoading}: QuickStartProps) {
const visibleSteps = allSteps.slice(0, 3); const visibleSteps = allSteps.slice(0, 3);
return ( return (
<Card> <Card className="flex flex-col h-full">
<CardHeader> <CardHeader>
<CardTitle>Quick Start</CardTitle> <CardTitle>Quick Start</CardTitle>
<CardDescription> <CardDescription>
{visibleSteps.length === 0 ? 'Your project is set up' : 'Get started with Plunk in minutes'} {visibleSteps.length === 0 ? 'Your project is set up' : 'Get started with Plunk in minutes'}
</CardDescription> </CardDescription>
</CardHeader> </CardHeader>
<CardContent> <CardContent className="flex-1 min-h-0 overflow-y-auto">
<div className="space-y-3"> <div className="space-y-3">
{visibleSteps.map(step => { {visibleSteps.map(step => {
const Icon = step.icon; const Icon = step.icon;
@@ -281,8 +281,8 @@ export function QuickStart({setupState, isLoading}: QuickStartProps) {
); );
})} })}
</div> </div>
<HelpResources />
</CardContent> </CardContent>
<HelpResources />
</Card> </Card>
); );
} }
+4 -9
View File
@@ -583,15 +583,10 @@ export default function Index() {
</motion.div> </motion.div>
</div> </div>
{/* Quick Start + Recent Activity — 50/50 working area. {/* Quick Start + Recent Activity — 50/50 working area with a fixed
Falls back to full-width Recent Activity when the persistent row height so the layout doesn't reflow as Quick Start steps are
onboarding banner is suppressing Quick Start. completed. Both cards scroll internally. */}
At lg+, Recent Activity is absolutely positioned inside its grid <div className={`grid grid-cols-1 gap-6 ${bannerActive ? '' : 'lg:grid-cols-2 lg:h-[480px]'}`}>
cell so its natural content height does not influence the row
height. The row height is dictated by Quick Start, and Recent
Activity fills that height with the activity list scrolling
inside the card. */}
<div className={`grid grid-cols-1 gap-6 ${bannerActive ? '' : 'lg:grid-cols-2'}`}>
{!bannerActive && <QuickStart setupState={setupState} isLoading={isLoadingSetupState} />} {!bannerActive && <QuickStart setupState={setupState} isLoading={isLoadingSetupState} />}
<div className={!bannerActive ? 'lg:relative' : ''}> <div className={!bannerActive ? 'lg:relative' : ''}>