full diff

page.mooring.site

mooring.page +30 −0
From
bafyreidauwqicqmynoj677qlwhjkb5pjvnwhgvfg5si4yyqkldcm2htoni indexed 2026-08-26 01:08 UTC View this version
To
bafyreibiw5jubytubofbeinz65tubgj533jyeczd25vcp3qmxnr5srw6fa indexed 2026-09-06 12:49 UTC View this version

Compatibility

breaking 2 breaking changes, 8 non-breaking changes.

Breaking changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "page.mooring.site#link", src: "page.mooring.site#link", tgt: "page.mooring.site#link.label", kind: "prop", name: Some("label") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "page.mooring.site#link", src: "page.mooring.site#link", tgt: "page.mooring.site#link.uri", kind: "prop", name: Some("uri") }
Non-breaking changes (8)
  • AddedVertex AddedVertex { vertex_id: "page.mooring.site#link" }
  • AddedVertex AddedVertex { vertex_id: "page.mooring.site#link.label" }
  • AddedVertex AddedVertex { vertex_id: "page.mooring.site#link.uri" }
  • AddedVertex AddedVertex { vertex_id: "page.mooring.site:body.links" }
  • AddedVertex AddedVertex { vertex_id: "page.mooring.site:body.links:items" }
  • AddedEdge AddedEdge { src: "page.mooring.site:body", tgt: "page.mooring.site:body.links", kind: "prop", name: Some("links") }
  • AddedEdge AddedEdge { src: "page.mooring.site:body.links", tgt: "page.mooring.site:body.links:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "page.mooring.site:body.links:items", tgt: "page.mooring.site#link", kind: "ref", name: None }

Migration guidance

Added

  • AddedVertex { vertex_id: "page.mooring.site#link" }
  • AddedVertex { vertex_id: "page.mooring.site#link.label" }
  • AddedVertex { vertex_id: "page.mooring.site#link.uri" }
  • AddedVertex { vertex_id: "page.mooring.site:body.links" }
  • AddedVertex { vertex_id: "page.mooring.site:body.links:items" }

Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "page.mooring.site#link", src: "page.mooring.site#link", tgt: "page.mooring.site#link.label", kind: "prop", name: Some("label") }
  • Breaking: RequiredEdgeAdded { vertex_id: "page.mooring.site#link", src: "page.mooring.site#link", tgt: "page.mooring.site#link.uri", kind: "prop", name: Some("uri") }
  • Non-breaking: AddedEdge { src: "page.mooring.site:body", tgt: "page.mooring.site:body.links", kind: "prop", name: Some("links") }
  • Non-breaking: AddedEdge { src: "page.mooring.site:body.links", tgt: "page.mooring.site:body.links:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "page.mooring.site:body.links:items", tgt: "page.mooring.site#link", kind: "ref", name: None }

Changes

11{
22 "$type": "com.atproto.lexicon.schema",
33 "defs": {
44 "careerSection": {
55 "description": "Professional profile rendered from the owner's id.sifa.* records.",
66 "properties": {
77 "parts": {
88 "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.",
99 "items": {
1010 "knownValues": [
1111 "positions",
1212 "education",
1313 "skills",
1414 "projects",
1515 "certifications",
1616 "publications"
1717 ],
1818 "type": "string"
1919 },
2020 "maxLength": 10,
2121 "type": "array"
2222 },
2323 "title": {
2424 "maxGraphemes": 128,
2525 "maxLength": 1280,
2626 "type": "string"
2727 }
2828 },
2929 "type": "object"
3030 },
3131 "colors": {
3232 "description": "Semantic color overrides, mirroring the role vocabulary of site.standard.theme.basic. Any subset may be set.",
3333 "properties": {
3434 "accent": {
3535 "closed": false,
3636 "description": "Color used for links and button backgrounds.",
3737 "refs": [
3838 "#rgb"
3939 ],
4040 "type": "union"
4141 },
4242 "accentForeground": {
4343 "closed": false,
4444 "description": "Color used for button text.",
4545 "refs": [
4646 "#rgb"
4747 ],
4848 "type": "union"
4949 },
5050 "background": {
5151 "closed": false,
5252 "description": "Color used for content background.",
5353 "refs": [
5454 "#rgb"
5555 ],
5656 "type": "union"
5757 },
5858 "foreground": {
5959 "closed": false,
6060 "description": "Color used for content text.",
6161 "refs": [
6262 "#rgb"
6363 ],
6464 "type": "union"
6565 }
6666 },
6767 "type": "object"
6868 },
6969 "heroSection": {
7070 "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).",
7171 "properties": {
7272 "showAvatar": {
7373 "description": "Default true when absent.",
7474 "type": "boolean"
7575 },
7676 "style": {
7777 "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.",
7878 "knownValues": [
7979 "band",
8080 "postcard"
8181 ],
8282 "type": "string"
8383 },
8484 "tagline": {
8585 "description": "Short line under the heading. When absent, renderers should fall back to the profile description or sifa headline.",
8686 "maxGraphemes": 300,
8787 "maxLength": 3000,
8888 "type": "string"
8989 },
9090 "title": {
9191 "description": "Heading override. When absent, renderers should fall back to profile data.",
9292 "maxGraphemes": 128,
9393 "maxLength": 1280,
9494 "type": "string"
9595 }
9696 },
9797 "type": "object"
9898 },
99 "link": {
100 "properties": {
101 "label": {
102 "description": "Link text, like 'Follow me on Blacksky'.",
103 "maxGraphemes": 64,
104 "maxLength": 640,
105 "type": "string"
106 },
107 "uri": {
108 "description": "Where the link goes. Browsers open http(s) URLs; other schemes are the client's problem.",
109 "format": "uri",
110 "maxLength": 2048,
111 "type": "string"
112 }
113 },
114 "required": [
115 "label",
116 "uri"
117 ],
118 "type": "object"
119 },
99120 "main": {
100121 "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.",
101122 "key": "any",
102123 "record": {
103124 "properties": {
104125 "contactEmail": {
105126 "description": "Public contact email, rendered as a contact affordance on the site. Publishing an address here makes it world-readable.",
106127 "maxGraphemes": 254,
107128 "maxLength": 2540,
108129 "type": "string"
109130 },
110131 "createdAt": {
111132 "description": "Client-declared timestamp when this record was created.",
112133 "format": "datetime",
113134 "type": "string"
114135 },
115136 "description": {
116137 "description": "Short description of the site, used for meta tags and previews.",
117138 "maxGraphemes": 3000,
118139 "maxLength": 30000,
119140 "type": "string"
120141 },
121142 "discoverable": {
122143 "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.",
123144 "type": "boolean"
124145 },
125146 "icon": {
126147 "accept": [
127148 "image/*"
128149 ],
129150 "description": "Square image used as the site icon/favicon. Should be at least 256x256.",
130151 "maxSize": 1000000,
131152 "type": "blob"
132153 },
133154 "labels": {
134155 "refs": [
135156 "com.atproto.label.defs#selfLabels"
136157 ],
137158 "type": "union"
138159 },
160 "links": {
161 "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.",
162 "items": {
163 "ref": "#link",
164 "type": "ref"
165 },
166 "maxLength": 5,
167 "type": "array"
168 },
139169 "name": {
140170 "description": "Site title. When absent, renderers should fall back to the owner's profile displayName or handle.",
141171 "maxGraphemes": 500,
142172 "maxLength": 5000,
143173 "type": "string"
144174 },
145175 "sections": {
146176 "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.",
147177 "items": {
148178 "closed": false,
149179 "refs": [
150180 "#heroSection",
151181 "#postsSection",
152182 "#writingSection",
153183 "#careerSection",
154184 "#pagesSection"
155185 ],
156186 "type": "union"
157187 },
158188 "maxLength": 50,
159189 "type": "array"
160190 },
161191 "signOff": {
162192 "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.",
163193 "maxGraphemes": 64,
164194 "maxLength": 640,
165195 "type": "string"
166196 },
167197 "theme": {
168198 "ref": "#theme",
169199 "type": "ref"
170200 }
171201 },
172202 "required": [
173203 "createdAt"
174204 ],
175205 "type": "object"
176206 },
177207 "type": "record"
178208 },
179209 "pagesSection": {
180210 "description": "Listing of the site's authored page.mooring.page records.",
181211 "properties": {
182212 "pages": {
183213 "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.",
184214 "items": {
185215 "format": "at-uri",
186216 "type": "string"
187217 },
188218 "maxLength": 100,
189219 "type": "array"
190220 },
191221 "title": {
192222 "maxGraphemes": 128,
193223 "maxLength": 1280,
194224 "type": "string"
195225 }
196226 },
197227 "type": "object"
198228 },
199229 "postsSection": {
200230 "description": "Recent microblog posts from the owner's app.bsky.feed.post collection.",
201231 "properties": {
202232 "limit": {
203233 "description": "Maximum number of posts to display. Renderer default applies when absent.",
204234 "maximum": 50,
205235 "minimum": 1,
206236 "type": "integer"
207237 },
208238 "title": {
209239 "maxGraphemes": 128,
210240 "maxLength": 1280,
211241 "type": "string"
212242 }
213243 },
214244 "type": "object"
215245 },
216246 "rgb": {
217247 "properties": {
218248 "b": {
219249 "maximum": 255,
220250 "minimum": 0,
221251 "type": "integer"
222252 },
223253 "g": {
224254 "maximum": 255,
225255 "minimum": 0,
226256 "type": "integer"
227257 },
228258 "r": {
229259 "maximum": 255,
230260 "minimum": 0,
231261 "type": "integer"
232262 }
233263 },
234264 "required": [
235265 "r",
236266 "g",
237267 "b"
238268 ],
239269 "type": "object"
240270 },
241271 "theme": {
242272 "description": "Theme selection and overrides. All fields optional; renderer defaults apply.",
243273 "properties": {
244274 "colors": {
245275 "ref": "#colors",
246276 "type": "ref"
247277 },
248278 "preset": {
249279 "description": "Named theme preset. Unknown values should fall back to the renderer's default preset.",
250280 "knownValues": [
251281 "classic"
252282 ],
253283 "type": "string"
254284 }
255285 },
256286 "type": "object"
257287 },
258288 "writingSection": {
259289 "description": "Long-form writing from the owner's site.standard.document collection (with pub.leaflet.* legacy records as fallback).",
260290 "properties": {
261291 "limit": {
262292 "description": "Maximum number of documents to display. Renderer default applies when absent.",
263293 "maximum": 50,
264294 "minimum": 1,
265295 "type": "integer"
266296 },
267297 "publication": {
268298 "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.",
269299 "format": "at-uri",
270300 "type": "string"
271301 },
272302 "title": {
273303 "maxGraphemes": 128,
274304 "maxLength": 1280,
275305 "type": "string"
276306 }
277307 },
278308 "type": "object"
279309 }
280310 },
281311 "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.",
282312 "id": "page.mooring.site",
283313 "lexicon": 1
284314}

Compare other versions