Crossdraft is a private project I am working on for taking one Markdown article to multiple publishing platforms. It is still in development and has not launched.
The CLI has preview, draft, update, and publishing workflows for DEV and Hashnode. Medium takes a different path: an offline HTML export for its import or editor workflow. The latest addition is an experimental Substack private-draft adapter, with publication left to the Substack editor.
Most of the interesting work has been around keeping track of what already exists. Once a remote draft is created, Crossdraft saves its ID and updates that draft. Running the command again should not leave another copy sitting in the account.
Hashnode exposed a useful edge case. An update could succeed while an immediate read still returned the old content. The fix was to allow bounded readback checks, rather than send the write again and hope for the best. Ambiguous writes stay recorded for inspection.
Publishing on DEV and Hashnode is a separate command with an explicit confirmation of the destination. Previewing an article or updating a draft does not count as permission to publish it.
Real private-draft checks have been useful, but I am keeping the verification claims narrow. Implemented publishing commands and passing mocked tests do not establish a completed live publication on every provider. The project is getting useful before I am ready to call it released.