Hosted onhoraciohdev.dev.hyper.mediavia theHypermedia Protocol

From what we’ve discussed, I’d map Board AppView onto existing Seed blobs like this:

1. Change Blob

Used for durable decisions made by an actor.

Document change

{ "type": "Change", "objectType": "Document", "objectId": "hm://site/doc-login", "operation": "EditBlock", "payload": { "blockId": "block-1", "text": "Improve login flow" }, "author": "hm://account/gabo", "parents": ["cid-prev-change"], "signature": "..." }

So Board messages become Board change blobs.

2. Ref Blob

Used when one object references another.

Board references a Document

{ "type": "Ref", "source": "hm://site/board-roadmap", "target": "hm://other-site/doc-login", "relation": "card-document", "context": { "cardId": "card-login" } }

This says:

This Board represents this Document as a Card.

3. Capability Blob

Used for permissions.

Permission to add cards to a Board

{ "type": "Capability", "resource": "hm://site/board-roadmap", "grantee": "hm://account/alice", "permissions": [ "board.view", "board.edit", "board.addCard", "board.positionCard" ], "issuer": "hm://account/gabo", "signature": "..." }

4. Comment Blob / Discussion Change

If conversations stay on Documents, not Boards:

{ "type": "Change", "objectType": "Document", "objectId": "hm://site/doc-login", "operation": "AddComment", "payload": { "anchor": "block-1", "text": "Should this move to Review?" }, "author": "hm://account/alice", "signature": "..." }

The Card shows the comment count, but the Board does not own the conversation.

5. Query Blob / Query Change

If Query is an actor, its definition can also be a change blob.

{ "type": "Change", "objectType": "Query", "objectId": "hm://site/query-roadmap-descendants", "operation": "UpdateDefinition", "payload": { "rootDocument": "hm://site/project-root", "selector": "descendants" }, "author": "hm://account/gabo", "signature": "..." }

Then Board attaches the Query:

{ "type": "Change", "objectType": "Board", "objectId": "hm://site/board-roadmap", "operation": "AttachQuery", "payload": { "queryId": "hm://site/query-roadmap-descendants", "targetListId": "backlog" }, "author": "hm://account/gabo", "signature": "..." }

6. Blob / Media Blob

Used for card covers or document media.

{ "type": "Blob", "mimeType": "image/png", "cid": "bafy-image-cover" }

Board change:

{ "type": "Change", "objectType": "Board", "objectId": "hm://site/board-roadmap", "operation": "SetCardCover", "payload": { "cardId": "card-login", "cover": "bafy-image-cover" } }

Clean model

Document edits → Change blobs Board operations → Change blobs Board-document link → Ref blobs Permissions → Capability blobs Comments → Document change blobs Queries → Query change blobs Images/files → Media blobs

So the Board AppView probably needs no new blob type. It needs a new object type, Board, and new change operations for that object.

Do you like what you are reading? Subscribe to receive updates.

Unsubscribe anytime