chore: update block metadata

This commit is contained in:
George Cushen committed 2025-12-31 01:18:09 +00:00
1 parent fd22be65dd
commit 04a4a10b41
24 files changed
+1665 -842

No files matched your search

+118 -10
View File
@@ -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"
}
]
}
}
]
}
]
}
+47 -74
View File
@@ -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"
}
]
}
}
]
}
]
}
+114 -70
View File
@@ -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"
}
]
}
}
]
}
]
}
+54 -6
View File
@@ -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"
}
}
]
}
}
]
}
+73 -39
View File
@@ -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;"
}
}
]
}
+44 -8
View File
@@ -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"
}
}
}
}
]
}
}
]
}