The || operator fallback returned the response wrapper object (truthy but
not an array) when r.data.data was null/undefined, causing .map() crashes.
Use ?? null, ?? [], and Array.isArray() guards instead.
- Add page-level and layout-level error.tsx boundaries for dashboard
- Add loading guard to dashboard page to defer API calls until auth is ready
- Fix Dockerfile to accept NEXT_PUBLIC_API_URL as build arg
- Fix .env.example API URL to include /api suffix
- Add Data Import tab in settings for CSV/Excel import of clients and invoices
- Create import page with template download, drag-drop upload, and row-level results