Writing together
The editor is Lexical, kept in sync through Liveblocks and Yjs. Writers share a document with a link, and guests can join without an account. Everyone sees the others' pointers move and where they're typing, edits merge as they happen, and each comment is a pin beside its phrase that opens in place.
How I tested it
To check the collaboration properly, I wrote a Playwright suite that runs against Liveblocks itself, with nothing mocked. Three people share a room, two signed in and one guest. They type in the same sentence at once, comment, reply and resolve, and the guest drops offline for nine seconds while the others keep writing. Then someone joins late, and the saved document and the exported PDF have to contain everyone's text.
Fast typing lost characters. The cause was in Liveblocks' own Lexical comments plugin, which set a fresh array of active threads on every editor update. React stopped that with a "Maximum update depth exceeded" error, and the error cut off Lexical's other listeners before the last edits reached the shared Yjs document. The same bug left a writer out of date after a long offline gap. I patched the plugin in Hotpress so it keeps the old array when the threads haven't changed, a one-line change. The bug is still in Liveblocks' latest release, 3.24.3, so I reported it and opened a pull request with the fix.
Comments also failed now and then with a 403. My auth route gave out two kinds of Liveblocks token, and the client sometimes sent a comment with the kind that carries no room permissions. I changed it to issue one kind for everything, with the same access as before.
With both fixes, the suite passed all 17 checks three runs in a row on a production build. In those runs an edit reached the other writer in a median of 0.2 seconds, and 0.45 seconds at the 95th percentile.
From manuscript to book
Hotpress also lays out the book. You pick one of 22 templates, set up chapters, scene breaks, front and back matter, headers and footers, page layout and typography, and export a PDF for the printer, with a PDF/X-4 output intent, CMYK colour, bleed and trim marks, or an EPUB. It uses GitHub for version control.
