Skip to content
5 changes: 5 additions & 0 deletions .changeset/add-hyperboards-lexicons.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@hypercerts-org/lexicon": minor
---

Add `org.hyperboards.board` and `org.hyperboards.displayProfile` lexicons for hyperboard visual presentation records.
73 changes: 73 additions & 0 deletions SCHEMAS.md
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,12 @@ Common type definitions used across all protocols.
| -------- | ------ | -------- | ----------------- |
| `image` | `blob` | ✅ | Image (up to 5MB) |

##### `org.hypercerts.defs#smallVideo`

| Property | Type | Required | Description |
| -------- | ------ | -------- | ------------------ |
| `video` | `blob` | ✅ | Video (up to 20MB) |

##### `org.hypercerts.defs#largeImage`

| Property | Type | Required | Description |
Expand All @@ -486,6 +492,73 @@ External lexicons from other protocols and systems.

---

### `org.hyperboards.board`

**Description:** Configuration record for a hyperboard, wrapping an underlying activity or collection with visual presentation settings. Stored in the creator's PDS.

**Key:** `tid`

#### Properties

| Property | Type | Required | Description | Comments |
| --------------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- |
| `subject` | `ref` | ✅ | Reference to the org.hypercerts.claim.activity or org.hypercerts.claim.collection this board visualizes. | |
| `config` | `ref` | ❌ | Visual configuration for a hyperboard's background, colors, and layout. | |
| `contributorDefaults` | `ref[]` | ❌ | Per-contributor default visual settings for this board. Each entry provides fallback values for a contributor's appearance, unless the entry's override flag forces the board's values to take precedence over the contributor's own settings. | maxLength: 1000 |
| `createdAt` | `string` | ✅ | Client-declared timestamp when this record was originally created. | |

#### Defs

##### `org.hyperboards.board#boardConfig`

| Property | Type | Required | Description |
| --------------------- | --------- | -------- | --------------------------------------------------------------------- |
| `backgroundType` | `string` | ❌ | Type of background content. |
| `backgroundImage` | `union` | ❌ | Background image as a URI or image blob. |
| `backgroundIframeUrl` | `string` | ❌ | URI of the background iframe. |
| `backgroundGrayscale` | `boolean` | ❌ | Whether the background is rendered in grayscale. Default: true. |
| `backgroundOpacity` | `integer` | ❌ | Background opacity as a percentage (0–100). |
| `backgroundColor` | `string` | ❌ | Background color as a hex string (e.g. '#ffffff'). |
| `borderColor` | `string` | ❌ | Border color as a hex string (e.g. '#000000'). |
| `grayscaleImages` | `boolean` | ❌ | Whether contributor images are rendered in grayscale. Default: false. |
| `imageShape` | `string` | ❌ | Shape used to crop contributor images on this board. |
| `aspectRatio` | `string` | ❌ | Display aspect ratio of the board. |

##### `org.hyperboards.board#contributorDefault`

| Property | Type | Required | Description |
| ---------------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `contributor` | `union` | ✅ | Identifies the contributor being styled. A strong reference to an org.hypercerts.claim.contributorInformation record, or a contributorIdentity (DID or identifier string) for contributors without a dedicated record. |
| `override` | `boolean` | ❌ | When true, these values take precedence over the contributor's own profile and display settings. When false or omitted, they are only used as fallbacks if the contributor has not set their own settings. |
| `displayName` | `string` | ❌ | Default display name for this contributor on this board. |
| `image` | `union` | ❌ | Default avatar or face image for this contributor on this board, as a URI or image blob. |
| `video` | `union` | ❌ | Default video for this contributor, as a URI (embed/direct link) or uploaded video blob. |
| `hoverImage` | `union` | ❌ | Default image overlay shown when hovering over this contributor, as a URI or image blob. |
| `hoverIframeUrl` | `string` | ❌ | Default iframe overlay shown when hovering over this contributor. |
| `url` | `string` | ❌ | Default click-through link URL for this contributor. |

---

### `org.hyperboards.displayProfile`

**Description:** User-declared visual presentation defaults for how a contributor appears on hyperboards. Stored in the contributor's own PDS and reusable across multiple boards.

**Key:** `literal:self`

#### Properties

| Property | Type | Required | Description | Comments |
| ---------------- | -------- | -------- | ----------------------------------------------------------------------------------------------- | -------------------------------- |
| `displayName` | `string` | ❌ | Display name override for this user on hyperboards. | maxLength: 640, maxGraphemes: 64 |
| `image` | `union` | ❌ | Avatar or face image override for this user on hyperboards, as a URI or image blob. | |
| `video` | `union` | ❌ | Default video for this user across boards, as a URI (embed/direct link) or uploaded video blob. | |
| `hoverImage` | `union` | ❌ | Default hover image for this user across boards, as a URI or image blob. | |
| `hoverIframeUrl` | `string` | ❌ | Default hover iframe URL for this user across boards. | maxLength: 2048 |
| `url` | `string` | ❌ | Default click-through link URL for this user across boards. | maxLength: 2048 |
| `createdAt` | `string` | ✅ | Client-declared timestamp when this record was originally created. | |

---

## Notes

- All timestamps use the `datetime` format (ISO 8601)
Expand Down
152 changes: 152 additions & 0 deletions lexicons/org/hyperboards/board.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
{
"lexicon": 1,
"id": "org.hyperboards.board",
"defs": {
"main": {
"type": "record",
"description": "Configuration record for a hyperboard, wrapping an underlying activity or collection with visual presentation settings. Stored in the creator's PDS.",
"key": "tid",
"record": {
"type": "object",
"required": ["subject", "createdAt"],
"properties": {
"subject": {
"type": "ref",
"ref": "com.atproto.repo.strongRef",
"description": "Reference to the org.hypercerts.claim.activity or org.hypercerts.claim.collection this board visualizes."
},
"config": {
"type": "ref",
"ref": "#boardConfig",
"description": "Board-level visual configuration (background, colors, aspect ratio)."
},
"contributorDefaults": {
"type": "array",
"description": "Per-contributor default visual settings for this board. Each entry provides fallback values for a contributor's appearance, unless the entry's override flag forces the board's values to take precedence over the contributor's own settings.",
Comment thread
aspiers marked this conversation as resolved.
Outdated
"maxLength": 1000,
"items": {
"type": "ref",
"ref": "#contributorDefault"
}
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when this record was originally created."
}
}
}
},
"boardConfig": {
"type": "object",
"description": "Visual configuration for a hyperboard's background, colors, and layout.",
"properties": {
"backgroundType": {
"type": "string",
"description": "Type of background content.",
"knownValues": ["image", "iframe"],
"maxLength": 10
},
"backgroundImage": {
"type": "union",
"refs": ["org.hypercerts.defs#uri", "org.hypercerts.defs#smallImage"],
"description": "Background image as a URI or image blob."
},
"backgroundIframeUrl": {
"type": "string",
"format": "uri",
"description": "URI of the background iframe.",
"maxLength": 2048
},
"backgroundGrayscale": {
"type": "boolean",
"description": "Whether the background is rendered in grayscale. Default: true."
},
"backgroundOpacity": {
"type": "integer",
"description": "Background opacity as a percentage (0–100).",
"minimum": 0,
"maximum": 100
},
"backgroundColor": {
"type": "string",
"description": "Background color as a hex string (e.g. '#ffffff').",
"maxLength": 20
},
"borderColor": {
"type": "string",
"description": "Border color as a hex string (e.g. '#000000').",
"maxLength": 20
},
"grayscaleImages": {
"type": "boolean",
"description": "Whether contributor images are rendered in grayscale. Default: false."
},
"imageShape": {
"type": "string",
"description": "Shape used to crop contributor images on this board.",
"knownValues": ["circular", "square"],
"maxLength": 20
},
"aspectRatio": {
"type": "string",
"description": "Display aspect ratio of the board.",
"knownValues": ["16:9", "4:3", "1:1"],
"maxLength": 10
}
}
},
"contributorDefault": {
Comment thread
holkexyz marked this conversation as resolved.
Outdated
"type": "object",
"description": "Default visual settings for a specific contributor within a board. Values serve as fallbacks when the contributor has not defined their own. When 'override' is true, these values take precedence over the contributor's own settings.",
"required": ["contributor"],
"properties": {
"contributor": {
"type": "union",
"refs": [
"com.atproto.repo.strongRef",
"org.hypercerts.claim.activity#contributorIdentity"
],
"description": "Identifies the contributor being styled. A strong reference to an org.hypercerts.claim.contributorInformation record, or a contributorIdentity (DID or identifier string) for contributors without a dedicated record."
},
"override": {
"type": "boolean",
"description": "When true, these values take precedence over the contributor's own profile and display settings. When false or omitted, they are only used as fallbacks if the contributor has not set their own settings."
},
"displayName": {
"type": "string",
"description": "Default display name for this contributor on this board.",
"maxLength": 640,
"maxGraphemes": 64
},
"image": {
"type": "union",
"refs": ["org.hypercerts.defs#uri", "org.hypercerts.defs#smallImage"],
"description": "Default avatar or face image for this contributor on this board, as a URI or image blob."
},
"video": {
"type": "union",
"refs": ["org.hypercerts.defs#uri", "org.hypercerts.defs#smallVideo"],
"description": "Default video for this contributor, as a URI (embed/direct link) or uploaded video blob."
},
"hoverImage": {
"type": "union",
"refs": ["org.hypercerts.defs#uri", "org.hypercerts.defs#smallImage"],
"description": "Default image overlay shown when hovering over this contributor, as a URI or image blob."
},
"hoverIframeUrl": {
"type": "string",
"format": "uri",
"description": "Default iframe overlay shown when hovering over this contributor.",
"maxLength": 2048
},
"url": {
"type": "string",
"format": "uri",
"description": "Default click-through link URL for this contributor.",
"maxLength": 2048
}
}
}
}
}
64 changes: 64 additions & 0 deletions lexicons/org/hyperboards/displayProfile.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
{
"lexicon": 1,
"id": "org.hyperboards.displayProfile",
"defs": {
"main": {
"type": "record",
"description": "User-declared visual presentation defaults for how a contributor appears on hyperboards. Stored in the contributor's own PDS and reusable across multiple boards.",
"key": "literal:self",
"record": {
"type": "object",
"required": ["createdAt"],
"properties": {
"displayName": {
"type": "string",
"description": "Display name override for this user on hyperboards.",
"maxLength": 640,
"maxGraphemes": 64
},
"image": {
"type": "union",
"refs": [
"org.hypercerts.defs#uri",
"org.hypercerts.defs#smallImage"
],
"description": "Avatar or face image override for this user on hyperboards, as a URI or image blob."
},
"video": {
"type": "union",
"refs": [
"org.hypercerts.defs#uri",
"org.hypercerts.defs#smallVideo"
],
"description": "Default video for this user across boards, as a URI (embed/direct link) or uploaded video blob."
},
"hoverImage": {
"type": "union",
"refs": [
"org.hypercerts.defs#uri",
"org.hypercerts.defs#smallImage"
],
"description": "Default hover image for this user across boards, as a URI or image blob."
},
"hoverIframeUrl": {
"type": "string",
"format": "uri",
"description": "Default hover iframe URL for this user across boards.",
"maxLength": 2048
},
"url": {
"type": "string",
"format": "uri",
"description": "Default click-through link URL for this user across boards.",
"maxLength": 2048
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when this record was originally created."
}
}
}
}
}
}
13 changes: 13 additions & 0 deletions lexicons/org/hypercerts/defs.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,19 @@
}
}
},
"smallVideo": {
"type": "object",
"required": ["video"],
"description": "Object containing a small video",
"properties": {
"video": {
"type": "blob",
"accept": ["video/mp4", "video/webm"],
"maxSize": 20971520,
"description": "Video (up to 20MB)"
}
}
},
"largeImage": {
"type": "object",
"required": ["image"],
Expand Down