page.mooring.site
A Mooring site. Every field except createdAt is optional: an empty record is a valid site, and the renderer falls back to the owner's profile records and a default section order.
Details · record, key any
| Kind | record |
|---|---|
| Record key | any |
| Authority | mooring.page |
| Indexed |
Checks
Validunlimited-stringdefs.careerSection.properties.parts.itemsNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.heroSection.properties.styleNo maxLength, maxGraphemes or format limits this string.large-stringdefs.main.record.properties.descriptionmaxLength is over 20 KB. Use a blob for content that large.unlimited-stringdefs.theme.properties.presetNo maxLength, maxGraphemes or format limits this string.
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"careerSection": {
"description": "Professional profile rendered from the owner's id.sifa.* records.",
"properties": {
"parts": {
"description": "Which parts of the sifa profile to render, in order. When absent, renderers should show the parts that have data, in a default order.",
"items": {
"knownValues": [
"positions",
"education",
"skills",
"projects",
"certifications",
"publications"
],
"type": "string"
},
"maxLength": 10,
"type": "array"
},
"title": {
"maxGraphemes": 128,
"maxLength": 1280,
"type": "string"
}
},
"type": "object"
},
"colors": {
"description": "Semantic color overrides, mirroring the role vocabulary of site.standard.theme.basic. Any subset may be set.",
"properties": {
"accent": {
"closed": false,
"description": "Color used for links and button backgrounds.",
"refs": [
"#rgb"
],
"type": "union"
},
"accentForeground": {
"closed": false,
"description": "Color used for button text.",
"refs": [
"#rgb"
],
"type": "union"
},
"background": {
"closed": false,
"description": "Color used for content background.",
"refs": [
"#rgb"
],
"type": "union"
},
"foreground": {
"closed": false,
"description": "Color used for content text.",
"refs": [
"#rgb"
],
"type": "union"
}
},
"type": "object"
},
"heroSection": {
"description": "Introductory section rendered from the owner's profile records (app.bsky.actor.profile, with id.sifa.profile.self as professional-context overlay when present).",
"properties": {
"showAvatar": {
"description": "Default true when absent.",
"type": "boolean"
},
"style": {
"description": "Banner treatment when the profile carries a banner: 'band' renders it full-width above the heading, 'postcard' renders it as a framed photograph beside the heading. Default 'band'. Without a banner both fall back to the avatar-led hero.",
"knownValues": [
"band",
"postcard"
],
"type": "string"
},
"tagline": {
"description": "Short line under the heading. When absent, renderers should fall back to the profile description or sifa headline.",
"maxGraphemes": 300,
"maxLength": 3000,
"type": "string"
},
"title": {
"description": "Heading override. When absent, renderers should fall back to profile data.",
"maxGraphemes": 128,
"maxLength": 1280,
"type": "string"
}
},
"type": "object"
},
"link": {
"properties": {
"label": {
"description": "Link text, like 'Follow me on Blacksky'.",
"maxGraphemes": 64,
"maxLength": 640,
"type": "string"
},
"uri": {
"description": "Where the link goes. Browsers open http(s) URLs; other schemes are the client's problem.",
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"label",
"uri"
],
"type": "object"
},
"main": {
"description": "A Mooring site. Every field except createdAt is optional: an empty record is a valid site, and the renderer falls back to the owner's profile records and a default section order.",
"key": "any",
"record": {
"properties": {
"contactEmail": {
"description": "Public contact email, rendered as a contact affordance on the site. Publishing an address here makes it world-readable.",
"maxGraphemes": 254,
"maxLength": 2540,
"type": "string"
},
"createdAt": {
"description": "Client-declared timestamp when this record was created.",
"format": "datetime",
"type": "string"
},
"description": {
"description": "Short description of the site, used for meta tags and previews.",
"maxGraphemes": 3000,
"maxLength": 30000,
"type": "string"
},
"discoverable": {
"description": "Default true when absent. When false, the renderer emits noindex directives for the site. Does not affect the public visibility of the underlying atproto records.",
"type": "boolean"
},
"icon": {
"accept": [
"image/*"
],
"description": "Square image used as the site icon/favicon. Should be at least 256x256.",
"maxSize": 1000000,
"type": "blob"
},
"labels": {
"refs": [
"com.atproto.label.defs#selfLabels"
],
"type": "union"
},
"links": {
"description": "Links rendered as the site's closing actions, in order: where a visitor can follow or reach the owner, on whichever apps the owner chooses. When absent, renderers should fall back to a link to the owner's profile that works from any client.",
"items": {
"ref": "#link",
"type": "ref"
},
"maxLength": 5,
"type": "array"
},
"name": {
"description": "Site title. When absent, renderers should fall back to the owner's profile displayName or handle.",
"maxGraphemes": 500,
"maxLength": 5000,
"type": "string"
},
"sections": {
"description": "Ordered sections of the site, rendered top to bottom; order is array position. When absent, renderers should use a sensible default order based on which sources have data.",
"items": {
"closed": false,
"refs": [
"#heroSection",
"#postsSection",
"#writingSection",
"#careerSection",
"#pagesSection"
],
"type": "union"
},
"maxLength": 50,
"type": "array"
},
"signOff": {
"description": "Valediction rendered before the owner's name in the site's closing sign-off, like 'Warmly,'. When absent, the sign-off shows the name alone.",
"maxGraphemes": 64,
"maxLength": 640,
"type": "string"
},
"theme": {
"ref": "#theme",
"type": "ref"
}
},
"required": [
"createdAt"
],
"type": "object"
},
"type": "record"
},
"pagesSection": {
"description": "Listing of the site's authored page.mooring.page records.",
"properties": {
"pages": {
"description": "Explicit ordered list of page records (AT-URIs) to show. Renderers should skip dangling references. When absent, all public pages are listed in a renderer-defined order.",
"items": {
"format": "at-uri",
"type": "string"
},
"maxLength": 100,
"type": "array"
},
"title": {
"maxGraphemes": 128,
"maxLength": 1280,
"type": "string"
}
},
"type": "object"
},
"postsSection": {
"description": "Recent microblog posts from the owner's app.bsky.feed.post collection.",
"properties": {
"limit": {
"description": "Maximum number of posts to display. Renderer default applies when absent.",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"title": {
"maxGraphemes": 128,
"maxLength": 1280,
"type": "string"
}
},
"type": "object"
},
"rgb": {
"properties": {
"b": {
"maximum": 255,
"minimum": 0,
"type": "integer"
},
"g": {
"maximum": 255,
"minimum": 0,
"type": "integer"
},
"r": {
"maximum": 255,
"minimum": 0,
"type": "integer"
}
},
"required": [
"r",
"g",
"b"
],
"type": "object"
},
"theme": {
"description": "Theme selection and overrides. All fields optional; renderer defaults apply.",
"properties": {
"colors": {
"ref": "#colors",
"type": "ref"
},
"preset": {
"description": "Named theme preset. Unknown values should fall back to the renderer's default preset.",
"knownValues": [
"classic"
],
"type": "string"
}
},
"type": "object"
},
"writingSection": {
"description": "Long-form writing from the owner's site.standard.document collection (with pub.leaflet.* legacy records as fallback).",
"properties": {
"limit": {
"description": "Maximum number of documents to display. Renderer default applies when absent.",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"publication": {
"description": "AT-URI of a site.standard.publication record to scope the listing to. When absent, renderers should list the owner's documents across publications.",
"format": "at-uri",
"type": "string"
},
"title": {
"maxGraphemes": 128,
"maxLength": 1280,
"type": "string"
}
},
"type": "object"
}
},
"description": "Configuration for a Mooring site. The record at rkey 'self' is the owner's default site; other rkeys are reserved for possible future multi-site support.",
"id": "page.mooring.site",
"lexicon": 1
}