katlog.orgdevelopment journal Demo catalogueDemo
An open development diary

How a librarian and AI are building a new library system

The Katlog story from day one: decisions, mistakes, interface, data and ideas.

All articles 36 · in reading order
  1. CH001
    Chronicle4 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.

  2. CH002
    Chronicle3 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?

  3. CH003
    Chronicle2 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.

  4. LB001

    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.

  5. UI001

    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.

  6. UI002

    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.

  7. DE001
    Decision2 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.

  8. LB002

    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.

  9. UI003

    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.

  10. UI004

    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.

  11. LB003

    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.

  12. LB004

    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.

  13. UI005

    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.

  14. DE002
    Decision2 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.

  15. DE003
    Decision2 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.

  16. AI001
    Briefing 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.

  17. AI002
    Briefing 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.

  18. AI003
    Briefing 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.

  19. BG001
    Bug 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.

  20. BG002
    Bug 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.

  21. BG003
    Bug 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.

  22. BG004
    Bug 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.

  23. BG005
    Bug 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.

  24. DE004
    Decision2 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.

  25. UI006

    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.

  26. DA001
    Data2 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.

  27. ID001
    Ideas2 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.

  28. ID002
    Ideas2 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.

  29. DE005
    Decision2 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.

  30. LB005

    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.

  31. DA002
    Data2 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.

  32. ID003
    Ideas2 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.

  33. DE006
    Decision2 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.

  34. CH004
    Chronicle2 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.

  35. GL001
    Glossary2 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.

  36. CH005
    Chronicle2 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.