# Refactor Report Generated from `plans/rule-ai.md`. ## Canonical Reference Primary canonical feature: `training-records` Why: - Uses Route Handlers plus Drizzle. - Has feature API contracts, services, queries, and mutations. - Uses server prefetch and TanStack Query hydration. - Uses DataTable, DataTableToolbar, DataTablePagination, and row action menus. - Uses TanStack Form plus Zod. - Includes upload and review flows. - Enforces role-aware behavior. Secondary references: - `employee-directory` for responsive table tuning and custom toolbar behavior. - `announcements` for content publishing and lightweight state transitions. - `audit-logs` for read-only table pattern. ## Findings ### Announcements Status: partially off-pattern. Findings: - Uses manual `Pagination` rather than `DataTablePagination`. - Uses card list layout, which may be acceptable for content feeds but should not be copied for data tables. Recommended refactor: - Keep card layout if announcements are intentionally content-first. - If a management table is needed, add a DataTable-based management view instead of extending manual pagination. ### Notifications Status: partially off-pattern. Findings: - Uses manual pagination in `notifications-page.tsx`. - Should be reviewed if notifications become a true data-management table. Recommended refactor: - Convert to DataTable if filtering, sorting, view options, or admin review workflows grow. ### Online Lessons Status: actively migrating. Findings: - Has a full feature module with API, service, queries, mutations, schema, server helper, form, list/detail pages. - Recent table work should stay aligned to `DataTable` and `useDataTable`. - Manage/list routes should avoid duplicated table implementations. Recommended refactor: - Keep only one canonical list table implementation. - Remove or redirect legacy manage listing code after confirming no route depends on it. ### Employee Directory Status: mostly aligned. Findings: - Uses DataTable and custom toolbar. - Good reference for responsive table widths and hidden columns. - No schema folder because it is currently backed by `users` and server data helpers rather than a new entity schema. Recommended refactor: - Keep as secondary canonical table reference. ### Products, Employees, Forms, Kanban, Chat, React Query Demo Status: legacy/template/demo areas. Findings: - Some files still reflect starter-template patterns. - Products and employees include older table/form conventions. - Demo pages should not be copied for runtime features. Recommended refactor: - Do not use these as references for new features. - Migrate only when a user-facing requirement touches the feature. ### Reports Status: feature-specific dashboard view. Findings: - Uses custom report page and chart/table cards. - Lint currently reports unused imports and nested component warnings in reports. Recommended refactor: - Clean unused report imports. - Extract nested render components if reports are touched again. ### Shared Table Stack Status: canonical. Findings: - `components/ui/table/data-table.tsx` is the canonical shell. - `data-table-pagination.tsx` owns pagination UI. - `data-table-toolbar.tsx` owns generic filter and view controls. Recommended refactor: - New tables should not create manual pagination. - Feature-specific toolbars may wrap shared DataTable controls, but should not replace them wholesale. ### Forms Status: canonical stack is clear. Findings: - Project uses TanStack Form, not React Hook Form. - `components/ui/tanstack-form.tsx` is the shared entry point. Recommended refactor: - Do not introduce React Hook Form. - Keep validation schemas in feature `schemas/`. ### Persistence And Server Actions Status: canonical stack is clear. Findings: - Project uses Drizzle, not Prisma. - Project uses Route Handlers, not `next-safe-action`, for runtime feature mutations. Recommended refactor: - Do not introduce Prisma. - Do not introduce next-safe-action without an explicit architecture decision. ## Refactor Queue 1. Verify `online-lessons` has a single DataTable implementation and remove duplicated manage table code if no longer used. 2. Convert admin-heavy manual pagination screens to DataTable when they become data-management views. 3. Clean report warnings the next time report code is touched. 4. Keep legacy template features isolated and do not copy their patterns. ## Stop Rule Before refactoring broad areas, ask for approval with a scoped plan. Documentation changes and narrow consistency fixes may proceed directly when requested.