# Dashboard Quick & Medium Improvements

> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** Improve reliability, performance, and code quality of the HiHala Dashboard.

**Architecture:** Focused improvements across data layer (timeout, retry), UI (error handling, loading skeletons, code splitting), config (VAT rate), and DX (TypeScript strict, dead code removal).

**Tech Stack:** React 19, Vite 7, TypeScript 5, Chart.js

---

### Task 1: Fetch Timeout + Retry Logic

**Files:**
- Modify: `src/services/dataService.ts`

- [ ] Add `fetchWithTimeout` wrapper (10s timeout) around all fetch calls
- [ ] Add retry with exponential backoff (3 attempts, 1s/2s/4s) to `fetchNocoDBTable` and `discoverTableIds`
- [ ] Commit

### Task 2: Friendly Error Handling

**Files:**
- Modify: `src/App.tsx` (error display)
- Modify: `src/services/dataService.ts` (error classification)

- [ ] Add error classification in dataService (network, auth, config, unknown)
- [ ] Replace raw error message in App.tsx with user-friendly messages using i18n keys
- [ ] Add error keys to `src/locales/en.json` and `src/locales/ar.json`
- [ ] Commit

### Task 3: Remove Dead Code

**Files:**
- Delete: `src/hooks/useUrlState.ts`
- Delete: `src/services/sallaService.ts`

- [ ] Delete unused files
- [ ] Verify no imports reference them
- [ ] Commit

### Task 4: Route-Based Code Splitting

**Files:**
- Modify: `src/App.tsx`

- [ ] Lazy-load Dashboard, Comparison, Slides with `React.lazy` + `Suspense`
- [ ] Commit

### Task 5: Loading Skeletons

**Files:**
- Create: `src/components/shared/LoadingSkeleton.tsx`
- Modify: `src/App.tsx` (replace spinner with skeleton)
- Modify: `src/App.css` (skeleton styles)

- [ ] Create skeleton component (stat cards + chart placeholders)
- [ ] Use as Suspense fallback and initial loading state
- [ ] Commit

### Task 6: VAT Rate from Config

**Files:**
- Modify: `src/services/dataService.ts`

- [ ] Extract VAT_RATE to a named constant at top of file
- [ ] Commit

### Task 7: TypeScript Strict Mode

**Files:**
- Modify: `tsconfig.json`
- Modify: various files as needed to fix type errors

- [ ] Enable `strict: true`, `noImplicitAny: true`, `strictNullChecks: true`
- [ ] Fix all resulting type errors
- [ ] Verify build passes
- [ ] Commit
