11 KiB
Implementation Plan - Tilbudgivern System Fixes
Dato: 14. November 2025
Basis: FIX_LISTE_NOV_14.md (1388 linjer, 36 punkter)
Status: Investigation afsluttet ✅ - Klar til implementation
🎯 Executive Summary
Total arbejde identificeret: 45-60 timer
Kritiske issues: 4 (Velux, GraphQL, Ordrestyring, .env)
Allerede implementeret: 5 features (PDF, Auto-save, Sort, History backend, Mobile CSS)
Delvist implementeret: 6 features (Search, Excel, Notifications, Filtering, Analytics, Bulk import)
Mangler helt: 5 features (Dark mode, Keyboard, Bulk ops, API routing fix)
Kræver afklaring: 10 spørgsmål
🚦 PRIORITERET IMPLEMENTATION PLAN
FASE 1: KRITISKE FIXES (Højeste prioritet)
Total estimat: 7-10 timer
Business impact: System stabilitet + core funktionalitet
1.1 GraphQL Pagination Crashes (PM2 30 restarts/82min)
- Prioritet: 🔴 KRITISK
- Estimat: 2-3 timer
- Impact: System ustabilitet - crashes hver 3. minut
- Løsning:
- Grep ALL
graphqlClient.request()calls i unified-server.js (11,548 linjer) - Add pagination validation:
limit: Math.min(limit || 100, 200) - Test GraphQL endpoints: /analytics/kpis, /analytics/cases
- Grep ALL
- Files:
backend/unified-server.js- grep for graphqlClient - Success criteria: PM2 0 restarts i 24 timer
1.2 Velux Produkter Missing (0 i database)
- Prioritet: 🔴 KRITISK
- Estimat: 4-6 timer
- Impact: Kunder kan ikke søge/bestille Velux produkter
- Løsning:
- Option A: Import fra Stark prisbog (CSV/API)
- Option B: Manuel indtastning top 20 Velux SKUs
- Opret supplier_id=52 for Stark
- Import 100-150 Velux vinduer + tilbehør
- Files:
database/materials,backend/src/services/starkImportService.js - TODO: Hvilken kilde er tilgængelig? Stark CSV? API? Manual entry?
1.3 Ordrestyring Integration Error
- Prioritet: 🔴 KRITISK
- Estimat: 1-2 timer
- Impact: "Hent fra Ordrestyring" button fejler
- Løsning:
- Fix line 9490:
ordrestyringService is not defined - Import service eller fix GraphQL query
- Test customer sync fra ordrestyring_local database
- Fix line 9490:
- Files:
backend/unified-server.jsline 9490 - Success criteria: Customer sync fungerer fra UI
1.4 Security: .env Missing (Hardcoded Credentials)
- Prioritet: 🔴 KRITISK (Security)
- Estimat: 30 minutter
- Impact: Credentials exposed i kode (REDACTED_PASSWORD, REDACTED_AUTH)
- Løsning:
- Create
.env.exampletemplate - Document all variables: DB_HOST, DB_USER, DB_PASS, OPENAI_API_KEY, etc.
- Update README with environment setup instructions
- Create
- Files: Create
.env.example, updateREADME.md
FASE 2: QUICK WINS (Lav effort, høj synlighed)
Total estimat: 1-2 timer
Business impact: Hurtig fremgang, brugervenlighedsforbed
ringer
2.1 Fix Port Documentation (3001→3000)
- Estimat: 5 minutter
- Løsning: Update README.md line ~20: Change port 3001 → 3000
- Files:
README.md
2.2 Rename "Projektnavn" → "Navn" (Point 19)
- Estimat: 5-10 minutter
- Løsning: ProjectCreation.js line 489 - rename label
- Files:
frontend/src/components/ProjectCreation.js
2.3 Auto-save Interval (3 sec → 30 sec?)
- Estimat: 15-30 minutter
- Løsning: GeometryInput.js line 475 - change
3000→30000 - Files:
frontend/src/components/GeometryInput.js - TODO: Confirm user wants 30-second auto-save vs 3-second debounce
2.4 API Routing Fix (Catch-all interference)
- Estimat: 1-2 timer
- Løsning: Add API 404 handler BEFORE catch-all at line 11508
- Files:
backend/unified-server.jsline 11508-11514
FASE 3: JANNICKS UI/UX FIXES (15 punkter)
Total estimat: 10-15 timer
Business impact: Brugeroplevelse forbedring
Kræver afklaringer først (~5-7 spørgsmål):
- Point 8 (Beskrivelse): Hvilket beskrivelse-felt skal flyttes? (multiple found)
- Point 10 (Dropdown filter): Hvor skal det være? (ingen lokation)
- Point 6 (Felter skævt): Hvilke specifikke felter? (9 alignment issues found)
- Point 7 (Tilbage-knap): Hvilken side? (18 back buttons exist)
- Point 13 (Kunde edit): CustomerSearch.js line 325-375 exists - bug eller feature?
Kan fixes direkte:
- Point 5: Opgavetype missing - 1 time
- Point 9: Tilbud navn wrapping - 30 min CSS
- Point 11: Sagsnummer display - 1 time
- Point 12: Kategorier fra DB - 2-3 timer
- Point 14: Ordrestyring button - depends on 1.3 fix
- Point 15: Kunde delete removal - 10 min
- Point 19: Projektnavn rename - 5 min (quick win)
FASE 4: FEATURE AKTIVERING (Already implemented)
Total estimat: 3-5 timer
Business impact: Aktivér eksisterende funktionalitet
4.1 Aktiver Notifications (notistack)
- Estimat: 1-2 timer
- Status: Library installeret men ikke brugt
- Løsning:
- Wrap App.js med
<SnackbarProvider> - Create useNotification hook
- Replace alert() calls i 10-15 komponenter
- Wrap App.js med
- Files:
frontend/src/App.js, createfrontend/src/hooks/useNotification.js
4.2 History UI (Backend ready)
- Estimat: 3-4 timer
- Status: Database + API endpoints exists
- Løsning:
- Create PriceHistory.js component
- Install recharts for timeline visualization
- Add "📊 Se Prishistorik" button i MaterialsList
- Files: Create
frontend/src/components/PriceHistory.js
FASE 5: FEATURE FORBEDRINGER
Total estimat: 10-15 timer
Business impact: Performance + usability
5.1 Search Optimization (FULLTEXT indexes)
- Estimat: 2-3 timer
- Impact: 10-100x faster search
- Løsning:
- Add MySQL FULLTEXT indexes på materials, customers, projects
- Update LIKE queries → MATCH AGAINST
- Create migration file
- Files: New migration,
backend/unified-server.jssearch endpoints
5.2 Excel Import (XLSX parser)
- Estimat: 2-3 timer
- Status: CSV works, XLSX missing
- Løsning:
- Install
xlsxlibrary - Create /api/pricing/excel-import endpoint
- Add UI button "📊 Importer Excel"
- Create template file
- Install
- Files:
backend/src/routes/uploads.js,MaterialsList.js
5.3 Mobile Testing
- Estimat: 2-3 timer
- Status: Responsive CSS exists
- Løsning:
- Test on actual devices (iPhone, Android, iPad)
- Chrome DevTools mobile simulation
- Fix touch targets, text sizes, scroll issues
- Files: Various CSS files
5.4 Dropdown Sort Standardization
- Estimat: 1-2 timer
- Status: Partial - ProjectCreation done, others missing UI
- Løsning:
- Add sortBy dropdown to MaterialsList, PlanningDashboard
- Standardize sort options: Navn, Dato, Pris, Kategori
- Files:
MaterialsList.js,PlanningDashboard.js
FASE 6: NYE FEATURES (Not implemented)
Total estimat: 15-25 timer
Business impact: New capabilities
6.1 Bulk Operations
- Estimat: 3-4 timer
- Løsning:
- Multi-select checkboxes i CompletedQuotes, MaterialsList
- Bulk actions: Archive, Export, Delete
- Backend bulk endpoints
- Files:
CompletedQuotes.js,MaterialsList.js,unified-server.js
6.2 Advanced Filtering
- Estimat: 2-3 timer
- Løsning:
- Date range picker
- Price range sliders
- Customer search filter
- Created by filter
- Files:
CompletedQuotes.jsadd filter panel
6.3 Analytics Expansion
- Estimat: 4-5 timer
- Løsning:
- Install recharts
- Add 4-5 charts (line, bar, pie, area)
- Date range selector
- Export to PDF
- Files:
AnalyticsDashboard.js,frontend/package.json
6.4 Dark Mode
- Estimat: 2-3 timer
- Løsning:
- Create theme.js with light/dark themes
- Add ThemeProvider + toggle button
- Update CSS to use theme variables
- Files: Create
frontend/src/theme.js, updateApp.js
6.5 Keyboard Shortcuts
- Estimat: 1-2 timer
- Løsning:
- Create useKeyboardShortcuts hook
- Add Ctrl+S (save), Ctrl+N (new), Ctrl+F (search), Escape (cancel)
- Shortcut help dialog (press ?)
- Files: Create
frontend/src/hooks/useKeyboardShortcuts.js
FASE 7: DATA INTEGRITY
Total estimat: 5-10 timer
Business impact: Data quality + completeness
7.1 Fix Missing Prices (18/62 materials = 29%)
- Estimat: Varies (1-4 timer)
- Options:
- A: Bygma re-import (2-3 timer)
- B: Manual price UI (3-4 timer)
- C: Default averages (1-2 timer)
- TODO: Hvilken approach?
7.2 Bulk Material Import (62 → 500+)
- Estimat: Varies (1-6 timer)
- Options:
- Bygma Prof prisbog: 1-2 timer (re-run existing import)
- Stark import: 4-6 timer (create new parser)
- Excel template: 2-3 timer (use Point 5.2 solution)
- TODO: Prioritize sources?
❓ CLARIFICATION QUESTIONS (10 total)
- Velux import: Stark CSV tilgængelig? API? Manual entry acceptable?
- Auto-save: 3 sekunder debounce eller 30 sekunder periodic?
- Beskrivelse felt: Hvilket specifikt felt skal flyttes?
- Dropdown filter: Hvor skal det være? (ingen lokation i Jannicks email)
- Felter alignment: Hvilke specifikke felter er problemet?
- Tilbage-knap: Hvilken side mangler den? (18 exists)
- Complexity removal: Hvorfor fjerne? Bruges i cost calculations
- Missing prices: Bygma import? Manual UI? Default averages?
- Bulk import: Prioriter Bygma, Stark, eller Excel?
- Feature priority: Dark mode, keyboard, bulk ops - hvilke først?
📊 ANBEFALEDE PRIORITERING
ANBEFALING 1: START MED STABILITET
Uge 1 (7-10 timer):
- ✅ GraphQL pagination fix (2-3h) - Stop crashes
- ✅ Ordrestyring integration (1-2h) - Fix critical button
- ✅ .env security (30min) - Security best practice
- ✅ Quick wins (1-2h) - Show progress
ANBEFALING 2: DEREFTER VELUX + UI
Uge 2 (10-15 timer):
- ✅ Velux import (4-6h) - Critical user need
- ✅ Afklar Jannicks 5-7 spørgsmål
- ✅ Fix top 5 UI issues (5-8h)
ANBEFALING 3: AKTIVÉR FEATURES
Uge 3 (8-12 timer):
- ✅ Notifications aktivering (1-2h)
- ✅ Search optimization (2-3h)
- ✅ Excel import (2-3h)
- ✅ Mobile testing (2-3h)
- ✅ History UI (3-4h)
ANBEFALING 4: NYE FEATURES (Optional)
Uge 4+ (15-25 timer):
- Advanced filtering (2-3h)
- Bulk operations (3-4h)
- Analytics expansion (4-5h)
- Dark mode (2-3h)
- Keyboard shortcuts (1-2h)
- Bulk material import (varies)
🎯 SUCCESS METRICS
System Stabilitet:
- ✅ PM2 zero restarts i 24 timer
- ✅ Alle critical endpoints returnerer JSON (ikke HTML)
- ✅ No hardcoded credentials
User Experience:
- ✅ Velux search returns results
- ✅ "Hent fra Ordrestyring" button works
- ✅ Notifications vises for alle actions
- ✅ Mobile responsive tested på 3+ devices
Data Quality:
- ✅ 100% materials har priser (0% missing)
- ✅ 500+ materials i database (fra 62)
- ✅ Price history synlig i UI
Performance:
- ✅ Search responds <1 sekund (fra 3-5 sek med LIKE)
- ✅ FULLTEXT indexes på 3 tables
- ✅ GraphQL queries validated
📝 NEXT STEPS
- Review denne plan med bruger/stakeholders
- Besvar 10 clarification questions
- Godkend prioritering (følg anbefaling eller tilpas)
- Start FASE 1 (Kritiske fixes - 7-10 timer)
- Daily progress updates via FIX_LISTE_NOV_14.md
Ready to start? 🚀