# V1 → V2 Feature Gap (updated 2026-07-08) spq-v2 (React/Vite SPA) covers ~90% of v1's feature set after the mass port on 2026-06-26. ## What v2 has (all pages render) | Screen | File | Status | |--------|------|--------| | Login | `src/pages/Login.tsx` | Working | | Dashboard | `src/pages/Dashboard.tsx` | Working (use sort=-id, not -created) | | Quote Generator | `src/pages/QuoteGenerator.tsx` | Working — AI Write, Generate Priorities, AI Suggest, Quick Parts, Customer Decision, Tech Notes, Aftermarket Parts editor, Delivery Time editor, full legacy-accurate PDF with parts flags in output | | Customers | `src/pages/Customers.tsx` | Working (graceful when vehicles collection missing) | | Repair Orders | `src/pages/RepairOrders.tsx` | Working — uses repairOrders (NOT repair_orders) | | Appointments | `src/pages/Appointments.tsx` | Working — includes Scan Screenshot (Tesseract OCR + DeepSeek extraction) | | Financial Dashboard | `src/pages/FinancialDashboard.tsx` | Working — uses repairOrders collection (READ-ONLY: no editable financial summary modal) | | Invoices | `src/pages/Invoices.tsx` | Shows setup banner (invoices collection missing) | | Settings | `src/pages/Settings.tsx` | Working — 8 tabs (Business Info, Service Advisors, Tax & Fees, Quote Defaults, PDF & Branding, Business Ops, Service Catalog, Notifications), shows setup banner on Service Advisors tab | | PDF-to-Images Export | `src/lib/pdf-to-images.ts` | New — extracts each PDF page as a PNG download | | Dashboard (updated) | `src/pages/Dashboard.tsx` | Recent quotes now a custom dropdown with live search | ## AI Features (all in v2) | Feature | Code | Endpoint | |---------|------|----------| | AI Write | `src/lib/ai.ts:aiWriteExplanation()` | `/deepseek/v1/chat/completions` → `api.deepseek.com` | | Generate Priorities | `src/lib/ai.ts:getPriorityAnalysis()` | Same endpoint | | AI Suggest Services | `src/lib/ai.ts:aiSuggestServices()` | Same endpoint | | Scan Screenshot | `Appointments.tsx` inline | Tesseract.js OCR + DeepSeek extraction | All use model: deepseek-v4-flash with thinking: disabled, temperature: 0. API key in `/etc/nginx/sites-enabled/shopproquote`. ## What v1 has that v2 still lacks | Feature | v1 Files | Notes | |---------|----------|-------| | Auto-save drafts | `auto-save-draft.js` | Auto-save form state to localStorage | | Customer Lookup (quick find) | `customer-lookup.js` | Quick search popup separate from full customer page | | Active ROs quick view | `ro-active.js` | Compact active RO overview widget | | Appointment Import | `appointment-import.js` | CSV bulk import | | **Financial Summary / Complete RO modal** | `repair-orders.html:857`, `repair-orders.js:2016+` | Editable CP total/cost + Warranty total/cost inputs with live gross-profit; auto-deducts warranty from CP. **Not ported to v2** — `FinancialDashboard.tsx` only reads the saved blob. See `references/financial-summary-modal.md` | The Financial Summary modal is a significant missing editing surface (not a minor utility). Completing an RO in v1 prompts for CP/Warranty total/cost; v2 has no equivalent input flow. ## PocketBase collections needed | Collection | Created? | Used by | |------------|----------|---------| | `quotes` | Yes | Dashboard, QuoteGenerator | | `customers` | Yes | Customers | | `appointments` | Yes | Appointments | | `services` | Yes | Settings (Service Catalog) | | `settings` | Yes | Settings | | `repair_orders` | **No** | RepairOrders, Financial, Invoices | | `invoices` | **No** | Invoices | | `service_advisors` | **No** | Settings (Advisors tab) | | `vehicles` | **No** | Customers (vehicle sub-records) | Missing collections cause those pages to show error states. Create them via PocketBase admin UI or API to unlock full functionality. ## Architecture - **v1**: Vanilla JS ES modules, Tailwind CSS via CDN, PocketBase SDK via CDN. No build step. Each page is a standalone HTML file. - **v2**: React 19 + TypeScript + Vite + PocketBase SDK (npm). React Router SPA routing. Lazy-loaded code splitting. Tailwind via PostCSS.