RustyCMS: file-based headless CMS — API, Admin UI (content, types, assets), Docker/Caddy, image transform; only demo type and demo content in version control

Made-with: Cursor
This commit is contained in:
Peter Meier
2026-03-12 14:21:49 +01:00
parent aad93d145f
commit 7795a238e1
278 changed files with 15551 additions and 4072 deletions

View File

@@ -0,0 +1,25 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"_slug": {
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"items": {
"description": "Calendar entries (references to calendar_item)",
"items": {
"description": "Reference (slug) to collection 'calendar_item'",
"type": "string"
},
"type": "array"
},
"fromPost": {
"default": false,
"description": "Include entries from post",
"type": "boolean"
}
},
"required": ["_slug"],
"type": "object"
}

View 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"
},
"title": {
"description": "Event title",
"type": "string"
},
"description": {
"description": "Event description",
"type": "string"
},
"terminZeit": {
"description": "Event date/time",
"format": "date-time",
"type": "string"
},
"link": {
"description": "Optional link (e.g. registration or details page)",
"type": "string"
}
},
"required": ["_slug", "title", "terminZeit"],
"type": "object"
}

View File

@@ -0,0 +1,67 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"_slug": {
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"campaignName": {
"description": "Campaign name",
"type": "string"
},
"css": {
"description": "Optional CSS",
"type": "string"
},
"html": {
"description": "HTML content",
"type": "string"
},
"insertHtml": {
"default": "beforeend",
"description": "Position relative to selector",
"enum": [
"afterbegin",
"beforeend",
"afterend",
"beforebegin",
"replace"
],
"type": "string"
},
"javascript": {
"description": "Optional JavaScript",
"type": "string"
},
"medias": {
"description": "Media (images)",
"items": {
"description": "Reference (slug) to collection 'img'",
"type": "string"
},
"type": "array"
},
"selector": {
"description": "CSS selector where content is inserted",
"type": "string"
},
"timeUntil": {
"description": "Time limit (until when the campaign runs)",
"format": "date-time",
"type": "string"
},
"urlPattern": {
"description": "URL pattern (e.g. regex) for campaign usage",
"type": "string"
}
},
"required": [
"_slug",
"campaignName",
"urlPattern",
"selector",
"insertHtml"
],
"type": "object"
}

View File

@@ -0,0 +1,32 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"_slug": {
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"campaigns": {
"description": "Campaign list",
"items": {
"description": "Reference (slug) to collection 'campaign'",
"type": "string"
},
"type": "array"
},
"enable": {
"default": true,
"description": "Campaigns enabled",
"type": "boolean"
},
"id": {
"description": "Unique ID (e.g. campaigns-global)",
"type": "string"
}
},
"required": [
"_slug",
"id"
],
"type": "object"
}

View File

@@ -19,9 +19,9 @@
"type": "string"
},
"row1Content": {
"description": "Content components for row 1 (Markdown blocks)",
"description": "Content components for row 1 (Markdown, Post Overview, HTML, Headline, Image, …)",
"items": {
"description": "Reference (slug) to collection 'markdown'",
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"type": "string"
},
"type": "array"
@@ -53,7 +53,7 @@
"row2Content": {
"description": "Content components for row 2",
"items": {
"description": "Reference (slug) to collection '?'",
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"type": "string"
},
"type": "array"
@@ -84,7 +84,7 @@
"row3Content": {
"description": "Content components for row 3",
"items": {
"description": "Reference (slug) to collection '?'",
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"type": "string"
},
"type": "array"

View File

@@ -13,51 +13,102 @@
"row1AlignItems": {
"default": "stretch",
"description": "Align items for row 1",
"enum": ["start", "end", "center", "baseline", "stretch"],
"enum": [
"start",
"end",
"center",
"baseline",
"stretch"
],
"type": "string"
},
"row1Content": {
"description": "Content components for row 1",
"items": { "type": "string" },
"description": "Content components for row 1 (Markdown, Post Overview, HTML, Headline, Image, …)",
"items": {
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"type": "string"
},
"type": "array"
},
"row1JustifyContent": {
"default": "start",
"description": "Justify content for row 1",
"enum": ["start", "end", "center", "between", "around", "evenly"],
"enum": [
"start",
"end",
"center",
"between",
"around",
"evenly"
],
"type": "string"
},
"row2AlignItems": {
"default": "stretch",
"enum": ["start", "end", "center", "baseline", "stretch"],
"enum": [
"start",
"end",
"center",
"baseline",
"stretch"
],
"type": "string"
},
"row2Content": {
"description": "Content components for row 2",
"items": { "type": "string" },
"items": {
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"type": "string"
},
"type": "array"
},
"row2JustifyContent": {
"default": "start",
"enum": ["start", "end", "center", "between", "around", "evenly"],
"enum": [
"start",
"end",
"center",
"between",
"around",
"evenly"
],
"type": "string"
},
"row3AlignItems": {
"default": "stretch",
"enum": ["start", "end", "center", "baseline", "stretch"],
"enum": [
"start",
"end",
"center",
"baseline",
"stretch"
],
"type": "string"
},
"row3Content": {
"description": "Content components for row 3",
"items": { "type": "string" },
"items": {
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"type": "string"
},
"type": "array"
},
"row3JustifyContent": {
"default": "start",
"enum": ["start", "end", "center", "between", "around", "evenly"],
"enum": [
"start",
"end",
"center",
"between",
"around",
"evenly"
],
"type": "string"
}
},
"required": ["_slug", "id"],
"required": [
"_slug",
"id"
],
"type": "object"
}
}

View File

@@ -10,11 +10,29 @@
"type": "string"
},
"image": {
"description": "Image URLs",
"items": {
"type": "string"
},
"type": "array"
"description": "Banner image",
"oneOf": [
{
"description": "Reference (slug) to collection 'img'",
"type": "string"
},
{
"properties": {
"description": {
"description": "Alt text / description",
"type": "string"
},
"src": {
"description": "Image URL",
"type": "string"
}
},
"required": [
"src"
],
"type": "object"
}
]
},
"name": {
"description": "Internal name",
@@ -28,6 +46,7 @@
"type": "string"
},
"variant": {
"default": "light",
"description": "Color variant",
"enum": [
"dark",

View File

@@ -2,26 +2,128 @@
"$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"],
"_slug": {
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"align": {
"default": "left",
"description": "Text alignment",
"enum": [
"left",
"center",
"right"
],
"type": "string"
},
"internal": {
"description": "Internal key",
"type": "string"
},
"layout": {
"description": "Column width (grid) like CF_ComponentLayout",
"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" }
"breakout": {
"default": false,
"description": "Breakout layout (full width)",
"type": "boolean"
},
"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 (112)",
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"spaceBottom": {
"default": 0,
"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"],
"required": [
"mobile"
],
"type": "object"
},
"align": { "enum": ["left", "center", "right"], "type": "string" }
"tag": {
"default": "h2",
"description": "HTML tag for headline",
"enum": [
"h1",
"h2",
"h3",
"h4",
"h5",
"h6"
],
"type": "string"
},
"text": {
"description": "Headline text",
"type": "string"
}
},
"required": ["_slug", "internal", "text", "tag"],
"required": [
"_slug",
"internal",
"text",
"tag"
],
"type": "object"
}
}

View File

@@ -6,43 +6,100 @@
"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"
},
"id": {
"description": "Unique component ID",
"type": "string"
},
"layout": {
"description": "Column width (grid) like CF_ComponentLayout",
"properties": {
"mobile": {
"default": "12",
"description": "Width on mobile (112)",
"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"
"breakout": {
"default": false,
"description": "Breakout layout (full width)",
"type": "boolean"
},
"desktop": {
"description": "Width on desktop (optional)",
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"mobile": {
"default": "12",
"description": "Width on mobile (112)",
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"spaceBottom": {
"default": 0,
"description": "Space below (rem)",
"enum": [0, 0.5, 1, 1.5, 2],
"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"],
"required": [
"mobile"
],
"type": "object"
}
},
"required": ["_slug", "id", "html"],
"required": [
"_slug",
"id",
"html"
],
"type": "object"
}
}

View File

@@ -6,10 +6,6 @@
"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"
@@ -18,39 +14,101 @@
"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 (112)",
"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"
"breakout": {
"default": false,
"description": "Breakout layout (full width)",
"type": "boolean"
},
"desktop": {
"description": "Width on desktop (optional)",
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"mobile": {
"default": "12",
"description": "Width on mobile (112)",
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"spaceBottom": {
"default": 0,
"description": "Space below (rem)",
"enum": [0, 0.5, 1, 1.5, 2],
"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"],
"required": [
"mobile"
],
"type": "object"
},
"name": {
"description": "Internal component name",
"type": "string"
},
"overlayImage": {
"description": "Optional overlay image (reference to img)",
"type": "string"
}
},
"required": ["_slug", "name", "content", "iframe"],
"required": [
"_slug",
"name",
"content",
"iframe"
],
"type": "object"
}
}

View File

@@ -6,55 +6,135 @@
"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"
"aspectRatio": {
"description": "Aspect ratio",
"type": "string",
"enum": ["1:1", "4:3", "3:2", "16:9", "21:9", "2:3", "3:4"],
"default": "4:3"
},
"caption": {
"description": "Image caption",
"type": "string"
},
"layout": {
"description": "Column width (grid) like CF_ComponentLayout",
"properties": {
"mobile": {
"default": "12",
"description": "Width on mobile (112)",
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
"img": {
"description": "Image: Slug (Referenz) oder Inline-Objekt (gleiche Felder wie img)",
"oneOf": [
{
"description": "Reference (slug) to collection 'img'",
"type": "string"
},
"tablet": {
"description": "Width on tablet (optional)",
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
"type": "string"
{
"properties": {
"description": {
"description": "Alt text / description",
"type": "string"
},
"src": {
"description": "Image URL",
"type": "string"
}
},
"required": [
"src"
],
"type": "object"
}
]
},
"layout": {
"description": "Column width (grid)",
"properties": {
"breakout": {
"default": false,
"description": "Breakout layout (full width)",
"type": "boolean"
},
"desktop": {
"description": "Width on desktop (optional)",
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"mobile": {
"default": "12",
"description": "Width on mobile (112)",
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"spaceBottom": {
"default": 0,
"description": "Space below (rem)",
"enum": [0, 0.5, 1, 1.5, 2],
"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"],
"required": [
"mobile"
],
"type": "object"
},
"maxWidth": {
"description": "Max width in px",
"type": "number"
"type": "integer"
},
"aspectRatio": {
"description": "Aspect ratio (e.g. 16/9)",
"type": "number"
"name": {
"description": "Internal component name",
"type": "string"
}
},
"required": ["_slug", "name", "image"],
"required": [
"_slug",
"name",
"img"
],
"type": "object"
}
}

View File

@@ -6,50 +6,128 @@
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"name": {
"description": "Internal gallery name",
"description": {
"description": "Optional gallery description",
"type": "string"
},
"images": {
"description": "References (slugs) to collection 'img'",
"description": "Images (references to img)",
"items": {
"type": "string"
"oneOf": [
{
"description": "Reference (slug) to collection 'img'",
"type": "string"
},
{
"properties": {
"description": {
"description": "Alt text / description",
"type": "string"
},
"src": {
"description": "Image URL",
"type": "string"
}
},
"required": [
"src"
],
"type": "object"
}
]
},
"type": "array"
},
"layout": {
"description": "Column width (grid) like CF_ComponentLayout",
"properties": {
"mobile": {
"default": "12",
"description": "Width on mobile (112)",
"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"
"breakout": {
"default": false,
"description": "Breakout layout (full width)",
"type": "boolean"
},
"desktop": {
"description": "Width on desktop (optional)",
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"mobile": {
"default": "12",
"description": "Width on mobile (112)",
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"spaceBottom": {
"default": 0,
"description": "Space below (rem)",
"enum": [0, 0.5, 1, 1.5, 2],
"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"],
"required": [
"mobile"
],
"type": "object"
},
"description": {
"description": "Optional gallery description",
"name": {
"description": "Internal gallery name",
"type": "string"
}
},
"required": ["_slug", "name", "images"],
"required": [
"_slug",
"name",
"images"
],
"type": "object"
}
}

View File

@@ -6,34 +6,18 @@
"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"]
"src": {
"description": "Image URL",
"type": "string"
}
},
"required": ["_slug", "title", "file"],
"required": [
"_slug",
"src"
],
"type": "object"
}
}

View File

@@ -6,8 +6,33 @@
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"name": {
"description": "Internal link name",
"alt": {
"description": "Alt text (e.g. for icon)",
"type": "string"
},
"author": {
"description": "Author (e.g. for sources)",
"type": "string"
},
"color": {
"description": "Color (e.g. for buttons)",
"type": "string"
},
"date": {
"description": "Date (e.g. publication)",
"type": "string"
},
"description": {
"description": "Description",
"type": "string"
},
"external": {
"default": false,
"description": "External link",
"type": "boolean"
},
"icon": {
"description": "Icon identifier",
"type": "string"
},
"internal": {
@@ -18,51 +43,38 @@
"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)",
"name": {
"description": "Internal link name",
"type": "string"
},
"newTab": {
"default": false,
"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": {
"default": true,
"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"
},
"url": {
"description": "Target URL",
"type": "string"
}
},
"required": ["_slug", "name", "internal", "linkName", "url", "author", "date", "source"],
"required": [
"_slug",
"name",
"internal",
"linkName",
"url",
"author",
"date",
"source"
],
"type": "object"
}
}

View File

@@ -2,14 +2,27 @@
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"_slug": { "description": "Entry identifier", "type": "string" },
"headline": { "description": "Link list headline", "type": "string" },
"_slug": {
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"headline": {
"description": "Link list headline",
"type": "string"
},
"links": {
"description": "References (slugs) to collection 'link'",
"items": { "type": "string" },
"description": "Links (references to link)",
"items": {
"description": "Reference (slug) to collection 'link'",
"type": "string"
},
"type": "array"
}
},
"required": ["_slug", "headline", "links"],
"required": [
"_slug",
"headline",
"links"
],
"type": "object"
}
}

View File

@@ -2,14 +2,26 @@
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"_slug": { "description": "Entry identifier", "type": "string" },
"internal": { "description": "Internal key", "type": "string" },
"_slug": {
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"internal": {
"description": "Internal key",
"type": "string"
},
"item": {
"description": "List entries",
"items": { "type": "string" },
"items": {
"type": "string"
},
"type": "array"
}
},
"required": ["_slug", "internal", "item"],
"required": [
"_slug",
"internal",
"item"
],
"type": "object"
}
}

View File

@@ -17,12 +17,17 @@
"type": "string"
},
"content": {
"description": "Markdown/body text content",
"description": "Markdown/body text: either inline or file reference (file:path, e.g. file:slug.content.md)",
"type": "string"
},
"layout": {
"description": "Column width (grid) like CF_ComponentLayout",
"properties": {
"breakout": {
"default": false,
"description": "Breakout layout (full width)",
"type": "boolean"
},
"desktop": {
"description": "Width on desktop (optional)",
"enum": [
@@ -61,6 +66,7 @@
"type": "string"
},
"spaceBottom": {
"default": 0,
"description": "Space below (rem)",
"enum": [
0,

View File

@@ -6,22 +6,28 @@
"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",
"description": "Navigation entries (references to link, page or post)",
"items": {
"description": "Reference (slug) to one of: link, page, post",
"type": "string"
},
"type": "array"
},
"name": {
"description": "Display name of navigation",
"type": "string"
}
},
"required": ["_slug", "name", "internal", "links"],
"required": [
"_slug",
"name",
"internal",
"links"
],
"type": "object"
}
}

View File

@@ -24,13 +24,19 @@
"row1AlignItems": {
"default": "stretch",
"description": "Align items for row 1",
"enum": ["start", "end", "center", "baseline", "stretch"],
"enum": [
"start",
"end",
"center",
"baseline",
"stretch"
],
"type": "string"
},
"row1Content": {
"description": "Content components for row 1 (Markdown blocks)",
"description": "Content components for row 1 (Markdown, Post Overview, HTML, Headline, Image, …)",
"items": {
"description": "Reference (slug) to collection 'markdown'",
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"type": "string"
},
"type": "array"
@@ -38,43 +44,76 @@
"row1JustifyContent": {
"default": "start",
"description": "Justify content for row 1",
"enum": ["start", "end", "center", "between", "around", "evenly"],
"enum": [
"start",
"end",
"center",
"between",
"around",
"evenly"
],
"type": "string"
},
"row2AlignItems": {
"default": "stretch",
"enum": ["start", "end", "center", "baseline", "stretch"],
"enum": [
"start",
"end",
"center",
"baseline",
"stretch"
],
"type": "string"
},
"row2Content": {
"description": "Content components for row 2",
"items": {
"description": "Reference (slug) to collection '?'",
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"type": "string"
},
"type": "array"
},
"row2JustifyContent": {
"default": "start",
"enum": ["start", "end", "center", "between", "around", "evenly"],
"enum": [
"start",
"end",
"center",
"between",
"around",
"evenly"
],
"type": "string"
},
"row3AlignItems": {
"default": "stretch",
"enum": ["start", "end", "center", "baseline", "stretch"],
"enum": [
"start",
"end",
"center",
"baseline",
"stretch"
],
"type": "string"
},
"row3Content": {
"description": "Content components for row 3",
"items": {
"description": "Reference (slug) to collection '?'",
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"type": "string"
},
"type": "array"
},
"row3JustifyContent": {
"default": "start",
"enum": ["start", "end", "center", "between", "around", "evenly"],
"enum": [
"start",
"end",
"center",
"between",
"around",
"evenly"
],
"type": "string"
},
"seoDescription": {
@@ -109,6 +148,13 @@
"type": "string"
}
},
"required": ["_slug", "seoTitle", "slug", "name", "linkName", "headline"],
"required": [
"_slug",
"seoTitle",
"slug",
"name",
"linkName",
"headline"
],
"type": "object"
}
}

View File

@@ -6,26 +6,6 @@
"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"
@@ -34,11 +14,59 @@
"description": "Subheadline for blog overview page",
"type": "string"
},
"blogTagPageHeadline": {
"description": "Headline for tag page (blog)",
"type": "string"
},
"footerText1": {
"description": "Footer text (e.g. copyright)",
"type": "string"
},
"logo": {
"description": "Logo image (reference to img)",
"oneOf": [
{
"description": "Reference (slug) to collection 'img'",
"type": "string"
},
{
"properties": {
"description": {
"description": "Alt text / description",
"type": "string"
},
"src": {
"description": "Image URL",
"type": "string"
}
},
"required": [
"src"
],
"type": "object"
}
]
},
"seoDescription": {
"description": "Default meta description",
"type": "string"
},
"seoTitle": {
"description": "Default SEO title for website",
"type": "string"
},
"website": {
"description": "Website URL",
"description": "Website-URL",
"type": "string"
}
},
"required": ["_slug", "logo", "footerText1", "seoTitle", "seoDescription", "website"],
"required": [
"_slug",
"logo",
"footerText1",
"seoTitle",
"seoDescription",
"website"
],
"type": "object"
}
}

View File

@@ -6,11 +6,20 @@
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"content": {
"description": "Post body (Markdown)",
"type": "string"
},
"created": {
"format": "date-time",
"readOnly": true,
"type": "string"
},
"date": {
"description": "Optional display date",
"format": "date-time",
"type": "string"
},
"excerpt": {
"description": "Short summary for previews",
"maxLength": 500,
@@ -22,12 +31,38 @@
"icon": {
"type": "string"
},
"important": {
"default": false,
"description": "Mark post as important",
"type": "boolean"
},
"linkName": {
"type": "string"
},
"postImage": {
"description": "Featured image",
"type": "string"
"oneOf": [
{
"description": "Reference (slug) to collection 'img'",
"type": "string"
},
{
"properties": {
"description": {
"description": "Alt text / description",
"type": "string"
},
"src": {
"description": "Image URL",
"type": "string"
}
},
"required": [
"src"
],
"type": "object"
}
]
},
"postTag": {
"description": "Associated tags",
@@ -50,9 +85,9 @@
"type": "string"
},
"row1Content": {
"description": "Content components for row 1 (Markdown blocks)",
"description": "Content components for row 1 (Markdown, Post Overview, HTML, Headline, Image, …)",
"items": {
"description": "Reference (slug) to collection 'markdown'",
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"type": "string"
},
"type": "array"
@@ -84,7 +119,7 @@
"row2Content": {
"description": "Content components for row 2",
"items": {
"description": "Reference (slug) to collection '?'",
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"type": "string"
},
"type": "array"
@@ -115,7 +150,7 @@
"row3Content": {
"description": "Content components for row 3",
"items": {
"description": "Reference (slug) to collection '?'",
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"type": "string"
},
"type": "array"
@@ -152,29 +187,16 @@
"description": "SEO page title",
"type": "string"
},
"showCommentSection": {
"default": true,
"description": "Show comment section (default: true)",
"type": "boolean"
},
"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": [

View File

@@ -0,0 +1,258 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"_slug": {
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"allPosts": {
"default": false,
"description": "Show all posts (otherwise filter)",
"type": "boolean"
},
"design": {
"description": "Display as cards or list",
"enum": [
"cards",
"list"
],
"type": "string"
},
"filterByTag": {
"description": "Only posts with these tags",
"items": {
"description": "Reference (slug) to collection 'tag'",
"type": "string"
},
"type": "array"
},
"headline": {
"description": "Headline",
"type": "string"
},
"id": {
"description": "Unique post overview ID",
"type": "string"
},
"layout": {
"description": "Column width (grid)",
"properties": {
"breakout": {
"default": false,
"description": "Breakout layout (full width)",
"type": "boolean"
},
"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 (112)",
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"spaceBottom": {
"default": 0,
"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"
},
"numberItems": {
"description": "Max. number of displayed entries",
"type": "integer"
},
"posts": {
"description": "Fixed list of posts (when not allPosts)",
"items": {
"description": "Reference (slug) to collection 'post'",
"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, Post Overview, HTML, Headline, Image, …)",
"items": {
"description": "Reference (slug) to one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"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 one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"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 one of: markdown, post_overview, html, headline, image, quote, youtube_video, image_gallery, iframe, searchable_text, fullwidth_banner, list",
"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"
},
"text": {
"description": "Intro text",
"type": "string"
}
},
"required": [
"_slug",
"seoTitle",
"id",
"headline"
],
"type": "object"
}

View File

@@ -30,7 +30,29 @@
"images": {
"description": "Product image URLs (110)",
"items": {
"type": "string"
"description": "Product image",
"oneOf": [
{
"description": "Reference (slug) to collection 'img'",
"type": "string"
},
{
"properties": {
"description": {
"description": "Alt text / description",
"type": "string"
},
"src": {
"description": "Image URL",
"type": "string"
}
},
"required": [
"src"
],
"type": "object"
}
]
},
"maxItems": 10,
"minItems": 1,

View File

@@ -6,48 +6,110 @@
"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 (112)",
"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"
"breakout": {
"default": false,
"description": "Breakout layout (full width)",
"type": "boolean"
},
"desktop": {
"description": "Width on desktop (optional)",
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"mobile": {
"default": "12",
"description": "Width on mobile (112)",
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"spaceBottom": {
"default": 0,
"description": "Space below (rem)",
"enum": [0, 0.5, 1, 1.5, 2],
"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"],
"required": [
"mobile"
],
"type": "object"
},
"quote": {
"description": "Quote text",
"type": "string"
},
"variant": {
"default": "left",
"description": "Quote alignment",
"enum": [
"left",
"right"
],
"type": "string"
}
},
"required": ["_slug", "quote", "author", "variant"],
"required": [
"_slug",
"quote",
"author",
"variant"
],
"type": "object"
}
}

View File

@@ -6,57 +6,120 @@
"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"
},
"id": {
"description": "Unique component ID",
"type": "string"
},
"layout": {
"description": "Column width (grid) like CF_ComponentLayout",
"properties": {
"mobile": {
"default": "12",
"description": "Width on mobile (112)",
"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"
"breakout": {
"default": false,
"description": "Breakout layout (full width)",
"type": "boolean"
},
"desktop": {
"description": "Width on desktop (optional)",
"enum": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"mobile": {
"default": "12",
"description": "Width on mobile (112)",
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"spaceBottom": {
"default": 0,
"description": "Space below (rem)",
"enum": [0, 0.5, 1, 1.5, 2],
"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"],
"required": [
"mobile"
],
"type": "object"
},
"tagWhitelist": {
"description": "Optional: only search content with these tags",
"items": {
"description": "Reference (slug) to collection 'tag'",
"type": "string"
},
"type": "array"
},
"textFragments": {
"description": "Searchable text fragments (references to text_fragment)",
"items": {
"description": "Reference (slug) to collection 'text_fragment'",
"type": "string"
},
"type": "array"
},
"title": {
"description": "Search component title",
"type": "string"
}
},
"required": ["_slug", "id", "textFragments"],
"required": [
"_slug",
"id",
"textFragments"
],
"type": "object"
}
}

View File

@@ -11,19 +11,27 @@
"type": "string"
},
"tags": {
"description": "References (slugs) to collection 'tag'",
"items": { "type": "string" },
"description": "Optional tags for categorisation",
"items": {
"description": "Reference (slug) to collection 'tag'",
"type": "string"
},
"type": "array"
},
"title": {
"description": "Text fragment title",
"type": "string"
},
"text": {
"description": "Searchable text content",
"type": "string"
},
"title": {
"description": "Text fragment title",
"type": "string"
}
},
"required": ["_slug", "id", "title", "text"],
"required": [
"_slug",
"id",
"title",
"text"
],
"type": "object"
}
}

View File

@@ -2,10 +2,23 @@
"$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" }
"_slug": {
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"id": {
"description": "Unique ID",
"type": "string"
},
"text": {
"description": "Banner text (e.g. notice at top of page)",
"type": "string"
}
},
"required": ["_slug", "id", "text"],
"required": [
"_slug",
"id",
"text"
],
"type": "object"
}
}

View File

@@ -0,0 +1,22 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"_slug": {
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"strings": {
"additionalProperties": {
"type": "string"
},
"description": "Map: Übersetzungsschlüssel (key) → Text (value). Z. B. { \"searchable_text_help\": \"Hier könnt ihr...\", \"footer_copyright\": \"© 2024\" }",
"type": "object"
}
},
"required": [
"_slug",
"strings"
],
"type": "object"
}

View File

@@ -6,14 +6,95 @@
"description": "Entry identifier (URL slug / filename without extension)",
"type": "string"
},
"id": {
"description": "Unique ID (optional)",
"description": {
"description": "Short description",
"type": "string"
},
"youtubeId": {
"description": "YouTube video ID (e.g. from URL ?v=VIDEO_ID)",
"id": {
"description": "Unique ID (optional, otherwise _slug)",
"type": "string"
},
"layout": {
"description": "Column width (grid) like CF_ComponentLayout",
"properties": {
"breakout": {
"default": false,
"description": "Breakout layout (full width)",
"type": "boolean"
},
"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 (112)",
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"spaceBottom": {
"default": 0,
"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"
},
"params": {
"description": "Optional URL params (e.g. start=30, autoplay=1)",
"type": "string"
@@ -22,39 +103,14 @@
"description": "Video title",
"type": "string"
},
"description": {
"description": "Short description",
"youtubeId": {
"description": "YouTube video ID (e.g. from URL ?v=VIDEO_ID)",
"type": "string"
},
"layout": {
"description": "Column width (grid) like CF_ComponentLayout",
"properties": {
"mobile": {
"default": "12",
"description": "Width on mobile (112)",
"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"],
"required": [
"_slug",
"youtubeId"
],
"type": "object"
}
}