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
- 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
🛠 Teknologi Stack
- Frontend: React med Material-UI
- Backend: Node.js med Express
- Database: PostgreSQL
- AI: OpenAI GPT-4 API
- Containerization: Docker
📋 Forudsætninger
- Node.js 18+
- Docker og Docker Compose
- OpenAI API nøgle
🏃♂️ Quick Start
1. Klon projektet
```bash cd /home/alex/git/tilbudgivern ```
2. Installer afhængigheder
```bash
Root projekt
npm install
Backend
cd backend npm install
Frontend
cd ../frontend npm install cd .. ```
3. Start database
```bash docker-compose up -d ```
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 npm run dev ```
Dette starter både backend (port 3001) og frontend (port 3000).
⚡ 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:
./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:
./quick-deploy.sh
Tip: Brug altid disse scripts efter kode-ændringer - de sikrer at alt fungerer korrekt!
🧪 Test Applikationen
Uden OpenAI API nøgle (lokal test):
- Åbn browser på http://localhost:3000
- Udfyld projektbeskrivelse, f.eks.: "Lægning af 25 m² klikgulv i stue og gang"
- Vælg projekttype og areal
- Klik "Generer tilbud"
- Du vil få en fejl om OpenAI API nøgle - dette er forventet
Med gyldig OpenAI API nøgle:
- Tilføj din rigtige OpenAI API nøgle i
backend/.env:OPENAI_API_KEY=sk-din-rigtige-api-noegle-her - Genstart serveren med
npm run dev - Test tilbudsgenerering med rigtige AI-svar
- Test feedback funktionen ved at justere tilbuddet
Test backend API direkte:
# 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
- Fork projektet
- Opret feature branch
- Commit ændringer
- Push til branch
- 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.