1. Run Lighthouse and measure Core Web Vitals before writing any optimization code — identify the specific metric that is the bottleneck
2. Check your API call structure first: if your dashboard fetches multiple data sources sequentially, convert to Promise.all — this is typically the highest-impact change for SaaS dashboards
3. For chart libraries: use `dynamic(() => import('./ChartComponent'), { ssr: false, loading: () => <ChartSkeleton /> })` — the ssr:false flag is required for libraries referencing browser APIs, and the loading skeleton prevents CLS
4. Apply 'use client' only to components that actually use useState, useEffect, event handlers, or browser APIs — place it as far toward leaf components as possible