# GitHub en Vercel

De bron staat in de privé-repository `Marcelmutsaarts/vlak-rekenomgeving`. De school kan de MIT-bron kopiëren of de repository en infrastructuur overnemen. Productiegebruik hoort op een schoolaccount met minimaal twee beheerders; de code vereist geen makersaccount.

## Bouwen en publiceren

Importeer de repository in Vercel als **Other**. `vercel.json` stelt de build en uitvoermap in. De build voert eerst alle reken- en servercontroles uit en stopt bij fouten. De interface heeft geen externe runtimepakketten. De Node-functie draait in Frankfurt; de gekozen opslagregio moet daarmee overeenkomen.

Oefenen en gedeelde oefenprofielen werken zonder omgevingsvariabelen. Voor duurzame profielsessies zijn nodig:

| Instelling | Inhoud |
| --- | --- |
| `TEACHER_PASSWORD` | Sterke geheime schooldocentsleutel, 16–256 tekens |
| `UPSTASH_REDIS_REST_URL` / `UPSTASH_REDIS_REST_TOKEN` | Redis REST-verbinding; Vercel `KV_REST_API_URL` / `KV_REST_API_TOKEN` worden ook ondersteund |
| `VLAK_STORAGE_NAMESPACE` | Bijvoorbeeld `vlak:production:v1`; andere naam of aparte database voor previews |
| `PUBLIC_ORIGIN` | Optioneel exact HTTPS-schooldomein; Vercel-deploymentadressen zijn automatisch bekend |
| `SEB_BROWSER_EXAM_KEYS` | Alleen echte sleutels uit de school-SEB-configuratie; zie SEB-handleiding |

Plaats geheimen uitsluitend in Vercel Environment Variables. De plaatselijke sleutel staat in `.data/teacher-key.txt`, buiten Git en uploads. `.env.example` bevat alleen lege voorbeelden. Meld niet aan op gedeelde leerlingapparaten.

## Opslag en storingen

Vercel-functies hebben geen duurzame lokale bestandsschijf. Daarom gebruikt de cloudversie Redis voor sessies en gehashte beheerlogins. Een transactie vergrendelt de kleine pilotdatabase en bevestigt werk pas na opslaan. Een verlopen vergrendeling mag een nieuwere schrijver niet overschrijven. Gewone koude starts van cloudfuncties onderbreken een sessie niet; contactverlies, andere rekenversie, browserincidenten en verloren SEB-controle doen dat wel. [Vercel runtimes](https://vercel.com/docs/functions/runtimes), [Upstash REST](https://upstash.com/docs/redis/features/restapi).

Dit is een kleine pilotopslag: maximaal 200 sessies, 1000 berekeningen per sessie, 3 MB per database en één schrijver tegelijk. Geen volwaardige beschikbaarheidsgarantie. Test één klas en duurbelasting vóór opschalen. De gratis Upstash-database is aangevraagd zonder automatische upgrade en zonder automatisch weggooien van gegevens bij ruimtegebrek. Bij een limiet worden nieuwe bevestigingen geweigerd; bestaande gegevens worden niet bewust overschreven.

Zeven dagen na creatie vervalt iedere sessie; verlopen records verdwijnen bij een volgende aanvraag. De database heeft daarnaast zeven dagen vervaltijd sinds de laatste geslaagde transactie. Browserkopieën, infrastructuurlogs en back-ups vragen afzonderlijk beheer. Vercel en Upstash verwerken transport-/beheerinformatie; laat de school regio's, afspraken, toegang en bewaartermijnen beoordelen.

## Een vaste versie tijdens toetsen

Deploy niet tijdens een afname. Bevries het publieke productieadres door automatische deployments vóór de afname uit te zetten en de gekozen release te controleren. In deze Vercel-inrichting vraagt het unieke deploymentadres om een Vercel-login; dat is dus geen geschikt leerlingadres. Gebruik het publieke productieadres zonder leerlingaccount, of laat ICT een afzonderlijk publiek adres voor de vaste release inrichten. Sluit oude leerlingtabbladen vóór aanvang zodat de serviceworker kan bijwerken. Vlak weigert een sessie bij afwijkende releasecontrole­som. Productie en previews moeten gescheiden opslag gebruiken.

Uitgevoerd: publieke pagina zonder account, echte docentlogin, schone start, serverberekeningen, profielhandhaving, herhaalverzoeken, tweede instantie, docentherstel en verwijderen in Vercel/Redis. De eerste proef met 30 gelijktijdige starts leverde opslagweigeringsfouten op; de wachtrij is daarop aangepast. De herhaling had 30/30 geslaagde starts, berekeningen en heartbeats; maxima respectievelijk 3,332, 5,878 en 2,472 seconden. Dit is een korte synthetische proef, geen klas-/duurtest. Bewijs staat in `evidence/vercel-live.json` en `evidence/vercel-concurrency.json`.

Vercel/Redis-hosting maakt de laptop niet afgeschermd. De toetsroute loopt via de apart ingerichte en beoordeelde SEB-schoolopstelling. [Toetsinrichting](SEB.md).

## Kosten

De Vlak-software en leerlingbediening zijn gratis. Redis is Free, met automatische betaalde upgrades uit. [Vercel Hobby](https://vercel.com/docs/plans/hobby), geraadpleegd 6 september 2026, is beperkt tot persoonlijk, niet-commercieel gebruik. Een ontwikkelproef is geen onbeperkte gratis schoolhostingbelofte. Laat de school een passend plan bepalen. Er is geen betaald Vercel-abonnement afgesloten. Begroot beheer, beoordeling, ondersteuning en reserves volgens het pilotvoorstel.
