# 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 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: ```bash ./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): 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: ```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.