foamking/OPSÆTNING.md
mikl0s 50c2664078 docs: add setup guides in English and Danish
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 21:58:44 +00:00

123 lines
4.1 KiB
Markdown

# 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
```