sequoia.schema.json 4.4 K raw
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
				"updatedAt": {
74
					"type": "string",
75
					"description": "Field name for updated date (checks \"updatedAt\", \"updated_at\", \"modifiedAt\", and \"modified_at\" by default)",
76
					"default": "updatedAt"
77
				},
78
				"coverImage": {
79
					"type": "string",
80
					"description": "Field name for cover image",
81
					"default": "ogImage"
82
				},
83
				"tags": {
84
					"type": "string",
85
					"description": "Field name for tags",
86
					"default": "tags"
87
				},
88
				"draft": {
89
					"type": "string",
90
					"description": "Field name for draft status",
91
					"default": "draft"
92
				},
93
				"slugField": {
94
					"type": "string",
95
					"description": "Frontmatter field to use for slug (if set, uses frontmatter value; otherwise uses filepath)"
96
				}
97
			}
98
		},
99
		"ignore": {
100
			"type": "array",
101
			"description": "Glob patterns for files to ignore",
102
			"items": {
103
				"type": "string"
104
			}
105
		},
106
		"removeIndexFromSlug": {
107
			"type": "boolean",
108
			"description": "Remove \"/index\" or \"/_index\" suffix from paths",
109
			"default": false
110
		},
111
		"stripDatePrefix": {
112
			"type": "boolean",
113
			"description": "Remove YYYY-MM-DD- prefix from filenames (Jekyll-style)",
114
			"default": false
115
		},
116
		"pathTemplate": {
117
			"type": "string",
118
			"description": "URL path template with tokens like {year}/{month}/{day}/{slug} (overrides pathPrefix + slug)"
119
		},
120
		"textContentField": {
121
			"type": "string",
122
			"description": "Frontmatter field to use for textContent instead of markdown body"
123
		},
124
		"publishContent": {
125
			"type": "boolean",
126
			"description": "Whether or not to publish the documents content on the standard.site document",
127
			"default": true
128
		},
129
		"bluesky": {
130
			"type": "object",
131
			"additionalProperties": false,
132
			"description": "Optional Bluesky posting configuration",
133
			"required": ["enabled"],
134
			"properties": {
135
				"enabled": {
136
					"type": "boolean",
137
					"description": "Whether Bluesky posting is enabled",
138
					"default": false
139
				},
140
				"maxAgeDays": {
141
					"type": "integer",
142
					"minimum": 0,
143
					"description": "Only post if published within N days",
144
					"default": 7
145
				}
146
			}
147
		},
148
		"autoSync": {
149
			"type": "boolean",
150
			"description": "Automatically sync state from PDS before publishing to prevent duplicate posts on fresh clones",
151
			"default": true
152
		},
153
		"ui": {
154
			"type": "object",
155
			"additionalProperties": false,
156
			"description": "Optional UI components configuration",
157
			"properties": {
158
				"components": {
159
					"type": "string",
160
					"description": "Directory to install UI components",
161
					"default": "src/components"
162
				}
163
			},
164
			"required": ["components"]
165
		}
166
	}
167
}