Repository navigation
Expand file tree
/
Copy pathgo-git-cms.yml
More file actions
234 lines (232 loc) · 6.03 KB
/
Copy pathgo-git-cms.yml
File metadata and controls
234 lines (232 loc) · 6.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
version: 1
media:
# Images the site imports through Astro, so it can optimize them. Fields
# store the repository path; src/lib/images.ts resolves it.
- name: images
path: "src/assets/images/**/*.{png,jpg,jpeg,webp,avif,gif,svg}"
mime_types: ["image/*"]
content_models:
- name: pages
path: "src/content/pages/*.mdx"
label: "{{ title }}"
fields:
- name: title
type: string
required: true
- name: description
type: string
# The rest are only used by the homepage (index.mdx).
- name: intro
label: Intro (under the headline)
type: string
display:
component: textarea
# A heading is a list of runs of text, so single words can take a gradient.
- name: headline
type: array
of: object
fields:
- name: text
type: string
required: true
- name: gradient
type: string
enum: [primary, success, info, warning]
display:
component: select
- name: italic
type: boolean
- name: line_break
label: Line break after
type: boolean
- name: learn_prompt
label: Prompt above the categories
type: string
- name: about_heading
label: About heading
type: array
of: object
fields:
- name: text
type: string
required: true
- name: gradient
type: string
enum: [primary, success, info, warning]
display:
component: select
- name: italic
type: boolean
- name: line_break
label: Line break after
type: boolean
- name: about_photo
label: About photo
type: string
display:
component: media
media:
set: images
store_as: repo
- name: testimonials_heading
label: Testimonials heading
type: string
- name: body
label: body
type: string
display:
component: 'plugin:mdx'
source: body
- name: articles
path: "src/content/articles/*.mdx"
label: "{{ title }}"
fields:
- name: title
type: string
required: true
- name: description
type: string
- name: pubDate
type: string
display:
component: date
- name: category
type: string
display:
component: reference
reference:
collection: categories
key: slug
- name: draft
type: boolean
- name: body
label: body
type: string
display:
component: 'plugin:mdx'
source: body
- name: projects
path: "src/content/projects/*.mdx"
label: "{{ title }}"
fields:
- name: title
type: string
required: true
- name: description
type: string
required: true
- name: link
type: string
required: true
# A path relative to the project's file, e.g. ../../assets/images/logos/companion.svg
- name: logo
type: string
- name: draft
type: boolean
- name: body
label: body
type: string
display:
component: 'plugin:mdx'
source: body
# Article categories. Each needs a matching src/pages route only if it sets
# featuredHref; otherwise /articles/<slug> is generated for it.
- name: categories
path: "src/content/categories/*.json"
label: "{{ name }}"
filename: "{{ slug }}"
fields:
- name: name
type: string
required: true
- name: slug
type: string
required: true
pattern: "^[a-z0-9]+(-[a-z0-9]+)*$"
display:
component: slug
# A Tabler icon name, e.g. code or pencil: https://tabler.io/icons
- name: icon
type: string
required: true
- name: color
type: string
required: true
enum: [primary, success, info, warning]
display:
component: select
# Where the category links to, when not /articles/<slug>
- name: featuredHref
label: Link
type: string
- name: homepage
label: Show on the homepage
type: boolean
- name: order
type: integer
- name: testimonials
path: "src/content/testimonials/*.json"
label: "{{ name }}"
filename: "{{slugify name}}"
fields:
- name: name
type: string
required: true
- name: role
type: string
required: true
- name: photo
type: string
required: true
display:
component: media
media:
set: images
store_as: repo
- name: heading
type: string
required: true
- name: text
type: string
required: true
display:
component: textarea
- name: order
type: integer
forms:
# The "Get in touch" form at /contact (src/pages/contact.astro). It has no
# `store:` on purpose: this repository is public, and submissions carry
# people's names and email addresses, so they stay in the CMS's inbox.
- name: contact
label: Contact
description: Messages sent from the Get in touch form at /contact.
# A decoy input the page renders but visitors never see. Bots fill it in,
# and the CMS files those submissions under Spam.
honeypot: website
rate_limit:
per_minute: 5
fields:
- name: name
label: Name
type: string
required: true
validate:
- rule: maxLength
value: 200
- name: email
label: Email
type: string
required: true
display:
component: email
validate:
- rule: email
- name: message
label: Message
type: string
required: true
display:
component: textarea
validate:
- rule: maxLength
value: 5000