A CLI for publishing standard.site documents to ATProto
sequoia.pub
standard
site
lexicon
cli
publishing
1{
2 "$schema": "http://json-schema.org/draft-07/schema#",
3 "title": "PublisherConfig",
4 "type": "object",
5 "additionalProperties": false,
6 "required": ["siteUrl", "contentDir", "publicationUri"],
7 "properties": {
8 "$schema": {
9 "type": "string",
10 "description": "JSON schema hint"
11 },
12 "siteUrl": {
13 "type": "string",
14 "format": "uri",
15 "description": "Base site URL"
16 },
17 "contentDir": {
18 "type": "string",
19 "description": "Directory containing content"
20 },
21 "imagesDir": {
22 "type": "string",
23 "description": "Directory containing cover images"
24 },
25 "publicDir": {
26 "type": "string",
27 "description": "Static/public folder for `.well-known` files",
28 "default": "public"
29 },
30 "outputDir": {
31 "type": "string",
32 "description": "Built output directory for inject command"
33 },
34 "pathPrefix": {
35 "type": "string",
36 "description": "URL path prefix for posts",
37 "default": "/posts"
38 },
39 "publicationUri": {
40 "type": "string",
41 "description": "Publication URI"
42 },
43 "pdsUrl": {
44 "type": "string",
45 "format": "uri",
46 "description": "Personal data server URL (PDS)",
47 "default": "https://bsky.social"
48 },
49 "identity": {
50 "type": "string",
51 "description": "Which stored identity to use (matches identifier)"
52 },
53 "frontmatter": {
54 "type": "object",
55 "additionalProperties": false,
56 "description": "Custom frontmatter field mappings",
57 "properties": {
58 "title": {
59 "type": "string",
60 "description": "Field name for title",
61 "default": "title"
62 },
63 "description": {
64 "type": "string",
65 "description": "Field name for description",
66 "default": "description"
67 },
68 "publishDate": {
69 "type": "string",
70 "description": "Field name for publish date (checks \"publishDate\", \"pubDate\", \"date\", \"createdAt\", and \"created_at\" by default)",
71 "default": "publishDate"
72 },
73 "coverImage": {
74 "type": "string",
75 "description": "Field name for cover image",
76 "default": "ogImage"
77 },
78 "tags": {
79 "type": "string",
80 "description": "Field name for tags",
81 "default": "tags"
82 },
83 "draft": {
84 "type": "string",
85 "description": "Field name for draft status",
86 "default": "draft"
87 },
88 "slugField": {
89 "type": "string",
90 "description": "Frontmatter field to use for slug (if set, uses frontmatter value; otherwise uses filepath)"
91 }
92 }
93 },
94 "ignore": {
95 "type": "array",
96 "description": "Glob patterns for files to ignore",
97 "items": {
98 "type": "string"
99 }
100 },
101 "removeIndexFromSlug": {
102 "type": "boolean",
103 "description": "Remove \"/index\" or \"/_index\" suffix from paths",
104 "default": false
105 },
106 "stripDatePrefix": {
107 "type": "boolean",
108 "description": "Remove YYYY-MM-DD- prefix from filenames (Jekyll-style)",
109 "default": false
110 },
111 "pathTemplate": {
112 "type": "string",
113 "description": "URL path template with tokens like {year}/{month}/{day}/{slug} (overrides pathPrefix + slug)"
114 },
115 "textContentField": {
116 "type": "string",
117 "description": "Frontmatter field to use for textContent instead of markdown body"
118 },
119 "publishContent": {
120 "type": "boolean",
121 "description": "Whether or not to publish the documents content on the standard.site document",
122 "default": true
123 },
124 "bluesky": {
125 "type": "object",
126 "additionalProperties": false,
127 "description": "Optional Bluesky posting configuration",
128 "required": ["enabled"],
129 "properties": {
130 "enabled": {
131 "type": "boolean",
132 "description": "Whether Bluesky posting is enabled",
133 "default": false
134 },
135 "maxAgeDays": {
136 "type": "integer",
137 "minimum": 0,
138 "description": "Only post if published within N days",
139 "default": 7
140 }
141 }
142 },
143 "ui": {
144 "type": "object",
145 "additionalProperties": false,
146 "description": "Optional UI components configuration",
147 "properties": {
148 "components": {
149 "type": "string",
150 "description": "Directory to install UI components",
151 "default": "src/components"
152 }
153 },
154 "required": ["components"]
155 }
156 }
157}