Hvert subdomain har én jobb. Offentlig og internt er separate domener.
- synops.no = statisk landingsside + /pub/* + /media/*
- ws.synops.no = appen (SvelteKit + /api/* → maskinrommet)
- workspace.synops.no → redirect til ws.synops.no (legacy)
- Fjernet hostname-sjekker fra hooks.server.ts
- Fjernet LandingPage.svelte (landingsside er statisk HTML)
- Alle API-URLer peker til 127.0.0.1:3100 (ikke sidelinja.org)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Host-basert logikk i hooks: workspace.* sender uautentiserte til
login og autentiserte til /workspace. synops.no viser landingsside.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Uautentiserte ser landingssiden, innloggede sendes rett til
arbeidsflaten. Mottak er tilgjengelig som eget panel.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
hooks.server.ts: / unntatt fra auth-redirect
+page.svelte: viser landingsside for uautentiserte, mottak for innloggede
Ingen separat statisk fil — alt i SvelteKit
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implementerer autentisering med Authentik via @auth/sveltekit:
- OIDC authorization code flow med PKCE og state-verifisering
- JWT-callback lagrer authentik_sub (SHA256-hash, ikke UUID) for
konsistens med maskinrommets auth_identities-tabell
- Server hooks: alle ruter unntatt /signin og /auth/* krever sesjon
- Uautentiserte brukere redirectes til /signin (303)
- Innloggingsside med client-side signIn('authentik')
- Hovedside viser innlogget bruker med logg ut-knapp
- TypeScript-typer utvidet med JWT.authentik_sub
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>