CC Schoten
CC Schoten is the cultural centre in Schoten — theatre, film, concerts, courses, and halls it rents out. I built the search over its programme. It runs with no search server at all: Drupal publishes the index, the browser does the matching.

CC Schoten is the cultural centre in Schoten: shows and concerts, films, family days, courses, lectures and workshops, run out of De Kaekelaar in halls it also rents out. People arrive at its site having heard about one thing and half remembering what it was called. I built the search that finds it anyway.
Search that forgives the spelling
The screenshot is the whole argument. Someone types cucinna — a show they heard about once, spelled from memory — and the first result is La Cucina dell’Arte. An approximate title, a garbled performer, a fragment of a description: the right event still comes back.
For a venue this matters more than it does for a shop. Nobody browsing a season knows the catalogue. They know a friend said something about a circus thing in the autumn, and either the site meets them there or they close the tab and the seat goes unsold.
No search server behind it
What makes it worth pointing at is what is not there. Drupal publishes the programme through a REST endpoint, the browser holds that index, and the fuzzy matching happens client-side with Fuse.js.
The reasoning was operational rather than clever. A venue’s catalogue is small enough to fit in a payload the browser can hold. A search server is a service someone has to keep alive, patch and pay for, plus a failure mode where the box is down and the site looks broken to everyone. Removing it removes the box, the latency and the outage in one go.
The second time, which is when it counts
I had shipped the same REST-plus-Fuse.js pattern on another Flemish venue site two months earlier. Schoten was the second, and a thing that works twice on two different content models is a pattern rather than one site’s trick.
Doing it again is also where the sharp edges show. The first build tells you it can work; the second tells you which parts of it were accidentally specific to the first site, and that is the version worth keeping.
Then the plumbing
I stayed with the site afterwards — putting the shared venue theme on it,
bringing its Solr-backed search stack forward with the Drupal upgrades,
straightening out settings.php, and moving the local development environment
onto MySQL 8, through to 2025.
TILL SLIP
- First commit2023.04.11
- Last commit2025.01.10
- Commits by me15 of 418
- Custom themes on the site2
Share of the repo4% — a search feature and the plumbing around it.
made of
- 01Drupal
- 02PHP
- 03Twig
- 04JavaScript
- 05Fuse.js
- 06Apache Solr
not returnable · it shipped