An independent film magazine was assembling each issue by hand in a shared document. It took a full day and broke every time two editors typed at once.
- Client
- Kadar Magazine
- Role
- Front-end architecture
- Timeline
- Feb – Jun 2025
- Team
- 2 engineers
- Stack
- ReactProseMirrorVitePostgreSQLFly.io
The layout lived in someone's head
Kadar publishes six issues a year, each around forty pieces. Assembly happened in a shared word processor: an editor pasted copy, another applied styles by hand, and the house typographic rules — the specific pull-quote treatment, the drop cap on features only, the em-dash convention — existed as a two-page PDF that nobody opened.
The result was an issue that took a day to assemble and looked subtly different every time, plus a reading experience on the web that was whatever the CMS theme happened to do.
Encode the house style as blocks
Instead of a general-purpose editor, Kadar has exactly the blocks the magazine uses: standfirst, body, pull quote, still, credit block, interview turn. Each one carries the house typographic rules with it, so an editor cannot produce an off-style pull quote by accident because there is no way to express one.
The reading experience was designed against the print issue rather than against other websites. No infinite scroll, no interstitials, no autoplay, no related-content rail. A piece ends, and then there is one link to the next piece in the issue.
The editor is collaborative but deliberately not real-time character-by-character — pieces are locked at the block level while someone is in them, which matched how the team already worked and avoided a category of conflict resolution nobody wanted to debug.
“They did not need a better word processor. They needed a smaller one that only knew how to make their magazine.”
Marko Malec
Forty minutes, not a day
Issue assembly went from roughly a working day to forty minutes, and the typographic drift disappeared entirely because it was no longer possible to introduce.
Average reading time per piece rose 34% across the two issues after launch. The editors attribute most of that to removing the related-content rail, which is the kind of finding that is hard to argue with and easy to forget.