RustyCMS: File-based headless CMS with REST API, admin UI, multilingual support
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
54
schemas/blog_post.schema.json
Normal file
54
schemas/blog_post.schema.json
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"author": {
|
||||
"description": "Author name",
|
||||
"type": "string"
|
||||
},
|
||||
"body": {
|
||||
"description": "Main content (Markdown)",
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"created_at": {
|
||||
"description": "Creation timestamp (auto-generated)",
|
||||
"format": "date-time",
|
||||
"readOnly": true,
|
||||
"type": "string"
|
||||
},
|
||||
"excerpt": {
|
||||
"description": "Short summary for previews",
|
||||
"maxLength": 500,
|
||||
"type": "string"
|
||||
},
|
||||
"published": {
|
||||
"default": false,
|
||||
"description": "Whether the post is publicly visible",
|
||||
"type": "boolean"
|
||||
},
|
||||
"tags": {
|
||||
"description": "Categorisation tags",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"title": {
|
||||
"description": "Title of the blog post",
|
||||
"maxLength": 200,
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"_slug",
|
||||
"title",
|
||||
"body"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
109
schemas/content_layout.schema.json
Normal file
109
schemas/content_layout.schema.json
Normal file
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"row1AlignItems": {
|
||||
"default": "stretch",
|
||||
"description": "Align items for row 1",
|
||||
"enum": [
|
||||
"start",
|
||||
"end",
|
||||
"center",
|
||||
"baseline",
|
||||
"stretch"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"row1Content": {
|
||||
"description": "Content components for row 1 (Markdown blocks)",
|
||||
"items": {
|
||||
"description": "Reference (slug) to collection 'markdown'",
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"row1JustifyContent": {
|
||||
"default": "start",
|
||||
"description": "Justify content for row 1",
|
||||
"enum": [
|
||||
"start",
|
||||
"end",
|
||||
"center",
|
||||
"between",
|
||||
"around",
|
||||
"evenly"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"row2AlignItems": {
|
||||
"default": "stretch",
|
||||
"enum": [
|
||||
"start",
|
||||
"end",
|
||||
"center",
|
||||
"baseline",
|
||||
"stretch"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"row2Content": {
|
||||
"description": "Content components for row 2",
|
||||
"items": {
|
||||
"description": "Reference (slug) to collection '?'",
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"row2JustifyContent": {
|
||||
"default": "start",
|
||||
"enum": [
|
||||
"start",
|
||||
"end",
|
||||
"center",
|
||||
"between",
|
||||
"around",
|
||||
"evenly"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"row3AlignItems": {
|
||||
"default": "stretch",
|
||||
"enum": [
|
||||
"start",
|
||||
"end",
|
||||
"center",
|
||||
"baseline",
|
||||
"stretch"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"row3Content": {
|
||||
"description": "Content components for row 3",
|
||||
"items": {
|
||||
"description": "Reference (slug) to collection '?'",
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"row3JustifyContent": {
|
||||
"default": "start",
|
||||
"enum": [
|
||||
"start",
|
||||
"end",
|
||||
"center",
|
||||
"between",
|
||||
"around",
|
||||
"evenly"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"_slug"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
63
schemas/footer.schema.json
Normal file
63
schemas/footer.schema.json
Normal file
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"id": {
|
||||
"description": "Unique footer ID (e.g. for navigation)",
|
||||
"type": "string"
|
||||
},
|
||||
"row1AlignItems": {
|
||||
"default": "stretch",
|
||||
"description": "Align items for row 1",
|
||||
"enum": ["start", "end", "center", "baseline", "stretch"],
|
||||
"type": "string"
|
||||
},
|
||||
"row1Content": {
|
||||
"description": "Content components for row 1",
|
||||
"items": { "type": "string" },
|
||||
"type": "array"
|
||||
},
|
||||
"row1JustifyContent": {
|
||||
"default": "start",
|
||||
"description": "Justify content for row 1",
|
||||
"enum": ["start", "end", "center", "between", "around", "evenly"],
|
||||
"type": "string"
|
||||
},
|
||||
"row2AlignItems": {
|
||||
"default": "stretch",
|
||||
"enum": ["start", "end", "center", "baseline", "stretch"],
|
||||
"type": "string"
|
||||
},
|
||||
"row2Content": {
|
||||
"description": "Content components for row 2",
|
||||
"items": { "type": "string" },
|
||||
"type": "array"
|
||||
},
|
||||
"row2JustifyContent": {
|
||||
"default": "start",
|
||||
"enum": ["start", "end", "center", "between", "around", "evenly"],
|
||||
"type": "string"
|
||||
},
|
||||
"row3AlignItems": {
|
||||
"default": "stretch",
|
||||
"enum": ["start", "end", "center", "baseline", "stretch"],
|
||||
"type": "string"
|
||||
},
|
||||
"row3Content": {
|
||||
"description": "Content components for row 3",
|
||||
"items": { "type": "string" },
|
||||
"type": "array"
|
||||
},
|
||||
"row3JustifyContent": {
|
||||
"default": "start",
|
||||
"enum": ["start", "end", "center", "between", "around", "evenly"],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "id"],
|
||||
"type": "object"
|
||||
}
|
||||
46
schemas/fullwidth_banner.schema.json
Normal file
46
schemas/fullwidth_banner.schema.json
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"headline": {
|
||||
"type": "string"
|
||||
},
|
||||
"image": {
|
||||
"description": "Image URLs",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"name": {
|
||||
"description": "Internal name",
|
||||
"type": "string"
|
||||
},
|
||||
"subheadline": {
|
||||
"type": "string"
|
||||
},
|
||||
"text": {
|
||||
"description": "Banner body text",
|
||||
"type": "string"
|
||||
},
|
||||
"variant": {
|
||||
"description": "Color variant",
|
||||
"enum": [
|
||||
"dark",
|
||||
"light"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"_slug",
|
||||
"name",
|
||||
"variant",
|
||||
"headline"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
27
schemas/headline.schema.json
Normal file
27
schemas/headline.schema.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": { "description": "Entry identifier", "type": "string" },
|
||||
"internal": { "description": "Internal key", "type": "string" },
|
||||
"text": { "description": "Headline text", "type": "string" },
|
||||
"tag": {
|
||||
"description": "HTML tag",
|
||||
"enum": ["h1", "h2", "h3", "h4", "h5", "h6"],
|
||||
"type": "string"
|
||||
},
|
||||
"layout": {
|
||||
"properties": {
|
||||
"mobile": { "default": "12", "enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "type": "string" },
|
||||
"tablet": { "enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "type": "string" },
|
||||
"desktop": { "enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "type": "string" },
|
||||
"spaceBottom": { "enum": [0, 0.5, 1, 1.5, 2], "type": "number" }
|
||||
},
|
||||
"required": ["mobile"],
|
||||
"type": "object"
|
||||
},
|
||||
"align": { "enum": ["left", "center", "right"], "type": "string" }
|
||||
},
|
||||
"required": ["_slug", "internal", "text", "tag"],
|
||||
"type": "object"
|
||||
}
|
||||
48
schemas/html.schema.json
Normal file
48
schemas/html.schema.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"id": {
|
||||
"description": "Unique component ID",
|
||||
"type": "string"
|
||||
},
|
||||
"html": {
|
||||
"description": "HTML content (safely embedded)",
|
||||
"type": "string"
|
||||
},
|
||||
"layout": {
|
||||
"description": "Column width (grid) like CF_ComponentLayout",
|
||||
"properties": {
|
||||
"mobile": {
|
||||
"default": "12",
|
||||
"description": "Width on mobile (1–12)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"tablet": {
|
||||
"description": "Width on tablet (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"desktop": {
|
||||
"description": "Width on desktop (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"spaceBottom": {
|
||||
"description": "Space below (rem)",
|
||||
"enum": [0, 0.5, 1, 1.5, 2],
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": ["mobile"],
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "id", "html"],
|
||||
"type": "object"
|
||||
}
|
||||
56
schemas/iframe.schema.json
Normal file
56
schemas/iframe.schema.json
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"description": "Internal component name",
|
||||
"type": "string"
|
||||
},
|
||||
"content": {
|
||||
"description": "Description/content for iframe",
|
||||
"type": "string"
|
||||
},
|
||||
"iframe": {
|
||||
"description": "Iframe URL or embed code",
|
||||
"type": "string"
|
||||
},
|
||||
"overlayImage": {
|
||||
"description": "Reference (slug) to collection 'img'",
|
||||
"type": "string"
|
||||
},
|
||||
"layout": {
|
||||
"description": "Column width (grid) like CF_ComponentLayout",
|
||||
"properties": {
|
||||
"mobile": {
|
||||
"default": "12",
|
||||
"description": "Width on mobile (1–12)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"tablet": {
|
||||
"description": "Width on tablet (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"desktop": {
|
||||
"description": "Width on desktop (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"spaceBottom": {
|
||||
"description": "Space below (rem)",
|
||||
"enum": [0, 0.5, 1, 1.5, 2],
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": ["mobile"],
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "name", "content", "iframe"],
|
||||
"type": "object"
|
||||
}
|
||||
60
schemas/image.schema.json
Normal file
60
schemas/image.schema.json
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"description": "Internal component name",
|
||||
"type": "string"
|
||||
},
|
||||
"image": {
|
||||
"description": "Reference (slug) to collection 'img'",
|
||||
"type": "string"
|
||||
},
|
||||
"caption": {
|
||||
"description": "Image caption",
|
||||
"type": "string"
|
||||
},
|
||||
"layout": {
|
||||
"description": "Column width (grid) like CF_ComponentLayout",
|
||||
"properties": {
|
||||
"mobile": {
|
||||
"default": "12",
|
||||
"description": "Width on mobile (1–12)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"tablet": {
|
||||
"description": "Width on tablet (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"desktop": {
|
||||
"description": "Width on desktop (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"spaceBottom": {
|
||||
"description": "Space below (rem)",
|
||||
"enum": [0, 0.5, 1, 1.5, 2],
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": ["mobile"],
|
||||
"type": "object"
|
||||
},
|
||||
"maxWidth": {
|
||||
"description": "Max width in px",
|
||||
"type": "number"
|
||||
},
|
||||
"aspectRatio": {
|
||||
"description": "Aspect ratio (e.g. 16/9)",
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "name", "image"],
|
||||
"type": "object"
|
||||
}
|
||||
55
schemas/image_gallery.schema.json
Normal file
55
schemas/image_gallery.schema.json
Normal file
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"description": "Internal gallery name",
|
||||
"type": "string"
|
||||
},
|
||||
"images": {
|
||||
"description": "References (slugs) to collection 'img'",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"layout": {
|
||||
"description": "Column width (grid) like CF_ComponentLayout",
|
||||
"properties": {
|
||||
"mobile": {
|
||||
"default": "12",
|
||||
"description": "Width on mobile (1–12)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"tablet": {
|
||||
"description": "Width on tablet (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"desktop": {
|
||||
"description": "Width on desktop (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"spaceBottom": {
|
||||
"description": "Space below (rem)",
|
||||
"enum": [0, 0.5, 1, 1.5, 2],
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": ["mobile"],
|
||||
"type": "object"
|
||||
},
|
||||
"description": {
|
||||
"description": "Optional gallery description",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "name", "images"],
|
||||
"type": "object"
|
||||
}
|
||||
39
schemas/img.schema.json
Normal file
39
schemas/img.schema.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"title": {
|
||||
"description": "Image title",
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"description": "Alt text / description",
|
||||
"type": "string"
|
||||
},
|
||||
"file": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"url": { "type": "string", "description": "Image URL" },
|
||||
"fileName": { "type": "string" },
|
||||
"contentType": { "type": "string" },
|
||||
"details": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"size": { "type": "number" },
|
||||
"image": {
|
||||
"type": "object",
|
||||
"properties": { "width": { "type": "number" }, "height": { "type": "number" } }
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["url"]
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "title", "file"],
|
||||
"type": "object"
|
||||
}
|
||||
68
schemas/link.schema.json
Normal file
68
schemas/link.schema.json
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"description": "Internal link name",
|
||||
"type": "string"
|
||||
},
|
||||
"internal": {
|
||||
"description": "Internal key",
|
||||
"type": "string"
|
||||
},
|
||||
"linkName": {
|
||||
"description": "Display name (e.g. in navigation)",
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
"description": "Target URL",
|
||||
"type": "string"
|
||||
},
|
||||
"icon": {
|
||||
"description": "Icon identifier",
|
||||
"type": "string"
|
||||
},
|
||||
"color": {
|
||||
"description": "Color (e.g. for buttons)",
|
||||
"type": "string"
|
||||
},
|
||||
"newTab": {
|
||||
"description": "Open in new tab",
|
||||
"type": "boolean"
|
||||
},
|
||||
"external": {
|
||||
"description": "External link",
|
||||
"type": "boolean"
|
||||
},
|
||||
"description": {
|
||||
"description": "Description",
|
||||
"type": "string"
|
||||
},
|
||||
"alt": {
|
||||
"description": "Alt text (e.g. for icon)",
|
||||
"type": "string"
|
||||
},
|
||||
"showText": {
|
||||
"description": "Show text",
|
||||
"type": "boolean"
|
||||
},
|
||||
"author": {
|
||||
"description": "Author (e.g. for sources)",
|
||||
"type": "string"
|
||||
},
|
||||
"date": {
|
||||
"description": "Date (e.g. publication)",
|
||||
"type": "string"
|
||||
},
|
||||
"source": {
|
||||
"description": "Source",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "name", "internal", "linkName", "url", "author", "date", "source"],
|
||||
"type": "object"
|
||||
}
|
||||
15
schemas/link_list.schema.json
Normal file
15
schemas/link_list.schema.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": { "description": "Entry identifier", "type": "string" },
|
||||
"headline": { "description": "Link list headline", "type": "string" },
|
||||
"links": {
|
||||
"description": "References (slugs) to collection 'link'",
|
||||
"items": { "type": "string" },
|
||||
"type": "array"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "headline", "links"],
|
||||
"type": "object"
|
||||
}
|
||||
15
schemas/list.schema.json
Normal file
15
schemas/list.schema.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": { "description": "Entry identifier", "type": "string" },
|
||||
"internal": { "description": "Internal key", "type": "string" },
|
||||
"item": {
|
||||
"description": "List entries",
|
||||
"items": { "type": "string" },
|
||||
"type": "array"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "internal", "item"],
|
||||
"type": "object"
|
||||
}
|
||||
108
schemas/markdown.schema.json
Normal file
108
schemas/markdown.schema.json
Normal file
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"alignment": {
|
||||
"default": "left",
|
||||
"description": "Text alignment",
|
||||
"enum": [
|
||||
"left",
|
||||
"center",
|
||||
"right"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"content": {
|
||||
"description": "Markdown/body text content",
|
||||
"type": "string"
|
||||
},
|
||||
"layout": {
|
||||
"description": "Column width (grid) like CF_ComponentLayout",
|
||||
"properties": {
|
||||
"desktop": {
|
||||
"description": "Width on desktop (optional)",
|
||||
"enum": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"10",
|
||||
"11",
|
||||
"12"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"mobile": {
|
||||
"default": "12",
|
||||
"description": "Width on mobile (1–12)",
|
||||
"enum": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"10",
|
||||
"11",
|
||||
"12"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"spaceBottom": {
|
||||
"description": "Space below (rem)",
|
||||
"enum": [
|
||||
0,
|
||||
0.5,
|
||||
1,
|
||||
1.5,
|
||||
2
|
||||
],
|
||||
"type": "number"
|
||||
},
|
||||
"tablet": {
|
||||
"description": "Width on tablet (optional)",
|
||||
"enum": [
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"10",
|
||||
"11",
|
||||
"12"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"mobile"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"name": {
|
||||
"description": "Internal component name",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"_slug",
|
||||
"name"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
27
schemas/navigation.schema.json
Normal file
27
schemas/navigation.schema.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"description": "Display name of navigation",
|
||||
"type": "string"
|
||||
},
|
||||
"internal": {
|
||||
"description": "Internal key (e.g. navigation-header, navigation-footer)",
|
||||
"type": "string"
|
||||
},
|
||||
"links": {
|
||||
"description": "References (slugs) to link, page or post",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "name", "internal", "links"],
|
||||
"type": "object"
|
||||
}
|
||||
114
schemas/page.schema.json
Normal file
114
schemas/page.schema.json
Normal file
@@ -0,0 +1,114 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"headline": {
|
||||
"type": "string"
|
||||
},
|
||||
"icon": {
|
||||
"description": "Icon identifier (optional)",
|
||||
"type": "string"
|
||||
},
|
||||
"linkName": {
|
||||
"description": "Display name in navigation",
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"description": "Internal page name",
|
||||
"type": "string"
|
||||
},
|
||||
"row1AlignItems": {
|
||||
"default": "stretch",
|
||||
"description": "Align items for row 1",
|
||||
"enum": ["start", "end", "center", "baseline", "stretch"],
|
||||
"type": "string"
|
||||
},
|
||||
"row1Content": {
|
||||
"description": "Content components for row 1 (Markdown blocks)",
|
||||
"items": {
|
||||
"description": "Reference (slug) to collection 'markdown'",
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"row1JustifyContent": {
|
||||
"default": "start",
|
||||
"description": "Justify content for row 1",
|
||||
"enum": ["start", "end", "center", "between", "around", "evenly"],
|
||||
"type": "string"
|
||||
},
|
||||
"row2AlignItems": {
|
||||
"default": "stretch",
|
||||
"enum": ["start", "end", "center", "baseline", "stretch"],
|
||||
"type": "string"
|
||||
},
|
||||
"row2Content": {
|
||||
"description": "Content components for row 2",
|
||||
"items": {
|
||||
"description": "Reference (slug) to collection '?'",
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"row2JustifyContent": {
|
||||
"default": "start",
|
||||
"enum": ["start", "end", "center", "between", "around", "evenly"],
|
||||
"type": "string"
|
||||
},
|
||||
"row3AlignItems": {
|
||||
"default": "stretch",
|
||||
"enum": ["start", "end", "center", "baseline", "stretch"],
|
||||
"type": "string"
|
||||
},
|
||||
"row3Content": {
|
||||
"description": "Content components for row 3",
|
||||
"items": {
|
||||
"description": "Reference (slug) to collection '?'",
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"row3JustifyContent": {
|
||||
"default": "start",
|
||||
"enum": ["start", "end", "center", "between", "around", "evenly"],
|
||||
"type": "string"
|
||||
},
|
||||
"seoDescription": {
|
||||
"description": "Meta description for search engines",
|
||||
"maxLength": 160,
|
||||
"type": "string"
|
||||
},
|
||||
"seoMetaRobots": {
|
||||
"default": "index, follow",
|
||||
"description": "Robots meta directive",
|
||||
"enum": [
|
||||
"index, follow",
|
||||
"noindex, follow",
|
||||
"index, nofollow",
|
||||
"noindex, nofollow"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"seoTitle": {
|
||||
"description": "SEO page title",
|
||||
"type": "string"
|
||||
},
|
||||
"slug": {
|
||||
"description": "URL slug",
|
||||
"type": "string"
|
||||
},
|
||||
"subheadline": {
|
||||
"type": "string"
|
||||
},
|
||||
"topFullwidthBanner": {
|
||||
"description": "Hero banner at the top",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "seoTitle", "slug", "name", "linkName", "headline"],
|
||||
"type": "object"
|
||||
}
|
||||
44
schemas/page_config.schema.json
Normal file
44
schemas/page_config.schema.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"logo": {
|
||||
"description": "Reference (slug) to collection 'img'",
|
||||
"type": "string"
|
||||
},
|
||||
"footerText1": {
|
||||
"description": "Footer text (e.g. copyright)",
|
||||
"type": "string"
|
||||
},
|
||||
"seoTitle": {
|
||||
"description": "Default SEO title for website",
|
||||
"type": "string"
|
||||
},
|
||||
"seoDescription": {
|
||||
"description": "Default meta description",
|
||||
"type": "string"
|
||||
},
|
||||
"blogTagPageHeadline": {
|
||||
"description": "Headline for tag page (blog)",
|
||||
"type": "string"
|
||||
},
|
||||
"blogPostsPageHeadline": {
|
||||
"description": "Headline for blog overview page",
|
||||
"type": "string"
|
||||
},
|
||||
"blogPostsPageSubHeadline": {
|
||||
"description": "Subheadline for blog overview page",
|
||||
"type": "string"
|
||||
},
|
||||
"website": {
|
||||
"description": "Website URL",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "logo", "footerText1", "seoTitle", "seoDescription", "website"],
|
||||
"type": "object"
|
||||
}
|
||||
190
schemas/post.schema.json
Normal file
190
schemas/post.schema.json
Normal file
@@ -0,0 +1,190 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"created": {
|
||||
"format": "date-time",
|
||||
"readOnly": true,
|
||||
"type": "string"
|
||||
},
|
||||
"excerpt": {
|
||||
"description": "Short summary for previews",
|
||||
"maxLength": 500,
|
||||
"type": "string"
|
||||
},
|
||||
"headline": {
|
||||
"type": "string"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string"
|
||||
},
|
||||
"linkName": {
|
||||
"type": "string"
|
||||
},
|
||||
"postImage": {
|
||||
"description": "Featured image",
|
||||
"type": "string"
|
||||
},
|
||||
"postTag": {
|
||||
"description": "Associated tags",
|
||||
"items": {
|
||||
"description": "Reference (slug) to collection 'tag'",
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"row1AlignItems": {
|
||||
"default": "stretch",
|
||||
"description": "Align items for row 1",
|
||||
"enum": [
|
||||
"start",
|
||||
"end",
|
||||
"center",
|
||||
"baseline",
|
||||
"stretch"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"row1Content": {
|
||||
"description": "Content components for row 1 (Markdown blocks)",
|
||||
"items": {
|
||||
"description": "Reference (slug) to collection 'markdown'",
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"row1JustifyContent": {
|
||||
"default": "start",
|
||||
"description": "Justify content for row 1",
|
||||
"enum": [
|
||||
"start",
|
||||
"end",
|
||||
"center",
|
||||
"between",
|
||||
"around",
|
||||
"evenly"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"row2AlignItems": {
|
||||
"default": "stretch",
|
||||
"enum": [
|
||||
"start",
|
||||
"end",
|
||||
"center",
|
||||
"baseline",
|
||||
"stretch"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"row2Content": {
|
||||
"description": "Content components for row 2",
|
||||
"items": {
|
||||
"description": "Reference (slug) to collection '?'",
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"row2JustifyContent": {
|
||||
"default": "start",
|
||||
"enum": [
|
||||
"start",
|
||||
"end",
|
||||
"center",
|
||||
"between",
|
||||
"around",
|
||||
"evenly"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"row3AlignItems": {
|
||||
"default": "stretch",
|
||||
"enum": [
|
||||
"start",
|
||||
"end",
|
||||
"center",
|
||||
"baseline",
|
||||
"stretch"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"row3Content": {
|
||||
"description": "Content components for row 3",
|
||||
"items": {
|
||||
"description": "Reference (slug) to collection '?'",
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"row3JustifyContent": {
|
||||
"default": "start",
|
||||
"enum": [
|
||||
"start",
|
||||
"end",
|
||||
"center",
|
||||
"between",
|
||||
"around",
|
||||
"evenly"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"seoDescription": {
|
||||
"description": "Meta description for search engines",
|
||||
"maxLength": 160,
|
||||
"type": "string"
|
||||
},
|
||||
"seoMetaRobots": {
|
||||
"default": "index, follow",
|
||||
"description": "Robots meta directive",
|
||||
"enum": [
|
||||
"index, follow",
|
||||
"noindex, follow",
|
||||
"index, nofollow",
|
||||
"noindex, nofollow"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"seoTitle": {
|
||||
"description": "SEO page title",
|
||||
"type": "string"
|
||||
},
|
||||
"slug": {
|
||||
"type": "string"
|
||||
},
|
||||
"subheadline": {
|
||||
"type": "string"
|
||||
},
|
||||
"content": {
|
||||
"description": "Post body (Markdown/HTML)",
|
||||
"type": "string"
|
||||
},
|
||||
"date": {
|
||||
"description": "Optional display date",
|
||||
"format": "date-time",
|
||||
"type": "string"
|
||||
},
|
||||
"important": {
|
||||
"description": "Mark post as important",
|
||||
"type": "boolean"
|
||||
},
|
||||
"showCommentSection": {
|
||||
"default": true,
|
||||
"description": "Show comment section (default: true)",
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"_slug",
|
||||
"seoTitle",
|
||||
"slug",
|
||||
"linkName",
|
||||
"headline",
|
||||
"important",
|
||||
"content"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
76
schemas/product.schema.json
Normal file
76
schemas/product.schema.json
Normal file
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"category": {
|
||||
"description": "Product category",
|
||||
"enum": [
|
||||
"electronics",
|
||||
"clothing",
|
||||
"books",
|
||||
"food",
|
||||
"other"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"created_at": {
|
||||
"format": "date-time",
|
||||
"readOnly": true,
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"description": "Detailed product description",
|
||||
"maxLength": 5000,
|
||||
"type": "string"
|
||||
},
|
||||
"images": {
|
||||
"description": "Product image URLs (1–10)",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 10,
|
||||
"minItems": 1,
|
||||
"type": "array"
|
||||
},
|
||||
"in_stock": {
|
||||
"default": true,
|
||||
"description": "Whether the product is in stock",
|
||||
"type": "boolean"
|
||||
},
|
||||
"price": {
|
||||
"description": "Price in EUR",
|
||||
"minimum": 0.0,
|
||||
"type": "number"
|
||||
},
|
||||
"rating": {
|
||||
"description": "Average customer rating (null if unrated)",
|
||||
"maximum": 5.0,
|
||||
"minimum": 0.0,
|
||||
"nullable": true,
|
||||
"type": "number"
|
||||
},
|
||||
"sku": {
|
||||
"description": "Stock Keeping Unit (e.g. EL-1234, BOOK-00042)",
|
||||
"pattern": "^[A-Z]{2,4}-\\d{3,6}$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": {
|
||||
"description": "Product name",
|
||||
"maxLength": 200,
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"_slug",
|
||||
"title",
|
||||
"sku",
|
||||
"price",
|
||||
"category"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
53
schemas/quote.schema.json
Normal file
53
schemas/quote.schema.json
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"quote": {
|
||||
"description": "Quote text",
|
||||
"type": "string"
|
||||
},
|
||||
"author": {
|
||||
"description": "Author or source of quote",
|
||||
"type": "string"
|
||||
},
|
||||
"variant": {
|
||||
"description": "Quote alignment",
|
||||
"enum": ["left", "right"],
|
||||
"type": "string"
|
||||
},
|
||||
"layout": {
|
||||
"description": "Column width (grid) like CF_ComponentLayout",
|
||||
"properties": {
|
||||
"mobile": {
|
||||
"default": "12",
|
||||
"description": "Width on mobile (1–12)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"tablet": {
|
||||
"description": "Width on tablet (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"desktop": {
|
||||
"description": "Width on desktop (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"spaceBottom": {
|
||||
"description": "Space below (rem)",
|
||||
"enum": [0, 0.5, 1, 1.5, 2],
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": ["mobile"],
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "quote", "author", "variant"],
|
||||
"type": "object"
|
||||
}
|
||||
62
schemas/searchable_text.schema.json
Normal file
62
schemas/searchable_text.schema.json
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"id": {
|
||||
"description": "Unique component ID",
|
||||
"type": "string"
|
||||
},
|
||||
"tagWhitelist": {
|
||||
"description": "References (slugs) to collection 'tag'",
|
||||
"items": { "type": "string" },
|
||||
"type": "array"
|
||||
},
|
||||
"textFragments": {
|
||||
"description": "References (slugs) to collection 'text_fragment'",
|
||||
"items": { "type": "string" },
|
||||
"type": "array"
|
||||
},
|
||||
"title": {
|
||||
"description": "Search component title",
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"description": "Description",
|
||||
"type": "string"
|
||||
},
|
||||
"layout": {
|
||||
"description": "Column width (grid) like CF_ComponentLayout",
|
||||
"properties": {
|
||||
"mobile": {
|
||||
"default": "12",
|
||||
"description": "Width on mobile (1–12)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"tablet": {
|
||||
"description": "Width on tablet (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"desktop": {
|
||||
"description": "Width on desktop (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"spaceBottom": {
|
||||
"description": "Space below (rem)",
|
||||
"enum": [0, 0.5, 1, 1.5, 2],
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": ["mobile"],
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "id", "textFragments"],
|
||||
"type": "object"
|
||||
}
|
||||
35
schemas/seo.schema.json
Normal file
35
schemas/seo.schema.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"seoDescription": {
|
||||
"description": "Meta description for search engines",
|
||||
"maxLength": 160,
|
||||
"type": "string"
|
||||
},
|
||||
"seoMetaRobots": {
|
||||
"default": "index, follow",
|
||||
"description": "Robots meta directive",
|
||||
"enum": [
|
||||
"index, follow",
|
||||
"noindex, follow",
|
||||
"index, nofollow",
|
||||
"noindex, nofollow"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"seoTitle": {
|
||||
"description": "SEO page title",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"_slug",
|
||||
"seoTitle"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
18
schemas/tag.schema.json
Normal file
18
schemas/tag.schema.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"_slug",
|
||||
"name"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
29
schemas/text_fragment.schema.json
Normal file
29
schemas/text_fragment.schema.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"id": {
|
||||
"description": "Unique fragment ID",
|
||||
"type": "string"
|
||||
},
|
||||
"tags": {
|
||||
"description": "References (slugs) to collection 'tag'",
|
||||
"items": { "type": "string" },
|
||||
"type": "array"
|
||||
},
|
||||
"title": {
|
||||
"description": "Text fragment title",
|
||||
"type": "string"
|
||||
},
|
||||
"text": {
|
||||
"description": "Searchable text content",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "id", "title", "text"],
|
||||
"type": "object"
|
||||
}
|
||||
11
schemas/top_banner.schema.json
Normal file
11
schemas/top_banner.schema.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": { "description": "Entry identifier", "type": "string" },
|
||||
"id": { "description": "Unique ID", "type": "string" },
|
||||
"text": { "description": "Banner text", "type": "string" }
|
||||
},
|
||||
"required": ["_slug", "id", "text"],
|
||||
"type": "object"
|
||||
}
|
||||
60
schemas/youtube_video.schema.json
Normal file
60
schemas/youtube_video.schema.json
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"_slug": {
|
||||
"description": "Entry identifier (URL slug / filename without extension)",
|
||||
"type": "string"
|
||||
},
|
||||
"id": {
|
||||
"description": "Unique ID (optional)",
|
||||
"type": "string"
|
||||
},
|
||||
"youtubeId": {
|
||||
"description": "YouTube video ID (e.g. from URL ?v=VIDEO_ID)",
|
||||
"type": "string"
|
||||
},
|
||||
"params": {
|
||||
"description": "Optional URL params (e.g. start=30, autoplay=1)",
|
||||
"type": "string"
|
||||
},
|
||||
"title": {
|
||||
"description": "Video title",
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"description": "Short description",
|
||||
"type": "string"
|
||||
},
|
||||
"layout": {
|
||||
"description": "Column width (grid) like CF_ComponentLayout",
|
||||
"properties": {
|
||||
"mobile": {
|
||||
"default": "12",
|
||||
"description": "Width on mobile (1–12)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"tablet": {
|
||||
"description": "Width on tablet (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"desktop": {
|
||||
"description": "Width on desktop (optional)",
|
||||
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||
"type": "string"
|
||||
},
|
||||
"spaceBottom": {
|
||||
"description": "Space below (rem)",
|
||||
"enum": [0, 0.5, 1, 1.5, 2],
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": ["mobile"],
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"required": ["_slug", "youtubeId"],
|
||||
"type": "object"
|
||||
}
|
||||
Reference in New Issue
Block a user