Skip navigation
Logo: Zenjoy is an AI-first digital product studio based in Leuven. We build meaningful digital products, websites, and mobile applications.

Fonar

From DOS codes and misused data fields to a modern library for 86,000 readers with a reading impairment

Client
Luisterpunt Library

Services
Web application, data migration, UX design, cloud architecture, accessibility

Team
1–4 developers + project manager, varying per phase

Sector
Culture / social services / library

Timeline
16 months to go-live (January 2023 – May 2024), development is ongoing

Status
In production since May 2024

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

The question

Luisterpunt is the Flemish public library for people with a reading impairment. Blind and visually impaired people, people with dyslexia or a motor disability: anyone who struggles with, or simply cannot use, an ordinary book. From Brussels they ship Daisy audiobooks and braille books to readers across Flanders every day. Nearly 87,000 readers, more than 6,600 affiliated organisations and a collection of over 82,000 titles.

All those readers, organisations, loans and books were managed in Bibliodata. Software that has been around so long nobody quite remembers when it was built. A DOS-like interface where staff worked with codes. No mouse, no search as you know it. Type a code, hit enter, read the result, next code.




The problem ran deeper than a dated interface. Bibliodata was never designed for what it eventually had to do. Over the years, fields had come to serve purposes they were never meant for. Data that had grown organically over decades, without the structure to grow with it. Every staff member knew the tricks. New colleagues learned from experienced ones which field you were actually supposed to use for what. The system worked, but only because the people behind it made it work.

On top of that: Luisterpunt employs staff who are themselves blind or visually impaired. They have to work in the management system every day. Accessibility was not a nice-to-have. It was an absolute requirement.

Approach

Listen first, build later

Before writing a single line of code, we went to listen. We visited Luisterpunt, watched staff work with Bibliodata, asked questions about every part of the process. From registration to lending, from acquisition to braille shipping.

We were not the first to work on this project. Before us, a consortium had tried to build the application on top of Linked Data and an RDF triplestore. The philosophy sounded attractive: data that is open and interchangeable by definition, schemas you can adapt without data migration. Strong in theory. In practice it stalled.

Three parties were responsible for three parts of the same application. The API and data migration were finished according to the developer, but that was hard to trust without being able to verify it. Expertise was scattered and time pressure was mounting. Luisterpunt needed a working system, not an architectural promise.

When we joined the table in early 2023, we said honestly what we thought. For us, the Linked Data premise was a risk, not an advantage. Not because it was technically impossible, but because the complexity was out of proportion to what Luisterpunt needed at that point. A robust application on top of PostgreSQL with a clear domain model would be faster, cheaper and easier to maintain. Opening up the data via open standards later remained possible.

Luisterpunt was relieved. They were looking for someone who dared to take the pragmatic path.

Migrating 2.7 million loans

Nobody likes talking about data migration. It is the most boring part of any project, until it goes wrong. Bibliodata held the library's entire history: 86,692 readers, 6,626 organisations, 2,689,489 loans, 67,366 wishlist items and 82,151 copies. Some records were decades old.

The problem was not the volume. The problem was the quality. Fields that had been organically misused for years. Information kept in fields that were never meant for it. Addresses in note fields, status codes that actually meant something different from what their label suggested, relationships between readers and organisations that only existed implicitly.

We wrote the migration as Elixir Livebooks: interactive scripts you can step through, debug and rerun. No big bang, but a repeatable process. Import again and again, compare against the source, investigate deviations and refine the mapping. The VLACC catalogue (the Flemish Central Catalogue via Cultuurconnect) helped us fill in missing title descriptions. What could not be done automatically was validated by hand.

Two applications, one platform

Fonar is not one application. It is two, running on the same platform.

Both applications are built in Phoenix with LiveView. That gives us real-time interactivity without the overhead of a separate JavaScript framework. For a management tool staff work in all day, that makes a noticeable difference in speed and responsiveness.

Fonar

Fonar is the management tool for Luisterpunt's staff. Managing readers, registering loans, tracking acquisitions, planning braille shipments, preparing Daisy CDs. A complete back office with complex workflows and status transitions.

Mijn Luisterpunt

Mijn Luisterpunt is the public side. Readers log in to view their bookshelf, add books to their wishlist or borrow a book. Organisations manage their own readers and loans. Authentication runs through OpenBibID (the Single Sign-On system of the Flemish libraries).

More than a lending system

At first glance a library system is straightforward: books, readers, loans. At Luisterpunt there is a layer of complexity underneath that you do not expect.

A reader's reading impairment determines which formats are available. Braille may only go to blind and visually impaired readers. Daisy audiobooks have a playing time and a number of CDs, braille a number of volumes. A loan can be requested, active, completed or cancelled. A reservation waits until a book becomes available through the acquisition process and then moves to the wishlist automatically. And that wishlist works in two ways: as an automatic delivery queue or as a bookmark, depending on the reader's preference.

The acquisition process is a small application in itself. For each book, several formats are produced separately. Braille goes to a printing house, Daisy is recorded by a narrator. Each format follows its own flow from request to production.

Fonar also talks to a handful of external systems. The VLACC catalogue for title descriptions. Sensotec and Anderslezen for the Daisy app and CD distribution. Brevo for email with bounce tracking. Statik for the public website. SFTP for file exchange with production partners. Each of those integrations has its own quirks.

Accessibility as the starting point

Luisterpunt employs staff who are themselves blind or visually impaired. They use Fonar every day, with a screen reader or magnification software. Which means accessibility is not a layer you add afterwards. It has to be in the code from the start.

In practice that means: aria-labels on all interactive elements, semantic HTML, a logical tab order, error messages a screen reader can announce. We run automated accessibility checks, but the real test is a staff member navigating the system with JAWS or NVDA. Ten minutes of watching someone work teaches you more than any automated audit.

The result

On 4 May 2024 we switched everything over. DNS records were updated, Bibliodata was shut down, Mijn Luisterpunt went live on the new platform. Sensotec switched the Anderslezen integration. The old website was redirected to the new one. All at once, in one coordinated cutover.

It went smoothly.

What runs today:

Modern web interface

38 Luisterpunt staff members work in Fonar every day. No more codes, no DOS screens. A modern web interface with search, filters and instant feedback.

Large-scale data migration

86,692 readers and 6,626 organisations migrated. 2.7 million loans and 82,151 copies. The library's complete history lives in one clean data model.

Self-service portal

Mijn Luisterpunt lets readers manage their bookshelf, request books and update their details independently. Organisations manage their own readers.

Streamlined acquisition process

The acquisition process runs from request to production, with separate flows per format (braille to the printing house, Daisy to the recording studio).

Automated subscription system

Luistervink, the audio magazine, has a fully automated subscription and delivery system.

Modern cloud infrastructure

Everything runs on Kubernetes, with automated deployments via ArgoCD. Staging and production are separate environments with their own databases.

Staff no longer type in codes. They look up a reader by name, click through to the file, register a loan. What used to take five steps and two screens now sits in one place.

A partnership, not a project

Three years on, Fonar is not finished; it grows with Luisterpunt. After the initial go-live came SSO integration with Mijn Bibliotheek, an extended acquisition process, new lending formats and an exploration of a self-hosted DODP server to reduce the dependency on external parties for digital book delivery.

Over those three years the team varied from one to four developers, depending on the phase. What stayed constant: short lines with Luisterpunt, two-week sprints, and the willingness to adjust course whenever reality on the work floor corrected our model.

The decision to drop the Linked Data architecture proved right. Not because Linked Data is bad. But in this context, the total cost of ownership of an application on top of PostgreSQL is many times lower. Luisterpunt has a system they understand, that a small team can maintain, and that they extend when needed.

Other cases

S.Tool

How we made bowel complaints after cancer surgery easier to talk about, with an app

The research team came to us with an idea and a need. No designs, no specs. They were looking for a partner who could carry the whole journey: from concept to an app in patients' hands.

Do you need a digital product that goes further than a website or app?

Tell us where your organisation wants to go and what's difficult today. We'll think along about a first workable step.

Schedule a call

You'll speak straight away with someone who digs into the actual problem.

Not ready for a conversation yet? Take a look at what we've built