Delen 1 en 2 produceerden betrouwbare sporen. Deel 3 bouwt het oppervlak dat de operator werkelijk ziet. Het Common Operational Picture is de laag waarop het platform wordt beoordeeld — doe het goed en vergeving stroomt door de rest van de stack; doe het verkeerd en een technisch correcte fusiepijplijn wordt uitgeschakeld in de tweede week van operaties. De architectuurpatronen zijn vastgesteld (zie Common Operational Picture: Hoe het Gebouwd Wordt in Moderne Defensiesoftware); Deel 3 vertaalt ze naar specifieke technische beslissingen.
Stap 1: Frontend-Stack
Voor het lopende voorbeeldplatform is de COP een browsergebaseerde applicatie. De keuze tussen native en web is al meer dan een decennium in het voordeel van web beslecht; de resterende native voetafdruk zit in gespecialiseerde handheld-platforms (het ATAK-ecosysteem — zie ATAK Plugin-Ontwikkeling) in plaats van commandopostweergaven.
De verdedigbare stack:
- React met TypeScript voor de applicatieschil. De ecosysteemrijpheid, beschikbaarheid van personeel en accreditatievriendelijk gereedschap maken het de veilige keuze voor een platform met een levensduur van 20 jaar. Vue is verdedigbaar; Svelte is nog geen aanbestedingswaardige keuze voor defensie.
- Cesium voor het globusaanzicht en 3D — terrein, luchtruimvolumes, satellietsporen. WebGL-versneld, volwassen, de de-facto standaard voor geospatiale 3D in defensie.
- Mapbox GL of MapLibre voor het 2D-kaartaanzicht. Vectortiles voor snelheid; rastertile-terugval voor offline gebruik. De afwegingen en het prestatieplafond staan in Realtime Kaartweergave voor Militaire C2.
- Zustand of Redux Toolkit voor toestandsbeheer. Het volume van streaming spoorwijzigingen maakt naïef React-toestandsbeheer onhoudbaar; gebruik een store met referentiestabiele selectors en ondiepe gelijkheidscomparaties.
- Ant Design of Mantine voor de omliggende gebruikersinterface — panelen, modals, formulieren. Weersta de verleiding een op maat gemaakt ontwerpsysteem te bouwen in de eerste build; kies een volwassen bibliotheek en stel de thema in op defensieconventies.
Een niet voor de hand liggende beslissing: houd de COP een single-page applicatie, geen meerpagina-site. Operators navigeren niet. Ze openen de COP eenmaal en gebruiken die urenlang. Pagina-herladingen zijn de verkeerde abstractie; weergaven en panelen binnen één schil zijn de juiste.
Stap 2: Militaire Symbologie, Goed Gedaan
Sporen worden weergegeven als symbolen. De symbolenkatalogus wordt beheerst door MIL-STD-2525D (of de equivalent NATO APP-6-variant). Zelfgemaakte symbologie is een aanbestedingsrisico en een interoperabiliteitsblokkade: op het moment dat het platform integreert met een geallied systeem, veroorzaken niet-overeenkomende symbolen een onmiddellijk nalevingsfalen.
Gebruik een onderhouden bibliotheek. De open-source milsymbol-implementatie is de de-facto keuze voor webgebaseerde COP's; ze produceert de standaard symbolenset als SVG- of canvas-tekenelementen. De bibliotheek verwerkt affiliatie (vriend, vijand, neutraal, onbekend), echelonmarkeringen, identificatietekst en de modificatoren die een generiek infanteriesymbool omzetten in "1e Bataljon, gemechaniseerd, in defensieve houding".
Het integratiepatroon: de fusie-engine zendt sporen uit met identiteitsattributen; de COP zoekt de bijbehorende MIL-STD-2525 SIDC (Symbol Identification Code) op voor die attributen; de bibliotheek geeft het symbool weer. Sla weergegeven symbolen op in cache per SIDC; hetzelfde symbool wordt duizenden keren hergebruikt in een typisch operationeel beeld.
Een praktisch detail dat vermelding verdient: MIL-STD-2525D heeft duizenden verschillende symbolen. Vrijwel geen operationeel relevant scenario gebruikt meer dan een paar honderd. Bouw de katalogus van binnen naar buiten op — begin met wat de sensors van het platform produceren, breid uit naarmate nieuwe sensorklassen arriveren.
Stap 3: Realtime Bijwerkingen via WebSocket
De taak van de COP is de spooropslag in bijna-realtime te weerspiegelen. Polling schaalt niet; WebSocket is het structurele antwoord. Het architectuurpatroon:
Een gatewayservice houdt open WebSocket-verbindingen aan naar elke browser. Ze abonneert zich op de tracks.updates- en tracks.lifecycle-topics van de fusie-engine. Wanneer een spoorwijziging arriveert, evalueert de gateway het verbindingsspecifieke filter (welk gebied, welke rollen, welke classificaties) en stuurt de wijziging naar de browser. De browser past de wijziging toe op zijn lokale toestandsopslag; React herrendert alleen de getroffen symbolen.
De niet voor de hand liggende technische details die bepalen of dit op schaal werkt:
Filtering vindt serverside plaats. Elk spoor naar elke browser sturen werkt niet — bij 10.000 sporen die meerdere keren per minuut worden bijgewerkt, verstikken zowel de verbinding als de browser. Elke verbinding heeft een abonnementsfilter (zichtvenstergrens, rolgebaseerde lagen, classificatiefilter) en alleen overeenkomende wijzigingen stromen door.
Delta-bijwerkingen, geen volledige vervangingen. Een spoorwijziging is partieel — positie gewijzigd, levenscyclusstatus gewijzigd, identiteit verfijnd. De browser past het patch toe op zijn lokale kopie. Volledig-spoor-payloads worden alleen verzonden bij initieel abonnement en bij schemamigraties.
Herverbinding met toestandsherstel. WebSocket-verbindingen vallen weg, vooral op tactische netwerken. Bij herverbinding wisselt de browser zijn laatste geziene volgnummer uit met de gateway, die gemiste bijwerkingen opnieuw afspeelt vanuit de bus. Geen statusverlies, geen volledige herverzoeken.
Tegendruktverwerking. Een trage client mag de gateway niet blokkeren. De wachtrijdiepte per client is begrensd; wanneer de wachtrij overloopt, wordt de client verbroken en gedwongen opnieuw verbinding te maken met een volledige statusophaling. Beter één operator die opnieuw verbinding maakt dan alle operators bevroren.
Stap 4: Rolgebaseerde Filtering en Classificatie
Niet elke operator ziet elk spoor. De COP van een infanteriepelotoncommandant toont geen luchtverdedigingsenganementszones. Een NATO-RESTRICTED-account ziet geen GEHEIM-geclassificeerde sporen. Het platform handhaaft dit op twee plaatsen: het gatewayfilter (wat te verzenden) en de beleidsengine (of überhaupt te verzenden).
Het rolfilter is een gebruikersspecifieke, sessiespecifieke configuratie: welke spoortypen, welke operatiegebieden, welke weergavelagen. De gebruiker kan aanpassen binnen zijn autorisatie; het systeem handhaaft de bovengrens. Het classificatiefilter is niet onderhandelbaar: de effectieve classificatie van een spoor (berekend in fusie, doorgegeven aan de gateway) moet gelijk aan of lager zijn dan de vrijgave van de gebruiker. Kruiscontroles op de API- en databaselagen — nooit alleen op de gebruikersinterface — zijn de regel. Het gedetailleerde patroon staat in Rolgebaseerde Toegangscontrole in Defensie C2-Systemen.
Een operationele noot: bouw de rolconfiguratiegebruikersinterface samen met de operatorgemeenschap, niet in isolatie. Standaardwaarden zijn belangrijk. Een infanteriegebruiker wil niet elke sessie beginnen met het uitschakelen van zes lagen irrelevante luchtverdedigingsdata. Een luchtmachtsoperator wil niet elke sessie beginnen met het inschakelen van de luchtverdedigingslagen die zijn voorganger had uitgeschakeld. Rolgebaseerde standaardwaarden die overeenkomen met de werkelijke taak van de operator halveren de basisfrustratiegraad van operators.
Kernervaring: De COP die een demonstratie wint is dicht, geanimeerd en vol overlays. De COP die operaties wint is ingetogen, snel en toont alleen wat de operator nodig heeft. Standaard minder, grotere, contrastrijkere symbolen. Laat operators detail toevoegen; start ze niet op maximale informatiedichtheid.
Stap 5: Operator-Ergonomie
Een COP die ergonomisch faalt, faalt operationeel. De discipline is opgebouwd uit een handvol niet-onderhandelbare regels.
Indicatie van verouderde sporen. Wanneer de levenscyclusstatus van een spoor vervaagt of verloren gaat, verandert het symbool — doorgaans minder helder, mogelijk omlijnd, met een ouderdomsindicator. Operators moeten in één oogopslag zien welke sporen ze kunnen vertrouwen.
Gebruikersinterface voor conflictoplossing. Wanneer twee operators tegelijkertijd hetzelfde spoor of dezelfde taak bewerken, moet het platform het conflict zichtbaar maken, niet stilzwijgend één kant overschrijven. Laatste schrijver wint op attribuutbasis is de standaard; expliciete verzoening voor cruciale attributen.
Toetsenbordgericht ontwerp. Muis-exclusieve gebruikersinterfaces falen in stressvolle operaties. Elke veelgebruikte actie heeft een toetsenbordsnelkoppeling; de snelkoppelingen zijn in het product gedocumenteerd en vindbaar.
Aanraak- en handschoenwerking voor geharde doelplatforms. Dezelfde COP draait in commandoposten op werkstations en op geharde tablets op brigadevoor-posities. Doeltreffende raakvlakken zijn afgestemd op handschoenen; hoog-contrastmodi zijn eersteklas. Het bredere patroon staat in Geharde Gebruikersinterface voor Militaire Operators.
Offline werking. Tactische-randuitrol verliest connectiviteit. De COP moet functioneren op zijn lokale cache, in de wachtrij geplaatste operatoracties opnieuw afspelen bij herverbinding, en duidelijk aangeven welke data verouderd is. Het architectuurpatroon staat in Offline-First Militaire Apps; de offline-kaartzijde in Offline Kaarten met MBTiles en PMTiles.
Stap 6: Voorbij de Kaart — Dashboards en Panelen
De COP is meer dan een kaart. Operators hebben taakinterfaces, berichtopstelling, planningstools, inlichtingenpanelen en logweergaven nodig. De platformbrede UX-regel: elk paneel gehoorzaamt dezelfde interactieconventies. Als het selecteren van een spoor op de kaart het markeert in een zijpaneel, dan markeert het selecteren van een spoor in een willekeurig paneel het op de kaart. Inconsistentie in deze laag is het meest voorkomende UX-falen in defensiesoftware.
De architectuurscheiding die het bewaren waard is: de kaartweergave is één paneel; de dashboards en zijpanelen zijn andere panelen; ze delen dezelfde selectiestatus via de centrale store. Een nieuw analysetool toevoegen is een nieuw paneel, geen nieuwe applicatie. De dashboard-architectuurpatronen staan in C2-Dashboard-Architectuur.
Stap 7: Prestatiedoelstellingen
De doelstellingen van de COP zijn strakker dan ze klinken:
- Initieel laden onder 3 seconden op een tactisch-rand laptop met gecachte statische bestanden.
- Spoorwijzigingslatentie onder 200 ms van gateway-uitvoer tot zichtbaar verplaatst symbool in de browser.
- Aanhoudende 60 FPS kaartweergave met tot 10.000 zichtbare sporen.
- Pan-en-zoom responsief op typische tactische kaartschalen (1:50.000 tot 1:1.000.000).
- Geheugen begrensd — de browser moet de hele dag draaien zonder lekken. Profileer elke release.
De doelstellingen zijn haalbaar met de gekozen stack; ze missen is doorgaans het gevolg van een architectuursnelkoppeling eerder in de pijplijn (serverside filtering niet geïmplementeerd, volledige payloads in plaats van delta's, naïef toestandsbeheer).
Wat Volgt
Deel 3 heeft de COP gebouwd. Sporen worden weergegeven met correcte symbologie; bijwerkingen stromen via WebSocket; operators zien alleen waartoe ze bevoegd zijn; de ergonomie ondersteunt echte operaties. Het platform is nu bruikbaar voor een operator — maar nog niet leverbaar.
Deel 4 sluit de cirkel: NATO-interoperabiliteitsbridges (CoT, MIP4, STANAG 4559), classificatielabeling en handhaving van vrijgavebaarheid, de DevSecOps-pijplijn die accreditatiebewijs produceert, en air-gapped uitrol voor tactisch-randgebruik. Na Deel 4 is het platform operationeel inzetbaar.