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 actKernidee: 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 decisionNodeDe vier tiers
Tier 1 - eigen provincie
Tier 2 - buurprovincies
Tier 3 - elders in het land
Tier 4 - terugkoppeling
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
Utrecht plus 4 buurprovincies: Flevoland, Gelderland, Zuid-Holland, Noord-Holland.
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
| Provincie | Buurprovincies |
|---|---|
| Groningen | Friesland, Drenthe |
| Friesland | Groningen, Drenthe, Overijssel, Flevoland |
| Drenthe | Groningen, Friesland, Overijssel |
| Overijssel | Drenthe, Friesland, Flevoland, Gelderland |
| Flevoland | Friesland, Overijssel, Gelderland, Utrecht, Noord-Holland |
| Gelderland | Overijssel, Flevoland, Utrecht, Zuid-Holland, Noord-Brabant, Limburg |
| Utrecht | Flevoland, Gelderland, Zuid-Holland, Noord-Holland |
| Noord-Holland | Flevoland, Utrecht, Zuid-Holland |
| Zuid-Holland | Noord-Holland, Utrecht, Gelderland, Noord-Brabant, Zeeland |
| Zeeland | Zuid-Holland, Noord-Brabant |
| Noord-Brabant | Zuid-Holland, Gelderland, Limburg, Zeeland |
| Limburg | Gelderland, 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
Tier 2: buurprovincies
Tier 2 - eigen provincie plus buurprovincies
Utrecht plus 4 buurprovincies: Flevoland, Gelderland, Zuid-Holland, Noord-Holland.
Tier 3: elders in het land
Tier 3 - heel Nederland
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
Utrecht en Groningen plus 6 buurprovincies: Flevoland, Gelderland, Zuid-Holland, Noord-Holland, Friesland, Drenthe.
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
Utrecht en Gelderland plus 6 buurprovincies: Flevoland, Zuid-Holland, Noord-Holland, Overijssel, Noord-Brabant, Limburg.
Personalisatie
De voorkeuren van de kandidaat bepalen wat er in de mail komt. Een leeg veld betekent geen filter op dat onderdeel.
| Voorkeur | Wat het doet |
|---|---|
| Vakgebied | Beperkt opdrachten tot het gekozen vakgebied (bijvoorbeeld ICT, Juridisch, Financien). |
| Provincie | Bepaalt de eigen regio en daarmee ook de buurprovincie-stap in de waterval. |
| Functie / rol | Filtert op concrete rollen binnen het vakgebied. |
| Contractvorm | ZZP 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
| Besluit | Datum | Toelichting |
|---|---|---|
| Waterval in plaats van een lege dag | 2026-06-29 | Altijd iets zinvols sturen om kansen te creeren |
| Volgorde: eigen, buur, landelijk, terugkoppeling | 2026-06-29 | Nabijheid eerst |
| Buurprovincies op landsgrenzen, geen water-oversteken | 2026-06-29 | "Net buiten je regio" letterlijk houden |
| Dagelijks, voorlopig geen frequentie-limiet | 2026-06-29 | Scope blijft daily |
| Bij lege bron: afbreken en alarmeren | 2026-06-29 | Geen 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.