Filtering en regio-waterval

Opmerking toevoegen

Je kunt opmerkingen plaatsen via Opmerking toevoegen aan de rechterkant van de pagina.

Overzicht

De nieuwsbrief stuurt elke werkdag per kandidaat een gepersonaliseerde digest met de opdrachten van die dag. De selectie is gebaseerd op de voorkeuren van de kandidaat: vakgebied, provincie, functie/rol en contractvorm. Als er binnen de volledige voorkeuren niets te vinden is, verbreedt de nieuwsbrief stap voor stap via een waterval, zodat een kandidaat zelden of nooit een lege of doodlopende mail krijgt.

Deze pagina legt uit hoe die waterval werkt, wat "buiten je regio" precies betekent (met een kaart), en hoe we voorkomen dat een storing in de opdrachtenbron tot een misleidende mail leidt.

Positie in de keten

flowchart LR
  A[Aanmelding op website] --> B[Voorkeuren ingesteld]
  subgraph NB[Dagelijkse nieuwsbrief]
    direction LR
    C[Opdrachten van vandaag] --> D[Digest per kandidaat]
  end
  B --> NB
  NB --> E[Kandidaat reageert]
  classDef ph fill:none,stroke:#94a3b8,stroke-dasharray:5 5,color:#475569
  classDef act stroke:#059669,stroke-width:3px
  class NB ph
  class D act

Kernidee: een waterval, geen dood spoor. De volgorde is nabijheid eerst: eigen provincie, dan buurprovincies, dan heel Nederland, en pas als laatste een terugkoppeling met de huidige voorkeuren. Bij elke stap blijft de match op vakgebied, rol en contractvorm gelden; alleen het geografische bereik wordt ruimer.


Procesflow

Per werkdag draait de nieuwsbrief eenmaal. Eerst een veiligheidscheck op de bron, daarna per kandidaat de waterval. De eerste stap die genoeg passende opdrachten oplevert, wint; anders zakt de kandidaat een stap verder.

flowchart TD
  S([Werkdag, vaste avondtijd])
  S --> G{Genoeg nieuwe opdrachten vandaag?}
  G -->|Nee, bron leeg| AB[Versturen afbreken en ops waarschuwen]
  G -->|Ja| L[Per aangemelde kandidaat]
  L --> T1{Iets in eigen provincie?}
  T1 -->|Ja| M1[Tier 1: eigen provincie]
  T1 -->|Nee| T2{Iets in buurprovincies?}
  T2 -->|Ja| M2[Tier 2: buurprovincies]
  T2 -->|Nee| T3{Iets elders in NL?}
  T3 -->|Ja| M3[Tier 3: elders in het land]
  T3 -->|Nee| M4[Tier 4: terugkoppeling en voorkeuren aanpassen]
  M1 --> X([Mail verstuurd])
  M2 --> X
  M3 --> X
  M4 --> X
  classDef startNode fill:#ecfeff,stroke:#0891b2,color:#0e7490
  classDef finishNode fill:#ecfdf5,stroke:#059669,color:#065f46
  classDef decisionNode fill:#fefce8,stroke:#ca8a04,color:#854d0e
  class S startNode
  class X finishNode
  class G,T1,T2,T3 decisionNode

De vier tiers

1

Tier 1 - eigen provincie

Opdrachten die volledig aansluiten: jouw vakgebied en rol, binnen je eigen provincie(s) en contractvorm. Dit is de normale digest.
2

Tier 2 - buurprovincies

Niets in je eigen provincie? Dan tonen we passende opdrachten in de direct aangrenzende provincies. Dit is letterlijk 'net buiten je regio'.
3

Tier 3 - elders in het land

Ook in de buurprovincies niets? Dan kijken we landelijk: opdrachten die aansluiten op je vakgebied en rol, waar dan ook in Nederland.
4

Tier 4 - terugkoppeling

Niets dat aansluit. We tonen het aantal nieuwe opdrachten van vandaag, je huidige voorkeuren, en een knop om je voorkeuren te verbreden. Zo blijft de kans op een match groeien.

Wat betekent "buiten je regio"?

"Buurprovincies" zijn de provincies die direct aan jouw provincie grenzen (over land). De kaart hieronder laat dat zien: kies een provincie en je ziet de eigen regio plus de buurprovincies oplichten. Dit is precies de set die in tier 2 wordt gebruikt.

Buurprovincies

Klik een provincie om de buren te zien

GRFRDROVFLGEUTNHZHZENBLI

Utrecht plus 4 buurprovincies: Flevoland, Gelderland, Zuid-Holland, Noord-Holland.

Eigen regioBuurprovincieOverig

Klik of hover op een provincie om de buurprovincies te zien.

We rekenen bewust met landsgrenzen, niet met water-oversteken (bijvoorbeeld Noord-Holland naar Friesland via de Afsluitdijk). Daardoor klopt "net buiten je regio" ook echt: het zijn de provincies waar je overheen rijdt, niet alles wat toevallig dichtbij op de kaart ligt. Een echte kilometer-afstand kunnen we pas gebruiken als we bij aanmelding een postcode of woonplaats uitvragen; nu kennen we alleen de provincievoorkeur.

Welke provincies grenzen aan elkaar

ProvincieBuurprovincies
GroningenFriesland, Drenthe
FrieslandGroningen, Drenthe, Overijssel, Flevoland
DrentheGroningen, Friesland, Overijssel
OverijsselDrenthe, Friesland, Flevoland, Gelderland
FlevolandFriesland, Overijssel, Gelderland, Utrecht, Noord-Holland
GelderlandOverijssel, Flevoland, Utrecht, Zuid-Holland, Noord-Brabant, Limburg
UtrechtFlevoland, Gelderland, Zuid-Holland, Noord-Holland
Noord-HollandFlevoland, Utrecht, Zuid-Holland
Zuid-HollandNoord-Holland, Utrecht, Gelderland, Noord-Brabant, Zeeland
ZeelandZuid-Holland, Noord-Brabant
Noord-BrabantZuid-Holland, Gelderland, Limburg, Zeeland
LimburgGelderland, Noord-Brabant

De tiers op de kaart

Hetzelfde voorbeeld (een kandidaat met provincie Utrecht) door de eerste drie stappen van de waterval. Tier 4 heeft geen kaart: dan tonen we geen opdrachten maar een terugkoppeling.

Tier 1: eigen provincie

Tier 1 - alleen de eigen provincie

GRFRDROVFLGEUTNHZHZENBLI
Eigen regioBuurprovincieOverig

Tier 2: buurprovincies

Tier 2 - eigen provincie plus buurprovincies

GRFRDROVFLGEUTNHZHZENBLI

Utrecht plus 4 buurprovincies: Flevoland, Gelderland, Zuid-Holland, Noord-Holland.

Eigen regioBuurprovincieOverig

Tier 3: elders in het land

Tier 3 - heel Nederland

GRFRDROVFLGEUTNHZHZENBLI
Eigen regioHeel NederlandOverig

Meerdere provincies

Een kandidaat mag meerdere provincies kiezen. De vuistregel: binnen een voorkeur tellen meerdere keuzes als "of" (allemaal meegenomen), tussen voorkeuren als "en". Een opdracht komt dus in de mail als het vakgebied klopt en de provincie binnen het bereik van de tier valt en rol en contractvorm kloppen.

Voor de provincies betekent dat:

  • Tier 1 (eigen): opdrachten in een van je gekozen provincies. Kies je Utrecht en Groningen, dan toont tier 1 opdrachten in Utrecht of Groningen.
  • Tier 2 (buurprovincies): de buren van al je gekozen provincies samengevoegd, minus de provincies die je zelf al koos.
  • Tier 3 (elders): heel Nederland, ongewijzigd.

Voorbeeld: een kandidaat kiest Utrecht en Groningen. De buurprovincie-stap (tier 2) wordt dan de optelsom van de buren van beide.

Twee provincies - Utrecht en Groningen plus hun buren

Tier 2 = buren van beide samen

GRFRDROVFLGEUTNHZHZENBLI

Utrecht en Groningen plus 6 buurprovincies: Flevoland, Gelderland, Zuid-Holland, Noord-Holland, Friesland, Drenthe.

Eigen regioBuurprovincieOverig

Grenzen twee gekozen provincies aan elkaar? Dan blijft de gedeelde provincie gewoon "eigen regio" (tier 1) en telt die niet als buurprovincie. Voorbeeld: kies je Utrecht en Gelderland, dan is Gelderland weliswaar een buur van Utrecht, maar omdat je Gelderland zelf koos blijft het tier 1. Zo voorkomen we dubbeltelling en houden je eigen keuzes altijd voorrang.

Twee aangrenzende provincies - Utrecht en Gelderland

Beide blijven eigen regio; alleen de overige buren lichten op

GRFRDROVFLGEUTNHZHZENBLI

Utrecht en Gelderland plus 6 buurprovincies: Flevoland, Zuid-Holland, Noord-Holland, Overijssel, Noord-Brabant, Limburg.

Eigen regioBuurprovincieOverig

Personalisatie

De voorkeuren van de kandidaat bepalen wat er in de mail komt. Een leeg veld betekent geen filter op dat onderdeel.

VoorkeurWat het doet
VakgebiedBeperkt opdrachten tot het gekozen vakgebied (bijvoorbeeld ICT, Juridisch, Financien).
ProvincieBepaalt de eigen regio en daarmee ook de buurprovincie-stap in de waterval.
Functie / rolFiltert op concrete rollen binnen het vakgebied.
ContractvormZZP of detachering. Kiest een kandidaat er een, dan tonen we alleen opdrachten die dat toelaten.

Kiest een kandidaat geen provincie, dan dekt tier 1 al heel Nederland en wordt de buurprovincie-stap overgeslagen. De waterval is dus vooral relevant voor kandidaten die hun regio bewust hebben afgebakend.


Wat staat er in een opdracht

Elke opdracht in de mail wordt op een vaste manier weergegeven, zodat een kandidaat in een oogopslag het belangrijkste ziet:

  • Titel met een externe-link-icoon naar de opdracht.
  • Badges voor de contractvorm: ZZP (groen) en/of Detachering (blauw).
  • Organisatie en locatie, bijvoorbeeld "Gemeente Utrecht, Utrecht".
  • Duur, uren per week en tarief (per uur).
  • Reageer-voor-datum en een korte samenvatting.

De opdracht-weergave komt uit een gedeelde, centrale opmaakfunctie. Test- en voorbeeldmails gebruiken exact diezelfde functie, zodat wat we testen altijd gelijk is aan wat een kandidaat ontvangt.


Veiligheid: bescherming tegen een lege bron

Omdat tier 4 altijd iets stuurt, zou een storing in de opdrachtenbron (bijvoorbeeld een scraper die niet draait) anders leiden tot een massa-mail met "0 nieuwe opdrachten". Dat willen we niet.

Sanity-check op het volume. Vindt de nieuwsbrief op een werkdag te weinig of geen nieuwe opdrachten in de hele bron, dan wordt het versturen afgebroken en krijgt het team een ops-melding, in plaats van een verkeerde mail naar duizenden kandidaten. Zo onderscheiden we "pipeline kapot" van een echt rustige dag.


Meten per tier

We willen weten welke stap van de waterval kansen oplevert. Daarom krijgt elke verzonden mail de tier mee in de campagne-code (per dag en per tier). Daarmee zijn opens, kliks en feedback per tier te meten, terwijl het dagtotaal nog steeds als geheel te bekijken is. Zo zien we bijvoorbeeld of "elders in het land"-opdrachten daadwerkelijk worden aangeklikt of juist niet.


Vastgelegde besluiten

BesluitDatumToelichting
Waterval in plaats van een lege dag2026-06-29Altijd iets zinvols sturen om kansen te creeren
Volgorde: eigen, buur, landelijk, terugkoppeling2026-06-29Nabijheid eerst
Buurprovincies op landsgrenzen, geen water-oversteken2026-06-29"Net buiten je regio" letterlijk houden
Dagelijks, voorlopig geen frequentie-limiet2026-06-29Scope blijft daily
Bij lege bron: afbreken en alarmeren2026-06-29Geen massa-mail bij een storing

Technisch

Implementatiedetails voor het ontwikkelteam. Functionele lezers hoeven hier niet doorheen.

Codebase: repository newsletter-listmonk (org depubliekepartner).

  • lib/personalize.ts - de tier-engine (waterval) en de scraper-down gate.
  • lib/canonical.ts - de buurprovincie-tabel (PROVINCE_ADJACENCY).
  • lib/build.ts - de opdracht-weergave (badges, icoon, tariefformaat).
  • sites/dpp/config.json - de tier-configuratie (digest.tiers), volledig data-driven.
  • flows/0503-digest-*.json - de Activepieces-flow die dit dagelijks draait.

Een nieuwe tier toevoegen is een config-entry plus een template; de flow leest de configuratie direct.


Links en referenties