docs: edit

This commit is contained in:
George Cushen committed 2026-01-10 23:58:12 +00:00
1 parent 96aa04356e
commit 1352d89867
34 files changed
+161 -4302

No files matched your search

+7 -5
View File
@@ -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
+1 -1
View File
@@ -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
+150 -80
View File
@@ -1,157 +1,227 @@
[**中文**](./README.zh.md)
<p align="center">
<a href="https://hugoblox.com/start?utm_source=github&utm_medium=readme">
<a href="https://hugoblox.com/start?utm_source=github&utm_medium=readme&utm_content=hero_image">
<img src="./.github/media/hero.png" alt="Build world-class sites with HugoBlox" width="100%">
</a>
</p>
<h1 align="center">HugoBlox: Your Open Research Copilot</h1>
<h1 align="center">HugoBlox: Your Open Publishing Stack</h1>
<p align="center">
<strong>Build a "Future-Proof" Brand in the AI Era.</strong><br/>
The choice of rockstar researchers and founders at <strong>Meta, Stanford, NVIDIA, and Y Combinator</strong>.
<strong>Publish notebooks, docs, portfolios, and knowledge bases from Markdown + Jupyter.</strong><br/>
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).
</p>
<p align="center">
<a href="https://hugoblox.com/start?utm_source=github&utm_medium=readme"><b>🚀 Launch Copilot (Free)</b></a>
<a href="https://hugoblox.com/start?utm_source=github&utm_medium=readme&utm_content=cta_start"><b>Start Free in Browser</b></a>
&nbsp;•&nbsp;
<a href="https://hugoblox.com/pro?utm_source=github&utm_medium=readme">Go Pro</a>
<a href="https://marketplace.visualstudio.com/items?itemName=lore.lore-studio"><b>Get Lore Studio (VS Code)</b></a>
</p>
<p align="center">
<a href="https://discord.gg/z8wNYzb">
<img src="https://img.shields.io/discord/722225264733716590?label=Join%20Discord&style=social" alt="Discord">
</a>
<a href="https://github.com/HugoBlox/kit">
<img src="https://img.shields.io/github/stars/HugoBlox/kit?label=Star%20Hugo%20Blox&style=social" alt="GitHub Stars">
</a>
<a href="https://x.com/LoreLabs_">
<img src="https://img.shields.io/twitter/follow/LoreLabs_?label=Follow&style=social" alt="Follow on X">
</a>
<sub>
<a href="#for-researchers--labs">Researchers & Labs</a>
&nbsp;•&nbsp;
<a href="#for-data-scientists--ai-engineers">Data Scientists & AI Engineers</a>
&nbsp;•&nbsp;
<a href="#for-teams--orgs">Teams & Orgs</a>
&nbsp;•&nbsp;
<a href="#-pricing--features-open-core">Pricing</a>
</sub>
</p>
<div align="center">
[![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)
</div>
<p align="center">
<sub>
Trusted since <strong>2016</strong> · <strong>150,000+</strong> researchers and scientists (Meta, Stanford, NVIDIA) · Rated <strong>4.9/5</strong> by users (official survey) · Used by teams like <a href="https://research.nvidia.com/research-labs">NVIDIA Research Labs</a>, <a href="https://cai4cai.ml/">King’s College London</a>, and <a href="https://www.metaconscious.org/">MIT</a> · Featured by GitHub <a href="https://github.blog/open-source/release-radar-february-2019/#hugo-academic-4-0">Release Radar</a>
</sub>
</p>
---
## 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.
<p align="center">
<a href="https://marketplace.visualstudio.com/items?itemName=lore.lore-studio"><b>📥 Download Lore Studio Now (Free)</b></a>
<img src="./.github/media/studio/slide-1.webp" alt="Lore Studio in Action" width="100%">
</p>
<p align="center"><em>Lore Studio: Visual editing meets code-first control.</em></p>
---
## 🛠️ 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. |
<p align="center">
<img src="./.github/media/templates.webp" alt="Template previews" width="900">
</p>
<p align="center">
<a href="https://hugoblox.com/templates?utm_source=github&utm_medium=readme"><b>Browse Templates →</b></a>
<a href="https://hugoblox.com/templates?utm_source=github&utm_medium=readme&utm_content=templates"><b>Browse Templates →</b></a>
</p>
<p align="center">
<sub>Want to see it working fast? Pick a template and publish in ~60 seconds with the Online Copilot.</sub><br/>
<a href="https://hugoblox.com/start?utm_source=github&utm_medium=readme&utm_content=cta_template_start"><b>Try a template now →</b></a>
</p>
---
## 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) &nbsp;•&nbsp; [**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×**."
> <br/>— **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%."
> <br/>— **Alexandre Rodrigues**, Founder
---
## Support the Project
## 🏢 Org-ready (without the enterprise bloat)
- 💎 **Pro (only $8/m)** — Unlock Studio, premium templates, and all updates.
<br/>[**Go Pro →**](https://hugoblox.com/pro?utm_source=github&utm_medium=readme)
- ☕️ **Donate a Coffee** — Fuel open source and research.
<br/>[**Sponsor on GitHub →**](https://github.com/sponsors/gcushen)
- 🤝 **Corporate Sponsors** — Reach thousands. Get your logo here.
<br/>[**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).
<p align="center">
<sub>No tracking. No lock-in. Your content stays yours.</sub>
<sub>Lore™ is a trademark of Lore Labs.</sub>
</p>
+3 -2
View File
@@ -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).
<p align="center">
<sub>无追踪。无锁定。您的内容始终属于您。</sub>
<sub>Lore™ is a trademark of Lore Labs.</sub>
</p>
-232
View File
@@ -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
}
}
]
}
]
}
-250
View File
@@ -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"
}
}
]
}
]
}
@@ -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"
}
]
}
}
]
}
]
}
-130
View File
@@ -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"
}
}
}
]
}
]
}
@@ -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"
}
]
}
}
]
}
]
}
-233
View File
@@ -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"
}
}
}
}
]
}
]
}
-183
View File
@@ -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"]
}
}
}
]
}
]
}
-93
View File
@@ -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"
}
]
}
}
]
}
]
}
-159
View File
@@ -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/"
}
}
}
]
}
]
}
@@ -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/"
}
}
}
]
}
]
}
-144
View File
@@ -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"
}
}
}
]
}
]
}
-48
View File
@@ -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."
}
}
]
}
]
}
-210
View File
@@ -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
}
}
]
}
]
}
@@ -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/"
}
}
}
]
}
]
}
@@ -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"
}
}
]
}
]
}
@@ -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;"
}
}
}
]
}
]
}
@@ -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;"
}
}
}
]
}
]
}
@@ -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
}
}
]
}
]
}
@@ -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."
}
}
]
}
]
}
@@ -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
}
}
]
}
]
}
-123
View File
@@ -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"
}
]
}
}
]
}
]
}
-138
View File
@@ -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.
@@ -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;"
}
}
]
}
@@ -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
}
@@ -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" }
]
}
}
-110
View File
@@ -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"
}
}
]
}
]
}
-202
View File
@@ -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
}
}
]
}
]
}
-176
View File
@@ -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
}
}
]
}
]
}
@@ -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"
}
]
}
}
]
}
]
}
@@ -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/"
}
}
}
]
}
]
}