{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "boardConfig": {
      "description": "Visual configuration for a hyperboard's background, colors, and layout.",
      "properties": {
        "aspectRatio": {
          "description": "Display aspect ratio of the board.",
          "knownValues": [
            "16:9",
            "4:3",
            "1:1"
          ],
          "maxLength": 10,
          "type": "string"
        },
        "backgroundColor": {
          "description": "Background color as a hex string (e.g. '#ffffff').",
          "maxLength": 20,
          "type": "string"
        },
        "backgroundGrayscale": {
          "description": "Whether the background is rendered in grayscale. Default: true.",
          "type": "boolean"
        },
        "backgroundIframeUrl": {
          "description": "URI of the background iframe.",
          "format": "uri",
          "maxLength": 2048,
          "type": "string"
        },
        "backgroundImage": {
          "description": "Background image as a URI or image blob.",
          "refs": [
            "org.hypercerts.defs#uri",
            "org.hypercerts.defs#smallImage"
          ],
          "type": "union"
        },
        "backgroundOpacity": {
          "description": "Background opacity as a percentage (0–100).",
          "maximum": 100,
          "minimum": 0,
          "type": "integer"
        },
        "backgroundType": {
          "description": "Type of background content.",
          "knownValues": [
            "image",
            "iframe"
          ],
          "maxLength": 10,
          "type": "string"
        },
        "borderColor": {
          "description": "Border color as a hex string (e.g. '#000000').",
          "maxLength": 20,
          "type": "string"
        },
        "grayscaleImages": {
          "description": "Whether contributor images are rendered in grayscale. Default: false.",
          "type": "boolean"
        },
        "imageShape": {
          "description": "Shape used to crop contributor images on this board.",
          "knownValues": [
            "circular",
            "square"
          ],
          "maxLength": 20,
          "type": "string"
        }
      },
      "type": "object"
    },
    "contributorConfig": {
      "description": "Configuration for a specific contributor within a board. Values serve as fallbacks when the contributor has not defined them on their profile. It can also be used to override contributor settings on this board without changing their global profile.",
      "properties": {
        "contributor": {
          "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.",
          "refs": [
            "com.atproto.repo.strongRef",
            "org.hypercerts.claim.activity#contributorIdentity"
          ],
          "type": "union"
        },
        "displayName": {
          "description": "Display name for this contributor on this board.",
          "maxGraphemes": 64,
          "maxLength": 640,
          "type": "string"
        },
        "hoverIframeUrl": {
          "description": "Iframe overlay shown when hovering over this contributor.",
          "format": "uri",
          "maxLength": 2048,
          "type": "string"
        },
        "hoverImage": {
          "description": "Image overlay shown when hovering over this contributor, as a URI or image blob.",
          "refs": [
            "org.hypercerts.defs#uri",
            "org.hypercerts.defs#smallImage"
          ],
          "type": "union"
        },
        "image": {
          "description": "Avatar or face image for this contributor on this board, as a URI or image blob.",
          "refs": [
            "org.hypercerts.defs#uri",
            "org.hypercerts.defs#smallImage"
          ],
          "type": "union"
        },
        "override": {
          "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.",
          "type": "boolean"
        },
        "url": {
          "description": "Click-through link URL for this contributor.",
          "format": "uri",
          "maxLength": 2048,
          "type": "string"
        },
        "video": {
          "description": "Video for this contributor, as a URI (embed/direct link) or uploaded video blob.",
          "refs": [
            "org.hypercerts.defs#uri",
            "org.hypercerts.defs#smallVideo"
          ],
          "type": "union"
        }
      },
      "required": [
        "contributor"
      ],
      "type": "object"
    },
    "main": {
      "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": {
        "properties": {
          "config": {
            "description": "Board-level visual configuration (background, colors, aspect ratio).",
            "ref": "#boardConfig",
            "type": "ref"
          },
          "contributorConfigs": {
            "description": "Per-contributor configuration entries for this board.",
            "items": {
              "ref": "#contributorConfig",
              "type": "ref"
            },
            "maxLength": 1000,
            "type": "array"
          },
          "createdAt": {
            "description": "Client-declared timestamp when this record was originally created.",
            "format": "datetime",
            "type": "string"
          },
          "signatures": {
            "description": "Optional cryptographic signatures attesting to this record's content.",
            "ref": "app.certified.signature.defs#list",
            "type": "ref"
          },
          "subject": {
            "description": "Reference to the org.hypercerts.claim.activity or org.hypercerts.collection this board visualizes.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          }
        },
        "required": [
          "subject",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "org.hyperboards.board",
  "lexicon": 1
}
