← all posts

The spine has to be right

A printed cover can look perfect on screen and still be scrap on the press. What ruins it is usually four pages.

Here is how. The printer quotes you a spine width for a book of a given page count. You build the wrap cover to it — front, spine, back, one flat file. Then you fix a paragraph in chapter 6, the text reflows, the book gains four pages, and the spine is now too narrow. Nothing on your screen changes. You find out when the boxes arrive with the title creeping around onto the front.

That specific failure is why Junifye exists. No editor I could rent had an opinion about it, because an editor does not know it is making a physical object.

The press has to know the book

So in Junifye a printer is not a page size. A preset carries the trim, the interior bleed, the cover bleed, the minimum and maximum page counts, a ladder mapping page count to gutter width, whether crop marks are wanted, the barcode keep-out area on the cover, and the spine formula — a per-page millimetre value plus a constant.

When you read a book's print status, every value comes back labelled with which layer decided it: the printer's preset, an override you set, or a width the printer simply quoted you. That third label is the dangerous one, and it is why the warning above it exists — a quoted spine is frozen at the page count it was quoted for, and Junifye says so the moment the book moves past it.

It also distinguishes two kinds of staleness. A rendered file can be out of date because the book was edited, or because the service redeployed underneath it. Only the first is a reason not to send the file to a printer.

Screen rendering is quieter. There is no render button anywhere. Every change bumps the book's version, and the next fetch of the PDF re-renders it if it has drifted. Light and dark are separate files — a book read on a phone at midnight is not the same object as a book read on paper.

A book is a structure, not a document

None of the print machinery would work if a book were a blob of formatted text. So it is not. A book holds chapters, a chapter holds blocks, and every block knows what it is: paragraph, heading, list, table, figure, scripture quotation.

That last one is the one I care most about. When you add a scripture block you give it a reference and a translation code, and the verse text comes from Darash — the original-language search tool that is the other half of this. You do not retype it, and neither does the assistant helping you. What lands in the book is what is written, not what a model remembered. That is the most common way a study quietly goes wrong, and it was worth designing out entirely rather than checking for later.

You write by talking to your AI assistant over MCP, or by hand in a web editor. The editor link is PIN-gated and needs no account, so a co-author can be handed one section and nothing else. Sections lock while someone is in them and saves are checksum-guarded, so two people on one book do not overwrite each other.

Editions that know they are editions

The library holds 134 titles in 36 languages. A good many of those are the same book in another tongue, and this is where publishing tooling usually gives up.

In Junifye a translation is linked to its original — one original, any number of editions, and a language picker on the reader. The shape is deliberately flat: an edition cannot be a translation of a translation, and a book that already has editions cannot become someone else's edition. Chains would be the death of it.

The link earns its keep when you edit. Chapters are paired across editions by position, and Junifye remembers, per chapter and per edition, the version at which they were last reconciled. Change chapter 4 in the Norwegian and it will tell you that the English and the Farsi are now behind, where they parted, and exactly what moved on the side that moved.

It will not attempt a cross-language diff. That was a decision, not a shortcut. A machine set to compare Norwegian prose against Farsi prose produces confident nonsense. What you get instead is the full current source of both sides, the same-language diff of the actual change, and then a person decides. When you have carried it across, you say so, and the fixed point resets.

An ISBN, once a book is finished and public, is a real one from our own block. It goes into the colophon and the EPUB metadata, one per book, permanently. The barcode on a printed cover is a different number and stays the author's own.

Junifye is in beta and it is rougher in places than I would like. But the part underneath is the part I could never rent.

"And the LORD answered me, and said, Write the vision, and make it plain upon tables, that he may run that readeth it." (Habakkuk 2:2)

Plain upon tables. Not plain on a screen and wrong on the press.