# FoamKing Opsætningsguide Komplet vejledning til at sætte FoamKing prisberegneren i drift. --- ## 1. Forudsætninger - **Node.js** 18 eller nyere (20 LTS anbefales) - **npm** (følger med Node.js) ## 2. Installation ```bash npm install ``` ## 3. Konfiguration af miljøvariabler Kopier eksempelfilen og udfyld med jeres egne værdier: ```bash cp .env.example .env.local ``` Åbn `.env.local` i en teksteditor og konfigurer hver sektion som beskrevet nedenfor. ### Admin-login (Påkrævet) ```env ADMIN_EMAIL=admin@example.com ADMIN_PASSWORD=changeme ``` Disse oplysninger bruges til at logge ind på `/intern/login`. Skift begge værdier inden I går i produktion. ### E-mail — Office 365 SMTP (Påkrævet) ```env SMTP_HOST=smtp.office365.com SMTP_PORT=587 SMTP_USER=tilbud@foamking.dk SMTP_PASS=your_password_here EMAIL_FROM_NAME=Foam King Prisberegner EMAIL_TO=info@foamking.dk ``` Applikationen sender tilbudsforespørgsler via Office 365. For at det virker, skal **SMTP AUTH være aktiveret** på afsenderpostkassen: 1. Gå til **Exchange Admin Center** — [admin.exchange.microsoft.com](https://admin.exchange.microsoft.com) 2. Gå til **Recipients** → **Mailboxes** 3. Vælg postkassen **tilbud@foamking.dk** 4. Klik på **Manage email apps settings** (eller Mail flow → Email apps) 5. Aktivér **Authenticated SMTP (SMTP AUTH)** 6. Gem > **Bemærk:** Hvis jeres organisation bruger Security Defaults eller Conditional Access-politikker, der blokerer legacy-godkendelse, kan det være nødvendigt at oprette en undtagelse for denne postkasse. Hvis MFA er aktiveret på kontoen, skal I bruge et App Password i stedet for den almindelige adgangskode. ### Base-URL (Påkrævet) ```env NEXT_PUBLIC_BASE_URL=https://beregner.foamking.dk ``` Bruges når der genereres links i udgående e-mails (f.eks. links til tilbudssider). ### Afstandsberegning (Valgfrit) ```env OPENROUTE_API_KEY=your_api_key_here ``` Uden denne nøgle bruger applikationen en indbygget afstandstabel baseret på postnumre, hvilket fungerer fint i de fleste tilfælde. Ønsker I mere præcise køreafstande, kan I oprette en gratis API-nøgle på [openrouteservice.org](https://openrouteservice.org/dev/#/signup) (2.000 forespørgsler pr. dag). ## 4. Opret database ```bash npm run setup ``` Dette opretter SQLite-databasen og de nødvendige tabeller. ## 5. Byg og start ```bash npm run build npm start ``` Applikationen starter på **port 3001**. ## 6. Ruteoversigt | Rute | Beskrivelse | | -------------------- | ---------------------------------------------- | | `/` | Offentlig prisberegner | | `/tilbud/[id]` | Offentlig tilbudsvisning (link fra e-mail) | | `/intern` | Admin-dashboard — tilbudsstyring | | `/intern/historik` | Admin — tilbudshistorik | | `/intern/beregner` | Admin — detaljeret beregner med prisopbygning | | `/intern/login` | Admin-loginside | ## 7. Tilpasset autentificering Standardopsætningen bruger miljøvariablerne `ADMIN_EMAIL` og `ADMIN_PASSWORD` med sessioner i hukommelsen. Det er enkelt og tilstrækkeligt til en setup med en enkelt administrator. Vil I integrere jeres egen autentificering (JWT, OAuth, SSO), skal I redigere **`lib/auth.ts`**. Hele applikationen bruger kun tre funktioner: - `checkAuth()` — tjekker om den aktuelle forespørgsel er autentificeret - `login(email, password)` — autentificerer en bruger og opretter en session - `logout()` — afslutter den aktuelle session Middlewaren i **`middleware.ts`** tjekker for en session-cookie på alle `/intern/*`-ruter og omdirigerer ikke-autentificerede besøgende til `/intern/login`. Opdater den, hvis I skifter til en anden mekanisme (f.eks. en JWT i en `Authorization`-header). ## 8. Udvikling ```bash npm run dev # Start udviklingsserver (port 3001) npm run build # Produktionsbuild npm start # Start produktionsserver npm run lint # Kør ESLint npm run setup # Opret / nulstil database ```