Frontpages en overzichtsschermen
4.1 Doel
Frontpages zijn overzichts- en oriëntatiepagina’s. Zij geven gebruikers na binnenkomst in een geldige context een veilige startpositie, tonen compacte samenvattingsinformatie en verwijzen naar vaste vervolgroutes.
Een frontpage is nadrukkelijk geen detailpagina en geen mutatiescherm. Acties waarvoor eerst een leerling, kind, niveau, categorie, oefening, melding, account, module of ander domeinobject gekozen moet worden, blijven onderdeel van de achterliggende domeinflows.
Frontpages ondersteunen vooral:
- herkenbare startcontext na login;
- rolgerichte oriëntatie;
- veilige doorverwijzing naar onderliggende routes;
- compacte samenvattingsblokken;
- read-only tellers en signalen;
- contextgedreven contentblokken;
- systeemnotificaties na normale paginaload.
4.2 Algemene frontpageregels
Voor alle frontpages gelden de volgende functionele regels.
- De structurele layout en volgorde van hoofdblokken zijn codegedreven.
- Beheerbare teksten, titels, labels en introducties kunnen via contentbeheer worden aangepast waar dat functioneel is voorzien.
- Frontpages voeren geen contextafhankelijke domeinmutaties uit zonder expliciete objectselectie op een vervolgpagina.
- Samenvattingswaarden zijn afgeleide readmodelwaarden.
- Iedere teller moet een eenduidige teldefinitie hebben.
- Geen enkele teller, kaart, knop of zichtbare route op een frontpage is autorisatiebewijs.
- Vervolgacties controleren opnieuw server-side de actuele rol-, relatie-, object- en domeincontext.
- Clientstate, browsergeschiedenis, querystrings of oude frontendselecties mogen geen frontpagecontext afdwingen.
- Lege toestanden zijn normale toestanden wanneer de gebruiker wel toegang heeft tot de frontpage maar er geen relevante data is.
- Systeemnotificaties blokkeren het laden van de frontpage niet. De pagina laadt eerst; daarna worden relevante notificaties boven de geladen pagina beoordeeld.
4.3 Bronpositie
Frontpages gebruiken meerdere bronlagen.
| Bronlaag | Betekenis |
|---|---|
| FO | Beschrijft de functionele samenhang, contextregels en afbakening van frontpages. |
| Usecases | Beschrijven hoe frontpages per rolcontext worden geopend en samengesteld. |
| Schermdocumentatie | Beschrijft per frontpage de concrete blokken, waarden, acties en lege toestanden. |
| Contentbeheer | Beheert tekstuele inhoud binnen bestaande frontpageblokken. |
| Database-informatie | Beschrijft brondata, contentblokken, readmodels, systeemnotificaties en history. |
| Mockups | Ondersteunen visuele interpretatie, maar zijn geen bron voor definitieve tellers of testdata. |
De frontpage zelf is geen zelfstandige persistente domeinentiteit. Frontpages worden opgebouwd uit accountcontext, rolcontext, relatiecontext, domeindata, contentblokken en afgeleide readmodels.
4.4 Contentblokken op frontpages
Frontpagecontent gebruikt het uniforme contentblokmodel.
Voor frontpages geldt:
| Veld | Betekenis |
|---|---|
DomainType | FrontPage |
ContextType | Public, NoRole, Student, Guardian, Teacher of Admin |
ReferenceKey | Codevaste sleutel van het frontpageblok |
Title | Beheerbare titel waar ondersteund |
Text | Beheerbare tekst waar ondersteund |
Contentblokken beheren tekstuele inhoud, niet de structurele pagina-opbouw.
Niet beheerbaar via frontpagecontent zijn:
- blokvolgorde;
- bloklocatie;
- componenttype;
- layout;
- responsive gedrag;
- autorisatie;
- zichtbare gegevenssets;
- tellerdefinities;
- routegedrag;
- nieuwe technische blokkeys;
- nieuwe frontpagecontexten;
- persistente ontwerpen per rolcombinatie.
Wanneer een verwacht contentblok ontbreekt, wordt het blok veilig niet geladen of toont beheer een duidelijke niet-beschikbaarafhandeling. Het ontbreken van een contentblok leidt niet automatisch tot seed- of migratierecords.
4.5 Frontpagebeheer versus frontpageweergave
Frontpagebeheer is een beheerfunctie voor tekstuele content binnen bestaande basiscontexten. Frontpageweergave is de runtime-gebruikerspagina.
| Aspect | Frontpagebeheer | Frontpageweergave |
|---|---|---|
| Doel | Tekstuele inhoud beheren. | Gebruiker oriënteren binnen actieve context. |
| Actor | Beheerder. | Eindgebruiker of beheerder in runtimecontext. |
| Mutatie | Alleen beheerbare contentvelden na expliciet opslaan. | Geen domeinmutaties. |
| Layout | Read-only / codegedreven. | Codegedreven. |
| Tellers | Niet configureerbaar. | Read-only afgeleid. |
| Rolcombinaties | Controleerbaar, niet als apart ontwerp opgeslagen. | Runtime samengesteld. |
Frontpagebeheer mag geen autorisaties, navigatierechten, zichtbare gegevenssets of tellerdefinities wijzigen.
4.6 Niet-ingelogde frontpage
De publieke frontpage is de startpagina voor niet-ingelogde gebruikers.
Deze pagina toont geen afgeschermde domeindata.
Minimaal aanwezig zijn:
- publieke introductietekst;
- loginroute;
- registratieroute wanneer registratie is toegestaan;
- publieke footercontext;
- eventueel publieke contentblokken;
- eventueel publieke systeemnotificatie na paginaload.
De niet-ingelogde frontpage toont geen:
- oefencatalogus;
- leerlingcategorieën;
- persoonlijke resultaten;
- berichten;
- meldingen;
- relaties;
- rolgebonden navigatie;
- profielmenu;
- beheerinformatie.
Wanneer registratie sitebreed is uitgeschakeld, wordt de registratieroute niet als reguliere actie aangeboden.
4.7 Frontpage zonder actieve rol
Een ingelogde gebruiker kan wel geauthenticeerd zijn, maar nog geen bruikbare actieve OefenHub-rolcontext hebben.
Deze situatie kan ontstaan:
- na provisioning;
- wanneer nog geen rol is toegekend;
- wanneer alleen inactieve rollen bestaan;
- wanneer de accountcontext nog niet volledig is;
- wanneer aanvullende profiel- of niveaucontext nodig is.
De frontpage zonder actieve rol is een beperkte, veilige context.
Deze pagina mag:
- uitleggen dat nog geen volledige rolcontext beschikbaar is;
- verwijzen naar profiel, verplichte vervolgstap of contactroute;
- algemene systeemnotificaties voor ingelogde gebruikers tonen na paginaload;
- publieke of no-role content tonen waar toegestaan.
Deze pagina mag niet:
- rolgebonden functies tonen;
- categorieën of oefeningen tonen;
- leerling-, docent-, ouder-/voogd- of beheerinformatie tonen;
- een willekeurige rol of niveaucontext kiezen;
- oude clientstate gebruiken om alsnog een rolfrontpage te tonen.
4.8 Leerling-frontpage
De leerling-frontpage is de primaire landingspagina voor oefenen.
Deze frontpage gebruikt:
- actieve leerlingrol;
- actieve accountstatus;
- geldige leerlingcontext;
- actieve niveaucontext;
- actuele oefentoegang;
- toegankelijke categorieën en oefeningen;
- afgeronde en niet-afgeronde oefenruns;
- leerlinggerichte contentblokken.
De leerling-frontpage is geen tweede autorisatiebron. Iedere vervolgroute naar categorie, oefening, geschiedenis, resultaatdetail of hervatten controleert opnieuw server-side de actuele toegang.
4.8.1 Functionele blokken
| Blok | Betekenis |
|---|---|
| Intro / welkom | Leerlinggerichte uitleg of starttekst, beheerbaar via frontpagecontent waar ondersteund. |
| Categorienavigatie | Toegankelijke categorieën binnen actuele niveaucontext. |
| Verder oefenen | Alleen zichtbaar wanneer een hervatbare niet-afgeronde run binnen de actuele context bestaat. |
| Populaire categorieën en oefeningen | Afgeleid uit afgeronde runs en actuele toegankelijke leerlingcontext. |
| Recent geoefend | Maximaal de drie laatst afgeronde oefeningen binnen de relevante leerling- en niveaucontext. |
| Statistieken | Dynamische totalen, verdelingen en voortgangswaarden op basis van afgeronde runs. |
| Lege toestand geen docent / geen toegang | Informatieve toestand wanneer geen docentautorisatie of geen toegankelijke oefening beschikbaar is. |
4.8.2 Leerlingregels
Voor de leerling-frontpage gelden aanvullend:
- OefenHub kiest niet stilzwijgend een willekeurig standaardniveau wanneer een verplichte niveaucontext ontbreekt.
- Categorieën en oefeningen worden alleen getoond wanneer zij actueel toegankelijk zijn.
- Historische resultaten geven niet automatisch actuele start- of hervattoegang.
- Niet-afgeronde runs tellen niet als afgeronde resultaten.
- Tijdens een actieve oefening worden afleidende signalen zoals badges en notificatie-overlays niet opdringerig getoond.
- De frontpage zelf start geen oefenrun zonder bewuste vervolgactie.
4.9 Docent-frontpage
De docent-frontpage is een rustige overzichtspagina voor de docentcontext.
Deze frontpage toont compacte samenvattingsblokken en vaste routes, maar voert geen diepe beheeracties uit.
De docent-frontpage gebruikt onder meer:
- actieve docentrol;
- docentcontext;
- docent-leerlingrelaties;
- docentniveaus;
- niveauautorisaties;
- categorie- en oefenstructuur;
- collaboratorcontext waar relevant;
- openstaande uitnodigingen;
- contentblokken voor docentfrontpage.
4.9.1 Functionele blokken
| Blok | Betekenis |
|---|---|
| Introblok | Docentgerichte uitleg en oriëntatie. |
| Leerlingenoverzicht | Compacte kerncijfers rond gekoppelde leerlingen, autorisaties en openstaande uitnodigingen. |
| Niveaus & inhoud | Compacte kerncijfers rond niveaus, categorieën, actieve oefeningen en oefeningen in onderhoud. |
De docent-frontpage bevat bewust geen realtime onlineblok en geen leerlinglijst. Online leerlingen, live meekijken, leerlingdetails, geschiedenis, autorisaties en oefenconfiguratie blijven bereikbaar via de daarvoor bedoelde routes.
4.9.2 Docentregels
Voor de docent-frontpage gelden aanvullend:
- de frontpage is read-only voor domeindata;
- leerlingdetails worden niet rechtstreeks op de frontpage geopend zonder vervolgroute;
- tellerwaarden zijn afgeleid uit docentcontext;
- docent- en ouder-/voogdcontext blijven bij combinatierollen functioneel gescheiden;
- clientstate mag geen docentcontext afdwingen;
- systeemnotificaties worden pas na normale frontpageload beoordeeld.
4.10 Ouder-/voogd-frontpage
De ouder-/voogd-frontpage geeft een compacte samenvatting van gekoppelde kinderen en resultaten.
Deze frontpage gebruikt onder meer:
- actieve ouder-/voogdrol;
- actieve GuardianStudent-relaties;
- gekoppelde kinderen;
- afgeronde oefenruns;
- resultaat- en geschiedenisreadmodels;
- ouder-/voogdgerichte contentblokken;
- relevante systeemnotificaties na paginaload.
4.10.1 Functionele blokken
| Blok | Betekenis |
|---|---|
| Introblok | Ouder-/voogdgerichte uitleg en oriëntatie. |
| Kinderenoverzicht | Compacte samenvatting van actief gekoppelde kinderen. |
| Resultatensamenvatting | Samenvatting van afgeronde resultaten van actief gekoppelde kinderen. |
| Verwijzingen | Routes naar Kinderen, Geschiedenis en Online. |
4.10.2 Ouder-/voogdregels
Voor de ouder-/voogd-frontpage gelden aanvullend:
- alleen actieve ouder-/voogdrelaties tellen mee;
- beëindigde relaties, verlopen uitnodigingen en pending uitnodigingen tellen niet als actieve kindrelatie;
- resultaten worden alleen getoond voor actief gekoppelde kinderen;
- niet-afgeronde runs en docenttestruns tellen niet mee als afgeronde kindresultaten;
- een ouder/voogd kan geen oefening namens een kind starten, hervatten, beantwoorden, corrigeren, opnieuw maken of delen;
- kinddetails, geschiedenis, resultaatdetails, PDF-export en live meekijken blijven vervolgflows na objectselectie.
4.11 Beheerder-frontpage
De beheerder-frontpage is een overzichts- en oriëntatiepagina voor centrale beheercontext.
Deze frontpage bevat minimaal:
- introblok;
- attentieblok;
- contentbeheerblok;
- accounts-en-rollenblok;
- recente beheerwijzigingen.
De beheerder-frontpage is geen werkpagina voor inhoudelijke beheerwijzigingen. Diepere beheeracties lopen via Site Instellingen, Content, Accounts beheren en onderliggende beheerpagina’s.
4.11.1 Functionele blokken
| Blok | Betekenis |
|---|---|
| Introblok | Beheerdergerichte uitleg en oriëntatie. |
| Vandaag extra aandacht | Direct relevante beheerindicatoren zoals modules in onderhoud, beheerders, meldingen en actieve notificaties. |
| Contentbeheer | Samenvatting van actieve categorieën, modules, niveaus en oefeningen. |
| Accounts & rollen | Samenvatting van actieve accounts en rolverdeling. |
| Recente beheerwijzigingen | Compacte read-only lijst van recente centrale beheeracties. |
4.11.2 Beheerderregels
Voor de beheerder-frontpage gelden aanvullend:
- de beheercontext wordt server-side bepaald;
- de frontpage voert geen inhoudelijke beheerwijziging uit;
- recente wijzigingen zijn compacte auditinformatie en vervangen geen detailhistorie per domein;
- tellerwaarden zijn read-only en afgeleid;
- het attentieblok toont signalen, maar voert geen automatische correcties uit;
- beheerderfrontpage en gecombineerde frontpages zijn geen vrije pagebuilder.
4.12 Gecombineerde frontpages
Gebruikers kunnen de rollen Ouder/voogd, Docent en Beheerder combineren. De rol Leerling is niet combineerbaar met deze rollen.
Voor combinatierollen wordt de frontpage runtime samengesteld uit basiscontexten.
Er bestaat geen aparte persistente frontpageconfiguratie per rolcombinatie.
De vaste prioriteit is:
- Beheerder;
- Docent;
- Ouder/voogd.
4.12.1 Docent + ouder/voogd
Wanneer een gebruiker zowel Docent als Ouder/voogd is:
- wordt één gezamenlijk introblok getoond;
- volgen eerst docentblokken;
- volgen daarna ouder-/voogdblokken.
Docentcontext en ouder-/voogdcontext blijven functioneel gescheiden.
4.12.2 Beheerder + docent en/of ouder/voogd
Wanneer een gebruiker ook Beheerder is:
- worden eerst beheerderblokken getoond;
- daarna docentblokken;
- daarna ouder-/voogdblokken.
De beheerdercontext verruimt de normale docent- of ouder-/voogdcontext niet. Binnen ieder blok gelden de eigen domeinregels.
4.12.3 Geen gemengde autorisatie
Gecombineerde frontpages mengen geen autorisaties.
Voorbeelden:
- docentblokken geven geen ouder-/voogdrecht;
- ouder-/voogdblokken geven geen docentresultaatrecht;
- beheerderblokken geven geen live-meekijkrecht;
- zichtbare gecombineerde blokken zijn geen bewijs dat detailroutes toegankelijk zijn;
- iedere vervolgroute voert opnieuw server-side contextcontrole uit.
4.13 Tellers en samenvattingswaarden
Tellers en samenvattingswaarden zijn afgeleid uit brondata of readmodels.
Per teller moet minimaal bekend zijn:
| Aspect | Vraag |
|---|---|
| Domeinobject | Welk object of welke objecten worden geteld? |
| Statusfilter | Welke statussen tellen mee? |
| Activiteitsfilter | Tellen inactieve, verwijderde, verlopen of soft-deleted records mee? |
| Tijdvenster | Geldt er een periode, bijvoorbeeld vandaag, deze week of recente wijzigingen? |
| Rolcontext | Welke rolcontext begrenst de telling? |
| Relatiecontext | Welke relatie of koppeling is vereist? |
| Objectscope | Gaat het om eigen objecten, gekoppelde objecten of centrale objecten? |
| Distinct-logica | Moet uniek worden geteld of tellen dubbele koppelingen mee? |
| Testdata | Tellen testmodules, docenttestruns of testzichtbare records mee? |
| Autorisatie | Wordt de teller alleen opgebouwd uit data die de gebruiker mag zien? |
Mockupwaarden zijn voorbeelddata. Zij zijn geen definitieve productieaantallen.
4.14 Systeemnotificaties op frontpages
Systeemnotificaties worden na normale frontpageload beoordeeld.
Voor frontpages geldt:
- de frontpage laadt eerst;
- daarna controleert de applicatie of een systeemnotificatie relevant en actief is;
- maximaal één systeemnotificatie wordt tegelijk getoond;
- bij meerdere relevante notificaties wordt de oudste aangemaakte relevante notificatie eerst getoond;
- na sluiten kan een volgende relevante notificatie worden beoordeeld;
- notificaties blokkeren geen frontpagecontextbepaling;
- notificaties zijn geen mailbox-systeemberichten;
- notificaties zijn geen popupregister-popups;
- notificaties wijzigen geen frontpagedata.
Tijdens een actieve leerling-oefening worden systeemnotificaties niet boven de oefening geplaatst.
4.15 Lege toestanden
Lege toestanden zijn normale toestanden wanneer de gebruiker wel toegang heeft tot een frontpage maar er geen relevante data beschikbaar is.
Voorbeelden:
- leerling heeft geen toegankelijke oefeningen;
- leerling heeft geen recent geoefende afgeronde runs;
- leerling heeft geen hervatbare run;
- docent heeft nog geen gekoppelde leerlingen;
- docent heeft nog geen actieve niveaus;
- ouder/voogd heeft nog geen gekoppelde kinderen;
- beheerder heeft geen recente beheerwijzigingen;
- er zijn geen actieve systeemnotificaties.
Een lege toestand mag informatief zijn en naar een passende vervolgstap verwijzen, maar mag geen verborgen autorisatie- of foutdetails lekken.
4.16 Fouttoestanden
Fouttoestanden ontstaan wanneer de frontpagecontext niet veilig bepaald of opgebouwd kan worden.
Voorbeelden:
- gebruiker heeft geen actieve accountstatus;
- rolcontext ontbreekt of is ongeldig;
- verplichte niveaucontext ontbreekt;
- contextquery faalt technisch;
- readmodelopbouw faalt;
- frontpagecontent kan niet veilig geladen worden;
- tellerdefinitie of statusfilter is inconsistent;
- routecontext wordt gemanipuleerd;
- gebruiker probeert een gecombineerde context als persistente beheerconfiguratie op te slaan.
Bij fouttoestanden toont OefenHub een veilige melding of redirect zonder technische details, tokens, stacktraces of gevoelige data.
4.17 Relatie tot andere FO-hoofdstukken
| Hoofdstuk | Relatie |
|---|---|
| Rollen, context en autorisatie | Bepaalt welke rolcontext en combinatierolcontext geldig is. |
| Applicatieschil, header, footer en navigatie | Bepaalt header, menu’s, badges en footer rondom frontpages. |
| Account, profiel en voorkeuren | Bepaalt no-role, verplichte profiel- en niveaucontext. |
| Contentbeheer, vaste pagina’s en footer | Beschrijft beheer van frontpagecontent en contentblokken. |
| Popups, templates, features en systeemnotificaties | Beschrijft systeemnotificaties en displayregels. |
| Schermlaag en UX-specificaties | Beschrijft schermdocumentatie, UX-principes, read-only gedrag en lege toestanden. |
4.18 Gerelateerde bronverwijzingen
| Bron | Link |
|---|---|
| Technisch Ontwerp — rolflows | Rollenflows technisch |
| Technisch Ontwerp — readmodels en tellers | Readmodels, tellers, badges, caching en materialisatie |
| Technisch Ontwerp — frontend Blazor | Frontend, Blazor, routing, state en componentopbouw |
| Usecases — beheerder frontpage en context | Beheerder — frontpage en context |
| UC-BEH-FP-001 — Beheerder-frontpage bekijken | Beheerder-frontpage bekijken |
| UC-BEH-FP-002 — Beheercontext bepalen | Beheercontext bepalen |
| UC-BEH-FP-003 — Beheersamenvattingen tonen | Beheersamenvattingen tonen |
| UC-BEH-FP-004 — Recente beheerwijzigingen tonen | Recente beheerwijzigingen tonen |
| UC-BEH-FP-005 — Gecombineerde beheerder-docent-ouder-frontpage tonen | Gecombineerde beheerder-docent-ouder-frontpage tonen |
| Usecases — docent frontpage en context | Docent — frontpage en context |
| UC-DOC-FP-001 — Docent-frontpage bekijken | Docent-frontpage bekijken |
| UC-DOC-FP-002 — Docentcontext bepalen | Docentcontext bepalen |
| UC-DOC-FP-003 — Leerlingenoverzichtsamenvatting tonen | Leerlingenoverzichtsamenvatting tonen |
| UC-DOC-FP-004 — Niveaus- en inhoudsamenvatting tonen | Niveaus- en inhoudsamenvatting tonen |
| UC-DOC-FP-005 — Gecombineerde docent-ouder-frontpage tonen | Gecombineerde docent-ouder-frontpage tonen |
| Usecases — leerling frontpage en niveaucontext | Leerling — frontpage en niveaucontext |
| UC-LLN-FP-001 — Leerling-frontpage bekijken | Leerling-frontpage bekijken |
| UC-LLN-FP-002 — Actieve niveaucontext toepassen | Actieve niveaucontext toepassen |
| UC-LLN-FP-003 — Populaire categorieën en oefeningen tonen | Populaire categorieën en oefeningen tonen |
| UC-LLN-FP-004 — Recent geoefend tonen | Recent geoefend tonen |
| UC-LLN-FP-005 — Verder-oefenenblok tonen | Verder-oefenenblok tonen |
| Usecases — ouder/voogd frontpage en context | Ouder/voogd — frontpage en context |
| UC-OVG-FP-001 — Ouder-/voogd-frontpage bekijken | Ouder-/voogd-frontpage bekijken |
| UC-OVG-FP-002 — Ouder-/voogdcontext bepalen | Ouder-/voogdcontext bepalen |
| UC-OVG-FP-003 — Kinderenoverzichtsamenvatting tonen | Kinderenoverzichtsamenvatting tonen |
| UC-OVG-FP-004 — Resultatenoverzichtsamenvatting tonen | Resultatenoverzichtsamenvatting tonen |
| UC-OVG-FP-005 — Gecombineerde docent-ouder-frontpage tonen | Gecombineerde docent-ouder-frontpage tonen |
| Usecases — frontpagebeheer | Frontpagebeheer |
| UC-BEH-FRONT-006 — Runtime-samenstelling van gecombineerde frontpage controleren | Runtime-samenstelling van gecombineerde frontpage controleren |
| Schermdocumentatie — publieke frontpage | Generiek — Niet ingelogd |
| Schermdocumentatie — beheerder frontpage | Beheerder frontpage |
| Schermdocumentatie — docent frontpage | Docent frontpage |
| Schermdocumentatie — leerling frontpage | Leerling frontpage |
| Schermdocumentatie — leerling frontpage geen docent | Leerling frontpage geen docent |
| Schermdocumentatie — ouder/voogd frontpage | Ouder/voogd frontpage |
| Schermdocumentatie — ouder/voogd ook docent | Ouder/voogd ook docent |
| Database-informatie — configuratie en contentbeheer | Configuratie en contentbeheer |
| FO — rollen, context en autorisatie | Rollen, context en autorisatie |
| FO — applicatieschil, header, footer en navigatie | Applicatieschil, header, footer en navigatie |
| FO — contentbeheer, vaste pagina’s en footer | Contentbeheer, vaste pagina’s en footer |
| FO — popups, templates, features en systeemnotificaties | Popups, templates, features en systeemnotificaties |