No description
  • TypeScript 99.3%
  • JavaScript 0.3%
  • CSS 0.2%
  • Dockerfile 0.1%
Find a file
Jesse van Mullem 4a6c243770 AI: sleutels alleen via env + rolbeperking (niet-admin = alleen Ollama)
- API-sleutels worden niet meer in de webinterface of DB beheerd; ze komen
  uitsluitend uit omgevingsvariabelen (OPENAI_API_KEY, ANTHROPIC_API_KEY).
  De admin-pagina toont alleen de env-status (ingesteld/ontbreekt).
- Alleen ADMIN kan providers in-/uitschakelen en de standaard kiezen, en in
  de zoekfunctie providers kiezen (vergelijken/consensus).
- Niet-admins (EDITOR/VIEWER) worden server-side gedwongen naar Ollama
  (lokaal) voor álle AI: zoeken, puntextractie, mitigatie- en ISO-suggesties.
  Hun gegevens gaan dus nooit naar externe AI-diensten.
- /api/ai/providers GET toont niet-admins uitsluitend Ollama.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 18:22:56 +02:00
prisma AI: sleutels alleen via env + rolbeperking (niet-admin = alleen Ollama) 2026-05-28 18:22:56 +02:00
scripts Voeg ECIES P-521 envelope-encryptie toe (at-rest) 2026-05-28 17:44:58 +02:00
src AI: sleutels alleen via env + rolbeperking (niet-admin = alleen Ollama) 2026-05-28 18:22:56 +02:00
.dockerignore Add BeleidsportaalApp: beleids-PDF analyse met BIO/NIS2/AVG-tracking 2026-05-18 22:29:24 +02:00
.env.example Multi-provider AI: OpenAI, Claude en Ollama 2026-05-28 17:53:50 +02:00
.gitignore Multi-provider AI: OpenAI, Claude en Ollama 2026-05-28 17:53:50 +02:00
docker-compose.yaml Multi-provider AI: OpenAI, Claude en Ollama 2026-05-28 17:53:50 +02:00
Dockerfile Add BeleidsportaalApp: beleids-PDF analyse met BIO/NIS2/AVG-tracking 2026-05-18 22:29:24 +02:00
entrypoint.sh Add BeleidsportaalApp: beleids-PDF analyse met BIO/NIS2/AVG-tracking 2026-05-18 22:29:24 +02:00
next.config.mjs v0.8: beveiliging, samenwerking en rapportage 2026-05-20 15:01:49 +02:00
package.json Multi-provider AI: OpenAI, Claude en Ollama 2026-05-28 17:53:50 +02:00
postcss.config.mjs Add BeleidsportaalApp: beleids-PDF analyse met BIO/NIS2/AVG-tracking 2026-05-18 22:29:24 +02:00
README.md Genereer database- en sessie-geheim automatisch via Coolify 2026-05-18 22:36:08 +02:00
tailwind.config.ts Add BeleidsportaalApp: beleids-PDF analyse met BIO/NIS2/AVG-tracking 2026-05-18 22:29:24 +02:00
tsconfig.json Add BeleidsportaalApp: beleids-PDF analyse met BIO/NIS2/AVG-tracking 2026-05-18 22:29:24 +02:00

BeleidsportaalApp

Webapplicatie die beleids-PDF's omzet naar een toetsbare omgeving. De applicatie haalt met AI automatisch de beleidspunten uit een document, waarna je per punt de implementatiestatus, het risiconiveau, de verantwoordelijke, een streefdatum en mitigerende maatregelen vastlegt. Punten worden gekoppeld aan een vaste eisen-catalogus voor BIO, NIS2 en AVG.

Functionaliteit

  • PDF's met beleid uploaden en de tekst automatisch laten inlezen.
  • AI-extractie (OpenAI) die concrete beleidspunten voorstelt en koppelt aan BIO/NIS2/AVG-eisen.
  • Per beleidspunt: status (niet gestart, in behandeling, uitgevoerd, on hold, n.v.t.), risiconiveau, verantwoordelijke, streefdatum, mitigerende maatregelen en notities.
  • Vaste eisen-catalogus voor BIO, NIS2 en AVG (beheerder kan eisen toevoegen/verwijderen).
  • Team met inlog en rollen: Beheerder, Bewerker, Lezer.
  • Dashboard met voortgang per status, risico en compliancekader.
  • Tweetalige interface (Nederlands / Engels).

Techniek

  • Next.js 15 (App Router) + React 19 + TypeScript
  • PostgreSQL via Prisma
  • Sessie-authenticatie met JWT-cookie (jose + bcryptjs)
  • OpenAI API voor de extractie
  • Tailwind CSS

Omgevingsvariabelen

Zie .env.example. Belangrijkste variabelen:

Variabele Omschrijving Coolify
DATABASE_URL PostgreSQL-verbinding automatisch (compose)
AUTH_SECRET Geheime sleutel voor sessies (openssl rand -base64 32) automatisch gegenereerd
OPENAI_API_KEY API-sleutel van OpenAI zelf instellen
OPENAI_MODEL Model, standaard gpt-4o-mini optioneel
ADMIN_EMAIL E-mailadres van de eerste beheerder zelf instellen
ADMIN_PASSWORD Wachtwoord van de eerste beheerder zelf instellen
ADMIN_NAME Naam van de eerste beheerder optioneel

In Coolify worden het databasewachtwoord (SERVICE_PASSWORD_POSTGRES) en het sessie-geheim (SERVICE_BASE64_AUTHSECRET) automatisch gegenereerd via de magic-variabelen in docker-compose.yml.

Lokaal ontwikkelen

cp .env.example .env        # vul de waarden in (lokale PostgreSQL nodig)
npm install
npx prisma db push          # database-schema aanmaken
npm run db:seed             # eisen-catalogus + beheerder aanmaken
npm run dev                 # http://localhost:3000

Deployen via Coolify

De repository bevat een Dockerfile en docker-compose.yml (met PostgreSQL).

  1. Forgejo — push deze map naar je repository:

    git add .
    git commit -m "BeleidsportaalApp"
    git push origin main
    
  2. Coolify — maak een nieuwe resource aan:

    • Type: Docker Compose.
    • Bron: je Forgejo-repository code.vanmullemholding.eu/jesse-a/BeleidsportaalApp.
    • Coolify leest automatisch docker-compose.yml.
  3. Omgevingsvariabelen in Coolify instellen (tabblad Environment Variables): OPENAI_API_KEY, ADMIN_EMAIL, ADMIN_PASSWORD — en optioneel OPENAI_MODEL en ADMIN_NAME. Het databasewachtwoord en AUTH_SECRET genereert Coolify zelf.

  4. Deploy. Bij het opstarten worden automatisch het databaseschema gesynchroniseerd (prisma db push) en de eisen-catalogus + beheerder geseed.

  5. Open de applicatie en log in met ADMIN_EMAIL / ADMIN_PASSWORD.

De PDF-bestanden worden in de database opgeslagen; back-up dus het PostgreSQL-volume (db_data).

Opmerkingen

  • "Opnieuw extraheren" vervangt alle bestaande punten van een document — eerder ingevulde statussen van dat document gaan daarbij verloren.
  • Gescande PDF's zonder tekstlaag kunnen niet worden geanalyseerd (geen OCR).
  • Het wachtwoord van de seed-beheerder wordt alleen bij de eerste keer ingesteld; daarna wijzig je wachtwoorden via het scherm Gebruikers.