Weergave
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
| Onderdeel | Wat het is | Waar het draait |
|---|---|---|
| Server | API + realtime-verbindingen (Fastify, Socket.io, PostgreSQL) | Docker op je server |
| Focus Dashboard | Webapp voor leerkrachten | Zelfde server (nginx) |
| Focus Student | Chrome-extensie (MV3) op leerlingtoestellen | Force-install via Google Admin Console of handmatig |
| Focus Teacher | Optionele Chrome-extensie voor tab-delen | Handmatig of via beleid op leerkracht-profielen |
| Coturn | TURN/STUN-relay voor live meekijken buiten het LAN | Zelfde server (host-netwerk) |
Server uitrollen
- Kloon de repository en gebruik
deploy/dokploy/docker-compose.dokploy.yml(of een eigen Docker Compose op basis daarvan). - Zet de vereiste omgevingsvariabelen, minimaal:
POSTGRES_PASSWORDJWT_SECRETenJWT_REFRESH_SECRET(openssl rand -base64 48)EXTENSION_HMAC_SECRET— hetzelfde secret als waarmee de student-extensie gebouwd wordt (zie hieronder)TURN_PASSWORD— wachtwoord voor de TURN-relay (WebRTC); hetzelfde als de GitHub-secretTURN_CREDENTIALwaarmee de extensie gebouwd wordtCORS_ORIGIN— het adres van je dashboardPUBLIC_SERVER_URL— het publieke adres van de server (bv.https://focus-api.school.be); nodig zodra je Aanmelden met Google gebruikt
- Migraties en een eerste admin-account worden bij elke deploy automatisch aangemaakt (
ADMIN_EMAIL/ADMIN_PASSWORD). - Zet DNS en TLS voor twee hostnames, bv.
focus-dashboard.school.be(web) enfocus-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:
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.
Klik op + → Add Chrome app or extension by ID.
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
- ID:
Zet het installatiebeleid op Force install.
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 datDisableScreenshotsuit 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/:
- coolbx-focus-student.zip — de uitgepakte build, voor handmatige installatie.
- coolbx-focus-student.crx — het gesignde pakket dat de force-install op beheerde toestellen gebruikt.
Zelf-hosters: vervang
focus-dashboard.edugolo.bedoor je eigen dashboard-hostname.
Installeren via de .zip (de werkbare route op BYOD):
- Download de
.zipen pak ze uit naar een vaste map (laat de map staan — Chrome laadt de extensie er rechtstreeks vanuit). - Open
chrome://extensions. - Zet rechtsboven Ontwikkelaarsmodus aan.
- Klik Uitgepakt laden en kies de uitgepakte map.
- 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.crxis 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:
- Genereer één secret:
openssl rand -base64 48. - Zet het op de server als
EXTENSION_HMAC_SECRET. - Zet het als GitHub Actions-secret
EXTENSION_HMAC_SECRETzodat 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:
- Devices → Chrome → Apps & extensions → Users & browsers → selecteer de leerkracht-OU.
- + → Add Chrome app or extension by ID.
- Vul in en kies From a custom URL:
- ID:
gljlifkjjdohlnegnjfkkdabmjkbpidb - URL:
https://focus-dashboard.edugolo.be/extension-updates/teacher-update.xml
- ID:
- 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/:
- coolbx-focus-teacher.zip — de uitgepakte build, voor handmatige installatie.
- coolbx-focus-teacher.crx — het gesignde pakket voor de force-install.
Installeren via de .zip gaat net als bij de student-extensie: uitpakken naar een vaste map → chrome://extensions → Ontwikkelaarsmodus 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:
| Rol | Wat die kan |
|---|---|
| Platform-admin | Scholen aanmaken en alles beheren (de beheerder van de installatie; het account uit ADMIN_EMAIL) |
| School-admin | De instellingen en leerkrachten van één school beheren |
| Leerkracht | Lessen 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 hunupdate.xml/teacher-update.xml.