Loading...
Loading...
Run /check-onboarding, then fix the highest priority onboarding issue. Creates one fix per invocation. Invoke again for next issue. Use /log-onboarding-issues to create issues without fixing.
npx skill4agent add phrazzld/claude-config fix-onboarding/check-onboarding/check-onboardingapp/onboarding/page.tsxexport default function OnboardingPage() {
return (
<div className="min-h-screen flex items-center justify-center">
<div className="max-w-md text-center">
<h1 className="text-3xl font-bold mb-4">Welcome! 👋</h1>
<p className="text-gray-600 mb-8">
Let's get you started with your first [thing].
</p>
<a
href="/create"
className="bg-primary text-white px-6 py-3 rounded-lg"
>
Create your first [thing]
</a>
</div>
</div>
);
}// middleware.ts or layout check
const isNewUser = !user.hasCompletedOnboarding;
if (isNewUser) redirect('/onboarding');components/empty-state.tsxexport function EmptyState({
title,
description,
action,
actionHref,
}: {
title: string;
description: string;
action: string;
actionHref: string;
}) {
return (
<div className="text-center py-12">
<div className="text-6xl mb-4">📭</div>
<h3 className="text-xl font-semibold mb-2">{title}</h3>
<p className="text-gray-600 mb-6">{description}</p>
<a href={actionHref} className="bg-primary text-white px-4 py-2 rounded">
{action}
</a>
</div>
);
}{items.length === 0 ? (
<EmptyState
title="No projects yet"
description="Create your first project to get started"
action="Create Project"
actionHref="/projects/new"
/>
) : (
<ItemsList items={items} />
)}<div className="bg-blue-50 border border-blue-200 rounded-lg p-4 mb-4">
<p className="text-blue-800">
💡 <strong>Quick tip:</strong> Start by creating your first project.
It only takes 30 seconds!
</p>
</div>// Before: 10 required fields
// After: 2 required fields + "You can add more details later"
<form>
<input name="name" required placeholder="Project name" />
<button type="submit">Create</button>
<p className="text-sm text-gray-500">
You can add more details later
</p>
</form>export function Skeleton({ className }: { className?: string }) {
return (
<div className={`animate-pulse bg-gray-200 rounded ${className}`} />
);
}
// Usage
{isLoading ? (
<div className="space-y-4">
<Skeleton className="h-8 w-full" />
<Skeleton className="h-8 w-full" />
<Skeleton className="h-8 w-full" />
</div>
) : (
<ItemsList items={items} />
)}# New user gets onboarding
# Test: Create new account, verify redirect
# Empty state shows
# Test: Clear user data, check list renders empty state
# Loading state shows
# Test: Throttle network, verify skeleton visibleFixed: [P0] No onboarding flow
Created:
- app/onboarding/page.tsx (welcome screen)
- middleware.ts update (new user redirect)
- components/onboarding-complete-button.tsx
Flow:
1. New user signs up
2. Redirected to /onboarding
3. Single CTA to first action
4. Marked complete on first creation
Next highest priority: [P1] No empty states
Run /fix-onboarding again to continue.git checkout -b feat/onboarding-$(date +%Y%m%d)/fix-onboarding/check-onboarding/log-onboarding-issues/cro