CC Het Bolwerk
CC Het Bolwerk is the cultural centre in Vilvoorde. Over two years I built the filtering that turns a full season into the handful of evenings a visitor might actually go to. Including the genre links that make a filtered programme somewhere you can send someone.

CC Het Bolwerk is the cultural centre in Vilvoorde — music, theatre and comedy, Sunday-morning films, aperitif concerts, and halls it rents to whoever needs one. Its site has to turn a whole season into the four evenings a visitor might actually go to. Over two years I built the part that does the cutting down.
Cutting a season down to size
A custom events module holds the filters; a React layer in front of it renders them and re-queries as they change. Genre down one side, month down the other, and a button to put it all back.
Filter ordering turned out to be its own small job. A facet list that arrives in whatever order the query happened to return it is not something a visitor can rely on twice, and it is not something the venue’s staff can describe to somebody on the phone. Fixing the order is invisible when it is right and quietly corrosive when it is wrong.
A genre is a link, not a state
Every event page names its genre in the sidebar, and that name is a link straight into the programme already filtered to it. A page about one concert becomes a way into the rest of the season instead of a dead end.
The constraint that makes it possible is that a filtered programme has to be a place — a URL you can send someone, bookmark, or land on from a newsletter — and not a state each visitor assembles by hand after arriving. That decision has to be taken before the filter is written, because retrofitting it means rebuilding how the whole listing reads its own parameters.
Search over the same programme
Search arrived later, over the same listing. Type into the header and matches appear as you go, labelled with what they are — an event, a page — so someone half-remembering a name gets to the show without first working out which section of the site it lives in.
It is the other half of the same problem the filters solve. Filters are for the visitor browsing what is on; search is for the visitor who already knows and cannot quite spell it.
Then the parts nobody photographs
Along the way: buyers returning from the ticketing system were landing on the wrong page, and dates were rendering in the wrong timezone. Both are the kind of bug that costs a venue a seat and never shows up in a design review. The theme’s asset build was moved onto Laravel Mix in the same stretch.
Het Bolwerk has been sending people through it since 2023.
TILL SLIP
- First commit2023.05.04
- Last commit2025.05.20
- Commits by me56 of 740
- Custom-module files touched54
Share of the repo8% — concentrated on the events app.
made of
- 01Drupal
- 02PHP
- 03React
- 04JavaScript
- 05Twig
- 06Apache Solr
not returnable · it shipped