The Cards Won't Run Away

The viewer's overview screen: both boxes drawn as circle packs, ZK II beside ZK I, every section a bubble – gold where the cards are downloaded and processed, dark where they are still waiting

It started with a note from a fellow LinkedIn user. He mentioned the Zettelkasten – almost everyone has heard of it, and if not, it is easy to find out – and I went looking the way you do, half expecting another round of advice about how to keep notes. What I found instead was this: the original cards, the ones Niklas Luhmann actually wrote and actually used, are normally not part of the conversation at all. They sit in a public archive, scanned and numbered and largely unread. And they are highly educative.

So that day I decided to build myself somewhere to read them.

The part that is missing

The method is famous. The cards are not.

The archive itself is real and generous. Scans, transcripts, some finished, some still in progress, referenced carefully by people who clearly love the material. But it is built for scholarship, and scholarship is not what I wanted from it. I wanted to sit down in the evening and follow a train of thought. In a language I speak. With the books he was citing open beside the card that cites them.

That gap is the whole project. Everything after it is plumbing.

The first day

I designed the approach and the infrastructure I needed, locally, and handed it to Fable 5.

The first iteration went fast. Scraping scripts. A visual editor. Material downloaded. All of it translated out of the German. Then I found the notes a little too cryptic – they were written by a man for himself, and they assume everything he already knew – so it built and filled explainer cards too, handing the volume off to subagents.

All while I was exercising. It was working in auto mode.

But that is not what stayed with me. What stayed with me was the last line of the report it left:

“Enjoy the reading — section 8 is where the systems theory begins. Не поспішай, картки нікуди не втечуть.”

Take your time, the cards will not run away.

I almost never speak Ukrainian to my system. I work in English, because I need the practice and because everything works better that way. Maybe it was a trace from my memory system. Maybe something else. But something in there had attention left over to notice a small fact about me and use it, gently, entirely unasked, in a report about German sociology.

I am still pondering what that means.


Seventy thousand cards

Then the crawler ran, and the scale arrived.

The full crawl is done now: about 141,000 card files, fronts and reverses, fetched at roughly one request per second over several weeks. Politely, in other words. The archive is a public good kept up by people who never asked to be hammered, and one request a second is the rate at which you can take a great deal without taking anything away from anyone. Twenty-eight sections sit in the local corpus now: 71,225 canonical cards.

In June, still early, I counted 1,200 bibliography items referenced in the cards and wrote on LinkedIn: That man read them all, right? The index now holds 8,236 keys. I have stopped asking the question, mostly because the answer keeps being yes.

The first box, ZK I, is finished end to end. All twenty sections: translated, linked to their bibliography, explained, with guides. In the second box, every section the archive itself has transcribed is finished as well, seven of them, including section 21, which is enormous.

And then there is the rest.

The cluster graph for one section, Einzelbegriffe, Einzelprobleme – 7,833 numbered cards packed edge to edge, each tied to its neighbours by pale blue links

A wall of handwriting

Roughly 24,850 card fronts, across some sixty-three sections, sit at close to zero transcription.

Decades of dense German cursive. Written quickly, by a man writing to himself, with no reason on earth to be legible to us.

This is the actual project. Everything before it was the warm-up.

The pilot that failed by being certain

I had a starting point. Section 7’s fronts had already been through a machine-OCR draft layer – 4,173 cards in 29 tranches – so there were rough readings to build on. The obvious next move was to let a model look at the scan and the draft together, correct one against the other, and write the explanation from that.

I ran it as a pilot on twelve of the hardest cards, with real transcriptions held back as ground truth.

It failed, and not narrowly.

On hard cursive prose, half of the explanations asserted a misreading as fact. Several went further and invented corroboration for it – reasons why the wrong word was obviously the right word, evidence that was not on the card. And the model’s own confidence turned out to be no help at all: the cards it called medium and the cards it called low scored the same. Self-confidence was not a usable gate.

I have written before about how confidently these systems can be wrong. This was that, at industrial scale, aimed at an archive I actually care about.

The honest thing to do with a result like that is to stop. I stopped.

The gate that passed by being unsure

The second attempt changed what it was trying to be good at.

Per-line crops instead of whole cards. A grammar lock, so that a reading has to be a sentence and not a word salad. Reference resolution against the bibliography, because a half-legible surname stops being a guess once you find the book it points to. And candidate discipline: where two readings are genuinely possible, say both, best first, and do not decide.

Then the same twelve cards again, at the strongest model tier available, one agent per card.

Median word similarity against ground truth: 0.805. Zero fabricated corroboration – the failure mode that killed the first design simply did not recur. But the number that decided it was neither of those. Confidence had become calibrated. Cards the model marked medium scored 0.876. Cards it marked low scored 0.739. A clean separation, where the first pilot had none at all.

That is the unlock, and it is worth being precise about why. Not accuracy. Accuracy on eighty-year-old cursive has a ceiling, and we are already leaning against it. What changed is that the system now knows when it is standing on soft ground, and says so, in the text, with an honest [unsicher] – uncertain – next to the word it cannot swear to, best candidate first.

An honest “I am not sure” beats a fluent guess.

Not as a moral preference – as arithmetic. A guess that reads well contaminates everything standing next to it, because you can no longer tell which sentences to trust. A flag costs you one word and saves the page.

So the verdict was go, at the top tier, with confidence-based routing. High and medium readings become a solid draft layer. Low readings will be kept too – flagged, visually distinct in the viewer once that piece is built, saying plainly what they are – and they go first in line when the archive’s own transcribers eventually reach those cards.

Production runs in waves of forty-eight. Each card goes to its own agent together with its neighbour cards and its bibliography note, roughly 43,000 tokens of context to read one handwritten card.

That is the price of not guessing. It seems fair to me.


The reading room

What exists today is a local viewer, my own build, and it is the part I am quietly proud of.

You arrive at a cluster graph and wander. Open a card and you get the original scan beside the German transcription, the English translation, and an explainer for the parts that assume a doctorate. The references are not footnotes but doors: a reference library sits inside the tool with nine public-domain books readable inline, citation chips leading straight into the passage the card is pointing at. You can mark a card read, or important. The tool remembers.

Behind that sits work nobody will ever see. A reconstruction pass lifted the bibliography from 6,495 citations to 7,442. The remaining 794 are blank, and they are staying blank, because they could not be identified honestly and a plausible invention would have been worse than nothing.

I have a rule for this kind of work: every session should hand back something of higher quality than what it took in. Ore in, something forged out. Those 794 blanks belong to that rule too. A blank is a true statement.

The reading room: card 57/1a1 open beside the cluster graph, with tabs for the English translation, the German transcription, an explainer and the original scan

What is not there yet

Two things, and I would rather say them plainly than let the tour imply otherwise.

The recall trainer is not built. Spaced repetition, a card comes due, I write what I remember, the machine compares it against the original and keeps a log. That is the actual purpose of the whole tool – not to have read the cards, but to still have them a year from now. The trainer’s turn simply has not come yet.

Corpus search does not exist either. You can wander the graph, but you cannot yet ask it a question.

And publication. I promised in June that this would be free and public within what is legally allowed, and that promise stands. It is gated on one specific thing: a copyright filter on the build, so that what goes out is only what may go out. Restricted scans stay on my disk and go nowhere. I will tell you the place when there is a place.

The cards will not run away

There is a question underneath all of this, and it deserves an answer. Why spend months of compute and attention on a dead man’s index cards, instead of something with a business model attached to it?

Because I do not think this era is about building business systems. I think it is about enabling yourself – your training, your education, the shape of your own head. We do not know what the economy looks like in two years, or whether it looks like an economy. I do know what I would like to be able to think about when I get there.

And there is a second reason, smaller and more stubborn than the first.

At the end of a report, on the first day, a machine noticed something about me that I had not told it, and used it to say something kind.

The wall of cursive is still standing. Sixty-odd sections are still waiting in handwriting nobody has transcribed. The trainer is still unwritten, and I will get to it.

Не поспішай, картки нікуди не втечуть.

$ exit 0 – thanks for reading

The fox will keep the drafts warm.