We create the exact same data structures, and the only thing different is that we call a different driver to deliver them. The actor record is different, and the endpoints are different, but a Zot message and a Nomad message and an ActivityPub message are all identical.
Here's the bird's eye view: Instead of posting to each inbox, we post signed/encrypted data to a dedicated endpoint on a server and it delivers the message to the specified recipients. You only need to send one copy for all recipients on a website. If you look at the packet hitting this endpoint, it's encrypted gibberish. Only recipient websites can unpack it. But once unpacked, it's generic ActivityStreams.