···55export { StandardSite } from './StandardSite'
66export { ClickableHeading } from './ClickableHeading'
77export { DocsPageMenu } from './DocsPageMenu'
88+export { Updated } from './Updated'
+3-3
app/components/sections/DefinitionsSection.tsx
···3838 </h2>
39394040 <p className="text-base sm:text-xl leading-snug tracking-tight text-muted">
4141- We currently define three main lexicons that cover the core building
4242- blocks of long-form platforms: where content lives, what it
4343- contains, and how users connect with publications.
4141+ We currently define a small set of lexicons that cover the core building
4242+ blocks of long-form platforms: where content lives, what it contains, and how
4343+ users connect with publications and documents they care about.
4444 </p>
45454646 <TabbedLexiconViewer tabs={ tabs } allSchemas={ allSchemas } />
···88 name: 'Name of the publication.',
99 description: 'Brief description of the publication.',
1010 basicTheme: 'Simplified publication theme for tools and apps to utilize when displaying content.',
1111+ labels: 'Self-label values for this publication. Effectively content warnings.',
1112 preferences: 'Object containing platform specific preferences (with a few shared properties).',
1213 },
1314 'site.standard.theme.basic': {
···2930 textContent: 'Plaintext representation of the documents contents. Should not contain markdown or other formatting.',
3031 bskyPostRef: 'Strong reference to a Bluesky post. Useful to keep track of comments off-platform.',
3132 tags: 'Array of strings used to tag or categorize the document. Avoid prepending tags with hashtags.',
3333+ links: 'Open union describing relationships between this document and external resources.',
3434+ labels: 'Self-label values for this document. Effectively content warnings.',
3535+ contributors: 'List of additional contributors to this document.',
3236 publishedAt: 'Timestamp of the documents publish time.',
3337 updatedAt: 'Timestamp of the documents last edit.',
3838+ },
3939+ 'site.standard.document#contributor': {
4040+ did: 'DID of the contributor.',
4141+ role: 'Role of the contributor (ex: `editor`, `translator`).',
4242+ displayName: 'Optional display name override for the contributor.',
4343+ },
4444+ 'site.standard.graph.subscription': {
4545+ publication: 'AT-URI reference to the publication record being subscribed to.',
4646+ createdAt: 'Timestamp marking when the subscription was created.',
4747+ },
4848+ 'site.standard.graph.recommend': {
4949+ document: 'AT-URI reference to the document record being recommended.',
5050+ createdAt: 'Timestamp marking when the recommend was created.',
3451 },
3552}
3653···5572 'name',
5673 'description',
5774 'basicTheme',
7575+ 'labels',
5876 'preferences',
5977 ],
6078 'site.standard.document': [
···6785 'textContent',
6886 'bskyPostRef',
6987 'tags',
8888+ 'links',
8989+ 'labels',
9090+ 'contributors',
7091 'publishedAt',
7192 'updatedAt',
9393+ ],
9494+ 'site.standard.document#contributor': [
9595+ 'did',
9696+ 'role',
9797+ 'displayName',
9898+ ],
9999+ 'site.standard.graph.subscription': [
100100+ 'publication',
101101+ 'createdAt',
102102+ ],
103103+ 'site.standard.graph.recommend': [
104104+ 'document',
105105+ 'createdAt',
72106 ],
73107 'site.standard.theme.basic': [
74108 'background',
···1414 "properties": {
1515 "path": {
1616 "type": "string",
1717- "description": "Combine with `site` or publication url to construct a canonical `URL` to the document. A slash should be included at the beginning of this value."
1717+ "description": "Combine with site or publication url to construct a canonical URL to the document. Prepend with a leading slash."
1818 },
1919 "site": {
2020 "type": "string",
2121 "format": "uri",
2222- "description": "Points to a publication record `at://` or a publication url `https://` for loose documents. Avoid trailing slashes."
2222+ "description": "Points to a publication record (at://) or a publication url (https://) for loose documents. Avoid trailing slashes."
2323 },
2424 "tags": {
2525 "type": "array",
2626 "items": {
2727- "type": "string"
2727+ "type": "string",
2828+ "maxLength": 1280,
2929+ "maxGraphemes": 128
2830 },
2929- "maxLength": 1280,
3030- "description": "Array of strings used to tag or categorize the document. Avoid prepending tags with hashtags.",
3131- "maxGraphemes": 128
3131+ "description": "Array of strings used to tag or categorize the document. Avoid prepending tags with hashtags."
3232+ },
3333+ "links": {
3434+ "refs": [],
3535+ "type": "union",
3636+ "description": "Array of values describing relationships between this document and external resources"
3237 },
3338 "title": {
3439 "type": "string",
···3641 "description": "Title of the document.",
3742 "maxGraphemes": 500
3843 },
4444+ "labels": {
4545+ "refs": [
4646+ "com.atproto.label.defs#selfLabels"
4747+ ],
4848+ "type": "union",
4949+ "description": "Self-label values for this post. Effectively content warnings."
5050+ },
3951 "content": {
4052 "refs": [],
4153 "type": "union",
4254 "closed": false,
4343- "description": "Open union used to define the record's content. Each entry must specify a `$type`"
5555+ "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."
4456 },
4557 "updatedAt": {
4658 "type": "string",
···7486 "textContent": {
7587 "type": "string",
7688 "description": "Plaintext representation of the documents contents. Should not contain markdown or other formatting."
8989+ },
9090+ "contributors": {
9191+ "type": "array",
9292+ "items": {
9393+ "ref": "#contributor",
9494+ "type": "ref"
9595+ }
7796 }
7897 }
7998 },
8099 "description": "A document record representing a published article, blog post, or other content. Documents can belong to a publication or exist independently."
100100+ },
101101+ "contributor": {
102102+ "type": "object",
103103+ "required": [
104104+ "did"
105105+ ],
106106+ "properties": {
107107+ "did": {
108108+ "type": "string",
109109+ "format": "did"
110110+ },
111111+ "role": {
112112+ "type": "string",
113113+ "maxLength": 1000,
114114+ "maxGraphemes": 100
115115+ },
116116+ "displayName": {
117117+ "type": "string",
118118+ "maxLength": 1000,
119119+ "maxGraphemes": 100
120120+ }
121121+ }
81122 }
82123 },
83124 "$type": "com.atproto.lexicon.schema",
···1010 "publication"
1111 ],
1212 "properties": {
1313+ "createdAt": {
1414+ "type": "string",
1515+ "format": "datetime"
1616+ },
1317 "publication": {
1418 "type": "string",
1519 "format": "at-uri",
···1721 }
1822 }
1923 },
2020- "description": "Record declaring a subscription to a publication"
2424+ "description": "Record declaring a subscription to a publication."
2125 }
2226 },
2327 "$type": "com.atproto.lexicon.schema",
+11-5
app/data/lexicons/publication.json
···1414 "url": {
1515 "type": "string",
1616 "format": "uri",
1717- "description": "Base url for the publication. (ex: https://standard.site). This value will be combined with the document path to construct a full URL for the document. Avoid trailing slashes."
1717+ "description": "Base publication url (ex: https://standard.site). The canonical document URL is formed by combining this value with the document path."
1818 },
1919 "icon": {
2020 "type": "blob",
···3030 "description": "Name of the publication.",
3131 "maxGraphemes": 500
3232 },
3333+ "labels": {
3434+ "refs": [
3535+ "com.atproto.label.defs#selfLabels"
3636+ ],
3737+ "type": "union",
3838+ "description": "Self-label values for this publication. Effectively content warnings."
3939+ },
3340 "basicTheme": {
3441 "ref": "site.standard.theme.basic",
3542 "type": "ref",
3636- "description": "Simplified theme for tools and apps to utilize when displaying content."
4343+ "description": "Simplified publication theme for tools and apps to utilize when displaying content."
3744 },
3845 "description": {
3946 "type": "string",
···5663 "showInDiscover": {
5764 "type": "boolean",
5865 "default": true,
5959- "description": "Decides whether the publication should appear in discovery feeds."
6666+ "description": "Boolean which decides whether the publication should appear in discovery feeds."
6067 }
6161- },
6262- "description": "Platform-specific preferences for the publication, including discovery and visibility settings."
6868+ }
6369 }
6470 },
6571 "$type": "com.atproto.lexicon.schema",
+40-36
app/data/lexicons/theme.basic.json
···22 "id": "site.standard.theme.basic",
33 "defs": {
44 "main": {
55- "type": "object",
66- "required": [
77- "background",
88- "foreground",
99- "accent",
1010- "accentForeground"
1111- ],
1212- "properties": {
1313- "accent": {
1414- "refs": [
1515- "site.standard.theme.color#rgb"
1616- ],
1717- "type": "union",
1818- "description": "Color used for links and button backgrounds."
1919- },
2020- "background": {
2121- "refs": [
2222- "site.standard.theme.color#rgb"
2323- ],
2424- "type": "union",
2525- "description": "Color used for content background."
2626- },
2727- "foreground": {
2828- "refs": [
2929- "site.standard.theme.color#rgb"
3030- ],
3131- "type": "union",
3232- "description": "Color used for content text."
3333- },
3434- "accentForeground": {
3535- "refs": [
3636- "site.standard.theme.color#rgb"
3737- ],
3838- "type": "union",
3939- "description": "Color used for button text."
55+ "key": "tid",
66+ "type": "record",
77+ "record": {
88+ "type": "object",
99+ "required": [
1010+ "background",
1111+ "foreground",
1212+ "accent",
1313+ "accentForeground"
1414+ ],
1515+ "properties": {
1616+ "accent": {
1717+ "refs": [
1818+ "site.standard.theme.color#rgb"
1919+ ],
2020+ "type": "union",
2121+ "description": "Color used for links and button backgrounds."
2222+ },
2323+ "background": {
2424+ "refs": [
2525+ "site.standard.theme.color#rgb"
2626+ ],
2727+ "type": "union",
2828+ "description": "Color used for content background."
2929+ },
3030+ "foreground": {
3131+ "refs": [
3232+ "site.standard.theme.color#rgb"
3333+ ],
3434+ "type": "union",
3535+ "description": "Color used for content text."
3636+ },
3737+ "accentForeground": {
3838+ "refs": [
3939+ "site.standard.theme.color#rgb"
4040+ ],
4141+ "type": "union",
4242+ "description": "Color used for button text."
4343+ }
4044 }
4145 },
4242- "description": "A simplified theme definition, providing basic color customization for content display across different platforms and applications."
4646+ "description": "A simplified theme definition for publications, providing basic color customization for content display across different platforms and applications."
4347 }
4448 },
4549 "$type": "com.atproto.lexicon.schema",
···11import publicationLexicon from "../data/lexicons/publication.json";
22import documentLexicon from "../data/lexicons/document.json";
33import subscriptionLexicon from "../data/lexicons/graph.subscription.json";
44+import recommendLexicon from "../data/lexicons/graph.recommend.json";
45import themeBasicLexicon from "../data/lexicons/theme.basic.json";
56import themeColorLexicon from "../data/lexicons/theme.color.json";
77+import authFullLexicon from "../data/lexicons/authFull.json";
88+import authSocialLexicon from "../data/lexicons/authSocial.json";
69import { getDescriptionOverride, getPropertyOrder } from "../data/lexicon-overrides";
710811export interface LexiconProperty {
···5053 "site.standard.publication": publicationLexicon as LexiconSchema,
5154 "site.standard.document": documentLexicon as LexiconSchema,
5255 "site.standard.graph.subscription": subscriptionLexicon as LexiconSchema,
5656+ "site.standard.graph.recommend": recommendLexicon as LexiconSchema,
5357 "site.standard.theme.basic": themeBasicLexicon as LexiconSchema,
5458 "site.standard.theme.color": themeColorLexicon as LexiconSchema,
5959+ "site.standard.authFull": authFullLexicon as LexiconSchema,
6060+ "site.standard.authSocial": authSocialLexicon as LexiconSchema,
5561};
56625763export function getLexicon(nsid: string): LexiconSchema | null {
+5-1
content/docs/introduction.mdx
···66ogImage: opengraph-image-docs-introduction-v2.png
77---
8899-import { StandardSite } from '@/app/components/docs'
99+import { StandardSite, Updated } from '@/app/components/docs'
10101111# Introduction
1212···3131### Subscriptions
32323333The [`site.standard.graph.subscription`](/docs/lexicons/subscription) lexicon tracks relationships between users and publications, enabling follow functionality and personalized content feeds across the AT Protocol network.
3434+3535+### Recommends <Updated label="New" />
3636+3737+The [`site.standard.graph.recommend`](/docs/lexicons/recommend) lexicon lets users endorse individual documents, providing a lightweight signal that aggregators and readers can use to surface trusted or popular content.
34383539## Design Philosophy
3640
+21-5
content/docs/lexicons/document.mdx
···66ogImage: opengraph-image-docs-document-lexicon-v2.png
77---
8899-import { Table } from '@/app/components/docs'
99+import { Table, Updated } from '@/app/components/docs'
10101111# Document Lexicon
1212···2929 ]}
3030/>
31313232-### Optional Properties
3232+### Optional Properties <Updated />
33333434<Table
3535 headers={['Property', 'Type', 'Description']}
3636 rows={[
3737- ['path', 'string', <>Combine with <code>site</code> or publication <code>url</code> to construct a canonical URL to the document. A slash should be included at the beginning of this value.</>],
3737+ ['path', 'string', <>Combine with <code>site</code> or publication <code>url</code> to construct a canonical URL to the document. Prepend with a leading slash.</>],
3838 ['description', 'string', <>A brief description or excerpt from the document. <code>maxLength: 30000</code> <code>maxGraphemes: 3000</code></>],
3939 ['coverImage', 'blob', 'Image to used for thumbnail or cover image. Less than 1MB is size.'],
4040- ['content', 'union', <>Open union used to define the record's content. Each entry must specify a <code>$type</code></>],
4040+ ['content', 'union', <>Open union used to define the record's content. Each entry must specify a <code>$type</code> and may be extended with other lexicons to support additional content formats.</>],
4141 ['textContent', 'string', 'Plaintext representation of the documents contents. Should not contain markdown or other formatting.'],
4242 ['bskyPostRef', 'ref', 'Strong reference to a Bluesky post. Useful to keep track of comments off-platform.'],
4343- ['tags', 'array', <>Array of strings used to tag or categorize the document. Avoid prepending tags with hashtags. <code>maxLength: 1280</code> <code>maxGraphemes: 128</code></>],
4343+ ['tags', 'array', <>Array of strings used to tag or categorize the document. Avoid prepending tags with hashtags. <code>items.maxLength: 1280</code> <code>items.maxGraphemes: 128</code></>],
4444+ ['links', 'union', "Open union describing relationships between this document and external resources."],
4545+ ['labels', 'union', <>Self-label values for this document. Effectively content warnings. (ref → <code>com.atproto.label.defs#selfLabels</code>)</>],
4646+ ['contributors', 'array', <>List of additional contributors to this document (ref → <a href="#contributor">#contributor</a>).</>],
4447 ['updatedAt', 'datetime', 'Timestamp of the documents last edit.'],
4848+ ]}
4949+/>
5050+5151+### Contributor <Updated label="New" />
5252+5353+The `#contributor` property describes a participant on a document beyond the record's author.
5454+5555+<Table
5656+ headers={['Property', 'Type', 'Required', 'Description']}
5757+ rows={[
5858+ ['did', 'string:did', 'Yes', 'DID of the contributor.'],
5959+ ['role', 'string', 'No', <>Role of the contributor (ex: "editor", "translator"). <code>maxLength: 1000</code> <code>maxGraphemes: 100</code></>],
6060+ ['displayName', 'string', 'No', <>Optional display name override for the contributor. <code>maxLength: 1000</code> <code>maxGraphemes: 100</code></>],
4561 ]}
4662/>
4763
+3-2
content/docs/lexicons/publication.mdx
···66ogImage: opengraph-image-docs-publication-lexicon-v2.png
77---
8899-import { Table } from '@/app/components/docs'
99+import { Table, Updated } from '@/app/components/docs'
10101111# Publication Lexicon
1212···3030 ]}
3131/>
32323333-### Optional Properties
3333+### Optional Properties <Updated />
34343535<Table
3636 headers={['Property', 'Type', 'Description']}
···3838 ['icon', 'blob', 'Square image to identify the publication. Should be at least 256x256.'],
3939 ['description', 'string', <>Brief description of the publication. <code>maxLength: 30000</code> <code>maxGraphemes: 3000</code></>],
4040 ['basicTheme', 'ref', <>Simplified theme for tools and apps to utilize when displaying content. (ref → <a href="/docs/lexicons/theme">site.standard.theme.basic</a>)</>],
4141+ ['labels', 'union', <>Self-label values for this publication. Effectively content warnings. (ref → <code>com.atproto.label.defs#selfLabels</code>)</>],
4142 ['preferences', 'object', 'Platform-specific preferences for the publication, including discovery and visibility settings.'],
4243 ['preferences.showInDiscover', 'boolean', 'Decides whether the publication should appear in discovery feeds.'],
4344 ]}
+48
content/docs/lexicons/recommend.mdx
···11+---
22+title: Recommend Lexicon
33+description: Schema reference for document recommends, used to declare that a user endorses or recommends a document.
44+date: 2026-05-19
55+ogImage: opengraph-image-docs-recommend-lexicon-v2.png
66+---
77+88+import { Table, Updated } from '@/app/components/docs'
99+1010+# Recommend Lexicon <Updated label="New" />
1111+1212+The `site.standard.graph.recommend` lexicon declares that a user recommends a document.
1313+1414+## Overview
1515+1616+Recommends are lightweight social signals: a user creates a `recommend` record on their PDS pointing at a `site.standard.document` they endorse. Aggregators and readers can use these records to surface popular or trusted documents.
1717+1818+## Schema
1919+2020+### Required Properties
2121+2222+<Table
2323+ headers={['Property', 'Type', 'Description']}
2424+ rows={[
2525+ ['document', 'at-uri', 'AT-URI reference to the document record being recommended (ex: at://did:plc:abc123/site.standard.document/xyz789).'],
2626+ ['createdAt', 'datetime', 'Timestamp marking when the recommend was created.'],
2727+ ]}
2828+/>
2929+3030+## Example
3131+3232+```json
3333+{
3434+ "$type": "site.standard.graph.recommend",
3535+ "document": "at://did:plc:abc123/site.standard.document/3mbfqhezge25u",
3636+ "createdAt": "2026-05-19T14:30:00.000Z"
3737+}
3838+```
3939+4040+## View the Lexicon
4141+4242+- [View full lexicon schema](https://pdsls.dev/at://did:plc:re3ebnp5v7ffagz6rb6xfei4/com.atproto.lexicon.schema/site.standard.graph.recommend)
4343+4444+## Related
4545+4646+- [Document lexicon](/docs/lexicons/document) - Documents that can be recommended
4747+- [Subscription lexicon](/docs/lexicons/subscription) - Following whole publications
4848+- [Permissions](/docs/permissions) - `site.standard.authSocial` grants access to recommend records
···66ogImage: opengraph-image-docs-basic-theme-lexicon-v2.png
77---
8899-import { Table } from '@/app/components/docs'
99+import { Table, Updated } from '@/app/components/docs'
10101111# Theme Lexicon
1212
+27-3
content/docs/permissions.mdx
···66ogImage: opengraph-image-docs-permissions-v2.png
77---
8899-import { Table } from '@/app/components/docs'
99+import { Table, Updated } from '@/app/components/docs'
1010import { StandardSite } from '@/app/components/docs'
11111212# Permissions
13131414-<StandardSite /> provides a permission set for applications to access publications, documents, and subscriptions.
1414+<StandardSite /> provides permission sets for applications to access publications, documents, subscriptions, and recommends.
15151616## Overview
1717···2929include:site.standard.authFull
3030```
31313232-### Granted Permissions
3232+### Granted Permissions <Updated />
33333434This permission set grants access to the following collections:
3535···3939 ['site.standard.publication', 'Create, update, and delete publication records'],
4040 ['site.standard.document', 'Create, update, and delete document records'],
4141 ['site.standard.graph.subscription', 'Create, update, and delete subscription records'],
4242+ ['site.standard.graph.recommend', 'Create, update, and delete recommend records'],
4343+ ]}
4444+/>
4545+4646+## Social <StandardSite /> Access <Updated label="New" />
4747+4848+The `site.standard.authSocial` permission set is a narrower scope for managing subscriptions and document recommends.
4949+5050+### Requesting Permissions
5151+5252+Include `site.standard.authSocial` in the OAuth scope when requesting user authorization:
5353+5454+```
5555+include:site.standard.authSocial
5656+```
5757+5858+### Granted Permissions
5959+6060+<Table
6161+ headers={['Collection', 'Access scopes']}
6262+ rows={[
6363+ ['site.standard.graph.subscription', 'Create, update, and delete subscription records'],
6464+ ['site.standard.graph.recommend', 'Create, update, and delete recommend records'],
4265 ]}
4366/>
4467···4871- [Publication lexicon](/docs/lexicons/publication) - Understanding publication records
4972- [Document lexicon](/docs/lexicons/document) - Understanding document records
5073- [Subscription lexicon](/docs/lexicons/subscription) - Understanding subscription records
7474+- [Recommend lexicon](/docs/lexicons/recommend) - Understanding recommend records
+6
content/docs/quick-start.mdx
···2626- [`site.standard.publication`](/docs/lexicons/publication) - Publication metadata
2727- [`site.standard.document`](/docs/lexicons/document) - Document content and metadata
2828- [`site.standard.graph.subscription`](/docs/lexicons/subscription) - User-publication relationships
2929+- [`site.standard.graph.recommend`](/docs/lexicons/recommend) - Document recommends
3030+3131+Two permission sets are available for OAuth scopes:
3232+3333+- [`site.standard.authFull`](/docs/permissions) - Full access to publications, documents, subscriptions, and recommends
3434+- [`site.standard.authSocial`](/docs/permissions) - Narrower access for subscriptions and recommends only
29353036### 2. Create a Publication Record
3137
+14-3
content/docs/verification.mdx
···77---
88991010-import { StandardSite } from '@/app/components/docs'
1010+import { StandardSite, Updated } from '@/app/components/docs'
11111212# Verification
1313···3535at://did:plc:abc123/site.standard.publication/rkey
3636```
37373838+### Discovery Hint <Updated label="New" />
3939+4040+Publications may also expose their AT-URI via a `<link>` tag in the page `<head>` to encourage discovery.
4141+4242+```html
4343+<link
4444+ rel="site.standard.publication"
4545+ href="at://did:plc:abc123/site.standard.publication/rkey"
4646+/>
4747+```
4848+4949+This is a hint only. Do not rely on it for verification, and always confirm via the `.well-known` endpoint.
5050+3851### Non-root Publications
39524053If the publication does not live at the domain root, append the publication path to the endpoint:
···4659## Document Verification
47604861To verify an individual document, include a `<link>` tag in the document's `<head>` that references its AT-URI.
4949-5050-### HTML Example
51625263```html
5364<link
+18-4
mdx-components.tsx
···11import type { MDXComponents } from 'mdx/types'
22+import { isValidElement } from 'react'
23import Link from 'next/link'
34import { ClickableHeading } from '@/app/components/docs/ClickableHeading'
45import { DocsPageMenu } from '@/app/components/docs/DocsPageMenu'
66+import { Updated } from '@/app/components/docs/Updated'
77+88+function extractHeadingText(node: React.ReactNode): string {
99+ if (typeof node === 'string') return node
1010+ if (typeof node === 'number') return String(node)
1111+ if (Array.isArray(node)) return node.map(extractHeadingText).join('')
1212+ if (isValidElement(node)) {
1313+ if (node.type === Updated) return ''
1414+ const props = node.props as { children?: React.ReactNode }
1515+ return extractHeadingText(props.children)
1616+ }
1717+ return ''
1818+}
519620export function useMDXComponents(components: MDXComponents): MDXComponents {
721 return {
822 h1: ({ children }) => (
923 <div className="flex items-start justify-between gap-2">
1010- <ClickableHeading level={1}>{children}</ClickableHeading>
2424+ <ClickableHeading level={1} text={extractHeadingText(children)}>{children}</ClickableHeading>
1125 <DocsPageMenu />
1226 </div>
1327 ),
1428 h2: ({ children }) => (
1515- <ClickableHeading level={2}>{children}</ClickableHeading>
2929+ <ClickableHeading level={2} text={extractHeadingText(children)}>{children}</ClickableHeading>
1630 ),
1731 h3: ({ children }) => (
1818- <ClickableHeading level={3}>{children}</ClickableHeading>
3232+ <ClickableHeading level={3} text={extractHeadingText(children)}>{children}</ClickableHeading>
1933 ),
2034 h4: ({ children }) => (
2121- <ClickableHeading level={4}>{children}</ClickableHeading>
3535+ <ClickableHeading level={4} text={extractHeadingText(children)}>{children}</ClickableHeading>
2236 ),
2337 p: ({ children }) => (
2438 <p className="text-base sm:text-lg leading-relaxed tracking-tight text-muted mb-4">
+9-1
public/llms.txt
···2828- Subscription: https://standard.site/docs/lexicons/subscription
2929 `site.standard.graph.subscription` - Follow relationships
30303131+- Recommend: https://standard.site/docs/lexicons/recommend
3232+ `site.standard.graph.recommend` - Document endorsements
3333+3134- Theme: https://standard.site/docs/lexicons/theme
3232- `site.standard.theme` - Theming configuration
3535+ `site.standard.theme.basic` - Publication theming (colors)
33363437### Resources
3538- Implementations: https://standard.site/docs/implementations
···5356- Lexicons: Schemas that define record types in AT Protocol
5457- NSID: Namespaced Identifier - unique identifier format for lexicons
55585959+## Permission Sets
6060+- site.standard.authFull: Full access to publications, documents, subscriptions, and recommends
6161+- site.standard.authSocial: Narrower scope for managing subscriptions and recommends only
6262+5663## Implementation Quick Reference
57641. Create publication record with site.standard.publication lexicon
58652. Create document records with site.standard.document lexicon
59663. Link documents to publication via publication reference
60674. Implement verification to link records to your domain
61685. Support subscription records for follow functionality
6969+6. Support recommend records for document endorsements