Merge pull request #3 from alexpolo1/claude/create-branch-Hy5jt

docs: Update README with current architecture and tech stack
This commit is contained in:
Alex
2026-01-25 09:47:43 +01:00
committed by GitHub
2 changed files with 324 additions and 356 deletions
+205 -164
View File
@@ -2,220 +2,261 @@
En AI-drevet tilbudsberegner for tømrerfaget, der hjælper med at generere detaljerede og professionelle tilbud baseret på projektbeskrivelser.
## 🚀 Funktioner
## Funktioner
- **AI-genererede tilbud**: Bruger OpenAI GPT-4 til at generere detaljerede tilbud
- **Interaktiv feedback**: Mulighed for at justere tilbud baseret på feedback
- **Prisdatabase**: Indbygget database med erfaringspriser for tømrerarbejde
- **Responsivt design**: Fungerer på desktop og mobil
- **Audit trail**: Gemmer alle tilbud og feedback for analyse
- **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
## Teknologi Stack
- **Frontend**: React med Material-UI
- **Backend**: Node.js med Express
- **Database**: PostgreSQL
- **AI**: OpenAI GPT-4 API
- **Containerization**: Docker
| 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
## Forudsætninger
- Node.js 18+
- Docker og Docker Compose
- MariaDB/MySQL database
- OpenAI API nøgle
## 🏃‍♂️ Quick Start
## Quick Start
### 1. Klon projektet
\`\`\`bash
cd /home/alex/git/tilbudgivern
\`\`\`
### 2. Installer afhængigheder
\`\`\`bash
# Root projekt
### 1. Installer afhængigheder
```bash
npm install
cd backend && npm install
cd ../frontend && npm install
```
# Backend
cd backend
npm install
### 2. Konfigurer environment
Opret `backend/.env`:
```env
# Database
DB_HOST=127.0.0.1
DB_USER=tilbuduser
DB_PASSWORD=din-password
DB_NAME=tilbudgivern
DB_PORT=3306
# Frontend
cd ../frontend
npm install
cd ..
\`\`\`
# AI
OPENAI_API_KEY=sk-din-openai-api-noegle
### 3. Start database
\`\`\`bash
docker-compose up -d
\`\`\`
# Server
PORT=4032
### 4. Konfigurer environment
Rediger \`backend/.env\` og tilføj din OpenAI API nøgle:
\`\`\`
OPENAI_API_KEY=sk-your-actual-openai-api-key-here
\`\`\`
# Valgfri
ORDRESTYRING_API_TOKEN=din-ordrestyring-token
```
### 5. Start applikationen
\`\`\`bash
### 3. Start applikationen
**Development:**
```bash
npm run dev
\`\`\`
Dette starter både backend (port 3000) og frontend (React development).
## ⚡ Deployment Scripts
For hurtig udvikling er der lavet praktiske deployment scripts i roden:
### Fuld Test & Deploy (`./test-build-deploy.sh`)
Kører komplet test, build og deployment med fejlhåndtering:
```bash
./test-build-deploy.sh
```
Scriptet gør følgende:
- ✅ Tester backend syntax og database forbindelse
- 🏗️ Bygger frontend med fejltjek
- 🔄 Genstarter PM2 server
- 📊 Viser status og eventuelle fejl
### Quick Deploy (`./quick-deploy.sh`)
Hurtig version til små ændringer:
**Production:**
```bash
./quick-deploy.sh
npm run build # Byg frontend
pm2 start ecosystem.config.js
```
**Tip:** Brug altid disse scripts efter kode-ændringer - de sikrer at alt fungerer korrekt!
Applikationen kører på **http://localhost:4032**
## 🧪 Test Applikationen
## Kommandoer
### Uden OpenAI API nøgle (lokal test):
1. Åbn browser på http://localhost:3000
2. Udfyld projektbeskrivelse, f.eks.: "Lægning af 25 m² klikgulv i stue og gang"
3. Vælg projekttype og areal
4. Klik "Generer tilbud"
5. Du vil få en fejl om OpenAI API nøgle - dette er forventet
### Med gyldig OpenAI API nøgle:
1. Tilføj din rigtige OpenAI API nøgle i `backend/.env`:
```
OPENAI_API_KEY=sk-din-rigtige-api-noegle-her
```
2. Genstart serveren med `npm run dev`
3. Test tilbudsgenerering med rigtige AI-svar
4. Test feedback funktionen ved at justere tilbuddet
### Test backend API direkte:
### Development
```bash
# Health check
curl http://localhost:3001/health
# Se prisdata for gulv
curl http://localhost:3001/api/quotes/prices/gulv
# Kør automatiske tests
cd backend && npm test
npm run dev # Start med hot reload
npm run build # Byg frontend til produktion
```
## ✅ Status
### Production
```bash
pm2 restart tilbudgivern-unified # Genstart server
pm2 logs tilbudgivern-unified # Se logs
pm2 status # Check status
```
Applikationen er **fuldt funktionel** og klar til brug:
### Test
```bash
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
```
- ✅ Backend server kører på port 3001
- ✅ Frontend React app kører på port 3000
- ✅ PostgreSQL database er forbundet og initialiseret
- ✅ Prisdatabase er populeret med tømrer-erfaringspriser
- ✅ API endpoints virker korrekt
- ✅ Frontend kommunikerer med backend
- ✅ Rate limiting og sikkerhed implementeret
- ✅ Error handling og logging funktionerer
- ✅ Database audit trail gemmer alle tilbud og feedback
- 🔑 **Kræver kun gyldig OpenAI API nøgle for AI-funktionalitet**
## Arkitektur
### Test Gennemført:
- Database initialisering ✅
- API endpoints ✅
- Frontend-backend kommunikation ✅
- Formularer og validering ✅
- Error handling ✅
- Logging ✅
- Rate limiting ✅
### 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
## 📁 Projektstruktur
### 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/ # Node.js backend
├── backend/
│ ├── unified-server.js # Hoved server (~12,700 LOC)
│ ├── src/
│ │ ├── routes/ # API routes
│ │ ├── services/ # Business logic
│ │ ├── middleware/ # Express middleware
│ │ └── utils/ # Utilities
│ └── package.json
├── frontend/ # React frontend
│ │ ├── services/ # 40+ services
│ │ ├── routes/ # API routes
│ │ ├── middleware/ # Express middleware
│ │ └── graphql/ # Ordrestyring queries
│ └── migrations/ # Database migrations
├── frontend/
│ ├── src/
│ │ ├── App.js # Main app component
│ │ └── index.css # Styling
│ └── package.json
├── infra/ # Infrastructure kode (fremtidig Azure deployment)
├── docker-compose.yml # Database setup
└── package.json # Root projekt
\`\`\`
│ │ ├── 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
## API Endpoints
- \`POST /api/quotes/generate\` - Generer nyt tilbud
- \`POST /api/quotes/feedback\` - Submit feedback og få justeret tilbud
- \`GET /api/quotes/:id\` - Hent specifikt tilbud
- \`GET /api/quotes/prices/:category\` - Hent prisdata
- \`GET /health\` - Health check
### 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
```
## 🗄 Database Schema
### 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
```
### Prices Table
Indeholder erfaringspriser for forskellige typer tømrerarbejde.
### Projekter
```
POST /api/projects # Opret projekt
GET /api/projects # Liste projekter
GET /api/projects/:id # Hent projekt
PUT /api/projects/:id # Opdater projekt
```
### Quotes Table
Gemmer alle genererede tilbud med metadata.
### 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
```
### Quote Feedback Table
Gemmer feedback og justerede tilbud.
### Analytics
```
GET /api/analytics/kpis # Key performance indicators
GET /api/dashboard/noegletal # Nøgletal dashboard
GET /api/dashboard/economics # Økonomisk overblik
```
## 🔒 Sikkerhed
## 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)
1. **Sadeltag** - Standard sadeltag (default)
2. **Valmtag** - Fire-sidet tag
3. **Københavnertag** - Fladt tag med hældning
4. **Fladtag** - Helt fladt tag
5. **Pulttag** - Ensidigt skrå tag
6. **Tag med Kviste** - Tag med kviste
7. **Mansardtag** - Mansard stil
## Sikkerhed
- Rate limiting på API endpoints
- Input validering med Joi
- Helmet.js sikkerhedsheaders
- JWT authentication
- Parameteriserede SQL queries
- CORS konfiguration
- Environment variabel protection
## 🚀 Deployment til Azure
## Dokumentation
Infrastructure koden til Azure deployment findes i \`infra/\` mappen og vil blive udviklet i næste fase.
Se `/docs/` mappen for detaljeret dokumentation:
- [API Dokumentation](docs/api/)
- [Feature Guides](docs/features/)
- [Deployment Guide](docs/deployment/)
- [Logging System](docs/LOGGING_SYSTEM.md)
Planlagte Azure services:
- Azure App Service (frontend + backend)
- Azure Database for PostgreSQL
- Azure OpenAI Service
- Azure Application Insights
## 🤝 Bidrag
1. Fork projektet
2. Opret feature branch
3. Commit ændringer
4. Push til branch
5. Opret Pull Request
## 📄 Licens
MIT License - se LICENSE fil for detaljer.
## 📞 Support
## Support
Ved spørgsmål eller problemer, opret et issue i projektets GitHub repository.
## Active Focus & Copilot Memory
- Se [COPILOT_MEMORY.md](COPILOT_MEMORY.md) for en kort, opdateret oversigt over hvad vi arbejder på lige nu.
- I Copilot Chat: start med “@workspace brug COPILOT_MEMORY.md som kontekst” og henvis til den i dine spørgsmål for mere relevante svar.
## Licens
MIT License - se LICENSE fil for detaljer.
+119 -192
View File
@@ -1,217 +1,144 @@
# Tilbudgivern - AI-baseret Tilbudsberegner
# Tilbudgivern Dokumentation
En AI-drevet tilbudsberegner for tømrerfaget, der hjælper med at generere detaljerede og professionelle tilbud baseret på projektbeskrivelser.
Velkommen til Tilbudgivern dokumentationen. Her finder du detaljerede guides til alle aspekter af systemet.
## 🚀 Funktioner
## Oversigt
- **AI-genererede tilbud**: Bruger OpenAI GPT-4 til at generere detaljerede tilbud
- **Interaktiv feedback**: Mulighed for at justere tilbud baseret på feedback
- **Prisdatabase**: Indbygget database med erfaringspriser for tømrerarbejde
- **Responsivt design**: Fungerer på desktop og mobil
- **Audit trail**: Gemmer alle tilbud og feedback for analyse
Tilbudgivern er en AI-drevet tilbudsberegner for tømrerfaget med:
- 40+ backend services
- 57+ frontend komponenter
- 15 Smart Pakker til tagarbejde
- 7 understøttede tagtyper
- Ordrestyring GraphQL integration
## 🛠 Teknologi Stack
## Dokumentationsstruktur
- **Frontend**: React med Material-UI
- **Backend**: Node.js med Express
- **Database**: PostgreSQL
- **AI**: OpenAI GPT-4 API
- **Containerization**: Docker
### API Dokumentation (`/api/`)
| Dokument | Beskrivelse |
|----------|-------------|
| [ORDRESTYRING_API_INVENTORY](api/ORDRESTYRING_API_INVENTORY.md) | Komplet Ordrestyring API reference |
| [ORDRESTYRING_API_STATUS_OVERSIGT](api/ORDRESTYRING_API_STATUS_OVERSIGT.md) | Status på API integrationer |
| [CUSTOMER_SEARCH_INTEGRATION](api/CUSTOMER_SEARCH_INTEGRATION.md) | Kundesøgning integration |
| [CASE_ANALYTICS_SYSTEM_DOCUMENTATION](api/CASE_ANALYTICS_SYSTEM_DOCUMENTATION.md) | Sags-analytics system |
| [BYGMA_AUTOMATION_README](api/BYGMA_AUTOMATION_README.md) | Bygma automatisering |
## 📋 Forudsætninger
### Feature Dokumentation (`/features/`)
| Dokument | Beskrivelse |
|----------|-------------|
| [SMART_PACKAGES_COMPLETE_CATALOG](features/SMART_PACKAGES_COMPLETE_CATALOG.md) | Komplet Smart Pakke katalog |
| [TOMRER_SMART_PACKAGES_GUIDE](features/TOMRER_SMART_PACKAGES_GUIDE.md) | Tømrer smart pakke guide |
| [BYGMA_IMPORT_FEATURE](features/BYGMA_IMPORT_FEATURE.md) | Bygma import funktionalitet |
| [ORDRESTYRING_GRAPHQL_INTEGRATION](features/ORDRESTYRING_GRAPHQL_INTEGRATION.md) | GraphQL integration |
| [INTELLIGENT_TASKS_FEATURE](features/INTELLIGENT_TASKS_FEATURE.md) | Intelligente opgaver |
| [MARKUP_SLIDER_SYSTEM](features/MARKUP_SLIDER_SYSTEM.md) | Avance slider system |
| [FEATURE_ROADMAP](features/FEATURE_ROADMAP.md) | Feature roadmap |
- Node.js 18+
- Docker og Docker Compose
- OpenAI API nøgle
### Deployment (`/deployment/`)
| Dokument | Beskrivelse |
|----------|-------------|
| [DEPLOYMENT](deployment/DEPLOYMENT.md) | Deployment guide |
| [PM2_GUIDE](deployment/PM2_GUIDE.md) | PM2 process manager |
| [DEPLOYMENT-PIPELINE](deployment/DEPLOYMENT-PIPELINE.md) | CI/CD pipeline |
| [DNS_MIGRATION_GUIDE](deployment/DNS_MIGRATION_GUIDE.md) | DNS migration |
## 🏃‍♂️ Quick Start
### Guides (`/guides/`)
| Dokument | Beskrivelse |
|----------|-------------|
| [KOMPLET_ORDRESTYRING_SYSTEM_OVERSIGT](guides/KOMPLET_ORDRESTYRING_SYSTEM_OVERSIGT.md) | Komplet Ordrestyring oversigt |
| [KOMPLET_TILBUDSBEREGNING_LØSNING](guides/KOMPLET_TILBUDSBEREGNING_LØSNING.md) | Tilbudsberegning løsning |
| [AI_TILBUDS_PROMPT_GUIDE](guides/AI_TILBUDS_PROMPT_GUIDE.md) | AI prompt guide |
| [TAG_OPGAVE_DATABASE](guides/TAG_OPGAVE_DATABASE.md) | Tag opgave database |
| [TOMMER_QUICK_REFERENCE](guides/TOMMER_QUICK_REFERENCE.md) | Tømrer quick reference |
### 1. Klon projektet
\`\`\`bash
cd /home/alex/git/tilbudgivern
\`\`\`
### System Dokumentation (root)
| Dokument | Beskrivelse |
|----------|-------------|
| [LOGGING_SYSTEM](LOGGING_SYSTEM.md) | Struktureret logging system |
| [PORT_MANAGEMENT](PORT_MANAGEMENT.md) | Port håndtering |
| [DATABASE_BACKUP_SETUP](DATABASE_BACKUP_SETUP.md) | Database backup |
| [ROOF_TYPES_IMPLEMENTATION](ROOF_TYPES_IMPLEMENTATION.md) | 7 tagtype implementationer |
| [OPENAI_COSTS_API](OPENAI_COSTS_API.md) | OpenAI omkostnings-API |
### 2. Installer afhængigheder
\`\`\`bash
# Root projekt
npm install
### Test Dokumentation
| Dokument | Beskrivelse |
|----------|-------------|
| [UI_TESTING_SETUP](UI_TESTING_SETUP.md) | UI test opsætning |
| [SVG_TESTING_GUIDE](SVG_TESTING_GUIDE.md) | SVG test guide |
# Backend
cd backend
npm install
## Quick Links
# Frontend
cd ../frontend
npm install
cd ..
\`\`\`
### Primære Systemer
- **Unified Server**: `backend/unified-server.js` (port 4032)
- **Smart Pakker**: 15 forudkonfigurerede tømrerpakker
- **Ordrestyring**: GraphQL integration til ordre/kundestyring
- **OpenAI**: GPT-4 tilbudsgenerering ($9/måned budget)
### 3. Start database
\`\`\`bash
docker-compose up -d
\`\`\`
### Teknologi Stack
| Komponent | Teknologi |
|-----------|-----------|
| Frontend | React 18, Material-UI 5 |
| Backend | Node.js/Express |
| Database | MariaDB/MySQL |
| Real-time | Socket.IO |
| PDF | Puppeteer |
| Test | Playwright, Jest, Selenium |
### 4. Konfigurer environment
Rediger \`backend/.env\` og tilføj din OpenAI API nøgle:
\`\`\`
OPENAI_API_KEY=sk-your-actual-openai-api-key-here
\`\`\`
### 5. Start applikationen
\`\`\`bash
### Vigtige Kommandoer
```bash
# Development
npm run dev
\`\`\`
Dette starter både backend (port 3000) og frontend (React development).
# Production
pm2 restart tilbudgivern-unified
pm2 logs tilbudgivern-unified
## ⚡ Deployment Scripts
For hurtig udvikling er der lavet praktiske deployment scripts i roden:
### Fuld Test & Deploy (`./test-build-deploy.sh`)
Kører komplet test, build og deployment med fejlhåndtering:
```bash
./test-build-deploy.sh
# Test
npm run test:pw # Playwright E2E
npm run test:pw:local # Lokal test
cd backend && npm test # Unit tests
```
Scriptet gør følgende:
- ✅ Tester backend syntax og database forbindelse
- 🏗️ Bygger frontend med fejltjek
- 🔄 Genstarter PM2 server
- 📊 Viser status og eventuelle fejl
## Arkitektur Oversigt
### Quick Deploy (`./quick-deploy.sh`)
Hurtig version til små ændringer:
```bash
./quick-deploy.sh
```
┌─────────────────────────────────────────────────────────┐
│ Frontend (React 18) │
│ Material-UI + Socket.IO Client │
└─────────────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Unified Server (Port 4032) │
│ backend/unified-server.js │
├─────────────────────────────────────────────────────────┤
│ Routes │ Services (40+) │ Middleware │
│ ──────── │ ─────────────── │ ────────── │
│ /api/* │ openaiService │ auth │
│ │ smartPackage... │ correlationId │
│ │ ordrestyring... │ errorHandler │
│ │ pdfGeneration │ requestLogger │
└─────────────────────────┬───────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ MariaDB │ │ OpenAI │ │ Ordrestyring│
│ Database │ │ GPT-4 API │ │ GraphQL API │
└─────────────┘ └─────────────┘ └─────────────┘
```
**Tip:** Brug altid disse scripts efter kode-ændringer - de sikrer at alt fungerer korrekt!
## Database Tabeller
## 🧪 Test Applikationen
| Kategori | Tabeller |
|----------|----------|
| Tilbud | `project_quotes`, `quotes`, `quote_feedback` |
| Projekter | `customer_projects`, `projects` |
| Materialer | `materials`, `material_prices`, `project_materials` |
| Arbejde | `labor_tasks`, `labor_prices`, `project_labor` |
| Pakker | `material_packages`, `smart_package_tasks`, `smart_package_materials` |
| Geometri | `roof_geometry` |
| System | `system_logs`, `request_logs`, `system_settings` |
### Uden OpenAI API nøgle (lokal test):
1. Åbn browser på http://localhost:3000
2. Udfyld projektbeskrivelse, f.eks.: "Lægning af 25 m² klikgulv i stue og gang"
3. Vælg projekttype og areal
4. Klik "Generer tilbud"
5. Du vil få en fejl om OpenAI API nøgle - dette er forventet
## Kontakt
### Med gyldig OpenAI API nøgle:
1. Tilføj din rigtige OpenAI API nøgle i `backend/.env`:
```
OPENAI_API_KEY=sk-din-rigtige-api-noegle-her
```
2. Genstart serveren med `npm run dev`
3. Test tilbudsgenerering med rigtige AI-svar
4. Test feedback funktionen ved at justere tilbuddet
### Test backend API direkte:
```bash
# Health check
curl http://localhost:3001/health
# Se prisdata for gulv
curl http://localhost:3001/api/quotes/prices/gulv
# Kør automatiske tests
cd backend && npm test
```
## ✅ Status
Applikationen er **fuldt funktionel** og klar til brug:
- ✅ Backend server kører på port 3001
- ✅ Frontend React app kører på port 3000
- ✅ PostgreSQL database er forbundet og initialiseret
- ✅ Prisdatabase er populeret med tømrer-erfaringspriser
- ✅ API endpoints virker korrekt
- ✅ Frontend kommunikerer med backend
- ✅ Rate limiting og sikkerhed implementeret
- ✅ Error handling og logging funktionerer
- ✅ Database audit trail gemmer alle tilbud og feedback
- 🔑 **Kræver kun gyldig OpenAI API nøgle for AI-funktionalitet**
### Test Gennemført:
- Database initialisering ✅
- API endpoints ✅
- Frontend-backend kommunikation ✅
- Formularer og validering ✅
- Error handling ✅
- Logging ✅
- Rate limiting ✅
## 📁 Projektstruktur
\`\`\`
tilbudgivern/
├── backend/ # Node.js backend
│ ├── src/
│ │ ├── routes/ # API routes
│ │ ├── services/ # Business logic
│ │ ├── middleware/ # Express middleware
│ │ └── utils/ # Utilities
│ └── package.json
├── frontend/ # React frontend
│ ├── src/
│ │ ├── App.js # Main app component
│ │ └── index.css # Styling
│ └── package.json
├── infra/ # Infrastructure kode (fremtidig Azure deployment)
├── docker-compose.yml # Database setup
└── package.json # Root projekt
\`\`\`
## 🔧 API Endpoints
- \`POST /api/quotes/generate\` - Generer nyt tilbud
- \`POST /api/quotes/feedback\` - Submit feedback og få justeret tilbud
- \`GET /api/quotes/:id\` - Hent specifikt tilbud
- \`GET /api/quotes/prices/:category\` - Hent prisdata
- \`GET /health\` - Health check
## 🗄 Database Schema
### Prices Table
Indeholder erfaringspriser for forskellige typer tømrerarbejde.
### Quotes Table
Gemmer alle genererede tilbud med metadata.
### Quote Feedback Table
Gemmer feedback og justerede tilbud.
## 🔒 Sikkerhed
- Rate limiting på API endpoints
- Input validering med Joi
- Helmet.js sikkerhedsheaders
- CORS konfiguration
- Environment variabel protection
## 🚀 Deployment til Azure
Infrastructure koden til Azure deployment findes i \`infra/\` mappen og vil blive udviklet i næste fase.
Planlagte Azure services:
- Azure App Service (frontend + backend)
- Azure Database for PostgreSQL
- Azure OpenAI Service
- Azure Application Insights
## 🤝 Bidrag
1. Fork projektet
2. Opret feature branch
3. Commit ændringer
4. Push til branch
5. Opret Pull Request
## 📄 Licens
MIT License - se LICENSE fil for detaljer.
## 📞 Support
Ved spørgsmål eller problemer, opret et issue i projektets GitHub repository.
Ved spørgsmål, opret et issue i GitHub repository.