A first-run dashboard: welcome copy, a setup checklist whose progress counts done separately from skipped, a labelled skeleton of the filled dashboard, and a confirmed sample-data escape hatch — the block renders nothing once nothing is left to do.
npx shadcn@latest add @zyeon/empty-dashboardZyeon UI limits how often it can be asked, and Empty Dashboard hasn't had its turn. Its source will show here once it has.