Skip to content

Installatie voor ICT-beheerders

Coolbx Focus draait volledig op infrastructuur van je school: een server (Docker), het teacher-dashboard (web) en twee Chrome-extensies. Deze pagina zet de grote lijnen uit; de technische details staan in de repository (DEV.md en deploy/dokploy/README.md).

Architectuur in het kort

OnderdeelWat het isWaar het draait
ServerAPI + realtime-verbindingen (Fastify, Socket.io, PostgreSQL)Docker op je server
Focus DashboardWebapp voor leerkrachtenZelfde server (nginx)
Focus StudentChrome-extensie (MV3) op leerlingtoestellenForce-install via Google Admin Console of handmatig
Focus TeacherOptionele Chrome-extensie voor tab-delenHandmatig of via beleid op leerkracht-profielen
CoturnTURN/STUN-relay voor live meekijken buiten het LANZelfde server (host-netwerk)

Server uitrollen

  1. Kloon de repository en gebruik deploy/dokploy/docker-compose.dokploy.yml (of een eigen Docker Compose op basis daarvan).
  2. Zet de vereiste omgevingsvariabelen, minimaal:
    • POSTGRES_PASSWORD
    • JWT_SECRET en JWT_REFRESH_SECRET (openssl rand -base64 48)
    • EXTENSION_HMAC_SECREThetzelfde secret als waarmee de student-extensie gebouwd wordt (zie hieronder)
    • TURN_PASSWORD — wachtwoord voor de TURN-relay (WebRTC); hetzelfde als de GitHub-secret TURN_CREDENTIAL waarmee de extensie gebouwd wordt
    • CORS_ORIGIN — het adres van je dashboard
    • PUBLIC_SERVER_URL — het publieke adres van de server (bv. https://focus-api.school.be); nodig zodra je Aanmelden met Google gebruikt
  3. Migraties en een eerste admin-account worden bij elke deploy automatisch aangemaakt (ADMIN_EMAIL/ADMIN_PASSWORD).
  4. Zet DNS en TLS voor twee hostnames, bv. focus-dashboard.school.be (web) en focus-api.school.be (server).

Student-extensie verdelen

Beheerde Chromebooks (aanbevolen)

De CI-workflow bouwt en signt bij elke ext-v*-tag de .crx + update.xml en publiceert die op je dashboard onder /extension-updates/. Daarna verdeel je de extensie centraal via de Google Admin Console:

  1. Ga naar Devices → Chrome → Apps & extensions → Users & browsers (voor managed guest sessions doe je hetzelfde onder de Managed guest session-tab) en selecteer de leerlingen-OU.

  2. Klik op + → Add Chrome app or extension by ID.

  3. Vul het extension-ID in en kies From a custom URL als bron:

    • ID: makdakigkdbicdljgdclgnejachcohag
    • URL: https://focus-dashboard.edugolo.be/extension-updates/update.xml
  4. Zet het installatiebeleid op Force install.

  5. Geef de server-URL mee zodat leerlingen niets hoeven in te stellen: open bij dezelfde extensie Policy for extensions (managed storage) en plak:

    json
    {
      "serverUrl": { "Value": "https://focus-api.edugolo.be" }
    }

    Optioneel "kioskMode": { "Value": true }: dan toont de extensie ná het joinen een fullscreen "wacht op je leerkracht"-scherm in plaats van het gewone join-/instructiescherm — handig voor managed guest sessions. Let op: dit is een vergrendeld scherm bínnen de Focus-tab, geen volledige toestel-kiosk. Om de leerling ook écht in de sessie te houden (geen andere apps/tabs, geen incognito, geen devtools) stel je dat apart in via het browser-/sessiebeleid in de Admin Console (Incognito uitschakelen, Ontwikkelaarstools blokkeren, URL-allowlist, één venster). Het "wacht"-scherm zelf vereist een extensie van v0.7.3 of nieuwer.

Geforceerde toestellen pollen update.xml ~elke paar uur (of bij herstart) en updaten dan vanzelf naar de nieuwste versie. Zorg dat DisableScreenshotsuit staat — anders faalt het meekijken stil.

Eigen toestellen (BYOD)

Op een eigen toestel installeert de leerling de extensie zelf. De artefacten staan op het dashboard onder /extension-updates/:

Zelf-hosters: vervang focus-dashboard.edugolo.be door je eigen dashboard-hostname.

Installeren via de .zip (de werkbare route op BYOD):

  1. Download de .zip en pak ze uit naar een vaste map (laat de map staan — Chrome laadt de extensie er rechtstreeks vanuit).
  2. Open chrome://extensions.
  3. Zet rechtsboven Ontwikkelaarsmodus aan.
  4. Klik Uitgepakt laden en kies de uitgepakte map.
  5. Open een les: klik het Focus-icoon en geef de joincode in.

Een los .crx-bestand kan je op een eigen toestel meestal niet rechtstreeks installeren — Chrome blokkeert het sideloaden van .crx's buiten de Web Store. Gebruik daarom de .zip-route hierboven. De .crx is vooral bedoeld voor het force-install-traject op beheerde toestellen. Houd er ook rekening mee dat Chrome bij elke start kan vragen om ontwikkelaars-extensies te bevestigen.

Op BYOD geldt: Focus is een focus- en monitoringtool, géén waterdichte proctoring — een leerling met beheerdersrechten op het eigen toestel kan de extensie altijd uitschakelen. Je ziet dat wel meteen in het dashboard (leerling verdwijnt/offline).

Beveiliging: het extensie-secret

Om te verhinderen dat aangepaste of nagebouwde kopieën van de extensie met jouw server verbinden, signt de officiële extensie elke verbinding met een geheim dat alleen jouw school kent:

  1. Genereer één secret: openssl rand -base64 48.
  2. Zet het op de server als EXTENSION_HMAC_SECRET.
  3. Zet het als GitHub Actions-secret EXTENSION_HMAC_SECRET zodat de release-workflow het in de extensie bakt.

Zonder geldig secret weigert de server elke student-verbinding.

Teacher-extensie verdelen

De Focus Teacher-extensie laat een leerkracht zijn scherm/tabblad naar de leerlingen delen. Ze heeft geen configuratie nodig: ze werkt zodra ze geïnstalleerd is en het dashboard geopend wordt. Dezelfde release-workflow bouwt en signt haar als aparte extensie (eigen vaste extension-ID).

Beheerde leerkracht-toestellen

Exact dezelfde stappen als bij de student-extensie in de Google Admin Console, maar op de leerkracht-OU en met de teacher-waarden:

  1. Devices → Chrome → Apps & extensions → Users & browsers → selecteer de leerkracht-OU.
  2. + → Add Chrome app or extension by ID.
  3. Vul in en kies From a custom URL:
    • ID: gljlifkjjdohlnegnjfkkdabmjkbpidb
    • URL: https://focus-dashboard.edugolo.be/extension-updates/teacher-update.xml
  4. Installatiebeleid: Force install.

De teacher-extensie heeft geen managed-storage-policy nodig: ze werkt zodra het dashboard geopend wordt.

Eigen toestellen / handmatig

De artefacten staan op het dashboard onder /extension-updates/:

Installeren via de .zip gaat net als bij de student-extensie: uitpakken naar een vaste map → chrome://extensionsOntwikkelaarsmodus aan → Uitgepakt laden. Een los .crx-bestand kan je op een onbeheerd toestel meestal niet rechtstreeks installeren (Chrome blokkeert sideloaden); gebruik daar de .zip.

Aanmelden met Google (SSO)

Coolbx Focus kan leerlingen en leerkrachten laten aanmelden met hun Google Workspace-account: geverifieerde leerlingnamen in de klas, en automatische leerkracht-accounts op basis van je domein en (optioneel) een Google-groep. De volledige setup — OAuth-client, service account en schoolconfiguratie — staat in de aparte gids: Google-integratie instellen.

Open join afdwingen of uitschakelen

Een open les laat leerlingen deelnemen met enkel de sessiecode + een vrij ingetypte naam — laagdrempelig, maar zonder identiteitsgarantie: iedereen met de code kan elke naam kiezen. Voor Aanmelden met Google geldt dat niet (geverifieerde naam).

Of leerkrachten open lessen mogen aanmaken, regel je met allowOpenJoin:

  • Standaard aan voor on-prem/zelf-hosting (open join is daar vaak de enige laagdrempelige weg).
  • Deployment-default: zet in de server-omgevingsvariabele SCHOOL_CONFIG_DEFAULTS {"allowOpenJoin": false} om open join standaard uit te schakelen (aanbevolen voor een publiek bereikbare installatie).
  • Per school: een school-admin overschrijft dit onder Beheer → Scholen.

Staat het uit, dan toont het dashboard bij lesvoorbereiding alleen Aanmelden met Google en weigert de server het aanmaken van open lessen.

Gedeelde toestellen — profiel per leerling

Coolbx Focus herkent een terugkerende leerling aan een identiteit die in het browserprofiel bewaard wordt (zodat reconnect na een onderbreking werkt). Op een gedeeld toestel betekent dat:

  • Eigen aanmelding per leerling (eigen OS-/Chrome-profiel) óf een ephemeral managed guest session die bij uitloggen reset → elke leerling heeft een eigen, schone identiteit. Aanbevolen.
  • Eén gedeeld, blijvend profiel → het toestel deelt één identiteit. Een volgende leerling kan "Je was verbonden als …" van de vorige zien en moet Aanmelden als iemand anders kiezen. Dit raden we af: gebruik per-leerling-profielen of een gastsessie, of schakel open join uit en gebruik Google-aanmelding.

Dit is een instelling van het toestelbeheer (Google Admin Console), niet van Coolbx Focus zelf.

Accounts, rollen en scholen

Coolbx Focus kent drie rollen:

RolWat die kan
Platform-adminScholen aanmaken en alles beheren (de beheerder van de installatie; het account uit ADMIN_EMAIL)
School-adminDe instellingen en leerkrachten van één school beheren
LeerkrachtLessen voorbereiden en geven
  • Onder Beheer → Scholen maak je scholen aan en stel je per school het aanmeldbeleid in (toegelaten domeinen, leerkrachtengroep, provisioning, login-methodes). Op de tab Leerkrachten keur je wachtende accounts goed, blokkeer je accounts en voeg je wachtwoord-accounts toe.
  • Met de Google-koppeling actief hoef je leerkrachten meestal niet handmatig aan te maken: wie met een schoolaccount aanmeldt en aan het beleid voldoet, krijgt automatisch een account.
  • Beheer → Gebruikers bevat alleen platform-admins.
  • Er is bewust geen zelfregistratie.

Updates

  • Server/dashboard: nieuwe versie deployen via je Docker-pipeline (migraties lopen automatisch).
  • Extensies (student + teacher): nieuwe ext-v*-tag pushen → CI bouwt en signt beide en publiceert ze → managed toestellen updaten vanzelf via hun update.xml / teacher-update.xml.

Self-hosted onder de coolbx-vlag — jouw school, jouw data. Contact