De relatie tussen de Dexes Marktplaats, tenants en datahubs — van overzicht tot detail.
Dit is het prototype van de tweede generatie van de Dexes‑marktplaats voor DMI — afgekort Gen2. Gen2 is een evolutie van de huidige Dexes‑marktplaats die de betrouwbaarheid, gebruiksvriendelijkheid en betaalbaarheid van de dienst vanaf 2028 verder moet vergroten.
Uitgangspunten voor Gen2 die in dit prototype zijn verwerkt en afwijken van de huidige Dexes‑applicatie:
De site is voor demonstratie online beschikbaar op gen2.dexes.eu, afgeschermd met een wachtwoord.
Dexes is het centrale platform met alle gepubliceerde datasets, diensten, applicaties en bundels. Organisaties kunnen hier een eigen branded marktplaats (tenant) op bouwen met een gerichte collectie. Binnen zo'n marktplaats kunnen afgesloten datahubs worden aangemaakt voor specifieke projecten of partners.
Dit prototype laat zien hoe een gebruikersinterface bovenop de bestaande DCAT API's van de Dexes catalogus kan werken. De applicatie is gegenereerd in sessie met Claude CoWork, gepushed naar een Gitlab omgeving en vandaaruit gedeployed op een Applicatieserver in Nederland (AMS3). Ter ondersteuning van de zoekfunctie is een Meili-search Cloud omgeving ingezet. De van oorsprong Franse opensource zoekmachine draait op een cloudserver in Frankfurt, EU.
De catalogus omvat de datasets, diensten en applicaties die in de API's op productieomgeving van dexes.eu beschikbaar zijn. Er is geen data toegevoegd. Alleen configuratie.
De onderdelen van het prototype die voor generatie 2 van de catalogus relevant zijn:
Wat werkt nog niet:
De voordelen van deze aanpak:
De catalogus is een statische single‑page applicatie zonder build‑stap: alle code staat als platte HTML / CSS / JavaScript in de repo en wordt direct in de browser geladen. Dit houdt deployment en onderhoud licht en maakt incrementele aanpassingen door product managers (samen met Claude CoWork) eenvoudig.
De voornaamste onderdelen:
index.html als shell, css/styles.css voor de hoofdstijl en css/theme-light.css voor het optionele Figma‑thema. JavaScript is gesplitst in modules: app.js (routing en hoofdlogica), meili.js (zoekkoppeling), i18n.js (NL/EN vertalingen), tenant-bootstrap.js + tenant-switcher.js (whitelabel‑logica) en login.js (sessie‑auth). De toevoegformulieren zitten in js/forms/: publish-wizard.js (de vier‑onderdelen flow), publish-bundle-picker.js, publish-distribution-editor.js, publish-related-sources.js en request-form.js.tenants/registry.json als centrale lijst, met per tenant (dexes, dmi, nldt, opendata, tripply) een eigen map met config en logo's. Eén codebase, geen aparte bundles per tenant.server.js: een minimale Express‑server met HTTP Basic Auth voor de productie‑omgeving (Digital Ocean App Platform, regio AMS3). Lokaal volstaat npx serve ..meili-indexer/. index.js synct de DCAT‑catalogus, index-organizations.js de iSHARE organisaties, en index-pdc.js de PDC. De modulaire kern (fetcher, transformer, resolver, meili‑client) zit in meili-indexer/src/. De zoekindex draait op Meili Cloud (Frankfurt, EU).Broncode: gitlab.com/dexes.eu/dexes-gen2/dexes-gen2-uit — pushes naar main worden automatisch door Digital Ocean opgepakt en uitgerold.
De catalogus kent twee visuele thema's: het standaard Dexes thema en een licht "Figma" thema (Wiebe 2026). Het thema wordt geactiveerd via een URL‑parameter en daarna onthouden in localStorage:
https://dexes.eu/?theme=figma → licht thema aan
https://dexes.eu/?theme=default → terug naar standaard
De URL‑parameter wordt na lezen direct uit het adres gestript (anders zou app.js de parameter als zoekfilter zien en zoekresultaten wegfilteren). De voorkeur blijft daarna actief op alle volgende pagina's totdat hij expliciet wordt uitgezet met ?theme=default. Schakelen via DevTools‑console kan ook:
localStorage.setItem('dexes-theme', 'figma'); location.reload(); // aan
localStorage.removeItem('dexes-theme'); location.reload(); // uit
De override‑regels staan in css/theme-light.css. Het laden van het lichte thema gebeurt al in de <head> via document.write, vóór de hoofdstylesheet rendert, zodat er geen "flash of unstyled content" optreedt.
Naast de hoofdcatalogus draaien er meerdere whitelabel‑tenants op dezelfde codebase en dezelfde Meili‑zoekindex — bijvoorbeeld de DMI Open Marktplaats en Tripply. Iedere tenant is een deelverzameling van de centrale catalogus, gefilterd op een metadata‑veld in de API dat aangeeft tot welke dataspace een dataset, dienst of applicatie behoort.
Wisselen kan op drie manieren:
tenants/registry.json door js/tenant-switcher.js. Hierin staan alle beschikbare tenants met hun naam, kleur, logo en zoekscope.js/tenant-bootstrap.js) detecteert dat en laadt de juiste configuratie en kleurset.Per tenant wordt een eigen kleurpalet, logo en filterscope toegepast, maar de zoekfunctie, filters en formulieren blijven exact hetzelfde — er worden dus geen aparte bestanden of code geladen om een tenant te tonen. Dit houdt de catalogus efficiënt en goed onderhoudbaar; de schaalbaarheidsvraag is of dit op termijn voldoende blijft naarmate er tientallen tenants bijkomen.
Belangrijk: het mandje (zie hieronder) blijft bewaard tussen tenants — items uit de DMI marktplaats kunnen dus samen met items uit Tripply in één bundel terechtkomen.
Een bundel is een gegroepeerde verzameling van bestaande resources (datasets, diensten en/of applicaties) die samen als één geheel kunnen worden gepubliceerd of aangeboden. Het maken van een bundel verloopt via het mandje rechtsboven in de header:
localStorage en blijft dus actief tussen sessies en tussen tenants — de gebruiker kan rustig zoeken in de hoofdcatalogus, dan overstappen naar een datahub, en later terugkomen om de bundel af te ronden.Het toevoegformulier (te bereiken via menu Aanbod en via Maak bundel vanuit het mandje) is opgebouwd uit vier hoofdsecties die niet‑lineair zijn — je kunt vrij tussen secties heen en weer springen, en tussendoor opslaan. Elke sectie heeft een statusbolletje dat groen wordt als alle verplichte velden gevuld zijn:
Verplichte velden zijn gemarkeerd met * — de rest is optioneel maar verhoogt de vindbaarheid. Tussendoor kan altijd worden opgeslagen via Bewaar rechts onderaan; de status blijft bewaard zodat het formulier later kan worden afgemaakt. Via de knop Overzicht bekijken rechtsboven in het formulier verschijnt een overzichtsmodal met alle ingevulde velden per sectie en directe Bewerken‑links.
Let op: de feitelijke koppeling met Dexes Clearing (de Offer‑afhandeling met policies en voorwaarden) zit nog niet in dit prototype. De velden zijn aanwezig en de flow is volledig, maar bij Vraag toegang gebeurt nog niets.
De centrale hub die alle gepubliceerde datasets, diensten en applicaties van iedere aanbieder bevat. Elk item dat ergens binnen het Dexes-netwerk beschikbaar is, staat hier eerst.
Bevat alleen mobiliteits-gerelateerde datasets & diensten
Bevat alleen Smart City-relevante datasets & diensten
Nieuwe branded marktplaatsen kunnen op elk moment als tenant worden toegevoegd aan het Dexes platform