ca8eb008d6dec7fedb1e2f10e696cfb6b61c0aa3
fix: retain server rental baseline after save
Tilbudgivern - AI-baseret Tilbudsberegner
En AI-drevet tilbudsberegner for tømrerfaget, der hjælper med at generere detaljerede og professionelle tilbud baseret på projektbeskrivelser.
Funktioner
- AI-genererede tilbud: Bruger OpenAI GPT-4 til at generere detaljerede tilbud
- Smart Pakker: 15 forudkonfigurerede tømrerpakker til tagarbejde med auto-beregning
- 7 Tagtyper: Sadeltag, Valmtag, Københavnertag, Fladtag, Pulttag, Tag med Kviste, Mansardtag
- Ordrestyring Integration: GraphQL integration til kunder, sager, tilbud og kalender
- Materialeimport: Bygma prisbog og Stark katalog import
- PDF Generering: Professionelle tilbuds-PDF'er via Puppeteer
- Real-time Updates: Socket.IO til live samarbejde
- Struktureret Logging: JSON logs med correlation IDs
Teknologi Stack
| Lag | Teknologi |
|---|---|
| Frontend | React 18, Material-UI 5, Socket.IO Client |
| Backend | Node.js/Express (unified server) |
| Database | MariaDB/MySQL |
| AI | OpenAI GPT-4 API ($9/måned budget) |
| Process Manager | PM2 |
| Test | Playwright, Jest, Selenium |
Forudsætninger
- Node.js 18+
- MariaDB/MySQL database
- OpenAI API nøgle
Quick Start
1. Installer afhængigheder
npm install
cd backend && npm install
cd ../frontend && npm install
2. Konfigurer environment
Opret backend/.env:
# Database
DB_HOST=127.0.0.1
DB_USER=tilbuduser
DB_PASSWORD=din-password
DB_NAME=tilbudgivern
DB_PORT=3306
# AI
OPENAI_API_KEY=<OPENAI_API_KEY>
# Server
PORT=4032
# Valgfri
ORDRESTYRING_API_TOKEN=din-ordrestyring-token
3. Start applikationen
Development:
npm run dev
Production:
npm run build # Byg frontend
pm2 start ecosystem.config.js
Applikationen kører på http://localhost:4032
Kommandoer
Development
npm run dev # Start med hot reload
npm run build # Byg frontend til produktion
Production
pm2 restart tilbudgivern-unified # Genstart server
pm2 logs tilbudgivern-unified # Se logs
pm2 status # Check status
Test
npm run test:pw # Playwright E2E tests (produktion)
npm run test:pw:local # Playwright tests (lokal)
npm run test:pw:headed # Playwright med synlig browser
cd backend && npm test # Backend unit tests (Jest)
npm run test:selenium # Selenium UI tests
Arkitektur
Unified Server Pattern
Applikationen bruger en unified server (backend/unified-server.js) der:
- Serverer React frontend fra
frontend/build/ - Leverer alle API endpoints på port 4032
- Håndterer WebSocket via Socket.IO
Backend Services (40+)
backend/src/services/
├── openaiService.js # GPT-4 tilbudsgenerering
├── smartPackageManagementService.js # Smart pakke håndtering
├── ordrestyringSyncService.js # Ordrestyring integration
├── roofGeometryService.js # Tagberegninger
├── pdfGenerationService.js # PDF generering
├── bygmaPrisbogImportService.js # Bygma import
├── starkImportService.js # Stark import
└── ...
Frontend Components
frontend/src/components/
├── ProjectFlow.js # Projekt wizard
├── EnhancedGeometry.js # Tag geometri med SVG
├── SmartPackagesEnhanced.js # Smart pakke konfiguration
├── FinalReview.js # Tilbuds review
├── MaterialsManager.js # Materiale valg
└── ...
Projektstruktur
tilbudgivern/
├── backend/
│ ├── unified-server.js # Hoved server (~12,700 LOC)
│ ├── src/
│ │ ├── services/ # 40+ services
│ │ ├── routes/ # API routes
│ │ ├── middleware/ # Express middleware
│ │ └── graphql/ # Ordrestyring queries
│ └── migrations/ # Database migrations
├── frontend/
│ ├── src/
│ │ ├── components/ # 57+ React komponenter
│ │ ├── contexts/ # Auth context
│ │ └── services/ # Frontend services
│ └── build/ # Produktion build
├── database/ # Schema og seeds
├── tests/ # Playwright & Selenium tests
├── docs/ # Dokumentation
└── ecosystem.config.js # PM2 konfiguration
API Endpoints
Tilbud
POST /api/quotes/generate # Generer tilbud
POST /api/quotes/generate-ai # AI-drevet generering
GET /api/quotes/completed # Liste fuldførte tilbud
POST /api/quotes/:id/accept # Accepter tilbud
DELETE /api/quotes/:id # Slet tilbud
Smart Pakker
GET /api/smart-packages/ # Liste alle pakker
POST /api/smart-packages/ # Opret pakke
GET /api/smart-packages/:id # Hent specifik pakke
PUT /api/smart-packages/:id # Opdater pakke
Projekter
POST /api/projects # Opret projekt
GET /api/projects # Liste projekter
GET /api/projects/:id # Hent projekt
PUT /api/projects/:id # Opdater projekt
Materialer & Priser
GET /api/materials # Liste materialer
GET /api/materials/search # Søg materialer
POST /api/pricing/bygma-prisbog # Import Bygma prisbog
GET /api/pricing/bygma-prices # Hent Bygma priser
Analytics
GET /api/analytics/kpis # Key performance indicators
GET /api/dashboard/noegletal # Nøgletal dashboard
GET /api/dashboard/economics # Økonomisk overblik
Database
Primære Tabeller
| Tabel | Beskrivelse |
|---|---|
project_quotes |
Genererede tilbud |
customer_projects |
Projekt metadata |
roof_geometry |
Tag dimensioner og typer |
material_packages |
Smart pakke definitioner |
smart_package_tasks |
Opgaver i pakker |
project_materials |
Materiale valg |
project_labor |
Arbejdstimer |
system_logs |
Struktureret logging |
Eksterne Integrationer
Ordrestyring API
- GraphQL endpoint til ordre/kundestyring
- Synkronisering af kunder, sager og tilbud
- Kalender integration
OpenAI API
- GPT-4 til intelligent tilbudsgenerering
- Token tracking og budget overvågning
- $9/måned budget (~160K tokens)
Bygma & Stark
- Materiale prisbog import
- Katalog synkronisering
Tagtyper (7 understøttede)
- Sadeltag - Standard sadeltag (default)
- Valmtag - Fire-sidet tag
- Københavnertag - Fladt tag med hældning
- Fladtag - Helt fladt tag
- Pulttag - Ensidigt skrå tag
- Tag med Kviste - Tag med kviste
- Mansardtag - Mansard stil
Sikkerhed
- Rate limiting på API endpoints
- Input validering med Joi
- Helmet.js sikkerhedsheaders
- JWT authentication
- Parameteriserede SQL queries
- CORS konfiguration
Dokumentation
Se /docs/ mappen for detaljeret dokumentation:
Support
Ved spørgsmål eller problemer, opret et issue i projektets GitHub repository.
Licens
MIT License - se LICENSE fil for detaljer.
Description
Languages
JavaScript
74.9%
Shell
12.7%
CSS
6%
Python
5.2%
HTML
1%
Other
0.2%