# Frontend Bug Fix + Code Quality Implementation Plan > **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:** Fix critical frontend bugs and eliminate code duplication across the Vue 3 web application. **Architecture:** Create shared composables (`useDebounce`, `useFileUtils`, `useFilePreview`) to eliminate duplication across 7+ view files. Fix silent error swallowing, loading state management, and add global error handling. Clean up dead code. **Tech Stack:** Vue 3.4+, TypeScript, Element Plus, Pinia, Vite --- ## File Structure ### New files | File | Responsibility | |------|---------------| | `web/frontend/src/composables/useDebounce.ts` | Debounce utility (replaces 4 duplicate copies) | | `web/frontend/src/composables/useFileUtils.ts` | `statusType`, `statusText`, `fmtTime` (replaces 3 duplicate copies) | | `web/frontend/src/composables/useFilePreview.ts` | Preview dialog state + logic (replaces 3 duplicate copies) | ### Modified files | File | Changes | |------|---------| | `web/frontend/src/main.ts` | Add global error handler | | `web/frontend/src/views/Layout.vue` | Fix fetchUser, dead code, password validation, redundant code | | `web/frontend/src/views/files/Images.vue` | Use composables, fix error handling + loading | | `web/frontend/src/views/files/Tables.vue` | Use composables, fix error handling + loading | | `web/frontend/src/views/files/Orders.vue` | Use composables, fix error handling + loading | | `web/frontend/src/views/Memory.vue` | Fix error handling, use useDebounce, fix stats fallback | | `web/frontend/src/views/Barcodes.vue` | Use useDebounce, remove dead import | | `web/frontend/src/views/Tasks.vue` | Fix error handling, use useDebounce | | `web/frontend/src/views/Logs.vue` | Fix error handling, use useDebounce | | `web/frontend/src/views/Sync.vue` | Fix error handling | | `web/frontend/src/stores/processing.ts` | Remove dead code | | `web/frontend/src/router/index.ts` | Remove dead code | | `web/backend/routers/files.py` | Add batch-delete endpoint | --- ## Task 1: Create useDebounce composable **Files:** - Create: `web/frontend/src/composables/useDebounce.ts` - [ ] **Step 1: Create composables directory and useDebounce** ```typescript // web/frontend/src/composables/useDebounce.ts import { ref } from 'vue' export function useDebounce any>(fn: T, delay = 300) { const timer = ref | null>(null) return (...args: Parameters) => { if (timer.value) clearTimeout(timer.value) timer.value = setTimeout(() => fn(...args), delay) } } ``` - [ ] **Step 2: Update Memory.vue — replace inline useDebounce with import** In `web/frontend/src/views/Memory.vue`, remove lines 166-174 (the inline `useDebounce` function) and add import at the top of `