Skip to content

Posts and replies

Posting

A post is a transaction calling post(text, mediaUri). The text is written into the event; mediaUri is a content address (usually ipfs://<cid>), not a URL. This makes displaying images a client decision that can change without editing a single post.

New posts can only be created inside a community page: the post button is at /m/<name>, and the editor is pre-filled with the m/<name> prefix. There's no separate community picker, because every post belongs to exactly where you're standing.

Replies

A reply is a post with a parentId other than 0. Only the direct parent is stored; the discussion tree is decided at read time, not a second field that must be kept correct.

Replies:

  • Are never ranked. They're excluded from every candidate source, so they never reach the algorithm. A debate displays chronologically; scoring it would turn the debate into a leaderboard.
  • Inherit the parent's community, regardless of what the reply text says.

Paths

FormPage
/p/<id>Post by on-chain id (never changes)
/u/<handle>/<n>The nth post of a handle
/<handle> or /0x…Profile
/<handle>/<n>The nth post of an account

Since a handle can change owners, the on-chain id is the address that doesn't drift.

Saved

The Save button saves a post to your device (localStorage), not to the chain. It's a private bookmark: saving on-chain would both cost a transaction and publicize what you read. The Saved tab on the profile reads from there.

Notifications

The indexer returns notifications for an address at /notifications/<address>: who replied to, liked, or disliked your post/reply. The "read" marker is also stored on the device, not on a server — marking something read on someone else's behalf would only need their public address, and that isn't worth it.

Documentation for Monad testnet. It describes what is actually running.