Skip navigation
Logo: Zenjoy is een AI-first digital product studio uit Leuven. We bouwen betekenisvolle digitale producten, websites en mobile apps.

Fonar

Van DOS-codes en misbruikte datavelden naar een moderne bibliotheek voor 86.000 lezers met een leesbeperking

Client
Luisterpunt Bibliotheek

Diensten
Webapplicatie, Datamigratie, UX Design, Cloud Architectuur, Toegankelijkheid

Team
1–4 developers + projectmanager, wisselend per fase

Sector
Cultuur / Sociale dienstverlening / Bibliotheek

Doorlooptijd
16 maanden tot go-live (januari 2023 – mei 2024), doorontwikkeling loopt nog

Status
In productie sinds mei 2024

Tech stack
Phoenix (Elixir), LiveView, PostgreSQL, Tailwind CSS, Kubernetes, ArgoCD

Vraag

Luisterpunt is de Vlaamse openbare bibliotheek voor mensen met een leesbeperking. Blinden, slechtzienden, mensen met dyslexie of een motorische beperking: iedereen die moeilijk of niet met een gewoon boek overweg kan. Vanuit Brussel verzenden ze dagelijks Daisy-luisterboeken en brailleboeken naar lezers in heel Vlaanderen. Bijna 87.000 lezers, meer dan 6.600 aangesloten organisaties en een collectie van ruim 82.000 titels.

Al die lezers, organisaties, uitleningen en boeken werden beheerd in Bibliodata. Software die al zo lang meegaat dat niemand nog precies weet wanneer ze gebouwd is. Een DOS-achtige interface waar medewerkers met codes werkten. Geen muis, geen zoekfunctie zoals je die kent. Codes intikken, entertoets, resultaat lezen, volgende code.




Het probleem zat dieper dan een verouderde interface. Bibliodata was nooit ontworpen voor wat het uiteindelijk moest doen. In de loop der jaren waren velden gaan dienen voor doeleinden waar ze nooit voor bedoeld waren. Data die organisch gegroeid was over tientallen jaren, zonder de structuur om mee te groeien. Elke medewerker kende de trucs. Nieuwe collega's leerden van ervaren collega's welk veld je eigenlijk waarvoor moest gebruiken. Het systeem werkte, maar enkel omdat de mensen erachter het lieten werken.

Daar bovenop: bij Luisterpunt werken ook medewerkers die zelf slechtziend of blind zijn. Zij moeten dagelijks met het beheersysteem aan de slag. Toegankelijkheid was geen nice-to-have. Het was een absolute voorwaarde.

Aanpak

Eerst luisteren, dan bouwen

Voordat we een regel code schreven, zijn we gaan luisteren. Bij Luisterpunt op bezoek, meegekeken hoe medewerkers met Bibliodata werkten, vragen gesteld over elk stukje van het proces. Van inschrijving tot uitlening, van verwerving tot braille-verzending.

We waren niet de eersten die aan dit project werkten. Vóór ons had een consortium geprobeerd de applicatie te bouwen bovenop Linked Data en een RDF-triplestore. De filosofie daarachter klonk aantrekkelijk: data die per definitie open en uitwisselbaar is, schema's die je kan aanpassen zonder datamigratie. In theorie sterk. In de praktijk liep het vast.

Drie partijen waren verantwoordelijk voor drie delen van dezelfde applicatie. De API en datamigratie waren volgens de ontwikkelaar af, maar het was moeilijk om daar vertrouwen in te hebben zonder het zelf te kunnen verifiëren. De expertise lag verspreid en de tijdsdruk nam toe. Luisterpunt had een werkend systeem nodig, geen architecturale belofte.

Toen wij begin 2023 aan tafel schoven, hebben we eerlijk gezegd wat we dachten. De Linked Data-premisse was voor ons een risico, geen voordeel. Niet omdat het technisch onmogelijk was, maar omdat de complexiteit niet in verhouding stond tot wat Luisterpunt op dat moment nodig had. Een robuuste applicatie bovenop PostgreSQL met een helder domeinmodel zou sneller, goedkoper en beter te onderhouden zijn. Data later ontsluiten via open standaarden kon altijd nog.

Luisterpunt was opgelucht. Ze zochten iemand die het pragmatische pad durfde te kiezen.

2,7 miljoen uitleningen overzetten

Niemand praat graag over datamigratie. Het is het saaiste deel van elk project, tot het misgaat. Bibliodata bevatte de volledige geschiedenis van de bibliotheek: 86.692 lezers, 6.626 organisaties, 2.689.489 uitleningen, 67.366 wenslijstitems en 82.151 instanties. Sommige records waren tientallen jaren oud.

Het probleem was niet de hoeveelheid. Het probleem was de kwaliteit. Velden die jarenlang organisch misbruikt waren. Informatie die was bijgehouden in velden die daar nooit voor bedoeld waren. Adressen in notitievelden, statuscodes die eigenlijk iets anders betekenden dan hun label suggereerde, relaties tussen lezers en organisaties die enkel impliciet bestonden.

We schreven de migratie als Elixir Livebooks: interactieve scripts die je stap voor stap kan doorlopen, debuggen en opnieuw draaien. Geen big bang, maar een herhaalbaar proces. Elke keer opnieuw importeren, vergelijken met de bron, afwijkingen onderzoeken en de mapping verfijnen. De VLACC-catalogus (de Vlaamse Centrale Catalogus via Cultuurconnect) hielp ons ontbrekende titelbeschrijvingen aan te vullen. Wat niet automatisch kon, werd handmatig gevalideerd.

Twee applicaties, één platform

Fonar is niet één applicatie. Het zijn er twee die op hetzelfde platform draaien.

Beide applicaties zijn gebouwd in Phoenix met LiveView. Dat geeft ons real-time interactiviteit zonder de overhead van een apart JavaScript-framework. Voor een beheertool waar medewerkers de hele dag in werken, maakt dat een merkbaar verschil in snelheid en responsiviteit.

Fonar

Fonar is de beheertool voor de medewerkers van Luisterpunt. Lezers beheren, uitleningen registreren, verwervingen opvolgen, braille-verzendingen plannen, Daisy-cd's klaarzetten. Een volledige backoffice met complexe workflows en statusovergangen.

Mijn Luisterpunt

Mijn Luisterpunt is de publieke kant. Hier loggen lezers in om hun boekenplank te bekijken, boeken op hun wenslijst te plaatsen of een uitlening te doen. Organisaties beheren hun eigen lezers en uitleningen. Authenticatie loopt via OpenBibID (het Single Sign-On systeem van de Vlaamse bibliotheken).

Meer dan een uitleensysteem

Op het eerste gezicht is een bibliotheeksysteem rechttoe rechtaan: boeken, lezers, uitleningen. Bij Luisterpunt zit er een laag complexiteit onder die je niet verwacht.

De leesbeperking van een lezer bepaalt welke formaten beschikbaar zijn. Braille mag enkel naar blinde en slechtziende lezers. Daisy-luisterboeken hebben een speelduur en aantal cd's, braille een aantal banden. Een uitlening kan aangevraagd, actief, voltooid of geannuleerd zijn. Een reservatie wacht tot een boek via het verwervingsproces beschikbaar wordt en schuift dan automatisch door naar de wenslijst. En die wenslijst werkt op twee manieren: als automatische leveringswachtrij of als bladwijzer, afhankelijk van de voorkeur van de lezer.

Het verwervingsproces is op zich al een kleine applicatie. Per boek worden meerdere formaten apart geproduceerd. Braille gaat naar een drukkerij, Daisy wordt door een inlezer ingesproken. Elk formaat doorloopt een eigen flow van aanvraag tot productie.

Fonar praat ook met een handvol externe systemen. De VLACC-catalogus voor titelbeschrijvingen. Sensotec en Anderslezen voor de Daisy-app en cd-distributie. Brevo voor e-mail met bounce-tracking. Statik voor de publieke website. SFTP voor bestandsuitwisseling met productiepartners. Elk van die koppelingen heeft haar eigen eigenaardigheid.

Toegankelijkheid als uitgangspunt

Bij Luisterpunt werken medewerkers die zelf slechtziend of blind zijn. Zij gebruiken Fonar elke dag, met een schermlezer of vergrotingssoftware. Dat betekent dat toegankelijkheid geen laag is die je achteraf toevoegt. Het moet vanaf het begin in de code zitten.

In de praktijk betekent dat: aria-labels op alle interactieve elementen, semantische HTML, logische tabvolgorde, foutmeldingen die een schermlezer kan voorlezen. We draaien geautomatiseerde accessibility-checks, maar de echte test is een medewerker die met JAWS of NVDA door het systeem navigeert. Tien minuten meekijken levert meer op dan elke geautomatiseerde audit.

Resultaat

Op 4 mei 2024 schakelden we alles om. DNS-records werden aangepast, Bibliodata ging dicht, Mijn Luisterpunt ging live op het nieuwe platform. Sensotec schakelde de Anderslezen-koppeling om. De oude website werd doorverwezen naar de nieuwe. Alles tegelijk, in één gecoördineerde cutover.

Het verliep vlot.

Wat er nu draait:

Moderne webinterface

38 medewerkers van Luisterpunt werken dagelijks in Fonar. Geen codes meer, geen DOS-schermen. Een moderne webinterface met zoekfunctie, filters en directe feedback.

Grootschalige datamigratie

86.692 lezers en 6.626 organisaties zijn gemigreerd. 2,7 miljoen uitleningen en 82.151 instanties. De complete geschiedenis van de bibliotheek zit in één mooi datamodel.

Self-service portaal

Mijn Luisterpunt laat lezers zelfstandig hun boekenplank beheren, boeken aanvragen en hun gegevens aanpassen. Organisaties beheren hun eigen lezers.

Gestroomlijnd verwervingsproces

Het verwervingsproces loopt van aanvraag tot productie, met aparte flows per formaat (braille naar de drukkerij, Daisy naar de inleesstudio).

Geautomatiseerd abonnementssysteem

Luistervink, het luistertijdschrift, heeft een volledig geautomatiseerd abonnements- en leveringssysteem.

Moderne cloudinfrastructuur

Alles draait op Kubernetes, met geautomatiseerde deployments via ArgoCD. Staging en productie zijn gescheiden omgevingen met eigen databanken.

Medewerkers tikken geen codes meer in. Ze zoeken een lezer op naam, klikken door naar het dossier, registreren een uitlening. Wat vroeger vijf stappen en twee schermen kostte, zit nu op één plek.

Een partnerschap, geen project

We zijn nu drie jaar verder. Fonar is niet afgerond; het groeit mee met Luisterpunt. Na de initiële go-live volgden SSO-integratie met Mijn Bibliotheek, uitbreiding van het verwervingsproces, nieuwe uitleenformaten en een verkenning van een eigen DODP-server om de afhankelijkheid van externe partijen voor de levering van digitale boeken te verminderen.

Het team varieerde over die drie jaar van één tot vier developers, afhankelijk van de fase. Wat constant bleef: korte lijnen met Luisterpunt, tweewekelijkse sprints, en de bereidheid om bij te sturen wanneer de realiteit op de werkvloer ons model corrigeerde.

De keuze om de Linked Data-architectuur los te laten bleek de juiste. Niet omdat Linked Data slecht is. Maar voor deze context ligt de total cost of ownership van een applicatie bovenop PostgreSQL vele malen lager. Luisterpunt heeft een systeem dat ze begrijpen, dat een klein team kan onderhouden, en dat ze uitbreiden wanneer het nodig is.

Heb je een legacy systeem toe aan vervanging?

Wij pakken complexe domeinen graag pragmatisch aan.

Andere cases

S.Tool

Hoe we darmklachten na kankerchirurgie bespreekbaar maakten via een app

Het onderzoeksteam klopte bij ons aan met een idee en een nood. Geen designs, geen specs. Ze zochten een partner die het volledige traject kon dragen: van concept tot een app in de handen van patiënten.