diff --git a/CITATION.cff b/CITATION.cff index 9d7b3e4a..a709d2af 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -4,9 +4,11 @@ type: software title: "HugoBlox" abstract: > - HugoBlox is an open-research copilot for publishing scientific and technical content with Hugo. - It provides a no-code block system, Markdown-first content, and research-focused - features such as LaTeX math, BibTeX citations, and Jupyter Notebook support. + HugoBlox is an open-source ecosystem for building high-performance research portfolios, + lab websites, and technical documentation. Designed for data sovereignty, it enables + data scientists and researchers to publish reproducible content directly from Markdown, + Jupyter Notebooks, and BibTeX, eliminating the need for complex JavaScript dependencies + or proprietary AI platforms. authors: - family-names: "Cushen" @@ -19,8 +21,8 @@ url: "https://hugoblox.com" doi: 10.5281/zenodo.17704062 # Use the latest released version here -version: "0.10.0" -date-released: 2025-11-08 +version: "0.11.0" +date-released: 2026-01-02 keywords: - hugo diff --git a/LICENSE.md b/LICENSE.md index f40304fe..7655cb2c 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2016-present George Cushen (https://georgecushen.com/) +Copyright ยฉ 2016-Present [**Lore Labs**](https://lore.tech). Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/README.md b/README.md index 05fa4703..0522f1cd 100644 --- a/README.md +++ b/README.md @@ -1,157 +1,227 @@ [**ไธญๆ–‡**](./README.zh.md)

- + Build world-class sites with HugoBlox

-

HugoBlox: Your Open Research Copilot

+

HugoBlox: Your Open Publishing Stack

- Build a "Future-Proof" Brand in the AI Era.
- The choice of rockstar researchers and founders at Meta, Stanford, NVIDIA, and Y Combinator. + Publish notebooks, docs, portfolios, and knowledge bases from Markdown + Jupyter.
+ Built for data scientists, AI engineers, researchers, labs, and tech startups who want speed without lock-in: Hugo + Tailwind with optional Pro automation (visual editing, imports, fixes, and upgrades).

- ๐Ÿš€ Launch Copilot (Free) + Start Free in Browser  โ€ข  - Go Pro + Get Lore Studio (VS Code)

- - Discord - - - GitHub Stars - - - Follow on X - + + Researchers & Labs +  โ€ข  + Data Scientists & AI Engineers +  โ€ข  + Teams & Orgs +  โ€ข  + Pricing + +

+ +
+ +[![Discord](https://img.shields.io/discord/722225264733716590?label=Join%20Discord&logo=discord&style=flat-square&color=5865F2)](https://discord.gg/z8wNYzb) +[![GitHub stars](https://img.shields.io/github/stars/HugoBlox/kit?style=flat-square&logo=github)](https://github.com/HugoBlox/kit) +[![Follow on X](https://img.shields.io/badge/Follow-LoreLabs_-1DA1F2?style=flat-square&logo=x)](https://x.com/LoreLabs_) +[![License](https://img.shields.io/github/license/HugoBlox/kit?style=flat-square)](./LICENSE.md) + +
+ +

+ + Trusted since 2016 ยท 150,000+ researchers and scientists (Meta, Stanford, NVIDIA) ยท Rated 4.9/5 by users (official survey) ยท Used by teams like NVIDIA Research Labs, Kingโ€™s College London, and MIT ยท Featured by GitHub Release Radar +

--- -## Why Top Talent Chooses HugoBlox +## โšก๏ธ Why teams choose HugoBlox -In the age of AI agents, **Markdown is the new source code**. HugoBlox empowers STEM researchers, data scientists, innovative labs, and YC startups to create stunning, high-impact websites without the hassle. +In the age of AI, **Markdown is the new source code**. HugoBlox gives you the speed of modern tooling with the durability of a static stack: **Hugo + Tailwind** (with optional Alpine/Svelte blocks for interactivity). -Vibe coding tools generate fragile, "black box" React/JS apps that are a nightmare to maintain. **HugoBlox** combines AI speed with static site robustness, now supercharged with **Lore Studio** โ€“ your visual UI editor in VS Code. +- **Own your content**: clean Markdown, YAML, and notebooks โ€” portable, readable, and LLM-friendly. +- **Performance without the ops tax**: static output, fast builds, no runtime database. +- **Beautiful by default**: high-quality templates + blocks (and Pro options when you want more). +- **A hybrid workflow**: edit in code, or use a visual editor when you want velocity. -- **๐Ÿ”ฎ Future-Proof & AI Ready:** Content in clean Markdown โ€“ readable by humans and LLMs. No lock-in. -- **๐Ÿง  The "Copilot" Workflow:** - - **Online:** AI-assisted deployer launches in 60 seconds. - - **VS Code:** Introducing **Lore Studio** โ€“ visual editing, real-time previews, and smart configs right in your IDE. -- **โšก Performance without Debt:** Perfect Lighthouse scores, zero JS bloat, powered by Tailwind 4 and Hugo Modules. -- **๐ŸŽ“ Research-Grade Features:** LaTeX, BibTeX auto-citations, Jupyter integration โ€“ amplify your publications. +--- -![Lore Studio in Action](.github/media/studio/slide-1.webp) -*Build stunning research portfolios in minutes โ€“ focus on breakthroughs, not code.* +## For researchers & labs -![Visual Configuration Editor](.github/media/studio/slide-2.webp) -*Instant previews and smart suggestions โ€“ elevate your site effortlessly.* +- **Lab sites and academic profiles** (people, publications, projects, news) +- **Citable output** with BibTeX/DOI workflows +- **Notebooks + LaTeX** for technical writing that actually renders -![Theme Selector](.github/media/studio/slide-3.webp) -*A visual CMS in VS Code โ€“ discovery time, not deployment drudgery.* +## For data scientists & AI engineers + +- **Project docs** and technical blogs without heavy JavaScript stacks +- **Notebook-first publishing** (`.ipynb`) for reports, tutorials, and results +- **Knowledge bases** and internal docs that stay searchable and maintainable + +## For teams & orgs + +- **Consistent sites** across teams with templates + blocks +- **Lower risk upgrades** with clear versioning + migration guidance +- **Support options** when you need fast answers + +--- + +## ๐Ÿง  Edit the way you like (code-first, visual when you want it) + +- **Code-first**: Markdown/YAML + Hugo templates for full control. +- **Visual editing (Pro)**: **Lore Studio** in VS Code for drag-and-drop blocks, previews, and safer config edits. +- **AI automation (Pro)**: spend less time on formatting, YAML fixes, imports, and maintenance.

- ๐Ÿ“ฅ Download Lore Studio Now (Free) + Lore Studio in Action

+

Lore Studio: Visual editing meets code-first control.

+ +--- + +## ๐Ÿ› ๏ธ The toolkit + +| **Feature** | **Why it matters** | +| :--- | :--- | +| **Lore Studio (VS Code)** | A visual CMS inside your editor. Drag-and-drop blocks without leaving VS Code. | +| **Notebooks & LaTeX** | Render `.ipynb` and math-heavy pages natively. | +| **BibTeX / DOI workflows** | Build publication pages and bibliographies without manual formatting. | +| **Polyglot Support** | Write in Markdown, Jupyter, RMarkdown, or LaTeX Math. |

Template previews

- Browse Templates โ†’ + Browse Templates โ†’ +

+ +

+ Want to see it working fast? Pick a template and publish in ~60 seconds with the Online Copilot.
+ Try a template now โ†’

--- -## Get Started +## ๐Ÿš€ Get Started ### Option 1: The Online Copilot (Fastest) -Launch a professional site for your Lab, Startup, or Bio in under 2 minutes. +Ideal for **founders, labs, and startups**. Launch a site in minutes. -๐Ÿ‘‰ [**Start Free in Browser**](https://hugoblox.com/start?utm_source=github&utm_medium=readme) +๐Ÿ‘‰ [**Start Free in Browser**](https://hugoblox.com/start?utm_source=github&utm_medium=readme&utm_content=get_started_browser) -### Option 2: Lore Studio in VS Code (Visual Powerhouse) -Supercharge your workflow with our VS Code extension โ€“ visual editing for pros. +### Option 2: Lore Studio (Best for Data/AI teams) +The power of a visual website builder, directly inside VS Code. -1. Install from [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=lore.lore-studio). -2. Open your HugoBlox project in VS Code. -3. Click the HugoBlox icon and start building visually! +1. **Install** [Lore Studio from the Marketplace](https://marketplace.visualstudio.com/items?itemName=lore.lore-studio). +2. **Open** any HugoBlox project folder. +3. **Click** the Lore Studio icon in the menu to start visually editing. -### Option 3: The CLI (For Developers) -Prefer the terminal? Scaffold with our local copilot: +### Option 3: The CLI (For DevOps/Eng) +Scaffold a new project locally. ```bash -npx hugoblox create + # Requires Hugo Extended & Node.js + npm install -g hugoblox + hugoblox create site ``` -*Prerequisites: [Hugo Extended & Node](https://docs.hugoblox.com/start/cli/). - -For more guides, visit [**docs.hugoblox.com**](https://docs.hugoblox.com/?utm_source=github&utm_medium=readme). +Need guides and best practices? See the docs: [**docs.hugoblox.com**](https://docs.hugoblox.com/?utm_source=github&utm_medium=readme&utm_content=docs) --- -## Free vs. Pro +## โœ… Stability & upgrades (because your site should not break) -**HugoBlox** is open core. Build world-class sites for free. **Pro** accelerates with Studio and premium features. +- **Pin versions** to keep production stable. +- **Upgrade with confidence** using migration notes and upgrade guides. +- **Customize safely**: prefer configuration and blocks over fragile template overrides when possible. +- **Catch config issues early (Pro)**: visual editing + validation reduces YAML/front matter mistakes. -| Feature | Open Source | **HugoBlox Pro** | +See the docs for upgrade guidance: [**docs.hugoblox.com**](https://docs.hugoblox.com/?utm_source=github&utm_medium=readme&utm_content=upgrade_guidance) + +--- + +## ๐Ÿ’Ž Pricing & Features (Open Core) + +HugoBlox is **Open Core**. The **Free Kit** is production-grade and you will always own your data and code. + +The Free Kit includes: + +- **Templates + blocks** for portfolios, labs, docs, and landing pages +- **Markdown/YAML-first workflow** with Hugo + Tailwind performance +- **Notebook + LaTeX support** for technical publishing +- **Community support** via docs, GitHub issues, and Discord + +Upgrade to **Pro** when you want automation and lower maintenance overhead: + +- **Less time debugging YAML** (Fix-it Bot + safer config editing) +- **Less time formatting citations** (Magic Import + publication automation) +- **Less time dealing with upgrades** (guided maintenance workflows) +- **More velocity** (visual editing + previews in VS Code) + + +| Feature | **Free Kit** (Open Source) | **Pro** (Automation) | | :--- | :---: | :---: | -| **Core Framework** | โœ… | โœ… | -| **Studio Site Editor** | โŒ | **โœ… Included** | -| **Premium Templates** (SaaS, Lab) | โŒ | **โœ… Included** | -| **Exclusive Pro Blocks** | โŒ | **โœ… Included** | -| **Remove Attribution?** | โŒ | **โœ… Included** | -| **Discord Support** | โค๏ธ | **โšก๏ธ Priority** | -| **Support Open Research** | โค๏ธ | **๐Ÿ† Hero Status** | +| **Code Ownership** | โœ… 100% Yours | โœ… 100% Yours | +| **Visual Editor in Lore Studio** | โŒ | **โœ… Included** | +| **AI "Fix-It" Bot** (Auto-fix YAML) | โŒ | **โœ… Unlimited** | +| **Magic Import** (BibTeX/DOI -> Page) | โณ Trial | **โœ… Unlimited** | +| **CV Generator** (Site -> PDF Resume) | โŒ | **โœ… Included** | +| **Private Discord Support** | โŒ | **โœ… Priority** | -๐Ÿ‘‰ [**Upgrade to Pro**](https://hugoblox.com/pro?utm_source=github&utm_medium=readme) +๐Ÿ‘‰ [**View Full Feature Matrix**](https://hugoblox.com/pricing?utm_source=github&utm_medium=readme&utm_content=pricing_matrix)  โ€ข  [**Go Pro**](https://hugoblox.com/pro?utm_source=github&utm_medium=readme&utm_content=cta_pro) --- -## What Creators Say +> "Lore Studio saved me **40+ hours** on my lab site. Visual edits + BibTeX auto-updates = **citations up 3ร—**." +>
โ€” **Dr. Sarah Yang**, AI Researcher -> "Lore Studio saved me 40+ hours on my lab site. Visual edits + Bibtex auto-updates = citations up 3ร—." -> โ€” **Dr. Sarah Yang**, AI Researcher - -> "Launched docs in 10 minutes with Studio. Block system is genius; onboarding dropped 60%." -> โ€” **Alexandre Rodrigues**, Founder +> "Launched docs in **10 minutes**. The block system is genius; onboarding time dropped 60%." +>
โ€” **Alexandre Rodrigues**, Founder --- -## Support the Project +## ๐Ÿข Org-ready (without the enterprise bloat) -- ๐Ÿ’Ž **Pro (only $8/m)** โ€” Unlock Studio, premium templates, and all updates. -
[**Go Pro โ†’**](https://hugoblox.com/pro?utm_source=github&utm_medium=readme) - -- โ˜•๏ธ **Donate a Coffee** โ€” Fuel open source and research. -
[**Sponsor on GitHub โ†’**](https://github.com/sponsors/gcushen) - -- ๐Ÿค **Corporate Sponsors** โ€” Reach thousands. Get your logo here. -
[**Become a Partner โ†’**](https://github.com/sponsors/gcushen) +- **Deploy anywhere**: static output works with your existing infra. +- **Lower ops surface area**: no runtime app to patch. +- **Procurement-friendly options**: priority support and commercial features when you need them. --- -## Community +## ๐Ÿ—ฃ๏ธ Community & Support -Join to ask questions, share work, and improve. +We are a community of 150,000+ researchers, engineers, and creators. -- ๐Ÿ’ฌ [Discord](https://discord.gg/z8wNYzb) -- ๐Ÿ“š [Docs & Guides](https://docs.hugoblox.com/?utm_source=github&utm_medium=readme) -- ๐Ÿฆ [X / Twitter](https://x.com/LoreLabs_) -- โญ [Star on GitHub](https://github.com/HugoBlox/kit) +- **Need Help?** Join the [Discord Server](https://discord.gg/z8wNYzb) or search the [Documentation](https://docs.hugoblox.com/). +- **Found a Bug?** Open an [Issue](https://github.com/HugoBlox/kit/issues). +- **Want to Contribute?** Read our [Contributing Guide](./CONTRIBUTING.md). + +### Sponsors +Help us keep open-source sustainable. + +[**โค๏ธ Sponsor on GitHub**](https://github.com/sponsors/gcushen) | [**๐Ÿข Become a Partner**](https://github.com/sponsors/gcushen) --- ## License -MIT ยฉ 2016โ€“Present [George Cushen](https://georgecushen.com/?utm_source=github&utm_medium=hbb-readme) โ€” [License Details](./LICENSE.md) +Copyright ยฉ 2016-Present [**Lore Labs**](https://lore.tech/?utm_source=github&utm_medium=readme). +Released under the [MIT License](./LICENSE.md).

- No tracking. No lock-in. Your content stays yours. + Loreโ„ข is a trademark of Lore Labs.

diff --git a/README.zh.md b/README.zh.md index 17b67898..0641f6b1 100644 --- a/README.zh.md +++ b/README.zh.md @@ -150,8 +150,9 @@ npx hugoblox create ## ่ฎธๅฏ่ฏ -MIT ยฉ 2016โ€“Present [George Cushen](https://georgecushen.com/?utm_source=github&utm_medium=hbb-readme) โ€” [License ่ฏฆๆƒ…](./LICENSE.md) +Copyright ยฉ 2016-Present [**Lore Labs**](https://lore.tech/?utm_source=github&utm_medium=readme). +Released under the [MIT License](./LICENSE.md).

- ๆ— ่ฟฝ่ธชใ€‚ๆ— ้”ๅฎšใ€‚ๆ‚จ็š„ๅ†…ๅฎนๅง‹็ปˆๅฑžไบŽๆ‚จใ€‚ + Loreโ„ข is a trademark of Lore Labs.

diff --git a/modules/blox/blox/collection/schema.json b/modules/blox/blox/collection/schema.json deleted file mode 100644 index 5b94932a..00000000 --- a/modules/blox/blox/collection/schema.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/collection.json", - "title": "Collection", - "description": "Displays filtered and sorted collections of pages", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "collection", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "description": "Content configuration for the collection block", - "properties": { - "title": { - "type": "string", - "description": "Section title (supports Markdown)" - }, - "text": { - "type": "string", - "description": "Section description (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "count": { - "type": "integer", - "description": "Maximum number of items to display (0 means unlimited)", - "minimum": 0, - "default": 5 - }, - "offset": { - "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/section (e.g., 'post', 'publication')" - }, - "sort_by": { - "type": "string", - "description": "Field to sort by", - "enum": ["Date", "date", "Title", "title", "Weight", "weight", "Lastmod", "lastmod", "PublishDate", "publishdate"], - "default": "Date" - }, - "sort_ascending": { - "type": "boolean", - "description": "Sort in ascending order", - "default": false - }, - "order": { - "type": "string", - "enum": ["asc", "desc"], - "description": "Sort order (alternative to sort_ascending)" - }, - "filters": { - "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", - "items": { - "type": "string" - } - }, - "tags": { - "type": "array", - "description": "Filter by multiple tags (intersection)", - "items": { - "type": "string" - } - }, - "tag": { - "type": "string", - "description": "Filter by a single tag" - }, - "category": { - "type": "string", - "description": "Filter by category" - }, - "publication_type": { - "type": "string", - "description": "Filter by publication type" - }, - "exclude_publication_type": { - "type": "string", - "description": "Exclude specific publication type" - }, - "author": { - "type": "string", - "description": "Filter by author" - }, - "featured_only": { - "type": "boolean", - "description": "Show only featured content", - "default": false - }, - "exclude_featured": { - "type": "boolean", - "description": "Exclude featured content", - "default": false - }, - "exclude_past": { - "type": "boolean", - "description": "Exclude past-dated content", - "default": false - }, - "exclude_future": { - "type": "boolean", - "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", - "x-multiline": true, - "format": "textarea" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Layout options for collection rendering", - "properties": { - "view": { - "type": "string", - "enum": ["card", "compact", "showcase", "citation", "list", "masonry", "article-grid", "date-title-summary", "slides-gallery"], - "description": "Display view type. 'card' shows full cards with images, 'compact' shows minimal list items, 'showcase' highlights featured content, 'citation' for academic publications, 'article-grid' for blog layouts.", - "default": "card" - }, - "columns": { - "type": "integer", - "description": "Number of columns when using grid-based views (1-4)", - "minimum": 1, - "maximum": 4, - "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 - } - } - ] - } - ] -} diff --git a/modules/blox/blox/contact-info/schema.json b/modules/blox/blox/contact-info/schema.json deleted file mode 100644 index ecf45b9f..00000000 --- a/modules/blox/blox/contact-info/schema.json +++ /dev/null @@ -1,250 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/contact-info.json", - "title": "Contact Info", - "description": "Displays lab contact details, map, social links, and an optional form", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "contact-info", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "description": "Content configuration for the contact info block", - "properties": { - "title": { - "type": "string", - "description": "Main section title", - "default": "Contact Us" - }, - "subtitle": { - "type": "string", - "description": "Section subtitle" - }, - "username": { - "type": "string", - "description": "Author username to pull fallback contact details from", - "default": "me" - }, - "visit_title": { - "type": "string", - "description": "Title for the visit section", - "default": "Visit Us" - }, - "connect_title": { - "type": "string", - "description": "Title for the connect section", - "default": "Connect" - }, - "text": { - "type": "string", - "description": "Connect section intro text" - }, - "address": { - "description": "Physical address information", - "oneOf": [ - { - "type": "string", - "description": "Single-line address" - }, - { - "type": "object", - "properties": { - "lines": { - "description": "Address lines", - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "string" - } - ] - } - }, - "additionalProperties": false - } - ] - }, - "office_hours": { - "description": "Office hours information", - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "string" - } - ] - }, - "email": { - "type": "string", - "description": "Contact email address", - "format": "email" - }, - "phone": { - "type": "string", - "description": "Contact phone number" - }, - "social": { - "description": "Social media links", - "oneOf": [ - { - "type": "string", - "description": "Single social link" - }, - { - "type": "array", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "icon": { - "type": "string", - "description": "Icon name (e.g., 'brands/x', 'brands/linkedin')" - }, - "url": { - "type": "string", - "description": "Social media URL" - }, - "link": { - "type": "string", - "description": "Alias for url" - }, - "label": { - "type": "string", - "description": "Tooltip label" - }, - "name": { - "type": "string", - "description": "Label alias" - } - }, - "anyOf": [ - { - "required": ["url"] - }, - { - "required": ["link"] - } - ], - "additionalProperties": false - } - ] - } - } - ] - }, - "prospective": { - "type": "object", - "description": "Information for prospective members", - "properties": { - "title": { - "type": "string", - "default": "Prospective Members" - }, - "text": { - "type": "string", - "description": "Short note for new collaborators or recruits", - "x-multiline": true, - "format": "textarea" - }, - "button": { - "type": "object", - "properties": { - "text": { - "type": "string", - "x-multiline": true, - "format": "textarea" - }, - "url": { - "type": "string" - } - }, - "required": ["text", "url"], - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "map_url": { - "type": "string", - "description": "URL to external map service" - }, - "map_embed": { - "type": "string", - "description": "HTML embed code for map (e.g., Google Maps iframe)", - "x-multiline": true, - "format": "textarea" - }, - "show_form": { - "type": "boolean", - "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\u2013Thu: 10:00\u201316: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" - } - } - ] - } - ] -} diff --git a/modules/blox/blox/cta-button-list/schema.json b/modules/blox/blox/cta-button-list/schema.json deleted file mode 100644 index f7055e53..00000000 --- a/modules/blox/blox/cta-button-list/schema.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/cta-button-list.json", - "title": "CTA Button List", - "description": "Renders stacked buttons with icons", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "cta-button-list", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "buttons": { - "type": "array", - "description": "Buttons to render", - "items": { - "type": "object", - "properties": { - "text": { - "type": "string", - "description": "Button label (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "label": { - "type": "string", - "description": "Alias for text" - }, - "name": { - "type": "string", - "description": "Alias for text" - }, - "url": { - "type": "string", - "description": "Button URL" - }, - "link": { - "type": "string", - "description": "Alias for url" - }, - "icon": { - "type": "string", - "description": "Optional leading icon (icon pack format: pack/icon-name)" - }, - "new_tab": { - "type": "boolean", - "description": "Open link in a new tab (auto-detected for external URLs and PDFs)", - "default": false - } - }, - "anyOf": [ - { - "required": ["text"] - }, - { - "required": ["label"] - }, - { - "required": ["name"] - }, - { - "required": ["url"] - }, - { - "required": ["link"] - } - ], - "additionalProperties": false - }, - "minItems": 1 - } - }, - "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" - } - ] - } - } - ] - } - ] -} diff --git a/modules/blox/blox/cta-card/schema.json b/modules/blox/blox/cta-card/schema.json deleted file mode 100644 index 59aeba83..00000000 --- a/modules/blox/blox/cta-card/schema.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/cta-card.json", - "title": "CTA Card", - "description": "Displays a prominent call-to-action card with title, text, and button", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "cta-card", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "description": "Content configuration for the CTA card block", - "properties": { - "title": { - "type": "string", - "description": "Card title (supports Markdown)" - }, - "text": { - "type": "string", - "description": "Card description text (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "button": { - "type": "object", - "description": "Call-to-action button", - "properties": { - "url": { - "type": "string", - "description": "Button URL (supports hash fragments, relative paths, and absolute URLs)" - }, - "text": { - "type": "string", - "description": "Button text", - "x-multiline": true, - "format": "textarea" - }, - "icon": { - "type": "string", - "description": "Optional button icon (icon pack format: pack/icon-name)" - }, - "new_tab": { - "type": "boolean", - "description": "Open the button link in a new tab", - "default": false - } - }, - "required": ["url", "text"], - "additionalProperties": false - } - }, - "required": ["title", "text", "button"], - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Card-specific styling options", - "properties": { - "card": { - "type": "object", - "properties": { - "css_class": { - "type": "string", - "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", - "enum": ["auto", "light", "dark"], - "description": "Text color mode for optimal contrast (auto detects based on background)", - "default": "auto" - }, - "overlay_opacity": { - "type": "number", - "minimum": 0, - "maximum": 1, - "description": "Glassmorphism overlay opacity for fine-tuning contrast", - "default": 0.15 - } - }, - "additionalProperties": false - } - }, - "additionalProperties": true - } - }, - "required": ["content"], - "additionalProperties": true, - "examples": [ - { - "block": "cta-card", - "design": { - "background": { - "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" - } - } - } - ] - } - ] -} diff --git a/modules/blox/blox/cta-image-paragraph/schema.json b/modules/blox/blox/cta-image-paragraph/schema.json deleted file mode 100644 index 51c8bf18..00000000 --- a/modules/blox/blox/cta-image-paragraph/schema.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/cta-image-paragraph.json", - "title": "CTA Image Paragraph", - "description": "Alternating media and copy with optional feature bullets and button", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "cta-image-paragraph", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "items": { - "type": "array", - "description": "CTA sections with media and supporting copy", - "items": { - "type": "object", - "properties": { - "title": { - "type": "string", - "description": "Heading for the CTA item" - }, - "text": { - "type": "string", - "description": "Supporting paragraph (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "image": { - "type": "string", - "description": "Image filename in assets/media/. Responsive images are generated automatically (400-1200px). GIFs are converted to webp.", - "examples": ["screenshots/product.png", "features/demo.jpg"] - }, - "feature_icon": { - "type": "string", - "description": "Icon used before each feature bullet", - "default": "check" - }, - "features": { - "type": "array", - "description": "Bullet list shown under the paragraph", - "items": { - "type": "string" - } - }, - "button": { - "type": "object", - "description": "Optional CTA button", - "properties": { - "text": { - "type": "string", - "x-multiline": true, - "format": "textarea" - }, - "url": { - "type": "string" - } - }, - "required": ["text", "url"], - "additionalProperties": false - } - }, - "required": ["title", "text", "image"], - "additionalProperties": false - }, - "minItems": 1 - } - }, - "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" - } - ] - } - } - ] - } - ] -} diff --git a/modules/blox/blox/dev-hero/schema.json b/modules/blox/blox/dev-hero/schema.json deleted file mode 100644 index 0570e715..00000000 --- a/modules/blox/blox/dev-hero/schema.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/dev-hero.json", - "title": "Dev Hero", - "description": "A developer-focused hero section with gradient effects", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "dev-hero", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "description": "Content configuration for the dev hero block", - "properties": { - "username": { - "type": "string", - "description": "Author username to pull data from (matches folder name in /authors/)", - "default": "me", - "examples": ["me", "admin"] - }, - "title": { - "type": "string", - "description": "Override name/title (falls back to author title)" - }, - "tagline": { - "type": "string", - "description": "Override role/tagline (falls back to author role)" - }, - "bio": { - "type": "string", - "description": "Override bio text (falls back to author bio)", - "x-multiline": true, - "format": "textarea" - }, - "greeting": { - "type": "string", - "description": "Small greeting text above the name", - "examples": ["Hi, I'm", "Hello, I'm", "Welcome"] - }, - "name_prefix": { - "type": "string", - "description": "Prefix before the name (styled differently)", - "examples": ["I'm", "Hey, I'm"] - }, - "show_status": { - "type": "boolean", - "description": "Show status emoji badge on avatar (uses author's status.icon from profile)", - "default": false - }, - "show_scroll_indicator": { - "type": "boolean", - "description": "Show scroll down indicator at bottom", - "default": false - }, - "scroll_target": { - "type": "string", - "description": "CSS selector for scroll indicator target", - "default": "#projects", - "examples": ["#projects", "#about", "#contact"] - }, - "links": { - "type": "array", - "description": "Override social links (falls back to author links)", - "items": { - "type": "object", - "properties": { - "icon": { - "type": "string", - "description": "Icon identifier", - "examples": ["brands/github", "brands/linkedin", "brands/x", "at-symbol"] - }, - "url": { - "type": "string", - "description": "Link URL" - }, - "label": { - "type": "string", - "description": "Link label/title" - } - }, - "required": ["icon", "url"] - } - }, - "cta_buttons": { - "type": "array", - "description": "Call-to-action buttons", - "items": { - "type": "object", - "properties": { - "text": { - "type": "string", - "description": "Button text", - "examples": ["View My Work", "Download Resume", "Contact Me"] - }, - "url": { - "type": "string", - "description": "Button URL", - "examples": ["#projects", "/resume.pdf", "#contact"] - }, - "icon": { - "type": "string", - "description": "Button icon (optional)", - "examples": ["arrow-down", "document-arrow-down", "envelope"] - } - }, - "required": ["text", "url"] - }, - "examples": [ - [ - { - "text": "View My Work", - "url": "#projects", - "icon": "arrow-down" - }, - { - "text": "Download Resume", - "url": "/resume.pdf", - "icon": "document-arrow-down" - } - ] - ] - }, - "typewriter": { - "type": "object", - "description": "Typewriter animation for cycling through roles/taglines", - "properties": { - "enable": { - "type": "boolean", - "description": "Enable typewriter effect", - "default": false - }, - "strings": { - "type": "array", - "description": "Array of strings to cycle through", - "items": { - "type": "string" - }, - "examples": [["Full-Stack Developer", "Open Source Contributor", "Tech Enthusiast"]] - }, - "prefix": { - "type": "string", - "description": "Static text before the animated part", - "examples": ["I'm a", "I build"] - }, - "type_speed": { - "type": "integer", - "description": "Typing speed in milliseconds per character", - "default": 80 - }, - "delete_speed": { - "type": "integer", - "description": "Delete speed in milliseconds per character", - "default": 50 - }, - "pause_time": { - "type": "integer", - "description": "Pause time in milliseconds before deleting", - "default": 2000 - } - } - } - }, - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Layout options for dev hero rendering", - "properties": { - "style": { - "type": "string", - "description": "Layout style", - "enum": ["centered", "split"], - "default": "centered" - }, - "avatar_shape": { - "type": "string", - "description": "Avatar shape", - "enum": ["circle", "rounded"], - "default": "circle" - }, - "animations": { - "type": "boolean", - "description": "Enable scroll and typewriter animations", - "default": false - } - }, - "additionalProperties": true - } - }, - "required": ["content"], - "additionalProperties": true, - "examples": [ - { - "block": "dev-hero", - "id": "hero", - "content": { - "username": "me", - "greeting": "Hi, I'm", - "show_status": true, - "show_scroll_indicator": true, - "cta_buttons": [ - { - "text": "View My Work", - "url": "#projects", - "icon": "arrow-down" - }, - { - "text": "Get In Touch", - "url": "#contact", - "icon": "envelope" - } - ] - }, - "design": { - "style": "centered", - "avatar_shape": "circle", - "background": { - "color": { - "dark": "#0a0a0f" - } - } - } - } - ] - } - ] -} diff --git a/modules/blox/blox/faq/schema.json b/modules/blox/blox/faq/schema.json deleted file mode 100644 index a14b696f..00000000 --- a/modules/blox/blox/faq/schema.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/faq.json", - "title": "FAQ", - "description": "Display frequently asked questions in an accordion format with optional CTA", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "faq", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "title": { - "type": "string", - "description": "Block title" - }, - "subtitle": { - "type": "string", - "description": "Block subtitle" - }, - "text": { - "type": "string", - "description": "Introductory text (Markdown supported)", - "x-multiline": true, - "format": "textarea" - }, - "items": { - "type": "array", - "description": "FAQ items", - "items": { - "type": "object", - "properties": { - "question": { - "type": "string", - "description": "The question" - }, - "title": { - "type": "string", - "description": "Alias for question" - }, - "answer": { - "type": "string", - "description": "The answer (Markdown supported)", - "x-multiline": true, - "format": "textarea" - }, - "text": { - "type": "string", - "description": "Alias for answer", - "x-multiline": true, - "format": "textarea" - } - }, - "anyOf": [ - { - "required": ["question", "answer"] - }, - { - "required": ["title", "text"] - }, - { - "required": ["question", "text"] - }, - { - "required": ["title", "answer"] - } - ], - "additionalProperties": false - }, - "minItems": 1 - }, - "button": { - "type": "object", - "description": "Call-to-action button", - "properties": { - "text": { - "type": "string", - "description": "Button text", - "x-multiline": true, - "format": "textarea" - }, - "url": { - "type": "string", - "description": "Button URL" - }, - "icon": { - "type": "string", - "description": "Button icon name" - } - }, - "required": ["text", "url"], - "additionalProperties": false - } - }, - "required": ["items"], - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Spacing overrides for the FAQ section", - "properties": { - "spacing": { - "type": "object", - "properties": { - "padding": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 4, - "maxItems": 4, - "description": "Padding [top, right, bottom, left]", - "default": ["20px", "0", "20px", "0"] - }, - "padding_sm": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 2, - "maxItems": 2, - "description": "Responsive padding for smaller screens [top, bottom]", - "default": ["3rem", "0"] - }, - "margin": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 4, - "maxItems": 4, - "description": "Margin [top, right, bottom, left]", - "default": ["0", "0", "0", "0"] - } - }, - "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"] - } - } - } - ] - } - ] -} diff --git a/modules/blox/blox/features/schema.json b/modules/blox/blox/features/schema.json deleted file mode 100644 index 4e020afe..00000000 --- a/modules/blox/blox/features/schema.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/features.json", - "title": "Features", - "description": "Displays a grid of features with icons, names, and descriptions", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "features", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "description": "Content configuration for the features block", - "properties": { - "title": { - "type": "string", - "description": "Section title (supports Markdown)" - }, - "text": { - "type": "string", - "description": "Section description (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "items": { - "type": "array", - "description": "Array of feature items", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Feature name/title (supports Markdown)" - }, - "description": { - "type": "string", - "description": "Feature description (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "icon": { - "type": "string", - "description": "Feature icon. Supports hero/ (Heroicons), brands/ (brand logos), devicon/ (dev tools), or custom packs. Format: 'pack/icon-name' or just 'icon-name' for hero.", - "examples": ["hero/swatch", "hero/puzzle-piece", "brands/github", "devicon/python"] - } - }, - "required": ["name", "description"], - "additionalProperties": false - }, - "minItems": 1 - } - }, - "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" - } - ] - } - } - ] - } - ] -} diff --git a/modules/blox/blox/hero/schema.json b/modules/blox/blox/hero/schema.json deleted file mode 100644 index b5a09704..00000000 --- a/modules/blox/blox/hero/schema.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/hero.json", - "title": "Hero", - "description": "Displays prominent hero sections with titles, text, and calls-to-action", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "hero", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "description": "Content configuration for the hero block", - "properties": { - "title": { - "type": "string", - "description": "Main hero title (supports Markdown)" - }, - "text": { - "type": "string", - "description": "Hero description text (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "announcement": { - "type": "object", - "description": "Optional announcement banner above the title", - "properties": { - "text": { - "type": "string", - "description": "Announcement text (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "link": { - "type": "object", - "description": "Optional announcement link", - "properties": { - "text": { - "type": "string", - "description": "Link text", - "x-multiline": true, - "format": "textarea" - }, - "url": { - "type": "string", - "description": "Link URL or page anchor" - } - }, - "required": ["text", "url"], - "additionalProperties": false - } - }, - "required": ["text"], - "additionalProperties": false - }, - "primary_action": { - "type": "object", - "description": "Primary call-to-action button", - "properties": { - "url": { - "type": "string", - "description": "Button URL or hash anchor" - }, - "text": { - "type": "string", - "description": "Button text (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "icon": { - "type": "string", - "description": "Optional button icon (icon pack format: pack/icon-name)" - } - }, - "required": ["url", "text"], - "additionalProperties": false - }, - "secondary_action": { - "type": "object", - "description": "Secondary call-to-action link", - "properties": { - "url": { - "type": "string", - "description": "Link URL or page anchor" - }, - "text": { - "type": "string", - "description": "Link text (supports Markdown)", - "x-multiline": true, - "format": "textarea" - } - }, - "required": ["url", "text"], - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Hero-specific design tweaks", - "properties": { - "no_padding": { - "type": "boolean", - "description": "Disable default vertical padding (py-32 sm:py-48 lg:py-56) applied by the hero layout", - "default": false - } - }, - "additionalProperties": true - } - }, - "required": ["content"], - "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/" - } - } - } - ] - } - ] -} diff --git a/modules/blox/blox/knowledge-categories/schema.json b/modules/blox/blox/knowledge-categories/schema.json deleted file mode 100644 index a90ea06f..00000000 --- a/modules/blox/blox/knowledge-categories/schema.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/knowledge-categories.json", - "title": "Knowledge Categories", - "description": "Lists taxonomy categories with counts and links", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "knowledge-categories", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "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)", - "minimum": 0 - }, - "link": { - "type": "string", - "description": "Override the category URL (defaults to taxonomy page)" - } - }, - "anyOf": [ - { - "required": ["category"] - }, - { - "required": ["title"] - } - ], - "additionalProperties": false - } - }, - "view_all": { - "type": "object", - "properties": { - "text": { - "type": "string", - "x-multiline": true, - "format": "textarea" - }, - "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/" - } - } - } - ] - } - ] -} diff --git a/modules/blox/blox/logos/schema.json b/modules/blox/blox/logos/schema.json deleted file mode 100644 index 4b3d7a8d..00000000 --- a/modules/blox/blox/logos/schema.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/logos.json", - "title": "Logos", - "description": "Showcases partner/customer logos in grid, carousel, or marquee layouts", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "logos", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "subtitle": { - "type": "string" - }, - "text": { - "type": "string", - "x-multiline": true, - "format": "textarea" - }, - "logos": { - "type": "array", - "description": "Explicit list of logos to render", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Partner/customer name (used for alt text)" - }, - "image": { - "type": "string", - "description": "Logo image filename in assets/media/" - }, - "description": { - "type": "string", - "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": "Folder in assets/media/ containing logo images (used when `logos` is not provided)" - }, - "cta": { - "type": "object", - "description": "Optional call-to-action button beneath the logos", - "properties": { - "url": { - "type": "string" - }, - "text": { - "type": "string", - "x-multiline": true, - "format": "textarea" - }, - "icon": { - "type": "string" - } - }, - "required": ["url", "text"], - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Display options for the logos block", - "properties": { - "display_mode": { - "type": "string", - "enum": ["grid", "carousel", "marquee"], - "description": "Layout style: 'grid' shows all logos statically, 'carousel' scrolls horizontally with pause-on-hover, 'marquee' provides continuous horizontal scroll", - "default": "grid" - }, - "show_pattern": { - "type": "boolean", - "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" - } - } - } - ] - } - ] -} diff --git a/modules/blox/blox/markdown/schema.json b/modules/blox/blox/markdown/schema.json deleted file mode 100644 index 22cf88c7..00000000 --- a/modules/blox/blox/markdown/schema.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/markdown.json", - "title": "Markdown", - "description": "Renders arbitrary Markdown content with an optional heading", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "markdown", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "title": { - "type": "string", - "description": "Section heading (supports Markdown)" - }, - "text": { - "type": "string", - "description": "Markdown body content", - "x-multiline": true, - "format": "textarea" - } - }, - "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." - } - } - ] - } - ] -} diff --git a/modules/blox/blox/portfolio/schema.json b/modules/blox/blox/portfolio/schema.json deleted file mode 100644 index 5fa2a3ae..00000000 --- a/modules/blox/blox/portfolio/schema.json +++ /dev/null @@ -1,210 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/portfolio.json", - "title": "Portfolio", - "description": "Displays filterable project cards with Alpine.js", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "portfolio", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "description": "Content configuration for the portfolio block", - "properties": { - "title": { - "type": "string", - "description": "Section title (supports Markdown)", - "examples": ["Featured Projects"] - }, - "subtitle": { - "type": "string", - "description": "Section subtitle (supports Markdown)", - "examples": ["Things I've built"] - }, - "count": { - "type": "integer", - "description": "Maximum number of projects to display when no filter buttons are used (0 means unlimited)", - "minimum": 0, - "default": 6 - }, - "sort_by": { - "type": "string", - "description": "Field to sort by", - "enum": ["Date", "date", "Title", "title", "Weight", "weight", "Lastmod", "lastmod"], - "default": "Date" - }, - "sort_ascending": { - "type": "boolean", - "description": "Sort in ascending order", - "default": false - }, - "filters": { - "type": "object", - "description": "Content filtering options", - "properties": { - "folders": { - "type": "array", - "description": "Content folders to query projects from", - "items": { - "type": "string" - }, - "default": ["projects"], - "examples": [["projects", "software"]] - } - }, - "additionalProperties": false - }, - "buttons": { - "type": "array", - "description": "Filter buttons configuration", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Button display text", - "examples": ["All", "Frontend", "Backend"] - }, - "tag": { - "type": "string", - "description": "Tag to filter by (* for all)", - "examples": ["*", "Frontend", "Full-Stack"] - } - }, - "required": ["name", "tag"] - }, - "default": [ - { - "name": "All", - "tag": "*" - } - ], - "examples": [ - [ - { - "name": "All", - "tag": "*" - }, - { - "name": "Full-Stack", - "tag": "Full-Stack" - }, - { - "name": "Frontend", - "tag": "Frontend" - }, - { - "name": "Backend", - "tag": "Backend" - } - ] - ] - }, - "default_button_index": { - "type": "integer", - "description": "Index of the default active filter button", - "minimum": 0, - "default": 0 - }, - "archive": { - "type": "object", - "description": "Archive link configuration", - "properties": { - "enable": { - "type": "boolean", - "description": "Show 'View All' link (defaults to true if more projects exist than displayed, set to false to explicitly hide)" - }, - "link": { - "type": "string", - "description": "Override archive URL (defaults to the first folder in filters.folders)", - "examples": ["/projects/", "/work/"] - }, - "text": { - "type": "string", - "description": "Override archive link text (uses i18n 'portfolio_view_all' by default)", - "examples": ["View All Projects", "See My Work", "Browse Portfolio"] - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Layout options for portfolio rendering", - "properties": { - "columns": { - "type": "integer", - "description": "Number of columns (2, 3, or 4)", - "default": 3, - "enum": [2, 3, 4], - "examples": [2, 3, 4] - }, - "fallback_icon": { - "type": "string", - "description": "Icon to display when no image is provided. Supports all Hugo Blox icon packs: hero (default), brands, devicon, emoji, or custom packs. Format: 'icon-name' or 'pack/icon-name'", - "default": "code-bracket", - "examples": ["code-bracket", "academic-cap", "beaker", "paint-brush", "brands/github", "devicon/python", "emoji/rocket"] - }, - "animations": { - "type": "boolean", - "description": "Enable staggered reveal and filter animations", - "default": true - } - }, - "additionalProperties": true - } - }, - "required": ["content"], - "additionalProperties": true, - "examples": [ - { - "block": "portfolio", - "id": "projects", - "content": { - "title": "Featured Projects", - "subtitle": "A selection of my recent work", - "count": 6, - "filters": { - "folders": ["projects"] - }, - "buttons": [ - { - "name": "All", - "tag": "*" - }, - { - "name": "Full-Stack", - "tag": "Full-Stack" - }, - { - "name": "Frontend", - "tag": "Frontend" - }, - { - "name": "Backend", - "tag": "Backend" - } - ], - "default_button_index": 0, - "archive": { - "enable": true, - "text": "View All Projects" - } - }, - "design": { - "columns": 3 - } - } - ] - } - ] -} diff --git a/modules/blox/blox/research-areas/schema.json b/modules/blox/blox/research-areas/schema.json deleted file mode 100644 index de95b43b..00000000 --- a/modules/blox/blox/research-areas/schema.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/research-areas.json", - "title": "Research Areas", - "description": "Highlights thematic areas with optional stats and CTAs", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "research-areas", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "subtitle": { - "type": "string" - }, - "text": { - "type": "string", - "x-multiline": true, - "format": "textarea" - }, - "items": { - "type": "array", - "description": "Research area cards", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Area title" - }, - "description": { - "type": "string", - "description": "Short summary" - }, - "gradient": { - "type": "string", - "description": "Tailwind gradient classes for the header", - "examples": ["from-primary-400 to-secondary-400"] - }, - "image": { - "type": "string", - "description": "Optional header image filename in assets/media/" - }, - "icon": { - "type": "string", - "description": "Optional icon displayed instead of an image" - }, - "status": { - "type": "string", - "description": "Status badge (e.g., active, emerging, planning)" - }, - "url": { - "type": "string", - "description": "Optional external/internal link for the area title" - }, - "topics": { - "type": "array", - "description": "Keywords or topics associated with the area", - "items": { - "type": "string" - } - }, - "team_size": { - "type": ["string", "number"], - "description": "Team size metric displayed in the footer" - }, - "publications": { - "type": ["string", "number"], - "description": "Publication count metric" - }, - "funding": { - "type": "string", - "description": "Funding metric/label" - }, - "cta": { - "type": "object", - "description": "Per-area call-to-action button", - "properties": { - "url": { - "type": "string" - }, - "text": { - "type": "string", - "x-multiline": true, - "format": "textarea" - } - }, - "required": ["url", "text"], - "additionalProperties": false - } - }, - "required": ["name", "description"], - "additionalProperties": false - }, - "minItems": 1 - }, - "cta": { - "type": "object", - "description": "Global call-to-action beneath the grid", - "properties": { - "url": { - "type": "string" - }, - "text": { - "type": "string", - "x-multiline": true, - "format": "textarea" - }, - "icon": { - "type": "string" - } - }, - "required": ["url", "text"], - "additionalProperties": false - } - }, - "required": ["items"], - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Layout option for research areas", - "properties": { - "layout": { - "type": "string", - "enum": ["cards", "hexagon", "timeline"], - "description": "Layout style: 'cards' shows rich detail cards with images/icons and metrics, 'hexagon' displays a visual swarm of octagonal shapes, 'timeline' presents areas in an alternating vertical timeline", - "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/" - } - } - } - ] - } - ] -} diff --git a/modules/blox/blox/resume-awards/schema.json b/modules/blox/blox/resume-awards/schema.json deleted file mode 100644 index 2611b742..00000000 --- a/modules/blox/blox/resume-awards/schema.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/resume-awards.json", - "title": "Resume Awards", - "description": "Renders awards/certifications from the referenced author profile", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "resume-awards", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "description": "Content configuration for the awards block", - "properties": { - "username": { - "type": "string", - "description": "Author username (references data/authors/{username}.yaml)", - "default": "me" - }, - "title": { - "type": "string", - "description": "Section title (supports Markdown)" - }, - "text": { - "type": "string", - "description": "Section description (supports Markdown)", - "x-multiline": true, - "format": "textarea" - } - }, - "additionalProperties": false - }, - "design": { - "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, - "$comment": "Award items in the author profile support: title, icon, url, awarder, date/date_start, summary, certificate_url." - } - }, - "required": ["content"], - "additionalProperties": true, - "examples": [ - { - "block": "resume-awards", - "content": { - "username": "me", - "title": "Awards", - "text": "Selected recognition and certifications." - }, - "design": { - "date_format": "January 2006" - } - } - ] - } - ] -} diff --git a/modules/blox/blox/resume-biography-3/schema.json b/modules/blox/blox/resume-biography-3/schema.json deleted file mode 100644 index 03a7a7a0..00000000 --- a/modules/blox/blox/resume-biography-3/schema.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/resume-biography-3.json", - "title": "Resume Biography 3", - "description": "Horizontal layout with banner, avatar, and profile details", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "resume-biography-3", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "username": { - "type": "string", - "description": "Author username (references data/authors/{username}.yaml)", - "default": "me" - }, - "text": { - "type": "string", - "description": "Biography text override (supports Markdown). Defaults to the author profile bio.", - "x-multiline": true, - "format": "textarea" - }, - "headings": { - "type": "object", - "description": "Optional custom headings for sections", - "properties": { - "about": { - "type": "string", - "description": "Heading for biography section (default: Professional Summary)" - }, - "education": { - "type": "string", - "description": "Heading for education section (default: i18n 'education')" - }, - "interests": { - "type": "string", - "description": "Heading for interests section (default: i18n 'interests')" - } - }, - "additionalProperties": false - }, - "button": { - "type": "object", - "description": "Optional call-to-action button", - "properties": { - "url": { - "type": "string", - "description": "Button URL" - }, - "text": { - "type": "string", - "description": "Button text", - "x-multiline": true, - "format": "textarea" - } - }, - "required": ["url", "text"], - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Presentation options for the biography layout", - "properties": { - "avatar": { - "type": "object", - "description": "Avatar styling options", - "properties": { - "size": { - "type": "string", - "enum": ["small", "medium", "large", "xl", "xxl"], - "description": "Avatar display size. Sizes: small (150px), medium (200px), large (320px), xl (400px), xxl (500px). Images are generated at 2x for retina displays.", - "default": "large" - }, - "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. Responsive sizing from xs (text-xl to text-3xl) up to xl (text-5xl to text-7xl).", - "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;" - } - } - } - ] - } - ] -} diff --git a/modules/blox/blox/resume-biography/schema.json b/modules/blox/blox/resume-biography/schema.json deleted file mode 100644 index b4bd50a6..00000000 --- a/modules/blox/blox/resume-biography/schema.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/resume-biography.json", - "title": "Resume Biography", - "description": "Renders author details with avatar, banner, bio, and social links", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "resume-biography", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "username": { - "type": "string", - "description": "Author username (references data/authors/{username}.yaml)", - "default": "me" - }, - "text": { - "type": "string", - "description": "Override biography text (Markdown); falls back to author profile bio when omitted", - "x-multiline": true, - "format": "textarea" - }, - "button": { - "type": "object", - "description": "Optional button beneath the bio", - "properties": { - "url": { - "type": "string" - }, - "text": { - "type": "string", - "x-multiline": true, - "format": "textarea" - } - }, - "required": ["url", "text"], - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Presentation options for the biography", - "properties": { - "avatar": { - "type": "object", - "properties": { - "size": { - "type": "string", - "enum": ["small", "medium", "large", "xl", "xxl"], - "description": "Avatar display size. Sizes: small (150px), medium (200px), large (320px), xl (400px), xxl (500px). Images are generated at 2x for retina displays.", - "default": "medium" - }, - "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;" - } - } - } - ] - } - ] -} diff --git a/modules/blox/blox/resume-experience/schema.json b/modules/blox/blox/resume-experience/schema.json deleted file mode 100644 index bc21f673..00000000 --- a/modules/blox/blox/resume-experience/schema.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/resume-experience.json", - "title": "Resume Experience", - "description": "Renders work history and education timelines from an author profile", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "resume-experience", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "username": { - "type": "string", - "description": "Author username (references data/authors/{username}.yaml)", - "default": "me" - }, - "text": { - "type": "string", - "description": "Optional lead-in copy above the timelines", - "x-multiline": true, - "format": "textarea" - } - }, - "additionalProperties": false - }, - "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": "Jan 2006", - "examples": ["Jan 2006", "January 2006", "2006"] - }, - "is_education_first": { - "type": "boolean", - "description": "Show education timeline before experience", - "default": false - } - }, - "additionalProperties": true - }, - "$comment": "Experience and education items in the author profile support: role/position, org/company_name, start/date_start, end/date_end, summary, icon, tags (array), and button (object with url, text, icon)." - }, - "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 - } - } - ] - } - ] -} diff --git a/modules/blox/blox/resume-languages/schema.json b/modules/blox/blox/resume-languages/schema.json deleted file mode 100644 index 921ea751..00000000 --- a/modules/blox/blox/resume-languages/schema.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/resume-languages.json", - "title": "Resume Languages", - "description": "Renders language proficiency from the author profile", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "resume-languages", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "username": { - "type": "string", - "description": "Author username (references data/authors/{username}.yaml)", - "default": "me" - }, - "title": { - "type": "string", - "description": "Section title (supports Markdown)" - }, - "text": { - "type": "string", - "description": "Section description (supports Markdown)", - "x-multiline": true, - "format": "textarea" - } - }, - "additionalProperties": false - }, - "$comment": "Language items in the author profile support: name (string), level (1-5 numeric or text like 'Native'), label (display label), percent (0-100 override). Numeric levels are converted to percentage (level * 20)." - }, - "required": ["content"], - "additionalProperties": true, - "examples": [ - { - "block": "resume-languages", - "content": { - "username": "me", - "title": "Languages", - "text": "Comfortable in English, French, and Mandarin." - } - } - ] - } - ] -} diff --git a/modules/blox/blox/resume-skills/schema.json b/modules/blox/blox/resume-skills/schema.json deleted file mode 100644 index c6cb5b4d..00000000 --- a/modules/blox/blox/resume-skills/schema.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/resume-skills.json", - "title": "Resume Skills", - "description": "Displays skills and proficiency pulled from an author profile", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "resume-skills", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "description": "Content configuration for the skills block", - "properties": { - "username": { - "type": "string", - "description": "Author username (references data/authors/{username}.yaml)", - "default": "me" - }, - "title": { - "type": "string", - "description": "Section title (supports Markdown)" - }, - "text": { - "type": "string", - "description": "Section description (supports Markdown)", - "x-multiline": true, - "format": "textarea" - } - }, - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Layout options for the skills grid", - "properties": { - "columns": { - "type": "integer", - "description": "Number of columns used to render skill groups (1-5). Responsive: 2 cols applies at md, 3 at lg, 4 at xl, 5 at 2xl.", - "default": 2, - "minimum": 1, - "maximum": 5, - "examples": [2, 3] - } - }, - "additionalProperties": true, - "$comment": "Skill groups in the author profile support: name, description, color (progress bar fill), color_border, items (array). Each item supports: label/name, description, icon, level (1-5 for progress bar)." - } - }, - "required": ["content"], - "additionalProperties": true, - "examples": [ - { - "block": "resume-skills", - "content": { - "username": "me", - "title": "Skills", - "text": "Tooling and languages I use most often." - }, - "design": { - "columns": 3 - } - } - ] - } - ] -} diff --git a/modules/blox/blox/search-hero/schema.json b/modules/blox/blox/search-hero/schema.json deleted file mode 100644 index 22cfddb4..00000000 --- a/modules/blox/blox/search-hero/schema.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/search-hero.json", - "title": "Search Hero", - "description": "A hero section with prominent search functionality and optional stats", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "search-hero", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "badge": { - "type": "object", - "description": "Optional badge displayed above the title", - "properties": { - "text": { - "type": "string", - "description": "Badge text", - "x-multiline": true, - "format": "textarea" - }, - "show_pulse": { - "type": "boolean", - "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. Clicking a suggestion opens the search modal with that text pre-filled.", - "items": { - "type": "string" - }, - "examples": [["Get started", "Deploy with Hugo Blox", "Tailwind customization"]] - }, - "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" - } - ] - } - } - ] - } - ] -} diff --git a/modules/blox/blox/shared/schemas/README.md b/modules/blox/blox/shared/schemas/README.md deleted file mode 100644 index e4ff756a..00000000 --- a/modules/blox/blox/shared/schemas/README.md +++ /dev/null @@ -1,138 +0,0 @@ -# Hugo Blox JSON Schemas - -This directory contains JSON schemas for all Hugo Blox blocks, providing IDE autocomplete, validation, and documentation. - -## Schema Organization - -``` -blox/ - shared/schemas/ - base-block.json # Common parameters for all blocks - sections.json # Schema for the sections array - landing-page.json # Complete landing page front matter schema - README.md # This file - hero/ - schema.json # Hero-specific parameters - features/ - schema.json # Features-specific parameters - ... # Each block has its own schema -``` - -## Usage in IDEs - -### VS Code - -Add to your workspace `.vscode/settings.json`: - -```json -{ - "yaml.schemas": { - "https://hugoblox.com/schemas/landing-page.json": ["content/_index.md", "content/**/index.md"], - "https://hugoblox.com/schemas/sections.json": ["sections"] - }, - "json.schemas": [ - { - "fileMatch": ["**/content/_index.md"], - "url": "https://hugoblox.com/schemas/landing-page.json" - } - ] -} -``` - -### Local Development - -Schemas are mounted to `/static/schemas/` and available at: - -- `https://your-site.com/schemas/landing-page.json` -- `https://your-site.com/schemas/sections.json` -- `https://your-site.com/schemas/blocks/hero.json` - -## Schema Features - -### Base Schema - -All blocks inherit from `base-block.json` which provides: - -- **Block identification**: `block` parameter (required) -- **Legacy support**: `blox` parameter (deprecated) -- **Section styling**: `id`, `demo` flags -- **Design options**: background, spacing, CSS customization -- **Layout options**: columns, view types, etc. - -### Block-Specific Schemas - -Each block extends the base schema with its specific parameters: - -```yaml -# Example: Hero block with full autocomplete support -sections: - - block: hero # โœ… Autocomplete available - content: - title: 'Welcome' # โœ… Validated parameter - text: 'Description' # โœ… Type-checked - primary_action: # โœ… Object structure enforced - url: '/contact' - text: 'Get Started' - icon: 'hero/arrow-right' - design: - background: # โœ… Inherited from base schema - color: 'navy' - text_color_light: true -``` - -### Validation Benefits - -- **Parameter validation**: Catch typos and invalid values -- **Required fields**: Ensure essential parameters are provided -- **Type safety**: String/number/boolean/array validation -- **Enum constraints**: Limited choice fields (e.g., avatar shapes) -- **Deprecation warnings**: Legacy parameter notifications - -## Schema Development - -### Adding New Blocks - -1. Create `blox/my-new-block/schema.json` -2. Extend `base-block.json` -3. Add to `sections.json` oneOf array -4. Document block-specific parameters - -### Schema Template - -```json -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/my-block.json", - "title": "My Block Schema", - "description": "Schema for my custom block", - "allOf": [ - {"$ref": "../shared/schemas/base-block.json"}, - { - "type": "object", - "properties": { - "block": {"const": "my-block"}, - "content": { - "type": "object", - "properties": { - "title": {"type": "string"} - } - } - } - } - ] -} -``` - -## Context-Aware Strategy - -Hugo Blox uses different terminology based on context: - -| Context | Term | Example | -| --------------------- | -------- | ---------------------- | -| **Developer Configs** | `block` | `block: hero` | -| **Source Structure** | `blox/` | `blox/hero/block.html` | -| **UI/Documentation** | "Blox" | "Hugo Blox blocks" | -| **URLs/SEO** | `blocks` | `/blocks/hero` | - -This provides optimal developer experience while maintaining brand identity. - diff --git a/modules/blox/blox/shared/schemas/base-block.json b/modules/blox/blox/shared/schemas/base-block.json deleted file mode 100644 index f2bd7043..00000000 --- a/modules/blox/blox/shared/schemas/base-block.json +++ /dev/null @@ -1,316 +0,0 @@ -{ - "$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 rendered via parse_block_v3.html", - "type": "object", - "properties": { - "block": { - "type": "string", - "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, - "examples": ["features"] - }, - "id": { - "type": "string", - "description": "Optional unique identifier for this section", - "examples": ["intro", "team"] - }, - "demo": { - "type": "boolean", - "description": "Whether this section should only appear in demo mode", - "default": false - }, - "design": { - "type": "object", - "description": "Design and styling options applied by the shared block wrapper", - "properties": { - "background": { - "type": "object", - "description": "Background styling options (colors, gradients, media, mesh)", - "properties": { - "color": { - "oneOf": [ - { - "type": "string", - "description": "Single color value", - "examples": ["primary-50", "#0b1021"] - }, - { - "type": "object", - "properties": { - "light": { - "type": "string", - "description": "Light mode color", - "examples": ["#ffffff"] - }, - "dark": { - "type": "string", - "description": "Dark mode color", - "examples": ["#0b1021"] - } - }, - "additionalProperties": false, - "examples": [ - { - "light": "#ffffff", - "dark": "#0b1021" - } - ] - } - ], - "description": "Background color (supports Tailwind tokens, hex, or rgb values)" - }, - "gradient": { - "type": "object", - "description": "Gradient configuration", - "properties": { - "start": { - "type": "string", - "description": "Gradient start color", - "examples": ["primary-500"] - }, - "end": { - "type": "string", - "description": "Gradient end color", - "examples": ["secondary-600"] - }, - "direction": { - "type": ["string", "number"], - "description": "Gradient direction in degrees", - "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": "Use light text color (for dark backgrounds)" - }, - "image": { - "type": "object", - "description": "Background image options", - "properties": { - "filename": { - "type": "string", - "description": "Image filename relative to assets/media/", - "examples": ["backgrounds/hero.jpg"] - }, - "size": { - "type": "string", - "enum": ["cover", "contain", "actual"], - "description": "Background image size behavior", - "default": "cover" - }, - "position": { - "type": "string", - "enum": ["left", "center", "right"], - "description": "Background image position", - "default": "center" - }, - "parallax": { - "type": "boolean", - "description": "Enable parallax effect on desktop", - "default": true - }, - "filters": { - "type": "object", - "properties": { - "brightness": { - "type": "number", - "description": "Image brightness filter (0-1, where 1 is normal)", - "minimum": 0, - "maximum": 1, - "examples": [0.65] - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "video": { - "type": "object", - "description": "Background video options", - "properties": { - "filename": { - "type": "string", - "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", - "description": "Spacing options", - "properties": { - "padding": { - "type": "array", - "description": "Padding values [top, right, bottom, left]", - "items": { - "type": "string" - }, - "minItems": 4, - "maxItems": 4, - "examples": [["4rem", "0", "4rem", "0"]] - } - }, - "additionalProperties": false - }, - "css_style": { - "type": "string", - "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", - "examples": ["relative overflow-hidden"] - } - } - } - }, - "required": ["block"], - "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;" - } - } - ] -} diff --git a/modules/blox/blox/shared/schemas/landing-page.json b/modules/blox/blox/shared/schemas/landing-page.json deleted file mode 100644 index 95adb70c..00000000 --- a/modules/blox/blox/shared/schemas/landing-page.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/landing-page.json", - "title": "Hugo Blox Landing Page Schema", - "description": "Schema for Hugo Blox landing page front matter", - "type": "object", - "properties": { - "title": { - "type": "string", - "description": "Page title" - }, - "summary": { - "type": "string", - "description": "Page summary/description" - }, - "date": { - "type": "string", - "format": "date-time", - "description": "Page publication date" - }, - "lastmod": { - "type": "string", - "format": "date-time", - "description": "Page last modified date" - }, - "draft": { - "type": "boolean", - "description": "Whether the page is a draft", - "default": false - }, - "featured": { - "type": "boolean", - "description": "Whether the page is featured", - "default": false - }, - "authors": { - "type": "array", - "description": "Page authors", - "items": { - "type": "string" - } - }, - "tags": { - "type": "array", - "description": "Page tags", - "items": { - "type": "string" - } - }, - "categories": { - "type": "array", - "description": "Page categories", - "items": { - "type": "string" - } - }, - "type": { - "const": "landing", - "description": "Page type (must be 'landing' for landing pages)" - }, - "sections": { - "$ref": "./sections.json", - "description": "Array of content blocks for the landing page" - }, - "design": { - "type": "object", - "description": "Global page design options", - "properties": { - "spacing": { - "type": "string", - "description": "Default section spacing" - } - } - }, - "header": { - "type": "object", - "description": "Page-specific header configuration", - "properties": { - "navbar": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "description": "Enable/disable navbar for this page" - }, - "block": { - "type": "string", - "description": "Header block to use (e.g., 'navbar', 'navbar-simple')" - }, - "blox": { - "type": "string", - "description": "Legacy header block parameter (deprecated, use 'block')", - "deprecated": true - } - } - } - } - } - }, - "required": ["type", "sections"], - "additionalProperties": true -} diff --git a/modules/blox/blox/shared/schemas/sections.json b/modules/blox/blox/shared/schemas/sections.json deleted file mode 100644 index 86d1d6cf..00000000 --- a/modules/blox/blox/shared/schemas/sections.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/sections.json", - "title": "Hugo Blox Sections Schema", - "description": "Schema for the sections array in Hugo Blox landing pages", - "type": "array", - "items": { - "oneOf": [ - { "$ref": "../hero/schema.json" }, - { "$ref": "../features/schema.json" }, - { "$ref": "../collection/schema.json" }, - { "$ref": "../markdown/schema.json" }, - { "$ref": "../stats/schema.json" }, - { "$ref": "../testimonials/schema.json" }, - { "$ref": "../cta-button-list/schema.json" }, - { "$ref": "../cta-card/schema.json" }, - { "$ref": "../cta-image-paragraph/schema.json" }, - { "$ref": "../resume-experience/schema.json" }, - { "$ref": "../resume-biography/schema.json" }, - { "$ref": "../resume-biography-3/schema.json" }, - { "$ref": "../resume-skills/schema.json" }, - { "$ref": "../resume-awards/schema.json" }, - { "$ref": "../resume-languages/schema.json" } - ] - } -} diff --git a/modules/blox/blox/stats/schema.json b/modules/blox/blox/stats/schema.json deleted file mode 100644 index cc01768a..00000000 --- a/modules/blox/blox/stats/schema.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/stats.json", - "title": "Stats", - "description": "Displays statistics in cards, compact rows, or a minimal grid", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "stats", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "description": "Content configuration for the stats block", - "properties": { - "title": { - "type": "string", - "description": "Section title (supports Markdown)" - }, - "text": { - "type": "string", - "description": "Section description (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "items": { - "type": "array", - "description": "Array of statistics to display", - "items": { - "type": "object", - "properties": { - "statistic": { - "type": ["string", "number"], - "description": "The statistic value/number. Can include formatting like '120+', '5M', or '$3.2M'. Animated counter extracts numeric portion.", - "examples": ["120+", "5M", "$3.2M", 42, 3.2] - }, - "description": { - "type": "string", - "description": "Description of the statistic (supports Markdown)" - }, - "icon": { - "type": "string", - "description": "Icon identifier (e.g., 'hero/chart-bar', 'hero/user-group')" - }, - "sub_metric": { - "type": "string", - "description": "Additional context or sub-metric (supports Markdown)" - } - }, - "required": ["statistic", "description"], - "additionalProperties": false - }, - "minItems": 1 - } - }, - "required": ["items"], - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Design options for the stats block", - "properties": { - "layout": { - "type": "string", - "enum": ["cards", "compact", "minimal"], - "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" - } - } - ] - } - ] -} diff --git a/modules/blox/blox/team-showcase/schema.json b/modules/blox/blox/team-showcase/schema.json deleted file mode 100644 index caddd112..00000000 --- a/modules/blox/blox/team-showcase/schema.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/team-showcase.json", - "title": "Team Showcase", - "description": "Displays team members grouped by author taxonomy", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "team-showcase", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "description": "Content configuration for the team showcase block", - "properties": { - "title": { - "type": "string", - "description": "Section title (supports Markdown)" - }, - "subtitle": { - "type": "string", - "description": "Section subtitle (supports Markdown)" - }, - "text": { - "type": "string", - "description": "Section description (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "user_groups": { - "type": "array", - "description": "Filter to authors that belong to these user groups (defaults to all authors). Accepts strings or objects { name, sort_by?, sort_ascending? } for per-group sorting.", - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "sort_by": { - "type": "string", - "description": "Per-group override of sort field" - }, - "sort_ascending": { - "type": "boolean", - "description": "Per-group override of sort direction" - } - }, - "required": ["name"], - "additionalProperties": false - } - ] - }, - "examples": [ - ["Principal Investigators", "PhD Students"], - [ - { - "name": "Alumni", - "sort_by": "graduation_year", - "sort_ascending": false - }, - "Research Engineers" - ] - ] - }, - "sort_by": { - "type": "string", - "description": "Field to sort authors by. Common values: 'name_family' (last name), 'weight', 'graduation_year'. The legacy 'Params.' prefix is optional for compatibility.", - "enum": ["name_family", "name.family", "family", "last_name", "family_name", "weight", "graduation_year", "title"], - "default": "name_family" - }, - "sort_ascending": { - "type": "boolean", - "description": "Sort direction (true for ascending, false for descending)", - "default": true - }, - "cta": { - "type": "object", - "description": "Optional call-to-action displayed beneath the grid", - "properties": { - "text": { - "type": "string", - "description": "Button text", - "x-multiline": true, - "format": "textarea" - }, - "url": { - "type": "string", - "description": "Button URL (can be relative or absolute)" - }, - "icon": { - "type": "string", - "description": "Optional icon name (e.g., 'hero/user-plus')" - } - }, - "required": ["text", "url"], - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Display toggles for the team showcase", - "properties": { - "show_role": { - "type": "boolean", - "description": "Show the role from each author profile", - "default": true - }, - "show_organizations": { - "type": "boolean", - "description": "Display the first organization/affiliation per profile", - "default": true - }, - "show_interests": { - "type": "boolean", - "description": "Display interests per profile (capped by max_interests)", - "default": false - }, - "show_social": { - "type": "boolean", - "description": "Show social media icons pulled from the author profile links", - "default": true - }, - "max_interests": { - "type": "integer", - "description": "Maximum number of interests to display per profile (0 hides interests; default 3)", - "default": 3, - "minimum": 0 - }, - "align": { - "type": "string", - "description": "Align the section header and CTA", - "enum": ["center", "left"], - "default": "center" - }, - "max_columns": { - "type": "integer", - "description": "Maximum number of columns on wide screens (2-4)", - "enum": [2, 3, 4], - "default": 4 - }, - "show_empty_groups": { - "type": "boolean", - "description": "If true, show an empty-state message for groups with no matching authors", - "default": false - } - }, - "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", - "Research Engineers", - { - "name": "Alumni", - "sort_by": "graduation_year", - "sort_ascending": false - } - ], - "sort_by": "name_family", - "sort_ascending": true, - "cta": { - "text": "Join us", - "url": "/apply", - "icon": "hero/user-plus" - } - }, - "design": { - "show_role": true, - "show_organizations": true, - "show_interests": true, - "max_interests": 3, - "show_social": true, - "align": "left", - "max_columns": 3, - "show_empty_groups": false - } - } - ] - } - ] -} diff --git a/modules/blox/blox/tech-stack/schema.json b/modules/blox/blox/tech-stack/schema.json deleted file mode 100644 index 27224c20..00000000 --- a/modules/blox/blox/tech-stack/schema.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/tech-stack.json", - "title": "Tech Stack", - "description": "Displays technologies with icons organized by category", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "tech-stack", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "description": "Content configuration for the tech stack block", - "properties": { - "title": { - "type": "string", - "description": "Section title (supports Markdown)", - "examples": ["Tech Stack", "Skills & Technologies"] - }, - "subtitle": { - "type": "string", - "description": "Section subtitle (supports Markdown)", - "examples": ["Technologies I work with daily"] - }, - "categories": { - "type": "array", - "description": "Categories of technologies", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Category name", - "examples": ["Languages", "Frontend", "Backend", "DevOps"] - }, - "items": { - "type": "array", - "description": "Technologies in this category", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Technology name", - "examples": ["TypeScript", "React", "Node.js"] - }, - "icon": { - "type": "string", - "description": "Icon identifier (supports devicon/, brands/, or hero icons)", - "examples": ["devicon/typescript", "devicon/react", "brands/github"] - }, - "level": { - "type": "string", - "description": "Proficiency level (optional)", - "enum": ["expert", "advanced", "intermediate", "beginner"], - "examples": ["expert", "advanced"] - } - }, - "required": ["name"] - } - } - }, - "required": ["items"] - }, - "examples": [ - [ - { - "name": "Languages", - "items": [ - { - "name": "TypeScript", - "icon": "devicon/typescript", - "level": "expert" - }, - { - "name": "Python", - "icon": "devicon/python", - "level": "advanced" - } - ] - } - ] - ] - } - }, - "required": ["categories"], - "additionalProperties": false - }, - "design": { - "type": "object", - "description": "Layout options for tech stack rendering", - "properties": { - "style": { - "type": "string", - "description": "Display style", - "enum": ["grid", "list"], - "default": "grid" - }, - "show_levels": { - "type": "boolean", - "description": "Show proficiency level indicators", - "default": false - }, - "animations": { - "type": "boolean", - "description": "Enable hover and stagger animations", - "default": true - } - }, - "additionalProperties": true - } - }, - "required": ["content"], - "additionalProperties": true, - "examples": [ - { - "block": "tech-stack", - "id": "skills", - "content": { - "title": "Tech Stack", - "subtitle": "Technologies I use to build things", - "categories": [ - { - "name": "Languages", - "items": [ - { - "name": "TypeScript", - "icon": "devicon/typescript", - "level": "expert" - }, - { - "name": "Python", - "icon": "devicon/python", - "level": "advanced" - }, - { - "name": "Go", - "icon": "devicon/go", - "level": "intermediate" - } - ] - }, - { - "name": "Frontend", - "items": [ - { - "name": "React", - "icon": "devicon/react" - }, - { - "name": "Next.js", - "icon": "devicon/nextjs" - }, - { - "name": "Tailwind CSS", - "icon": "devicon/tailwindcss" - } - ] - } - ] - }, - "design": { - "style": "grid", - "show_levels": true - } - } - ] - } - ] -} diff --git a/modules/blox/blox/testimonials/schema.json b/modules/blox/blox/testimonials/schema.json deleted file mode 100644 index f0a4941c..00000000 --- a/modules/blox/blox/testimonials/schema.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/testimonials.json", - "title": "Testimonials", - "description": "Displays quotes with avatars, names, and roles", - "allOf": [ - { - "$ref": "../shared/schemas/base-block.json" - }, - { - "type": "object", - "properties": { - "block": { - "const": "testimonials", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "title": { - "type": "string", - "description": "Section title (supports Markdown)" - }, - "text": { - "type": "string", - "description": "Section description (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "items": { - "type": "array", - "description": "Testimonial entries", - "items": { - "type": "object", - "properties": { - "text": { - "type": "string", - "description": "Quoted testimonial text (supports Markdown)", - "x-multiline": true, - "format": "textarea" - }, - "name": { - "type": "string", - "description": "Person's name" - }, - "role": { - "type": "string", - "description": "Role or organization" - }, - "image": { - "type": "string", - "description": "Avatar filename in assets/media/. Image is processed to 96x96 (displayed at 48x48 for retina).", - "examples": ["people/casey.jpg", "testimonials/avatar.png"] - } - }, - "required": ["text", "name"], - "additionalProperties": false - }, - "minItems": 1 - } - }, - "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": "\u201cHugo Blox let us ship a research microsite in days instead of weeks.\u201d", - "name": "Dr. Casey Smith", - "role": "Research Lead, OpenAI", - "image": "people/casey.jpg" - }, - { - "text": "\u201cGreat developer experience and first-class docs. Our students love it.\u201d", - "name": "Prof. Lee Nguyen", - "role": "MIT CSAIL", - "image": "people/lee.png" - } - ] - } - } - ] - } - ] -} diff --git a/modules/blox/blox/trending-questions/schema.json b/modules/blox/blox/trending-questions/schema.json deleted file mode 100644 index bc03835a..00000000 --- a/modules/blox/blox/trending-questions/schema.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://hugoblox.com/schemas/blocks/trending-questions.json", - "title": "Trending Questions", - "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": { - "block": { - "const": "trending-questions", - "description": "Block type identifier" - }, - "content": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "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", - "x-multiline": true, - "format": "textarea" - }, - "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", - "x-multiline": true, - "format": "textarea" - }, - "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": "\ud83d\udd25 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/" - } - } - } - ] - } - ] -}