How a librarian and AI are building a new library system
The Katlog story from day one: decisions, mistakes, interface, data and ideas.
Why I started building a new catalogue
Our library’s Aleph catalogue was in place long before I started working here. It has served faithfully for years. But technology and readers’ expectations have moved on. This first, personal article is about that.
Read →- CH001Chronicle4 min read
Why I started building a new catalogue
Our library’s Aleph catalogue was in place long before I started working here. It has served faithfully for years. But technology and readers’ expectations have moved on. This first, personal article is about that.
- CH002Chronicle3 min read
One link and 6,153 records
Where can a new library system begin? With a simple question: can you take the data from an open catalogue and prepare it for a new application?
- CH003Chronicle2 min read
From a file to a prototype
The archive with 6,153 records was sitting on disk. Next question: what could we build for readers from these fields? The answer was a prototype — a single page you could already search.
- LB001Library practice2 min read
The call number as a spine label: why the catalogue starts at the shelf
For the librarian, the call number is a book’s address. For readers of the old catalogue, it was a line of small text in a table. We decided to show it the way it looks in the stacks.
- UI001Interface walkthrough2 min read
Anatomy of a record page
Six decisions that make up a single record page in the new catalogue — and why each of them is there.
- UI002Interface walkthrough2 min read
How search works
One line at the top of the page is the catalogue’s main tool. What happens between pressing Enter and the first result — and why “Haeckel Reisebriefe” once found nothing.
- DE001Decision2 min read
Filters that don’t lie
The number next to a filter is a promise: this is how many records you will see if you select it. Why that promise is easy to break, and how we keep it.
- LB002Library practice2 min read
Botany - Germany: how subject headings work
The catalogue has 4,239 distinct subject headings. Show them all in a filter and nobody will use it. How they become a usable “Subject” filter.
- UI003Interface walkthrough2 min read
Saved lists, RIS and ready-made citations
A reader has found five books they need. What next — copy the titles into a notebook? In Katlog they can be collected in a list and sent to Zotero or Citavi with one click.
- UI004Interface walkthrough2 min read
The reader account: four counters and a request timeline
Readers don’t need a transaction history. They need to know three things: is the book ready, when is it due, and is anything overdue. The account is built around those questions.
- LB003Library practice2 min read
The life of a request: from request to return
Six statuses, two sides of the screen and a few forks in the road. We follow one request all the way — and look at where it can turn off.
- LB004Library practice2 min read
Loan rules: home loan, reading room, not for loan
An 18th-century rare book and a new genetics handbook can’t be lent under the same rules. How Katlog sets rules per collection — and how one overly strict check stopped books being issued to the reading room.
- UI005Interface walkthrough2 min read
The librarian’s desk: requests and loans
The reader account answers “where is my book?”. The librarian workspace answers “what do I need to do right now?”. A walkthrough of the screen where the working day begins.
- DE002Decision2 min read
Why every library gets its own copy of the system
One big platform for everyone, or a separate copy for each library? We chose the second. What it cost us and what we got in return.
- DE003Decision2 min read
Security for a small system
A small library doesn’t need bank-grade security. But it does need to keep strangers out of the librarian workspace and reader data from leaking. The decisions we made to achieve that.
- AI001Briefing the AI2 min read
A 32-point audit: how to check an AI agent’s work
An AI agent built the system from our description and reported that everything was done. A code review showed that a lot was lost and some things were only half done. How we reorganised the work so this wouldn’t happen again.
- AI002Briefing the AI3 min read
A complete brief: ISBN lookup
We have said a lot about how to brief an AI agent. Here is a real brief that went to the agent, with commentary: why each part is there and what it prevents.
- AI003Briefing the AI2 min read
22 fixes in three stages: how not to break a working system
While we were taking screenshots for this journal, a list of 22 flaws built up. Handing it to the agent as one task would have been the surest way to break something. How we split the work.
- BG001Bug report2 min read
The catalogue that forgot two languages
The brief listed three interface languages: German, English and Russian. The first version written by the agent opened in Russian only. How that happened, and what we learned about multilingual catalogues.
- BG002Bug report2 min read
Error 415: why a record couldn’t be deleted
The librarian created a record from an ISBN, tried to delete it — and got “HTTP 415: JSON expected”. How a security rule broke deletion, and why you fix the rule rather than add an exception.
- BG003Bug report2 min read
Where did nine records go?
The original export has 6,153 records; the new database had 6,144. No error on screen, no warning. How we noticed, and why “skip” is the worst thing an import can do.
- BG004Bug report2 min read
Settings that changed nothing
In the librarian workspace you could pick an accent colour, a dark theme and upload a logo. Everything was saved. But the site didn’t change. How a feature can exist and not work at the same time.
- BG005Bug report2 min read
Code 02: how the system quietly closed a third of the collection
A test reader requested a book, and it turned out it couldn’t be issued: “No available copies”. The cause was two digits from Aleph — and the system deciding their meaning on its own.
- DE004Decision2 min read
Delete with care: double confirmation and a trash bin
Deleting a record is the one action in the catalogue that can destroy years of work with a single click. So we made it slow. On purpose.
- UI006Interface walkthrough2 min read
Data quality: a to-do list, not a reproach
242 records without a year, 3,320 without a language, 121 duplicate ISBNs. In the old catalogue such things were found by chance. In Katlog they are gathered in one section, where each group is a clear task.
- DA001Data2 min read
Searched for but not found
Every empty search result is a reader the library couldn’t help. In Katlog these queries are collected in a list. Why it matters, and why it contains not a single name.
- ID001Ideas2 min read
Repeat imports without fear
The catalogue is already in the new system and the librarian has corrected hundreds of records. Now a fresh export with new acquisitions needs to be loaded. How to make sure not a single correction is lost.
- ID002Ideas2 min read
Cataloguing by ISBN: DNB, K10plus and Crossref
The librarian types in an ISBN and, within seconds, sees a ready-made description from national catalogues. How it works, and why the record still isn’t saved automatically.
- DE005Decision2 min read
Custom fields: flexibility without breakage
The set of record fields mirrored our Aleph export. But times change: tomorrow you’ll need a DOI, a link to an e-version, provenance. How to let the librarian create fields and not let them accidentally break everything.
- LB005Library practice2 min read
Inside Aleph: what the holdings lines hide
A single line such as “BOOK MPMPT BIB F 759 8660 01 20181115” holds almost an item’s entire life. We take it apart — and explain what it can’t tell you without a librarian.
- DA002Data2 min read
The catalogue in numbers: from “Flora Marchica” (1663) to the 2020s
What you can learn about a library just by counting its records. 6,153 descriptions, 1,239 rare books and 242 records without a year.
- ID003Ideas2 min read
Moving a library off Aleph: a step-by-step scenario
Everything we learned during the experiment adds up to a scenario others can repeat. Not an installation manual, but a sequence of steps and the questions a library should answer in advance.
- DE006Decision2 min read
A private project under German rules
A blog about a library system seems harmless. But in Germany even a private website has mandatory pages, and a single line of font code has a court history. What we did and why.
- CH004Chronicle2 min read
What remains unsolved
A development journal would be dishonest without this article. Katlog works, but it has known weaknesses, untested features and open questions. Here they all are.
- GL001Glossary2 min read
RIS, MARC, SRU, DOI — in plain words
A short glossary of terms that keep coming up in this journal. For librarians who don’t have to be programmers, and programmers who don’t have to be librarians.
- CH005Chronicle2 min read
How this journal came about
Why write about development when you could just develop? Because the most interesting thing about Katlog isn’t the code but the journey: questions, mistakes, decisions. That journey was worth recording.