mirror of
https://github.com/tiennm99/HugoBlox-kit.git
synced 2026-10-13 08:15:44 +00:00
chore: update block metadata
This commit is contained in:
1 parent
fd22be65dd
commit
04a4a10b41
24 files changed
+1665
-842
No files matched your search
@@ -11,7 +11,8 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "collection"
|
||||
"const": "collection",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
@@ -26,24 +27,24 @@
|
||||
"description": "Section description (supports Markdown)"
|
||||
},
|
||||
"count": {
|
||||
"type": "number",
|
||||
"description": "Maximum number of items to display",
|
||||
"type": "integer",
|
||||
"description": "Maximum number of items to display (0 means unlimited)",
|
||||
"minimum": 0,
|
||||
"default": 5
|
||||
},
|
||||
"offset": {
|
||||
"type": "number",
|
||||
"description": "Number of items to skip",
|
||||
"type": "integer",
|
||||
"description": "Number of items to skip from the start of the query",
|
||||
"minimum": 0,
|
||||
"default": 0
|
||||
},
|
||||
"page_type": {
|
||||
"type": "string",
|
||||
"description": "Filter by page type (e.g., 'post', 'publication')"
|
||||
"description": "Filter by page type/section (e.g., 'post', 'publication')"
|
||||
},
|
||||
"sort_by": {
|
||||
"type": "string",
|
||||
"description": "Field to sort by",
|
||||
"description": "Field to sort by (e.g., Date, title, weight, lastmod)",
|
||||
"default": "Date"
|
||||
},
|
||||
"sort_ascending": {
|
||||
@@ -60,6 +61,14 @@
|
||||
"type": "object",
|
||||
"description": "Content filtering options",
|
||||
"properties": {
|
||||
"kinds": {
|
||||
"type": "array",
|
||||
"description": "Limit to Hugo page kinds",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"default": ["page"]
|
||||
},
|
||||
"folders": {
|
||||
"type": "array",
|
||||
"description": "Filter by content folders/sections",
|
||||
@@ -67,9 +76,16 @@
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"type": "array",
|
||||
"description": "Filter by multiple tags (intersection)",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"tag": {
|
||||
"type": "string",
|
||||
"description": "Filter by tag"
|
||||
"description": "Filter by a single tag"
|
||||
},
|
||||
"category": {
|
||||
"type": "string",
|
||||
@@ -107,11 +123,103 @@
|
||||
"description": "Exclude future-dated content",
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"archive": {
|
||||
"type": "object",
|
||||
"description": "Archive link configuration",
|
||||
"properties": {
|
||||
"enable": {
|
||||
"type": "boolean",
|
||||
"description": "Show archive link even when item count is below limit"
|
||||
},
|
||||
"link": {
|
||||
"type": "string",
|
||||
"description": "Override archive URL (defaults to derived archive page)"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Override archive link text"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"design": {
|
||||
"type": "object",
|
||||
"description": "Layout options for collection rendering",
|
||||
"properties": {
|
||||
"view": {
|
||||
"type": "string",
|
||||
"enum": ["card", "compact", "showcase", "citation", "list", "masonry"],
|
||||
"description": "Display view type",
|
||||
"default": "card"
|
||||
},
|
||||
"columns": {
|
||||
"type": ["integer", "string"],
|
||||
"description": "Number of columns when using grid-based views",
|
||||
"default": 2
|
||||
},
|
||||
"fill_image": {
|
||||
"type": "boolean",
|
||||
"description": "Fill cards with cover images when available",
|
||||
"default": true
|
||||
},
|
||||
"show_date": {
|
||||
"type": "boolean",
|
||||
"description": "Display published/modified date when available",
|
||||
"default": true
|
||||
},
|
||||
"show_read_time": {
|
||||
"type": "boolean",
|
||||
"description": "Display estimated reading time when available",
|
||||
"default": true
|
||||
},
|
||||
"show_read_more": {
|
||||
"type": "boolean",
|
||||
"description": "Show a read more link on cards",
|
||||
"default": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "collection",
|
||||
"content": {
|
||||
"title": "Latest research notes",
|
||||
"text": "Fresh from the lab notebook.",
|
||||
"count": 6,
|
||||
"page_type": "post",
|
||||
"sort_by": "Date",
|
||||
"sort_ascending": false,
|
||||
"filters": {
|
||||
"folders": ["post"],
|
||||
"tags": ["alignment", "evaluations"],
|
||||
"featured_only": true
|
||||
},
|
||||
"archive": {
|
||||
"enable": true,
|
||||
"text": "All posts",
|
||||
"link": "/post/"
|
||||
}
|
||||
},
|
||||
"design": {
|
||||
"view": "card",
|
||||
"columns": 3,
|
||||
"fill_image": true,
|
||||
"show_date": true,
|
||||
"show_read_time": true,
|
||||
"show_read_more": true
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/contact-info.json",
|
||||
"title": "Contact Info Block Schema",
|
||||
"description": "Schema for the Contact Info block - displays lab contact information in a modern card layout",
|
||||
"description": "Schema for the Contact Info block - displays lab contact details, map, social links, and an optional form",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,7 +11,8 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "contact-info"
|
||||
"const": "contact-info",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
@@ -47,7 +48,8 @@
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"office_hours": {
|
||||
"type": "array",
|
||||
@@ -58,7 +60,8 @@
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "Contact email address"
|
||||
"description": "Contact email address",
|
||||
"format": "email"
|
||||
},
|
||||
"phone": {
|
||||
"type": "string",
|
||||
@@ -78,7 +81,9 @@
|
||||
"type": "string",
|
||||
"description": "Social media URL"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["icon", "url"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"prospective": {
|
||||
@@ -90,7 +95,8 @@
|
||||
"default": "Prospective Members"
|
||||
},
|
||||
"text": {
|
||||
"type": "string"
|
||||
"type": "string",
|
||||
"description": "Short note for new collaborators or recruits"
|
||||
},
|
||||
"button": {
|
||||
"type": "object",
|
||||
@@ -101,9 +107,12 @@
|
||||
"url": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["text", "url"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"map_url": {
|
||||
"type": "string",
|
||||
@@ -115,16 +124,56 @@
|
||||
},
|
||||
"show_form": {
|
||||
"type": "boolean",
|
||||
"description": "Show contact form",
|
||||
"description": "Show a basic contact form",
|
||||
"default": false
|
||||
},
|
||||
"form_action": {
|
||||
"type": "string",
|
||||
"description": "Form submission URL"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "contact-info",
|
||||
"content": {
|
||||
"title": "Contact the lab",
|
||||
"subtitle": "We respond within 2 business days.",
|
||||
"visit_title": "Visit us",
|
||||
"address": {
|
||||
"lines": ["AI Lab, Engineering Building", "123 Innovation Way", "Cambridge, MA"]
|
||||
},
|
||||
"office_hours": ["Mon–Thu: 10:00–16:00", "Fri: Remote"],
|
||||
"map_url": "https://maps.google.com/?q=Cambridge",
|
||||
"email": "hello@hugoblox.com",
|
||||
"phone": "+1 415 000 0000",
|
||||
"social": [
|
||||
{
|
||||
"icon": "brands/linkedin",
|
||||
"url": "https://linkedin.com/company/hugoblox"
|
||||
},
|
||||
{
|
||||
"icon": "brands/x",
|
||||
"url": "https://x.com/hugoblox"
|
||||
}
|
||||
],
|
||||
"prospective": {
|
||||
"title": "Prospective members",
|
||||
"text": "Tell us about your research interests and links to prior work.",
|
||||
"button": {
|
||||
"text": "Apply",
|
||||
"url": "/apply"
|
||||
}
|
||||
},
|
||||
"show_form": true,
|
||||
"form_action": "https://formspree.io/f/example"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/cta-button-list.json",
|
||||
"title": "CTA Button List Block Schema",
|
||||
"description": "Schema for the CTA Button List block - displays a vertical list of call-to-action buttons",
|
||||
"description": "Schema for the CTA Button List block - renders stacked buttons with icons",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,38 +11,62 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "cta-button-list"
|
||||
"const": "cta-button-list",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Content configuration for the CTA button list block",
|
||||
"properties": {
|
||||
"buttons": {
|
||||
"type": "array",
|
||||
"description": "Array of buttons to display",
|
||||
"description": "Buttons to render",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Button label (supports Markdown)"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Button URL"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Button text (supports Markdown)"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Optional button icon (icon pack format: pack/icon-name)"
|
||||
"description": "Optional leading icon (icon pack format: pack/icon-name)"
|
||||
}
|
||||
},
|
||||
"required": ["url", "text"]
|
||||
}
|
||||
"required": ["text", "url"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"minItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["buttons"]
|
||||
"required": ["buttons"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "cta-button-list",
|
||||
"content": {
|
||||
"buttons": [
|
||||
{
|
||||
"text": "Join the waitlist",
|
||||
"url": "https://hugoblox.com/waitlist",
|
||||
"icon": "hero/sparkles"
|
||||
},
|
||||
{
|
||||
"text": "Read the docs",
|
||||
"url": "/docs/",
|
||||
"icon": "hero/book-open"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -11,7 +11,8 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "cta-card"
|
||||
"const": "cta-card",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
@@ -42,21 +43,27 @@
|
||||
"description": "Optional button icon (icon pack format: pack/icon-name)"
|
||||
}
|
||||
},
|
||||
"required": ["url", "text"]
|
||||
"required": ["url", "text"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["title", "text", "button"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"design": {
|
||||
"type": "object",
|
||||
"description": "Design and styling options",
|
||||
"description": "Card-specific styling options",
|
||||
"properties": {
|
||||
"card": {
|
||||
"type": "object",
|
||||
"description": "Card-specific styling",
|
||||
"properties": {
|
||||
"css_class": {
|
||||
"type": "string",
|
||||
"description": "CSS classes to apply to the card (supports glassmorphism classes: glassmorphism-primary, glassmorphism-dark, glass-ring, glass-shadow, noise-texture)"
|
||||
"description": "CSS classes to apply to the card (e.g., glassmorphism-primary, glass-ring)"
|
||||
},
|
||||
"css_style": {
|
||||
"type": "string",
|
||||
"description": "Inline CSS for the card container"
|
||||
},
|
||||
"text_color": {
|
||||
"type": "string",
|
||||
@@ -70,79 +77,45 @@
|
||||
"maximum": 1,
|
||||
"description": "Glassmorphism overlay opacity for fine-tuning contrast",
|
||||
"default": 0.15
|
||||
},
|
||||
"css_style": {
|
||||
"type": "string",
|
||||
"description": "Custom CSS styles to apply to the card"
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "cta-card",
|
||||
"design": {
|
||||
"background": {
|
||||
"type": "object",
|
||||
"description": "Modern background options supporting layered effects",
|
||||
"properties": {
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Background color"
|
||||
},
|
||||
"gradient": {
|
||||
"type": "object",
|
||||
"description": "Modern gradient syntax for 2025 glassmorphism",
|
||||
"properties": {
|
||||
"start": {
|
||||
"type": "string",
|
||||
"description": "Gradient start color (e.g., 'primary-500', 'blue-600')"
|
||||
},
|
||||
"end": {
|
||||
"type": "string",
|
||||
"description": "Gradient end color (e.g., 'primary-700', 'blue-800')"
|
||||
},
|
||||
"direction": {
|
||||
"type": "number",
|
||||
"description": "Gradient angle in degrees (default: 90)",
|
||||
"default": 90
|
||||
}
|
||||
}
|
||||
},
|
||||
"image": {
|
||||
"type": "object",
|
||||
"description": "Background image (layers with gradient for glassmorphism)",
|
||||
"properties": {
|
||||
"filename": {
|
||||
"type": "string",
|
||||
"description": "Image filename in assets/media/"
|
||||
},
|
||||
"size": {
|
||||
"type": "string",
|
||||
"enum": ["cover", "contain", "auto", "100px", "50%"],
|
||||
"description": "Background size",
|
||||
"default": "cover"
|
||||
},
|
||||
"position": {
|
||||
"type": "string",
|
||||
"enum": ["center", "top", "bottom", "left", "right", "repeat", "top left", "top right", "bottom left", "bottom right"],
|
||||
"description": "Background position (use 'repeat' for tiling textures)",
|
||||
"default": "center"
|
||||
},
|
||||
"repeat": {
|
||||
"type": "string",
|
||||
"enum": ["repeat", "repeat-x", "repeat-y", "no-repeat"],
|
||||
"description": "Explicit background-repeat control",
|
||||
"default": "no-repeat"
|
||||
},
|
||||
"opacity": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1,
|
||||
"description": "Image opacity for subtle textures"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"gradient": {
|
||||
"start": "primary-500",
|
||||
"end": "secondary-600",
|
||||
"direction": "135"
|
||||
},
|
||||
"text_color_light": true
|
||||
},
|
||||
"card": {
|
||||
"css_class": "glassmorphism-primary",
|
||||
"text_color": "auto",
|
||||
"overlay_opacity": 0.15
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"title": "Ready to launch?",
|
||||
"text": "Ship a Hugo Blox site with production-ready Tailwind 4 in minutes.",
|
||||
"button": {
|
||||
"url": "/contact/",
|
||||
"text": "Talk to us",
|
||||
"icon": "hero/arrow-right"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/cta-image-paragraph.json",
|
||||
"title": "CTA Image Paragraph Block Schema",
|
||||
"description": "Schema for the CTA Image Paragraph block - displays alternating image and text sections with features and buttons",
|
||||
"description": "Schema for the CTA Image Paragraph block - alternating media and copy with optional feature bullets and button",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,65 +11,95 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "cta-image-paragraph"
|
||||
"const": "cta-image-paragraph",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Content configuration for the CTA image paragraph block",
|
||||
"properties": {
|
||||
"items": {
|
||||
"type": "array",
|
||||
"description": "Array of image-paragraph items",
|
||||
"description": "CTA sections with media and supporting copy",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Item title (supports Markdown)"
|
||||
"description": "Heading for the CTA item"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Item description text (supports Markdown)"
|
||||
"description": "Supporting paragraph (supports Markdown)"
|
||||
},
|
||||
"image": {
|
||||
"type": "string",
|
||||
"description": "Image filename (in assets/media/)"
|
||||
"description": "Image filename in assets/media/",
|
||||
"examples": ["screenshots/product.png"]
|
||||
},
|
||||
"feature_icon": {
|
||||
"type": "string",
|
||||
"description": "Icon used before each feature bullet",
|
||||
"default": "check"
|
||||
},
|
||||
"features": {
|
||||
"type": "array",
|
||||
"description": "Array of feature list items",
|
||||
"description": "Bullet list shown under the paragraph",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"feature_icon": {
|
||||
"type": "string",
|
||||
"description": "Icon for feature list items (icon pack format: pack/icon-name)",
|
||||
"default": "check"
|
||||
},
|
||||
"button": {
|
||||
"type": "object",
|
||||
"description": "Optional call-to-action button",
|
||||
"description": "Optional CTA button",
|
||||
"properties": {
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Button URL"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Button text"
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["url", "text"]
|
||||
"required": ["text", "url"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": ["title", "text", "image"]
|
||||
}
|
||||
"required": ["title", "text", "image"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"minItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["items"]
|
||||
"required": ["items"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "cta-image-paragraph",
|
||||
"content": {
|
||||
"items": [
|
||||
{
|
||||
"title": "Ship polished docs with Hugo Blox",
|
||||
"text": "Pair Markdown content with responsive imagery and reusable CTAs.",
|
||||
"image": "screenshots/docs.png",
|
||||
"feature_icon": "hero/check-circle",
|
||||
"features": ["Responsive images generated automatically", "Markdown-first authoring", "Works with Netlify, Vercel, and GitHub Pages"],
|
||||
"button": {
|
||||
"text": "Read the guide",
|
||||
"url": "/docs/get-started/"
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "Launch production-ready marketing pages",
|
||||
"text": "Use alternating layouts to highlight product benefits.",
|
||||
"image": "screenshots/marketing.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,94 +1,138 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"title": "FAQ Block",
|
||||
"description": "Display frequently asked questions in an accordion format with FAQPage structured data",
|
||||
"properties": {
|
||||
"content": {
|
||||
"$id": "https://hugoblox.com/schemas/blocks/faq.json",
|
||||
"title": "FAQ Block Schema",
|
||||
"description": "Display frequently asked questions in an accordion format with optional CTA",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Block title"
|
||||
"block": {
|
||||
"const": "faq",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"subtitle": {
|
||||
"type": "string",
|
||||
"description": "Block subtitle"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Introductory text (Markdown supported)"
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"description": "FAQ items",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"question": {
|
||||
"type": "string",
|
||||
"description": "The question"
|
||||
},
|
||||
"answer": {
|
||||
"type": "string",
|
||||
"description": "The answer (Markdown supported)"
|
||||
}
|
||||
},
|
||||
"required": ["question", "answer"]
|
||||
}
|
||||
},
|
||||
"button": {
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Call-to-action button",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Block title"
|
||||
},
|
||||
"subtitle": {
|
||||
"type": "string",
|
||||
"description": "Block subtitle"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Button text"
|
||||
"description": "Introductory text (Markdown supported)"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Button URL"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Button icon name"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"design": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"spacing": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"padding": {
|
||||
"items": {
|
||||
"type": "array",
|
||||
"description": "FAQ items",
|
||||
"items": {
|
||||
"type": "string"
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"question": {
|
||||
"type": "string",
|
||||
"description": "The question"
|
||||
},
|
||||
"answer": {
|
||||
"type": "string",
|
||||
"description": "The answer (Markdown supported)"
|
||||
}
|
||||
},
|
||||
"required": ["question", "answer"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"description": "Padding [top, right, bottom, left]"
|
||||
"minItems": 1
|
||||
},
|
||||
"margin": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
"button": {
|
||||
"type": "object",
|
||||
"description": "Call-to-action button",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Button text"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Button URL"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Button icon name"
|
||||
}
|
||||
},
|
||||
"description": "Margin [top, right, bottom, left]"
|
||||
"required": ["text", "url"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["items"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"background": {
|
||||
"design": {
|
||||
"type": "object",
|
||||
"description": "Spacing overrides for the FAQ section",
|
||||
"properties": {
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Background color CSS class"
|
||||
"spacing": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"padding": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Padding [top, right, bottom, left]"
|
||||
},
|
||||
"margin": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Margin [top, right, bottom, left]"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "faq",
|
||||
"content": {
|
||||
"title": "Frequently asked questions",
|
||||
"subtitle": "Fast answers for new users",
|
||||
"text": "If you do not see your question, open an issue or reach out.",
|
||||
"items": [
|
||||
{
|
||||
"question": "How do I enable Pagefind?",
|
||||
"answer": "Add `pagefind = true` to your config and run `pnpm build`."
|
||||
},
|
||||
{
|
||||
"question": "Can I customize Tailwind tokens?",
|
||||
"answer": "Yes. Edit the design tokens in `modules/blox-tailwind/assets/` and run `pnpm format`."
|
||||
}
|
||||
],
|
||||
"button": {
|
||||
"text": "View full knowledge base",
|
||||
"url": "/faq/",
|
||||
"icon": "hero/arrow-right"
|
||||
}
|
||||
},
|
||||
"design": {
|
||||
"spacing": {
|
||||
"padding": ["2.5rem", "0", "2.5rem", "0"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -11,7 +11,8 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "features"
|
||||
"const": "features",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
@@ -44,13 +45,44 @@
|
||||
"description": "Feature icon (icon pack format: pack/icon-name)"
|
||||
}
|
||||
},
|
||||
"required": ["name", "description"]
|
||||
}
|
||||
"required": ["name", "description"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"minItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["items"]
|
||||
"required": ["items"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "features",
|
||||
"content": {
|
||||
"title": "Everything you need",
|
||||
"text": "From data to deployment, one stack.",
|
||||
"items": [
|
||||
{
|
||||
"name": "Tailwind 4",
|
||||
"description": "Pre-configured tokens, gradients, and typography.",
|
||||
"icon": "hero/swatch"
|
||||
},
|
||||
{
|
||||
"name": "Preact blocks",
|
||||
"description": "Composable UI shipped with sensible defaults.",
|
||||
"icon": "hero/puzzle-piece"
|
||||
},
|
||||
{
|
||||
"name": "Docs-ready",
|
||||
"description": "Markdown, data-driven content, and inline shortcodes.",
|
||||
"icon": "hero/book-open"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/hero.json",
|
||||
"title": "Hero Block Schema",
|
||||
"description": "Schema for the Hero block - displays prominent hero sections with title, text, and call-to-action buttons",
|
||||
"description": "Schema for the Hero block - displays prominent hero sections with titles, text, and calls-to-action",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -28,7 +28,7 @@
|
||||
},
|
||||
"announcement": {
|
||||
"type": "object",
|
||||
"description": "Optional announcement banner",
|
||||
"description": "Optional announcement banner above the title",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string",
|
||||
@@ -44,7 +44,7 @@
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Link URL"
|
||||
"description": "Link URL or page anchor"
|
||||
}
|
||||
},
|
||||
"required": ["text", "url"],
|
||||
@@ -60,7 +60,7 @@
|
||||
"properties": {
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Button URL"
|
||||
"description": "Button URL or hash anchor"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
@@ -80,7 +80,7 @@
|
||||
"properties": {
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Link URL"
|
||||
"description": "Link URL or page anchor"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
@@ -92,10 +92,58 @@
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"design": {
|
||||
"type": "object",
|
||||
"description": "Hero-specific design tweaks",
|
||||
"properties": {
|
||||
"no_padding": {
|
||||
"type": "boolean",
|
||||
"description": "Disable default vertical padding applied by the hero layout",
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": false
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "hero",
|
||||
"id": "intro",
|
||||
"design": {
|
||||
"no_padding": false,
|
||||
"background": {
|
||||
"gradient": {
|
||||
"start": "primary-500",
|
||||
"end": "secondary-500"
|
||||
},
|
||||
"text_color_light": true
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"announcement": {
|
||||
"text": "Latest preprint is live",
|
||||
"link": {
|
||||
"text": "Read the paper",
|
||||
"url": "/publications/rlhf-foundations"
|
||||
}
|
||||
},
|
||||
"title": "Building aligned AI together",
|
||||
"text": "Human-centred research, transparent tooling, and production-ready stacks.",
|
||||
"primary_action": {
|
||||
"text": "Start a project",
|
||||
"url": "#contact",
|
||||
"icon": "hero/arrow-right"
|
||||
},
|
||||
"secondary_action": {
|
||||
"text": "View portfolio",
|
||||
"url": "/projects/"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,74 +1,132 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"title": "Knowledge Categories Block",
|
||||
"description": "Grid of knowledge base category cards",
|
||||
"properties": {
|
||||
"content": {
|
||||
"$id": "https://hugoblox.com/schemas/blocks/knowledge-categories.json",
|
||||
"title": "Knowledge Categories Block Schema",
|
||||
"description": "Schema for the Knowledge Categories block - lists taxonomy categories with counts and links",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string"
|
||||
"block": {
|
||||
"const": "knowledge-categories",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"subtitle": {
|
||||
"type": "string"
|
||||
},
|
||||
"categories": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"category": {
|
||||
"type": "string",
|
||||
"description": "Category name (e.g., 'Getting Started', 'ChatGPT') - will be auto-slugified for URL"
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Display title (optional - defaults to category name)"
|
||||
},
|
||||
"description": {
|
||||
"type": "string"
|
||||
},
|
||||
"icon": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"bg_color": {
|
||||
"type": "string"
|
||||
},
|
||||
"text_color": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"count": {
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"view_all": {
|
||||
"content": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {
|
||||
"title": {
|
||||
"type": "string"
|
||||
},
|
||||
"link": {
|
||||
"subtitle": {
|
||||
"type": "string"
|
||||
},
|
||||
"categories": {
|
||||
"type": "array",
|
||||
"description": "Categories to render; uses real taxonomy counts when available",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"category": {
|
||||
"type": "string",
|
||||
"description": "Taxonomy category name used for lookup (defaults to `title` when omitted)"
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Display label for the category card"
|
||||
},
|
||||
"description": {
|
||||
"type": "string"
|
||||
},
|
||||
"icon": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Icon name (e.g., 'hero/book-open')"
|
||||
},
|
||||
"bg_color": {
|
||||
"type": "string",
|
||||
"description": "Background utility classes for the icon wrapper",
|
||||
"default": "bg-primary-100 dark:bg-primary-900/50"
|
||||
},
|
||||
"text_color": {
|
||||
"type": "string",
|
||||
"description": "Text color classes for the icon",
|
||||
"default": "text-primary-600 dark:text-primary-400"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"count": {
|
||||
"type": "integer",
|
||||
"description": "Optional override for item count (otherwise uses taxonomy count)"
|
||||
}
|
||||
},
|
||||
"anyOf": [
|
||||
{
|
||||
"required": ["category"]
|
||||
},
|
||||
{
|
||||
"required": ["title"]
|
||||
}
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"view_all": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"link": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["text", "link"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": ["categories"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "knowledge-categories",
|
||||
"content": {
|
||||
"title": "Browse the knowledge base",
|
||||
"subtitle": "Jump into the most active categories.",
|
||||
"categories": [
|
||||
{
|
||||
"category": "research",
|
||||
"title": "Research",
|
||||
"description": "Lab notes, experiment trackers, and preprint workflows.",
|
||||
"icon": {
|
||||
"name": "hero/beaker",
|
||||
"bg_color": "bg-primary-100 dark:bg-primary-900/50",
|
||||
"text_color": "text-primary-600 dark:text-primary-400"
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "tutorials",
|
||||
"title": "Tutorials",
|
||||
"description": "Hands-on guides for Hugo Blox.",
|
||||
"count": 18
|
||||
}
|
||||
],
|
||||
"view_all": {
|
||||
"text": "See all categories",
|
||||
"link": "/categories/"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"design": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"spacing": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/logos.json",
|
||||
"title": "Logos Block Schema",
|
||||
"description": "Schema for the Logos block - displays partner/sponsor logos with various display modes",
|
||||
"description": "Schema for the Logos block - showcases partner/customer logos in grid, carousel, or marquee layouts",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,96 +11,130 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "logos"
|
||||
"const": "logos",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Content configuration for the logos block",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Main section title"
|
||||
"type": "string"
|
||||
},
|
||||
"subtitle": {
|
||||
"type": "string",
|
||||
"description": "Section subtitle"
|
||||
"type": "string"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Section description text"
|
||||
"type": "string"
|
||||
},
|
||||
"logos": {
|
||||
"type": "array",
|
||||
"description": "Array of logo items with details",
|
||||
"description": "Explicit list of logos to render",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Partner/sponsor name"
|
||||
"description": "Partner/customer name (used for alt text)"
|
||||
},
|
||||
"image": {
|
||||
"type": "string",
|
||||
"description": "Path to logo image relative to assets/media/"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Link to partner website"
|
||||
},
|
||||
"external": {
|
||||
"type": "boolean",
|
||||
"description": "Open link in new tab",
|
||||
"default": true
|
||||
"description": "Logo image filename in assets/media/"
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Short description shown on hover"
|
||||
"description": "Tooltip/hover description"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Optional link URL"
|
||||
},
|
||||
"external": {
|
||||
"type": "boolean",
|
||||
"description": "Open URL in a new tab",
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["image"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"logo_folder": {
|
||||
"type": "string",
|
||||
"description": "Legacy: Folder containing logo images (deprecated, use logos array instead)"
|
||||
"description": "Folder in assets/media/ containing logo images (used when `logos` is not provided)"
|
||||
},
|
||||
"cta": {
|
||||
"type": "object",
|
||||
"description": "Call to action button",
|
||||
"description": "Optional call-to-action button beneath the logos",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Button text"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Button URL"
|
||||
"type": "string"
|
||||
},
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Optional icon name"
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["url", "text"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"design": {
|
||||
"type": "object",
|
||||
"description": "Design options for the logos block",
|
||||
"description": "Display options for the logos block",
|
||||
"properties": {
|
||||
"display_mode": {
|
||||
"type": "string",
|
||||
"enum": ["grid", "carousel", "marquee"],
|
||||
"description": "How to display the logos",
|
||||
"description": "Layout style for the logos",
|
||||
"default": "grid"
|
||||
},
|
||||
"show_pattern": {
|
||||
"type": "boolean",
|
||||
"description": "Show decorative background pattern",
|
||||
"description": "Render a faint gradient pattern behind the section",
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "logos",
|
||||
"design": {
|
||||
"display_mode": "grid",
|
||||
"show_pattern": true
|
||||
},
|
||||
"content": {
|
||||
"title": "Trusted by leading labs",
|
||||
"subtitle": "Partners + collaborators",
|
||||
"text": "Teams building safety-first AI with us.",
|
||||
"logos": [
|
||||
{
|
||||
"name": "DeepMind",
|
||||
"image": "logos/deepmind.svg",
|
||||
"url": "https://deepmind.com",
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "OpenAI",
|
||||
"image": "logos/openai.png",
|
||||
"description": "Alignment research partner"
|
||||
}
|
||||
],
|
||||
"cta": {
|
||||
"text": "See case studies",
|
||||
"url": "/case-studies/",
|
||||
"icon": "hero/arrow-right"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/markdown.json",
|
||||
"title": "Markdown Block Schema",
|
||||
"description": "Schema for the Markdown block - displays markdown content with optional title",
|
||||
"description": "Schema for the Markdown block - renders arbitrary Markdown content with an optional heading",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,24 +11,36 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "markdown"
|
||||
"const": "markdown",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Content configuration for the markdown block",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Section title (supports Markdown)"
|
||||
"description": "Section heading (supports Markdown)"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Markdown content (supports full Markdown syntax)"
|
||||
"description": "Markdown body content"
|
||||
}
|
||||
},
|
||||
"required": ["text"]
|
||||
"required": ["text"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "markdown",
|
||||
"content": {
|
||||
"title": "Why Hugo Blox?",
|
||||
"text": "Hugo Blox ships **Preact blocks**, Tailwind 4, and fast Hugo rendering. Mix Markdown, data-driven content, and components without build grief."
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/research-areas.json",
|
||||
"title": "Research Areas Block Schema",
|
||||
"description": "Schema for the Research Areas block - displays research focus areas with rich visuals and metrics",
|
||||
"description": "Schema for the Research Areas block - highlights thematic areas with optional stats and CTAs",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,129 +11,172 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "research-areas"
|
||||
"const": "research-areas",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Content configuration for the research areas block",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Section title"
|
||||
"type": "string"
|
||||
},
|
||||
"subtitle": {
|
||||
"type": "string",
|
||||
"description": "Section subtitle"
|
||||
"type": "string"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Section description text"
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"description": "Array of research area items",
|
||||
"description": "Research area cards",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Research area name",
|
||||
"required": true
|
||||
"description": "Area title"
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Research area description",
|
||||
"required": true
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Icon identifier (e.g., 'hero/beaker', 'devicon/python')"
|
||||
},
|
||||
"emoji": {
|
||||
"type": "string",
|
||||
"description": "Emoji as alternative to icon"
|
||||
},
|
||||
"image": {
|
||||
"type": "string",
|
||||
"description": "Image path relative to assets/media/"
|
||||
"description": "Short summary"
|
||||
},
|
||||
"gradient": {
|
||||
"type": "string",
|
||||
"description": "Tailwind gradient classes (e.g., 'from-blue-400 to-purple-400')"
|
||||
"description": "Tailwind gradient classes for the header",
|
||||
"examples": ["from-primary-400 to-secondary-400"]
|
||||
},
|
||||
"url": {
|
||||
"image": {
|
||||
"type": "string",
|
||||
"description": "Link to detailed page"
|
||||
"description": "Optional header image filename in assets/media/"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Optional icon displayed instead of an image"
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"enum": ["active", "emerging", "planning"],
|
||||
"description": "Research area status"
|
||||
"description": "Status badge (e.g., active, emerging, planning)"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Optional external/internal link for the area title"
|
||||
},
|
||||
"topics": {
|
||||
"type": "array",
|
||||
"description": "Key topics/keywords",
|
||||
"description": "Keywords or topics associated with the area",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"team_size": {
|
||||
"type": "string",
|
||||
"description": "Number of team members (e.g., '12 researchers')"
|
||||
"type": ["string", "number"],
|
||||
"description": "Team size metric displayed in the footer"
|
||||
},
|
||||
"publications": {
|
||||
"type": "string",
|
||||
"description": "Number of publications (e.g., '45 papers')"
|
||||
"type": ["string", "number"],
|
||||
"description": "Publication count metric"
|
||||
},
|
||||
"funding": {
|
||||
"type": "string",
|
||||
"description": "Funding amount (e.g., '$2.5M')"
|
||||
"description": "Funding metric/label"
|
||||
},
|
||||
"cta": {
|
||||
"type": "object",
|
||||
"description": "Call to action for this area",
|
||||
"description": "Per-area call-to-action button",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
"type": "string"
|
||||
},
|
||||
"text": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["url", "text"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["name", "description"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"minItems": 1
|
||||
},
|
||||
"cta": {
|
||||
"type": "object",
|
||||
"description": "Global call to action",
|
||||
"description": "Global call-to-action beneath the grid",
|
||||
"properties": {
|
||||
"text": {
|
||||
"url": {
|
||||
"type": "string"
|
||||
},
|
||||
"url": {
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["url", "text"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["items"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"design": {
|
||||
"type": "object",
|
||||
"description": "Design options for the research areas block",
|
||||
"description": "Layout option for research areas",
|
||||
"properties": {
|
||||
"layout": {
|
||||
"type": "string",
|
||||
"enum": ["cards", "hexagon", "timeline"],
|
||||
"description": "Layout style for research areas",
|
||||
"description": "Choose between card grid, hexagon swarm, or timeline layout",
|
||||
"default": "cards"
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "research-areas",
|
||||
"design": {
|
||||
"layout": "cards"
|
||||
},
|
||||
"content": {
|
||||
"title": "Research areas",
|
||||
"subtitle": "Where we invest time and curiosity",
|
||||
"text": "From alignment and evals to deployable agents.",
|
||||
"items": [
|
||||
{
|
||||
"name": "Alignment & Safety",
|
||||
"description": "Mechanistic interpretability, agent evaluations, and scalable oversight.",
|
||||
"gradient": "from-primary-400 to-secondary-400",
|
||||
"icon": "hero/shield-check",
|
||||
"status": "active",
|
||||
"topics": ["evals", "interpretability", "tooling"],
|
||||
"team_size": "6",
|
||||
"publications": "12",
|
||||
"funding": "$3.2M",
|
||||
"cta": {
|
||||
"text": "See roadmap",
|
||||
"url": "/research/alignment/"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Multimodal systems",
|
||||
"description": "Unified stacks for text, image, and audio models.",
|
||||
"image": "research/multimodal.jpg",
|
||||
"status": "emerging"
|
||||
}
|
||||
],
|
||||
"cta": {
|
||||
"text": "All research areas",
|
||||
"url": "/research/"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/resume-awards.json",
|
||||
"title": "Resume Awards Block Schema",
|
||||
"description": "Schema for the Resume Awards block - displays awards and certifications from author profile",
|
||||
"description": "Schema for the Resume Awards block - renders awards/certifications from the referenced author profile",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,16 +11,17 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "resume-awards"
|
||||
"const": "resume-awards",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Content configuration for the resume awards block",
|
||||
"description": "Content configuration for the awards block",
|
||||
"properties": {
|
||||
"username": {
|
||||
"type": "string",
|
||||
"description": "Author username (references authors/{username}/ page)",
|
||||
"default": "admin"
|
||||
"description": "Author username (references data/authors/{username}.yaml)",
|
||||
"default": "me"
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
@@ -30,26 +31,38 @@
|
||||
"type": "string",
|
||||
"description": "Section description (supports Markdown)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"design": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json#/properties/design"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"date_format": {
|
||||
"type": "string",
|
||||
"description": "Date format for award dates",
|
||||
"default": "January 2006"
|
||||
}
|
||||
}
|
||||
"type": "object",
|
||||
"description": "Awards-specific display options",
|
||||
"properties": {
|
||||
"date_format": {
|
||||
"type": "string",
|
||||
"description": "Date format for award dates (Go time layout)",
|
||||
"default": "January 2006",
|
||||
"examples": ["2006", "Jan 2006", "January 2, 2006"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "resume-awards",
|
||||
"content": {
|
||||
"username": "me",
|
||||
"title": "Awards",
|
||||
"text": "Selected recognition and certifications."
|
||||
},
|
||||
"design": {
|
||||
"date_format": "January 2006"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/resume-biography-3.json",
|
||||
"title": "Resume Biography 3 Block Schema",
|
||||
"description": "Schema for the Resume Biography 3 block - displays author bio with avatar, interests, and education in horizontal layout",
|
||||
"description": "Schema for the Resume Biography 3 block - horizontal layout with banner, avatar, and profile details",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,20 +11,20 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "resume-biography-3"
|
||||
"const": "resume-biography-3",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Content configuration for the resume biography 3 block",
|
||||
"properties": {
|
||||
"username": {
|
||||
"type": "string",
|
||||
"description": "Author username (references authors/{username}/ page)",
|
||||
"default": "admin"
|
||||
"description": "Author username (references data/authors/{username}.yaml)",
|
||||
"default": "me"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Biography text override (supports Markdown). If not provided, uses author page content."
|
||||
"description": "Biography text override (supports Markdown). Defaults to the author profile bio."
|
||||
},
|
||||
"headings": {
|
||||
"type": "object",
|
||||
@@ -36,13 +36,14 @@
|
||||
},
|
||||
"education": {
|
||||
"type": "string",
|
||||
"description": "Heading for education section (default: from i18n 'education')"
|
||||
"description": "Heading for education section (default: i18n 'education')"
|
||||
},
|
||||
"interests": {
|
||||
"type": "string",
|
||||
"description": "Heading for interests section (default: from i18n 'interests')"
|
||||
"description": "Heading for interests section (default: i18n 'interests')"
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"button": {
|
||||
"type": "object",
|
||||
@@ -57,73 +58,109 @@
|
||||
"description": "Button text"
|
||||
}
|
||||
},
|
||||
"required": ["url", "text"]
|
||||
"required": ["url", "text"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"design": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json#/properties/design"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Presentation options for the biography layout",
|
||||
"properties": {
|
||||
"avatar": {
|
||||
"type": "object",
|
||||
"description": "Avatar styling options",
|
||||
"properties": {
|
||||
"avatar": {
|
||||
"type": "object",
|
||||
"description": "Avatar styling options",
|
||||
"properties": {
|
||||
"size": {
|
||||
"type": "string",
|
||||
"enum": ["small", "medium", "large", "xl", "xxl"],
|
||||
"description": "Avatar size",
|
||||
"default": "medium"
|
||||
},
|
||||
"shape": {
|
||||
"type": "string",
|
||||
"enum": ["circle", "square", "rounded"],
|
||||
"description": "Avatar shape",
|
||||
"default": "circle"
|
||||
}
|
||||
}
|
||||
"size": {
|
||||
"type": "string",
|
||||
"enum": ["small", "medium", "large", "xl", "xxl"],
|
||||
"description": "Avatar size",
|
||||
"default": "large"
|
||||
},
|
||||
"banner": {
|
||||
"type": "object",
|
||||
"description": "Optional banner image",
|
||||
"properties": {
|
||||
"filename": {
|
||||
"type": "string",
|
||||
"description": "Banner image filename (in assets/media/)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"biography": {
|
||||
"type": "object",
|
||||
"description": "Biography text styling",
|
||||
"properties": {
|
||||
"style": {
|
||||
"type": "string",
|
||||
"description": "Custom CSS styles for biography text"
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": {
|
||||
"type": "object",
|
||||
"description": "Profile name typography controls",
|
||||
"properties": {
|
||||
"size": {
|
||||
"type": "string",
|
||||
"enum": ["xs", "sm", "md", "lg", "xl"],
|
||||
"description": "Heading size for the profile name to suit different name lengths",
|
||||
"default": "lg"
|
||||
}
|
||||
}
|
||||
"shape": {
|
||||
"type": "string",
|
||||
"enum": ["circle", "square", "rounded"],
|
||||
"description": "Avatar shape",
|
||||
"default": "circle"
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"banner": {
|
||||
"type": "object",
|
||||
"description": "Optional banner image",
|
||||
"properties": {
|
||||
"filename": {
|
||||
"type": "string",
|
||||
"description": "Banner image filename (in assets/media/)"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"biography": {
|
||||
"type": "object",
|
||||
"description": "Biography text styling",
|
||||
"properties": {
|
||||
"style": {
|
||||
"type": "string",
|
||||
"description": "Custom CSS styles for biography text"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"name": {
|
||||
"type": "object",
|
||||
"description": "Profile name typography controls",
|
||||
"properties": {
|
||||
"size": {
|
||||
"type": "string",
|
||||
"enum": ["xs", "sm", "md", "lg", "xl"],
|
||||
"description": "Heading size for the profile name",
|
||||
"default": "lg"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "resume-biography-3",
|
||||
"content": {
|
||||
"username": "me",
|
||||
"text": "Research lead focused on alignment, evaluations, and safety tooling.",
|
||||
"headings": {
|
||||
"about": "Professional summary",
|
||||
"education": "Education",
|
||||
"interests": "Interests"
|
||||
},
|
||||
"button": {
|
||||
"url": "/cv.pdf",
|
||||
"text": "Download CV"
|
||||
}
|
||||
},
|
||||
"design": {
|
||||
"avatar": {
|
||||
"size": "large",
|
||||
"shape": "circle"
|
||||
},
|
||||
"name": {
|
||||
"size": "lg"
|
||||
},
|
||||
"banner": {
|
||||
"filename": "banners/research.jpg"
|
||||
},
|
||||
"biography": {
|
||||
"style": "max-width: 70ch;"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/resume-biography.json",
|
||||
"title": "Resume Biography Block Schema",
|
||||
"description": "Schema for the Resume Biography block - displays author biography with avatar, social links, and bio text",
|
||||
"description": "Schema for the Biography block - renders author details with avatar, banner, bio, and social links",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,89 +11,112 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "resume-biography"
|
||||
"const": "resume-biography",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Content configuration for the resume biography block",
|
||||
"properties": {
|
||||
"username": {
|
||||
"type": "string",
|
||||
"description": "Author username (references authors/{username}/ page)",
|
||||
"default": "admin"
|
||||
"description": "Author username (references data/authors/{username}.yaml)",
|
||||
"default": "me"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Biography text override (supports Markdown). If not provided, uses author page content."
|
||||
"description": "Override biography text (Markdown); falls back to author profile bio when omitted"
|
||||
},
|
||||
"button": {
|
||||
"type": "object",
|
||||
"description": "Optional call-to-action button",
|
||||
"description": "Optional button beneath the bio",
|
||||
"properties": {
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Button URL"
|
||||
"type": "string"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Button text"
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["url", "text"]
|
||||
"required": ["url", "text"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"design": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json#/properties/design"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"description": "Presentation options for the biography",
|
||||
"properties": {
|
||||
"avatar": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"avatar": {
|
||||
"type": "object",
|
||||
"description": "Avatar styling options",
|
||||
"properties": {
|
||||
"size": {
|
||||
"type": "string",
|
||||
"enum": ["small", "medium", "large", "xl", "xxl"],
|
||||
"description": "Avatar size",
|
||||
"default": "medium"
|
||||
},
|
||||
"shape": {
|
||||
"type": "string",
|
||||
"enum": ["circle", "square", "rounded"],
|
||||
"description": "Avatar shape",
|
||||
"default": "circle"
|
||||
}
|
||||
}
|
||||
"size": {
|
||||
"type": "string",
|
||||
"enum": ["small", "medium", "large", "xl", "xxl"],
|
||||
"description": "Avatar display size",
|
||||
"default": "medium"
|
||||
},
|
||||
"banner": {
|
||||
"type": "object",
|
||||
"description": "Optional banner image",
|
||||
"properties": {
|
||||
"filename": {
|
||||
"type": "string",
|
||||
"description": "Banner image filename (in assets/media/)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"biography": {
|
||||
"type": "object",
|
||||
"description": "Biography text styling",
|
||||
"properties": {
|
||||
"style": {
|
||||
"type": "string",
|
||||
"description": "Custom CSS styles for biography text"
|
||||
}
|
||||
}
|
||||
"shape": {
|
||||
"type": "string",
|
||||
"enum": ["circle", "square", "rounded"],
|
||||
"description": "Avatar shape",
|
||||
"default": "circle"
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"banner": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"filename": {
|
||||
"type": "string",
|
||||
"description": "Optional banner image filename in assets/media/"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"biography": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"style": {
|
||||
"type": "string",
|
||||
"description": "Inline CSS style applied to the bio text wrapper",
|
||||
"examples": ["max-width: 60ch;"]
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "resume-biography",
|
||||
"content": {
|
||||
"username": "me",
|
||||
"text": "I build AI research tooling and mentor applied ML teams.",
|
||||
"button": {
|
||||
"url": "/cv.pdf",
|
||||
"text": "Download CV"
|
||||
}
|
||||
},
|
||||
"design": {
|
||||
"avatar": {
|
||||
"size": "large",
|
||||
"shape": "circle"
|
||||
},
|
||||
"banner": {
|
||||
"filename": "banners/lab.jpg"
|
||||
},
|
||||
"biography": {
|
||||
"style": "max-width: 60ch;"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/resume-experience.json",
|
||||
"title": "Resume Experience Block Schema",
|
||||
"description": "Schema for the Resume Experience block - displays work experience and education from author profile",
|
||||
"description": "Schema for the Experience block - renders work history and education timelines from an author profile",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,46 +11,58 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "resume-experience"
|
||||
"const": "resume-experience",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Content configuration for the resume experience block",
|
||||
"properties": {
|
||||
"username": {
|
||||
"type": "string",
|
||||
"description": "Author username (references authors/{username}/ page)",
|
||||
"default": "admin"
|
||||
"description": "Author username (references data/authors/{username}.yaml)",
|
||||
"default": "me"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Optional section description (supports Markdown)"
|
||||
"description": "Optional lead-in copy above the timelines"
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"design": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json#/properties/design"
|
||||
"type": "object",
|
||||
"description": "Display options for experience and education timelines",
|
||||
"properties": {
|
||||
"date_format": {
|
||||
"type": "string",
|
||||
"description": "Date format for experience and education entries (Go time layout)",
|
||||
"default": "January 2006",
|
||||
"examples": ["Jan 2006", "2006"]
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"date_format": {
|
||||
"type": "string",
|
||||
"description": "Date format for experience dates",
|
||||
"default": "January 2006"
|
||||
},
|
||||
"is_education_first": {
|
||||
"type": "boolean",
|
||||
"description": "Display education before work experience",
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
"is_education_first": {
|
||||
"type": "boolean",
|
||||
"description": "Show education timeline before experience",
|
||||
"default": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "resume-experience",
|
||||
"content": {
|
||||
"username": "me",
|
||||
"text": "Highlights from my recent roles and education."
|
||||
},
|
||||
"design": {
|
||||
"date_format": "January 2006",
|
||||
"is_education_first": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/resume-languages.json",
|
||||
"title": "Resume Languages Block Schema",
|
||||
"description": "Schema for the Resume Languages block - displays language proficiency with circular progress indicators",
|
||||
"description": "Schema for the Languages block - renders language proficiency from the author profile",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,16 +11,16 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "resume-languages"
|
||||
"const": "resume-languages",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Content configuration for the resume languages block",
|
||||
"properties": {
|
||||
"username": {
|
||||
"type": "string",
|
||||
"description": "Author username (references authors/{username}/ page)",
|
||||
"default": "admin"
|
||||
"description": "Author username (references data/authors/{username}.yaml)",
|
||||
"default": "me"
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
@@ -30,9 +30,22 @@
|
||||
"type": "string",
|
||||
"description": "Section description (supports Markdown)"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "resume-languages",
|
||||
"content": {
|
||||
"username": "me",
|
||||
"title": "Languages",
|
||||
"text": "Comfortable in English, French, and Mandarin."
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/resume-skills.json",
|
||||
"title": "Resume Skills Block Schema",
|
||||
"description": "Schema for the Resume Skills block - displays skills from author profile with optional progress bars",
|
||||
"description": "Schema for the Resume Skills block - displays skills and proficiency pulled from an author profile",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,16 +11,17 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "resume-skills"
|
||||
"const": "resume-skills",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Content configuration for the resume skills block",
|
||||
"description": "Content configuration for the skills block",
|
||||
"properties": {
|
||||
"username": {
|
||||
"type": "string",
|
||||
"description": "Author username (references authors/{username}/ page)",
|
||||
"default": "admin"
|
||||
"description": "Author username (references data/authors/{username}.yaml)",
|
||||
"default": "me"
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
@@ -30,20 +31,40 @@
|
||||
"type": "string",
|
||||
"description": "Section description (supports Markdown)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"design": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json#/properties/design"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {}
|
||||
"type": "object",
|
||||
"description": "Layout options for the skills grid",
|
||||
"properties": {
|
||||
"columns": {
|
||||
"type": "integer",
|
||||
"description": "Number of columns used to render skill groups",
|
||||
"default": 2,
|
||||
"minimum": 1,
|
||||
"maximum": 5,
|
||||
"examples": [2, 3]
|
||||
}
|
||||
]
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "resume-skills",
|
||||
"content": {
|
||||
"username": "me",
|
||||
"title": "Skills",
|
||||
"text": "Tooling and languages I use most often."
|
||||
},
|
||||
"design": {
|
||||
"columns": 3
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,114 +1,120 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"title": "Search Hero Block",
|
||||
"description": "A hero section with prominent search functionality for knowledge bases",
|
||||
"properties": {
|
||||
"content": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"badge": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Badge text"
|
||||
},
|
||||
"show_pulse": {
|
||||
"type": "boolean",
|
||||
"description": "Show pulsing dot indicator"
|
||||
}
|
||||
}
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Main title. Use ==text== syntax to apply gradient highlighting to any words or phrases. Example: 'Master ==AI Tools==. ==Boost Your Productivity.=='"
|
||||
},
|
||||
"subtitle": {
|
||||
"type": "string",
|
||||
"description": "Subtitle text"
|
||||
},
|
||||
"search_placeholder": {
|
||||
"type": "string",
|
||||
"description": "Search input placeholder"
|
||||
},
|
||||
"suggestions": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Quick search suggestions"
|
||||
},
|
||||
"stats": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"value": {
|
||||
"type": "string",
|
||||
"description": "Stat value"
|
||||
},
|
||||
"label": {
|
||||
"type": "string",
|
||||
"description": "Stat label"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"$id": "https://hugoblox.com/schemas/blocks/search-hero.json",
|
||||
"title": "Search Hero Block Schema",
|
||||
"description": "A hero section with prominent search functionality and optional stats",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
},
|
||||
"design": {
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"spacing": {
|
||||
"type": "object"
|
||||
"block": {
|
||||
"const": "search-hero",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"background": {
|
||||
"content": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Background color (Tailwind class)"
|
||||
},
|
||||
"gradient_mesh": {
|
||||
"badge": {
|
||||
"type": "object",
|
||||
"description": "Animated gradient mesh background",
|
||||
"description": "Optional badge displayed above the title",
|
||||
"properties": {
|
||||
"enable": {
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Badge text"
|
||||
},
|
||||
"show_pulse": {
|
||||
"type": "boolean",
|
||||
"description": "Enable animated gradient mesh"
|
||||
},
|
||||
"style": {
|
||||
"type": "string",
|
||||
"enum": ["orbs", "waves", "dots", "grid"],
|
||||
"description": "Visual style of gradient mesh",
|
||||
"default": "orbs"
|
||||
},
|
||||
"animation": {
|
||||
"type": "string",
|
||||
"enum": ["pulse", "float", "rotate", "none"],
|
||||
"description": "Animation type",
|
||||
"default": "pulse"
|
||||
},
|
||||
"intensity": {
|
||||
"type": "string",
|
||||
"enum": ["subtle", "medium", "bold"],
|
||||
"description": "Visual intensity",
|
||||
"default": "subtle"
|
||||
},
|
||||
"colors": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Tailwind colors with opacity (e.g., 'primary-500/20')",
|
||||
"default": ["primary-500/20", "primary-600/20"]
|
||||
"description": "Show pulsing dot indicator",
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
"required": ["text"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Main title. Use ==text== syntax to apply gradient highlighting to words or phrases."
|
||||
},
|
||||
"subtitle": {
|
||||
"type": "string",
|
||||
"description": "Subtitle text"
|
||||
},
|
||||
"search_placeholder": {
|
||||
"type": "string",
|
||||
"description": "Search input placeholder",
|
||||
"default": "Search for answers..."
|
||||
},
|
||||
"suggestions": {
|
||||
"type": "array",
|
||||
"description": "Quick search suggestion chips that open Pagefind with a preset query",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"stats": {
|
||||
"type": "array",
|
||||
"description": "Optional lightweight stats below the search box",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"value": {
|
||||
"type": "string",
|
||||
"description": "Stat value (supports Markdown)"
|
||||
},
|
||||
"label": {
|
||||
"type": "string",
|
||||
"description": "Stat label"
|
||||
}
|
||||
},
|
||||
"required": ["value", "label"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["title"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "search-hero",
|
||||
"design": {
|
||||
"background": {
|
||||
"gradient_mesh": {
|
||||
"enable": true,
|
||||
"style": "waves",
|
||||
"colors": ["primary-500/25", "secondary-500/25"],
|
||||
"animation": "float"
|
||||
}
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"badge": {
|
||||
"text": "Instant answers",
|
||||
"show_pulse": true
|
||||
},
|
||||
"title": "Master ==AI tools==. Find answers faster.",
|
||||
"subtitle": "Search our docs, playbooks, and notebooks.",
|
||||
"search_placeholder": "Search documentation...",
|
||||
"suggestions": ["Get started", "Deploy with Hugo Blox"],
|
||||
"stats": [
|
||||
{
|
||||
"value": "250+",
|
||||
"label": "articles"
|
||||
},
|
||||
{
|
||||
"value": "9/10",
|
||||
"label": "avg. satisfaction"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,21 +2,24 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/base-block.json",
|
||||
"title": "Hugo Blox Base Block Schema",
|
||||
"description": "Common parameters available to all Hugo Blox blocks",
|
||||
"description": "Common parameters available to all Hugo Blox blocks rendered via parse_block_v3.html",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"type": "string",
|
||||
"description": "Block type identifier (required)"
|
||||
"description": "Block type identifier (required for routing to the correct template)",
|
||||
"examples": ["hero", "stats"]
|
||||
},
|
||||
"blox": {
|
||||
"type": "string",
|
||||
"description": "Legacy block type identifier (deprecated, use 'block' instead)",
|
||||
"deprecated": true
|
||||
"deprecated": true,
|
||||
"examples": ["features"]
|
||||
},
|
||||
"id": {
|
||||
"type": "string",
|
||||
"description": "Optional unique identifier for this section"
|
||||
"description": "Optional unique identifier for this section",
|
||||
"examples": ["intro", "team"]
|
||||
},
|
||||
"demo": {
|
||||
"type": "boolean",
|
||||
@@ -25,34 +28,43 @@
|
||||
},
|
||||
"design": {
|
||||
"type": "object",
|
||||
"description": "Design and styling options",
|
||||
"description": "Design and styling options applied by the shared block wrapper",
|
||||
"properties": {
|
||||
"background": {
|
||||
"type": "object",
|
||||
"description": "Background styling options",
|
||||
"description": "Background styling options (colors, gradients, media, mesh)",
|
||||
"properties": {
|
||||
"color": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Single color value"
|
||||
"description": "Single color value",
|
||||
"examples": ["primary-50", "#0b1021"]
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"light": {
|
||||
"type": "string",
|
||||
"description": "Light mode color"
|
||||
"description": "Light mode color",
|
||||
"examples": ["#ffffff"]
|
||||
},
|
||||
"dark": {
|
||||
"type": "string",
|
||||
"description": "Dark mode color"
|
||||
"description": "Dark mode color",
|
||||
"examples": ["#0b1021"]
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
"additionalProperties": false,
|
||||
"examples": [
|
||||
{
|
||||
"light": "#ffffff",
|
||||
"dark": "#0b1021"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"description": "Background color (supports Tailwind colors, hex, rgb)"
|
||||
"description": "Background color (supports Tailwind tokens, hex, or rgb values)"
|
||||
},
|
||||
"gradient": {
|
||||
"type": "object",
|
||||
@@ -60,24 +72,108 @@
|
||||
"properties": {
|
||||
"start": {
|
||||
"type": "string",
|
||||
"description": "Gradient start color"
|
||||
"description": "Gradient start color",
|
||||
"examples": ["primary-500"]
|
||||
},
|
||||
"end": {
|
||||
"type": "string",
|
||||
"description": "Gradient end color"
|
||||
"description": "Gradient end color",
|
||||
"examples": ["secondary-600"]
|
||||
},
|
||||
"direction": {
|
||||
"type": "string",
|
||||
"type": ["string", "number"],
|
||||
"description": "Gradient direction in degrees",
|
||||
"default": "135"
|
||||
"default": "135",
|
||||
"examples": ["135", 90]
|
||||
}
|
||||
},
|
||||
"required": ["start", "end"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"gradient_mesh": {
|
||||
"type": "object",
|
||||
"description": "Layered gradient mesh backgrounds",
|
||||
"properties": {
|
||||
"enable": {
|
||||
"type": "boolean",
|
||||
"description": "Enable the gradient mesh renderer",
|
||||
"default": false
|
||||
},
|
||||
"style": {
|
||||
"type": "string",
|
||||
"enum": ["orbs", "waves", "dots", "grid"],
|
||||
"description": "Mesh style to render",
|
||||
"default": "orbs"
|
||||
},
|
||||
"animation": {
|
||||
"type": "string",
|
||||
"enum": ["pulse", "float", "rotate", "none"],
|
||||
"description": "Animation preset for mesh elements",
|
||||
"default": "pulse"
|
||||
},
|
||||
"intensity": {
|
||||
"type": "string",
|
||||
"enum": ["subtle", "medium", "bold"],
|
||||
"description": "Visual intensity of the mesh",
|
||||
"default": "subtle"
|
||||
},
|
||||
"colors": {
|
||||
"type": "array",
|
||||
"description": "Tailwind color tokens used in the mesh",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"examples": [["primary-500/20", "secondary-500/20"]]
|
||||
},
|
||||
"orb_count": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Number of orbs when using the 'orbs' style",
|
||||
"examples": [2, 3]
|
||||
},
|
||||
"positions": {
|
||||
"type": "array",
|
||||
"description": "Position utility classes for orb/wave placement",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"examples": [["top-0 left-1/4", "bottom-0 right-1/4"]]
|
||||
},
|
||||
"sizes": {
|
||||
"type": "array",
|
||||
"description": "Size utility classes per orb",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"examples": [["w-96 h-96", "w-80 h-80"]]
|
||||
},
|
||||
"wave_count": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Number of waves when using the 'waves' style",
|
||||
"examples": [3]
|
||||
},
|
||||
"dot_size": {
|
||||
"type": "string",
|
||||
"description": "Dot size utility for the 'dots' style",
|
||||
"examples": ["w-4 h-4"]
|
||||
},
|
||||
"spacing": {
|
||||
"type": ["string", "number"],
|
||||
"description": "Spacing in pixels for dots, grid, or waves",
|
||||
"examples": [16, "32"]
|
||||
},
|
||||
"line_width": {
|
||||
"type": ["string", "number"],
|
||||
"description": "Line width in pixels for the 'grid' style",
|
||||
"examples": [1, "2"]
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"text_color_light": {
|
||||
"type": "boolean",
|
||||
"description": "Whether to use light text color (for dark backgrounds)"
|
||||
"description": "Use light text color (for dark backgrounds)"
|
||||
},
|
||||
"image": {
|
||||
"type": "object",
|
||||
@@ -85,7 +181,8 @@
|
||||
"properties": {
|
||||
"filename": {
|
||||
"type": "string",
|
||||
"description": "Image filename in assets/media/"
|
||||
"description": "Image filename relative to assets/media/",
|
||||
"examples": ["backgrounds/hero.jpg"]
|
||||
},
|
||||
"size": {
|
||||
"type": "string",
|
||||
@@ -111,11 +208,14 @@
|
||||
"type": "number",
|
||||
"description": "Image brightness filter (0-1, where 1 is normal)",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
"maximum": 1,
|
||||
"examples": [0.65]
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"video": {
|
||||
"type": "object",
|
||||
@@ -123,16 +223,19 @@
|
||||
"properties": {
|
||||
"filename": {
|
||||
"type": "string",
|
||||
"description": "Video filename in assets/media/"
|
||||
"description": "Video filename in assets/media/",
|
||||
"examples": ["loops/background.mp4"]
|
||||
},
|
||||
"flip": {
|
||||
"type": "boolean",
|
||||
"description": "Flip video horizontally",
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"spacing": {
|
||||
"type": "object",
|
||||
@@ -145,64 +248,69 @@
|
||||
"type": "string"
|
||||
},
|
||||
"minItems": 4,
|
||||
"maxItems": 4
|
||||
"maxItems": 4,
|
||||
"examples": [["4rem", "0", "4rem", "0"]]
|
||||
}
|
||||
}
|
||||
},
|
||||
"clip_path": {
|
||||
"type": "string",
|
||||
"description": "CSS clip-path value"
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"css_style": {
|
||||
"type": "string",
|
||||
"description": "Custom CSS styles to apply to the section"
|
||||
"description": "Custom CSS styles to apply to the section",
|
||||
"examples": ["min-height: 70vh;"]
|
||||
},
|
||||
"css_class": {
|
||||
"type": "string",
|
||||
"description": "Custom CSS classes to apply to the section"
|
||||
},
|
||||
"columns": {
|
||||
"type": ["string", "number"],
|
||||
"description": "Number of columns for layout",
|
||||
"default": "1"
|
||||
},
|
||||
"view": {
|
||||
"type": "string",
|
||||
"description": "Display view type (used by collection block)",
|
||||
"enum": ["card", "compact", "showcase", "citation", "list", "masonry"]
|
||||
},
|
||||
"loop": {
|
||||
"type": "boolean",
|
||||
"description": "Enable looping (for slider blocks)",
|
||||
"default": true
|
||||
},
|
||||
"interval": {
|
||||
"type": ["string", "number"],
|
||||
"description": "Interval in milliseconds (for slider blocks)",
|
||||
"default": "3000"
|
||||
},
|
||||
"no_padding": {
|
||||
"type": "boolean",
|
||||
"description": "Disable default padding (for hero block)",
|
||||
"default": false
|
||||
},
|
||||
"card": {
|
||||
"type": "object",
|
||||
"description": "Card styling options (for CTA card block)",
|
||||
"properties": {
|
||||
"css_class": {
|
||||
"type": "string",
|
||||
"description": "CSS classes for the card"
|
||||
},
|
||||
"css_style": {
|
||||
"type": "string",
|
||||
"description": "CSS styles for the card"
|
||||
}
|
||||
}
|
||||
"description": "Custom CSS classes to apply to the section",
|
||||
"examples": ["relative overflow-hidden"]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["block"],
|
||||
"additionalProperties": true
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "hero",
|
||||
"id": "intro",
|
||||
"demo": false,
|
||||
"design": {
|
||||
"background": {
|
||||
"color": {
|
||||
"light": "#ffffff",
|
||||
"dark": "#0b1021"
|
||||
},
|
||||
"gradient": {
|
||||
"start": "primary-500",
|
||||
"end": "secondary-600",
|
||||
"direction": "135"
|
||||
},
|
||||
"gradient_mesh": {
|
||||
"enable": true,
|
||||
"style": "orbs",
|
||||
"colors": ["primary-500/20", "secondary-500/20"],
|
||||
"orb_count": 2,
|
||||
"positions": ["top-0 left-1/4", "bottom-0 right-1/4"],
|
||||
"sizes": ["w-96 h-96", "w-80 h-80"],
|
||||
"animation": "pulse",
|
||||
"intensity": "medium"
|
||||
},
|
||||
"image": {
|
||||
"filename": "backgrounds/hero.jpg",
|
||||
"parallax": true
|
||||
},
|
||||
"video": {
|
||||
"filename": "loops/background.mp4",
|
||||
"flip": false
|
||||
},
|
||||
"text_color_light": true
|
||||
},
|
||||
"spacing": {
|
||||
"padding": ["4rem", "0", "4rem", "0"]
|
||||
},
|
||||
"css_class": "relative overflow-hidden",
|
||||
"css_style": "min-height: 70vh;"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/stats.json",
|
||||
"title": "Stats Block Schema",
|
||||
"description": "Schema for the Stats block - displays statistics in a grid layout",
|
||||
"description": "Schema for the Stats block - displays statistics in cards, compact rows, or a minimal grid",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,7 +11,8 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "stats"
|
||||
"const": "stats",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
@@ -32,8 +33,9 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"statistic": {
|
||||
"type": "string",
|
||||
"description": "The statistic value/number (supports Markdown)"
|
||||
"type": ["string", "number"],
|
||||
"description": "The statistic value/number (supports Markdown)",
|
||||
"examples": ["120+", 3.2]
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
@@ -48,11 +50,14 @@
|
||||
"description": "Additional context or sub-metric (supports Markdown)"
|
||||
}
|
||||
},
|
||||
"required": ["statistic", "description"]
|
||||
}
|
||||
"required": ["statistic", "description"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"minItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["items"]
|
||||
"required": ["items"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"design": {
|
||||
"type": "object",
|
||||
@@ -64,9 +69,40 @@
|
||||
"description": "Display layout style",
|
||||
"default": "cards"
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "stats",
|
||||
"content": {
|
||||
"title": "Impact metrics",
|
||||
"text": "Momentum across research and product work.",
|
||||
"items": [
|
||||
{
|
||||
"statistic": "120+",
|
||||
"description": "peer-reviewed papers",
|
||||
"icon": "hero/document-text"
|
||||
},
|
||||
{
|
||||
"statistic": "5M",
|
||||
"description": "dataset downloads",
|
||||
"sub_metric": "across three releases"
|
||||
},
|
||||
{
|
||||
"statistic": 42,
|
||||
"description": "team members"
|
||||
}
|
||||
]
|
||||
},
|
||||
"design": {
|
||||
"layout": "cards"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/team-showcase.json",
|
||||
"title": "Team Showcase Block Schema",
|
||||
"description": "Schema for the Team Showcase block - displays team members with filtering and grouping",
|
||||
"description": "Schema for the Team Showcase block - displays team members grouped by author taxonomy",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,7 +11,8 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "team-showcase"
|
||||
"const": "team-showcase",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
@@ -31,24 +32,15 @@
|
||||
},
|
||||
"user_groups": {
|
||||
"type": "array",
|
||||
"description": "User groups to display (e.g., 'Principal Investigators', 'PhD Students')",
|
||||
"description": "Filter to authors that belong to these user groups (defaults to all authors)",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"sort_by": {
|
||||
"type": "string",
|
||||
"description": "Field to sort team members by",
|
||||
"default": "Params.last_name"
|
||||
},
|
||||
"sort_ascending": {
|
||||
"type": "boolean",
|
||||
"description": "Sort in ascending order",
|
||||
"default": true
|
||||
},
|
||||
"examples": [["Principal Investigators", "PhD Students"]]
|
||||
},
|
||||
"cta": {
|
||||
"type": "object",
|
||||
"description": "Call to action button",
|
||||
"description": "Optional call-to-action displayed beneath the grid",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string",
|
||||
@@ -56,43 +48,71 @@
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Button URL"
|
||||
"description": "Button URL (can be relative or absolute)"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Optional icon name"
|
||||
"description": "Optional icon name (e.g., 'hero/user-plus')"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["text", "url"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"design": {
|
||||
"type": "object",
|
||||
"description": "Design options for the team showcase",
|
||||
"description": "Display toggles for the team showcase",
|
||||
"properties": {
|
||||
"show_role": {
|
||||
"type": "boolean",
|
||||
"description": "Show team member roles",
|
||||
"description": "Show the role from each author profile",
|
||||
"default": true
|
||||
},
|
||||
"show_organizations": {
|
||||
"type": "boolean",
|
||||
"description": "Show team member organizations",
|
||||
"description": "Display the first organization/affiliation per profile",
|
||||
"default": false
|
||||
},
|
||||
"show_interests": {
|
||||
"type": "boolean",
|
||||
"description": "Show team member interests",
|
||||
"description": "Display up to three interests per profile",
|
||||
"default": false
|
||||
},
|
||||
"show_social": {
|
||||
"type": "boolean",
|
||||
"description": "Show social media links",
|
||||
"description": "Show social media icons pulled from the author profile links",
|
||||
"default": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "team-showcase",
|
||||
"content": {
|
||||
"title": "Meet the team",
|
||||
"subtitle": "Research + Engineering",
|
||||
"text": "We combine safety research with high-velocity engineering.",
|
||||
"user_groups": ["Principal Investigators", "PhD Students"],
|
||||
"cta": {
|
||||
"text": "Join us",
|
||||
"url": "/apply",
|
||||
"icon": "hero/user-plus"
|
||||
}
|
||||
},
|
||||
"design": {
|
||||
"show_role": true,
|
||||
"show_organizations": true,
|
||||
"show_interests": false,
|
||||
"show_social": true
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://hugoblox.com/schemas/blocks/testimonials.json",
|
||||
"title": "Testimonials Block Schema",
|
||||
"description": "Schema for the Testimonials block - displays customer testimonials with quotes and author info",
|
||||
"description": "Schema for the Testimonials block - displays quotes with avatars, names, and roles",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
@@ -11,11 +11,11 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"block": {
|
||||
"const": "testimonials"
|
||||
"const": "testimonials",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"description": "Content configuration for the testimonials block",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string",
|
||||
@@ -27,34 +27,62 @@
|
||||
},
|
||||
"items": {
|
||||
"type": "array",
|
||||
"description": "Array of testimonials",
|
||||
"description": "Testimonial entries",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string",
|
||||
"description": "Testimonial quote text (supports Markdown)"
|
||||
"description": "Quoted testimonial text (supports Markdown)"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Author name"
|
||||
"description": "Person's name"
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"description": "Author role/title"
|
||||
"description": "Role or organization"
|
||||
},
|
||||
"image": {
|
||||
"type": "string",
|
||||
"description": "Author avatar image filename (in assets/media/)"
|
||||
"description": "Avatar filename in assets/media/"
|
||||
}
|
||||
},
|
||||
"required": ["text", "name"]
|
||||
}
|
||||
"required": ["text", "name"],
|
||||
"additionalProperties": false
|
||||
},
|
||||
"minItems": 1
|
||||
}
|
||||
},
|
||||
"required": ["items"]
|
||||
"required": ["items"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "testimonials",
|
||||
"content": {
|
||||
"title": "What partners say",
|
||||
"text": "Teams build faster when they start with Hugo Blox.",
|
||||
"items": [
|
||||
{
|
||||
"text": "“Hugo Blox let us ship a research microsite in days instead of weeks.”",
|
||||
"name": "Dr. Casey Smith",
|
||||
"role": "Research Lead, OpenAI",
|
||||
"image": "people/casey.jpg"
|
||||
},
|
||||
{
|
||||
"text": "“Great developer experience and first-class docs. Our students love it.”",
|
||||
"name": "Prof. Lee Nguyen",
|
||||
"role": "MIT CSAIL",
|
||||
"image": "people/lee.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,83 +1,134 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"title": "Trending Questions Block",
|
||||
"description": "Display trending or featured questions",
|
||||
"properties": {
|
||||
"content": {
|
||||
"$id": "https://hugoblox.com/schemas/blocks/trending-questions.json",
|
||||
"title": "Trending Questions Block Schema",
|
||||
"description": "Display trending or featured questions with optional dynamic sourcing from content marked `trending: true`",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "../shared/schemas/base-block.json"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string"
|
||||
"block": {
|
||||
"const": "trending-questions",
|
||||
"description": "Block type identifier"
|
||||
},
|
||||
"subtitle": {
|
||||
"type": "string"
|
||||
},
|
||||
"questions": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"question": {
|
||||
"type": "string"
|
||||
},
|
||||
"answer_preview": {
|
||||
"type": "string"
|
||||
},
|
||||
"link": {
|
||||
"type": "string"
|
||||
},
|
||||
"badge": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"color": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"author": {
|
||||
"type": "string"
|
||||
},
|
||||
"views": {
|
||||
"type": "string"
|
||||
},
|
||||
"upvotes": {
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"view_all": {
|
||||
"content": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {
|
||||
"title": {
|
||||
"type": "string"
|
||||
},
|
||||
"link": {
|
||||
"subtitle": {
|
||||
"type": "string"
|
||||
},
|
||||
"count": {
|
||||
"type": "integer",
|
||||
"description": "Number of items to pull when auto-querying pages with `trending: true`",
|
||||
"default": 4,
|
||||
"minimum": 1
|
||||
},
|
||||
"questions": {
|
||||
"type": "array",
|
||||
"description": "Static fallback list of questions to render",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"question": {
|
||||
"type": "string"
|
||||
},
|
||||
"answer_preview": {
|
||||
"type": "string"
|
||||
},
|
||||
"link": {
|
||||
"type": "string",
|
||||
"description": "URL to the full answer/article"
|
||||
},
|
||||
"badge": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Tailwind classes applied to the badge"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"author": {
|
||||
"type": "string"
|
||||
},
|
||||
"views": {
|
||||
"type": ["string", "number"]
|
||||
},
|
||||
"upvotes": {
|
||||
"type": ["integer", "number"]
|
||||
}
|
||||
},
|
||||
"required": ["question", "link"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"view_all": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {
|
||||
"type": "string"
|
||||
},
|
||||
"link": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["text", "link"],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"required": ["content"],
|
||||
"additionalProperties": true,
|
||||
"examples": [
|
||||
{
|
||||
"block": "trending-questions",
|
||||
"design": {
|
||||
"spacing": {
|
||||
"padding": ["3rem", "0", "3rem", "0"]
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"title": "Trending questions",
|
||||
"subtitle": "Top searches from the last 7 days.",
|
||||
"count": 4,
|
||||
"questions": [
|
||||
{
|
||||
"question": "How do I deploy Hugo Blox to Netlify?",
|
||||
"answer_preview": "Use the provided CI workflow or run `hugo --gc --minify`...",
|
||||
"link": "/docs/deploy/netlify/",
|
||||
"badge": {
|
||||
"text": "🔥 Popular",
|
||||
"color": "bg-amber-100 text-amber-800"
|
||||
},
|
||||
"views": 1200,
|
||||
"upvotes": 86
|
||||
},
|
||||
{
|
||||
"question": "Where can I customize Tailwind 4 tokens?",
|
||||
"answer_preview": "Tokens are defined in `modules/blox-tailwind/assets/`...",
|
||||
"link": "/docs/style/tokens/",
|
||||
"author": "geo"
|
||||
}
|
||||
],
|
||||
"view_all": {
|
||||
"text": "Browse all questions",
|
||||
"link": "/faq/"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"design": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"spacing": {
|
||||
"type": "object"
|
||||
},
|
||||
"background": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"color": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user