···9 site: lx.string({
10 required: true,
11 format: 'uri',
12- description: 'Required URI for parent site or publication (https:// or at://). Use https:// for loose documents. Avoid trailing slashes.'
13 }),
14 path: lx.string({
15- description: 'Optional path, combined with site or publication url value to construct a full url to the document. Prepend with a leading slash.'
16 }),
17 title: lx.string({
18 required: true,
19 maxLength: 1280,
20 maxGraphemes: 128,
21- description: 'Required title of the document.'
22 }),
23 description: lx.string({
24 maxLength: 3000,
25 maxGraphemes: 300,
26- description: 'Optional brief description or expert of the document.'
27 }),
28 coverImage: lx.blob({
29 maxSize: 1 * MB,
30 accept: ['image/*'],
31- description: 'Optional image to use as the documents cover. Less than 1MB is size.'
32 }),
33 content: lx.union([], {
34 closed: false,
35- description: 'Optional open union to construct content within the record. Can be extended with other lexicons to define any content format.'
36 }),
37 textContent: lx.string({
38- description: 'Optional plaintext representation of the documents contents. Useful for search and other cases.'
39 }),
40 bskyPostRef: lx.ref('com.atproto.repo.strongRef', {
41- description: 'Optional strong reference to a Bluesky post. Useful to keep track of comments off-platform.'
42 }),
43 tags: lx.array({
44 type: 'string',
45 }, {
46 maxLength: 100,
47- description: 'Optional array of strings used to tag/categorize the document. Avoid prepending tags with hashtags ("#").'
48 }),
49 publishedAt: lx.string({
50 required: true,
51 format: 'datetime',
52- description: 'Required timestamp of the documents publication.'
53 }),
54 updatedAt: lx.string({
55 format: 'datetime',
56- description: 'Optional timestamp of the documents last edit.'
57 })
58 }),
059 })
60})
···9 site: lx.string({
10 required: true,
11 format: 'uri',
12+ description: 'Points to a publication record (at://) or a publication url (https://) for loose documents. Avoid trailing slashes.'
13 }),
14 path: lx.string({
15+ description: 'Combine with site or publication url to construct a canonical URL to the document. Prepend with a leading slash.'
16 }),
17 title: lx.string({
18 required: true,
19 maxLength: 1280,
20 maxGraphemes: 128,
21+ description: 'Title of the document.'
22 }),
23 description: lx.string({
24 maxLength: 3000,
25 maxGraphemes: 300,
26+ description: 'A brief description or excerpt from the document.'
27 }),
28 coverImage: lx.blob({
29 maxSize: 1 * MB,
30 accept: ['image/*'],
31+ description: 'Image to used for thumbnail or cover image. Less than 1MB is size.'
32 }),
33 content: lx.union([], {
34 closed: false,
35+ description: 'Open union used to define the record\'s content. Each entry must specify a $type and may be extended with other lexicons to support additional content formats.'
36 }),
37 textContent: lx.string({
38+ description: 'Plaintext representation of the documents contents. Should not contain markdown or other formatting.'
39 }),
40 bskyPostRef: lx.ref('com.atproto.repo.strongRef', {
41+ description: 'Strong reference to a Bluesky post. Useful to keep track of comments off-platform.'
42 }),
43 tags: lx.array({
44 type: 'string',
45 }, {
46 maxLength: 100,
47+ description: 'Array of strings used to tag or categorize the document. Avoid prepending tags with hashtags.'
48 }),
49 publishedAt: lx.string({
50 required: true,
51 format: 'datetime',
52+ description: 'Timestamp of the documents publish time.'
53 }),
54 updatedAt: lx.string({
55 format: 'datetime',
56+ description: 'Timestamp of the documents last edit.'
57 })
58 }),
59+ description: 'A document record representing a published article, blog post, or other content. Documents can belong to a publication or exist independently.'
60 })
61})
+1-1
src/lexicons/site.standard.graph.subscription.ts
···8 publication: lx.string({
9 required: true,
10 format: 'at-uri',
11- description: 'Required publication at-uri.'
12 })
13 }),
14 description: 'Record declaring a subscription to a publication.'
···8 publication: lx.string({
9 required: true,
10 format: 'at-uri',
11+ description: 'AT-URI reference to the publication record being subscribed to (ex: at://did:plc:abc123/site.standard.publication/xyz789).'
12 })
13 }),
14 description: 'Record declaring a subscription to a publication.'
+11-8
src/lexicons/site.standard.publication.ts
···10 url: lx.string({
11 required: true,
12 format: 'uri',
13- description: 'Required base publication URL (ex: https://standard.site).'
14 }),
15 icon: lx.blob({
16 maxSize: 1 * MB,
17- accept: ['image/*']
018 }),
19 name: lx.string({
20 required: true,
21 maxLength: 1280,
22 maxGraphemes: 128,
23- description: 'Required name of the publication.'
24 }),
25 description: lx.string({
26 maxLength: 3000,
27 maxGraphemes: 300,
28- description: 'Optional brief description of the publication.'
29 }),
30 basicTheme: lx.ref(siteStandardThemeBasic.json.id, {
31- description: 'Optional simplified publication theme for tools and apps to easily implement when displaying content.'
32 }),
33 preferences: lx.ref('#preferences', {
34- description: 'Optional object containing platform specific preferences (with a few shared properties).'
35 })
36 }),
037 }),
38 preferences: lx.object({
39 showInDiscover: lx.boolean({
40 default: true,
41- description: 'Optional boolean which decides whether the publication should appear in discovery feeds.'
42- })
043 })
44})
···10 url: lx.string({
11 required: true,
12 format: 'uri',
13+ description: 'Base publication url (ex: https://standard.site). The canonical document URL is formed by combining this value with the document path.'
14 }),
15 icon: lx.blob({
16 maxSize: 1 * MB,
17+ accept: ['image/*'],
18+ description: 'Square image to identify the publication. Should be at least 256x256.'
19 }),
20 name: lx.string({
21 required: true,
22 maxLength: 1280,
23 maxGraphemes: 128,
24+ description: 'Name of the publication.'
25 }),
26 description: lx.string({
27 maxLength: 3000,
28 maxGraphemes: 300,
29+ description: 'Brief description of the publication.'
30 }),
31 basicTheme: lx.ref(siteStandardThemeBasic.json.id, {
32+ description: 'Simplified publication theme for tools and apps to utilize when displaying content.'
33 }),
34 preferences: lx.ref('#preferences', {
35+ description: 'Object containing platform specific preferences (with a few shared properties).'
36 })
37 }),
38+ description: 'A publication record representing a blog, website, or content platform. Publications serve as containers for documents and define the overall branding and settings.'
39 }),
40 preferences: lx.object({
41 showInDiscover: lx.boolean({
42 default: true,
43+ description: 'Boolean which decides whether the publication should appear in discovery feeds.'
44+ }),
45+ description: 'Platform-specific preferences for the publication, including discovery and visibility settings.'
46 })
47})
+5-4
src/lexicons/site.standard.theme.basic.ts
···8 record: lx.object({
9 background: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
10 required: true,
11- description: 'Required color used for content background.'
12 }),
13 foreground: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
14 required: true,
15- description: 'Required color used for content text.'
16 }),
17 accent: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
18 required: true,
19- description: 'Required color used for links and button backgrounds.'
20 }),
21 accentForeground: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
22 required: true,
23- description: 'Required color used for button text.'
24 })
25 }),
026 })
27})
···8 record: lx.object({
9 background: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
10 required: true,
11+ description: 'Color used for content background.'
12 }),
13 foreground: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
14 required: true,
15+ description: 'Color used for content text.'
16 }),
17 accent: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
18 required: true,
19+ description: 'Color used for links and button backgrounds.'
20 }),
21 accentForeground: lx.union([siteStandardThemeColor.json.id + '#rgb'], {
22 required: true,
23+ description: 'Color used for button text.'
24 })
25 }),
26+ description: 'A simplified theme definition for publications, providing basic color customization for content display across different platforms and applications.'
27 })
28})