Commit Graph
1998 Commits
Author SHA1 Message Date
George Cushen 74ed4ecc15 refactor(ci): consolidate build workflows and add Hugo version guards
This commit overhauls the CI build process to improve robustness, prevent version drift, and provide better compatibility testing.

The `ci-build-test-site.yml` workflow has been removed and its responsibilities have been merged into the `ci-build-starters-matrix.yml` workflow. This consolidation provides a single source of truth for all build logic.

Three new jobs have been added to the matrix to act as version guards:

1.  **smoke-test-min:** Builds the `test/` site using the minimum Hugo version declared in the framework's `hugo.yaml`. This ensures we do not accidentally introduce features that break our minimum supported version.

2.  **smoke-test-latest:** Builds the `test/` site using the latest available Hugo version. This job is allowed to fail and acts as a canary to provide early warning of breaking changes in new Hugo releases.

3.  **canary-academic-latest:** Builds the `academic-cv` starter with the latest Hugo version. As one of our most popular starters, this provides a more realistic canary for issues that new users might encounter.
2025-10-07 00:29:09 +01:00
George Cushen f5452a5491 ci: fix Welcome action 2025-10-07 00:29:09 +01:00
Steve Jobz bc5bf3c748 fix(commenting): incorrect path to comments plugin (#3271) 2025-10-06 23:57:36 +01:00
dependabot[bot] aa95877e92 ci(deps): bump symplify/monorepo-split-github-action from 2.3.0 to 2.4.0 (#3269)
Bumps [symplify/monorepo-split-github-action](https://github.com/symplify/monorepo-split-github-action) from 2.3.0 to 2.4.0.
- [Release notes](https://github.com/symplify/monorepo-split-github-action/releases)
- [Commits](https://github.com/symplify/monorepo-split-github-action/compare/v2.3.0...v2.4.0)

---
updated-dependencies:
- dependency-name: symplify/monorepo-split-github-action
  dependency-version: 2.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-30 21:55:02 +01:00
George Cushen 1f5693fb66 ci: fetch actual starter hb version 2025-09-27 17:35:23 +01:00
github-actions[bot] 4379d9caa3 chore(starters): update modules to latest commits 2025-09-25 20:53:23 +00:00
George Cushen e9b31f8090 refactor(preact): switch from vendored globals to bundled node_modules approach
- Add preact dependency to all 6 starter package.json files for proper js.Build resolution
- Use automatic JSX runtime (JSX: "automatic", JSXImportSource: "preact") in libraries.html
- Restore proper ES module imports in hero/client.jsx and Icon.jsx components
- Remove vendored preact script loading since preact is now bundled via js.Build
- Fixes CI build failures with "Could not resolve preact/jsx-runtime" errors
- Provides cleaner, more standard JS tooling for users extending with custom components

BREAKING CHANGE: Starters now require `preact` in `package.json`to resolve preact dependency before hugo build
2025-09-25 21:51:54 +01:00
George Cushen c843d01cf8 fix(ci): use classic JSX + global Preact to fix js.Build resolution
landing-page starter, which uses preact blocks, was only working only in monorepo due to Preact installed in root package.json but not starter package.json.

- Switch js.Build to classic JSX with global factory in `modules/blox-tailwind/layouts/_partials/libraries.html` (JSX=transform, JSXFactory=preact.h, JSXFragment=preact.Fragment)
- Update `modules/blox-tailwind/blox/hero/client.jsx` to call `preact.render` and remove `preact` import
- Remove `preact` import from `modules/blox-tailwind/blox/shared/js/components/Icon.jsx` (classic JSX uses global `preact.h`)
- Keep vendored `assets/dist/lib/preact/preact.min.js` and load it only when `needs_preact` is set
- Fixes CI error “Could not resolve preact/jsx-runtime” without requiring `preact` in each starter
2025-09-25 21:51:54 +01:00
github-actions[bot] 29375a9c39 chore(starters): update modules to latest commits 2025-09-25 01:01:04 +00:00
George Cushen 787ac94b5d feat: add Dev HUD & 15 Obsidian callouts; more collection filters
Dev tools
- Add HBX Dev HUD (floating button + panel) with live log viewer
- Add get-build-id helper to dedupe logs per build (during `hugo server` refreshes)

Callouts
- Implement Obsidian-compatible callouts (15+ types) with shared renderer
- Add i18n title translations (en, es, fr) for all callout types
- Deprecate `callout` shortcode with suppressible warning; keep working
- Migrate starters to Markdown callouts (>[!TYPE]) and update docs

Logging
- Centralize logging in partial `functions/logger` with info/warn/error levels
- Use fmt.Warnidf for suppressible warnings (consistent IDs)
- Only show info in Dev HUD/JSON (no longer use warnf for info logging); warn/error still printed in CLI
- Include source metadata and build ID on each entry

Blocks – Collection
- Add support for `content.filters.kinds`
- Add `content.filters.tags` (array) alongside existing `filters.tag` (string)

Build/Tailwind/JS
- Fix missing Tailwind v4 styles in Hugo render: include preact-built assets, extract classes from JSX/TSX to `@sources`
- Load Preact client per block, publish source maps in dev; on-demand Alpine

CI
- Re-implement fast fails with panicOnWarning now that info logging as warnf removed
- Fix package splitter change detection: strip trailing slashes; collapse paths to starter roots

Starters/Docs
- Restructure courses under `courses/hugo-blox/`
- Update menus and landing pages
- Replace deprecated callout usage in content and docs
- Replace missing hero icon `download` with `arrow-down-tray` in academic-cv guide

Icons
- Improve icon resolver: default pack inference, better fallback, and precise missing-icon warnings (with page ref)
2025-09-25 01:58:32 +01:00
George Cushen 96f96636fc ci: fix 2025-09-23 00:57:06 +01:00
George Cushen 7ae938d4c5 docs: update X link 2025-09-23 00:50:02 +01:00
github-actions[bot] 2f497b3a22 chore(starters): bump modules and Hugo 2025-09-22 23:35:26 +00:00
github-actions[bot] 6b1632ae78 chore(blox-tailwind): prepare v0.8.0 2025-09-22 23:35:25 +00:00
George Cushen 9146d36f1c ci: fix 2025-09-23 00:33:04 +01:00
George Cushen 171f8f4ade fix: logger 2025-09-23 00:28:52 +01:00
George Cushen 1412d517b6 feat: Add GitHub/Obsidian-style Markdown callout support
Implements Hugo's new blockquote render hooks (v0.132.0+) to support standard
Markdown alert syntax, improving content portability across platforms.

Features:
- 5 alert types: note, tip, important, warning, caution
- Custom titles with `> [!TYPE]+ Custom Title` syntax
- Multilingual support (EN, ES, FR, DE, ZH) with `callout_*` i18n keys
- Shared renderer for both shortcodes and render hooks
- Backward compatibility with deprecated `{{< callout >}}` shortcode

Example usage:
```markdown
> [!NOTE]
> This is a note callout with important information.

> [!WARNING]+ Custom Warning Title
> This warning has a custom title instead of just "Warning".

> [!TIP]
> Here's a helpful tip for better workflow!
```

Breaking changes: None (backward compatible)
Deprecation: `{{< callout >}}` shortcode now shows warning, use standard syntax

Configuration required (already applied to all sites by default):
```yaml
markup:
  goldmark:
    parser:
      attribute:
        block: true
```
2025-09-23 00:21:53 +01:00
George Cushen b8ab618087 feat: standardize content type names and URL structure
- Convert singular to plural: project→projects, publication→publications, event→events
- Rename: post→blog, teaching→courses (with "blog" being the justified exception to plural rule)
- Update i18n translations (en, zh, zh-Hant, de, nl, fr, es, pt)
- Fix template references to use new content type names
- Update section IDs to maintain compatibility with menu references
- Fix debug template to better handle variable log structures

This change provides a more intuitive content structure with URL paths that match
common expectations, following standard practices where collection types use plural
names (with blog as the standard exception).
2025-09-22 23:47:38 +01:00
George Cushen 220330d872 refactor: implement multi-tier logging and drop panicOnWarning
- Centralize logger: warnf/errorf for normal pages; HTML comments for adapters
- Add dev console logs and export structured logs to /hbx-debug.json
- Remove --panicOnWarning from dev scripts; builds no longer fail on warnings
- Fix prior lint/format issues across scripts and templates
2025-09-22 22:48:26 +01:00
dependabot[bot] 0fc34ba8c8 ci(deps): bump tj-actions/changed-files from 44 to 47 (#3265)
Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 44 to 47.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](https://github.com/tj-actions/changed-files/compare/v44...v47)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-version: '47'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-22 22:18:51 +01:00
dependabot[bot] afa66f5756 ci(deps): bump actions/labeler from 5 to 6 (#3264)
Bumps [actions/labeler](https://github.com/actions/labeler) from 5 to 6.
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](https://github.com/actions/labeler/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/labeler
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-22 22:18:34 +01:00
dependabot[bot] 6f20917a6b ci(deps): bump actions/setup-node from 4 to 5 (#3263)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 5.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-22 22:18:23 +01:00
George Cushen a2aaa838c0 feat(preact+landing): enable Preact block rendering + reusable landing page content system
## Preact Block Integration
- Enable Preact component detection for data-driven pages:
  - Fix init.html to resolve sections_source + per-section ref before Preact detection
  - Correct resource paths: blox/* → js/hbx/blocks/* (Hugo module mounts)
  - Update libraries.html to load Preact core + compiled block scripts
- Add dynamic icon rendering for Preact components:
  - Create Icon.jsx component with SVG decoding
  - Add get_icon_data.html partial for passing icon strings to Preact props
  - Update preact-wrapper.html to fetch icon data and inject into props
  - Wire hero component to render dynamic icons via <Icon svg={icon_svg} />
- Centralized logging system:
  - Add functions/logger.html to wrap warnf/errorf safely
  - Degrade to HTML comments in constrained contexts (content adapters)

## Reusable Landing Page Content System
- Add sections_source support:
  - Page front matter: sections_source: pages/<key> loads base from data/pages/<key>.yaml
  - Inline sections deep-merge over base by position; extras appended
- Add per-section ref system:
  - Any section: ref: blocks/<slug> loads from data/blocks/<slug>.yaml
  - Inline section properties deep-merge over ref (content/design submaps)
  - Enable content reuse across multiple landing pages
- Create reusable block library:
  - Add test/data/blocks/: hero_basic.yaml, features_basic.yaml
  - Add test/content/linked/index.md demo using refs with overrides
- Add pragmatic deep merge for content/design override handling

## Infrastructure & Schemas
- Update base-block.json schema:
  - Fix gradient structure: flat → nested (gradient.start/end/direction)
  - Fix color structure: string|{light,dark} (matches parse_block_v3.html)
  - Update hero schema to properly extend base via $ref
- Fix Tailwind source path generation:
  - Add tailwind_sources.html with test vs starter site logic
  - scripts/view-test.sh: export HUGO_BLOX_TEST_SITE=true
- Update block directory structure:
  - blox/<name>/config.html (was blox/<name>--CONFIG.html)
  - Apply to init.html + parse_block_v2.html
- Code quality improvements:
  - Biome config: match Prettier rules

## Content Adapters (Removed)
- Investigated Hugo content adapters for landing pages
- Found execution context limitations (early build phase, limited site methods)
- Archived to backups/content-adapters-*.zip and removed from test site
- Decision: use standard pages + data linking instead of adapters

This enables dynamic Preact rendering with proper icon support while providing a flexible, reusable content system for landing pages that maintains the "single file = page" mental model with optional advanced linking.
2025-09-22 22:18:03 +01:00
George Cushen 0c43c902ce ci: fix labeller 2025-09-22 22:18:03 +01:00
github-actions[bot] 427f472ffc chore(starters): update modules to latest commits 2025-09-21 15:36:16 +00:00
George Cushen 9ab22e5397 ci(release): add option to update starters with module commit hashes 2025-09-21 16:33:59 +01:00
George Cushen 2f66c837fb ci: fix starter builds 2025-09-21 16:25:04 +01:00
George Cushen 1495a500e5 ci: fix 2025-09-21 16:17:58 +01:00
George Cushen 04890f328a ci: only run splitter for starters with changes 2025-09-17 23:14:14 +01:00
George Cushen bd25b85d1e ci: rename 2025-09-17 10:09:25 +01:00
George Cushen 1e909204d6 ci: fix pnpm 2025-09-17 03:23:18 +01:00
George Cushen d5d2f04c2d chore: adopt Biome + Stylelint, modernize CI/CD, add security/support docs, minor JS fixes
- Linting/format
  - Replace ESLint/Prettier with Biome; remove old configs; add `biome.json`; update scripts
  - Tailwind-friendly `.stylelintrc.yaml`; Stylelint and Biome pass
  - Enable Biome across `modules/**`; prune legacy JS globals; ignore oversized `devicon.json`

- Code fixes
  - `hb-theme.js`: avoid assignment-in-expressions; clearer dataset updates
  - `hugoblox-slides.js`: fix inner var scope (var → let); apply formatting

- CI/CD
  - Split lint/build workflows; add path filters; Node via Corepack (pnpm from package.json)
  - Hugo pinned to env `HUGO_VERSION`; add consistency check vs `starters/academic-cv/hugoblox.yaml`
  - Nightly starters matrix build (academic-cv, landing-page); CodeQL weekly; resource caches

- Workflows/Community
  - Greeter: switch to `pull_request_target`; add Contributor Guide to PR message
  - PR labeler for path-based labels

- Repo policies/docs
  - `CODEOWNERS` for `@gcushen`
  - `SECURITY.md`, `SUPPORT.md`
  - Documented branch protection in `.github/settings.yml`
  - Move `CODE_OF_CONDUCT.md` to `.github/`

- docs(zh): update `README.zh.md` translation

Notes:
- pnpm is sourced from `package.json: packageManager` via Corepack; no hard-coded pnpm versions in CI.
2025-09-17 03:17:38 +01:00
George Cushen db8a975a9f feat(css): remove legacy wc.min.css 2025-09-17 00:26:10 +01:00
George Cushen 9140e2f776 feat: modernize blocks with 2025 glassmorphism & UX improvements
CTA Card:
- Add 2025 glassmorphism styling with backdrop blur
- Implement icon support for buttons with hover animations
- Add contrast control (text_color, overlay_opacity)
- Support custom backgrounds (image, gradient, texture layers)

Hero Block:
- Fix hash fragment URL parsing (#portfolio -> #portfolio, not /#portfolio)

Infrastructure:
- Add reusable glassmorphism CSS components
- Create SVG noise texture for glassmorphism effects
2025-09-17 00:26:10 +01:00
George Cushen ef2b77ea92 feat: enhance block infrastructure with dynamic assets & multi-layer backgrounds
- Add dynamic JavaScript loading system for blocks
- Implement multi-layer background support (texture + gradient)
- Add Tailwind color variable conversion in templates
- Support light/dark background color modes
- Prevent framework CSS conflicts with custom styles
2025-09-17 00:26:10 +01:00
George Cushen 776157d486 feat: enable automatic Tailwind CSS v4 integration in blox-tailwind module
- Fix Hugo documentation inconsistency: mount hugo_stats.json to match @source directive
- Module provides all Tailwind v4 configuration - zero user config required
- Add comprehensive color variables safelist for dynamic YAML usage
- Enable build stats and cachebusters for optimal performance
- Maintain hugo_stats.json in .gitignore (auto-generated per site)

Benefits:
- Automatic Tailwind v4 support for all existing users (no breaking changes)
- Proper Hugo Stats content detection with corrected paths
- Module handles all complexity - users just import and use
2025-09-17 00:26:10 +01:00
George Cushen c5625bd0b7 ci: add --update-starters-to-commits option to release script
Add standalone option to update starter templates with latest module
commits using Go pseudo-versions instead of creating new release tags.

- New functions for commit info extraction and pseudo-version formatting
- Updates go.mod files with v0.0.0-YYYYMMDDHHMMSS-abcdefabcdef format
- Updates Hugo versions in hugoblox.yaml, netlify.toml, and deploy.yml
- Uses deploy.yml workflow filename (GitHub Pages convention)
- Supports --dry-run for preview and --yes for execution
- Perfect for GitHub UI workflows and development environments

Validated with:
`poetry run python scripts/release_modules.py --update-starters-to-commits --dry-run --log-level INFO`
2025-09-17 00:25:56 +01:00
George Cushen e6734f33ae feat(scripts): default to academic-cv starter when no argument provided
- Update view-starter-dev.sh to default to academic-cv if no starter specified
- Update view-starter-prod.sh to default to academic-cv if no starter specified
- Update usage documentation to show starter name as optional parameter
- Maintain backward compatibility with existing usage patterns
2025-09-17 00:16:19 +01:00
srgg d2f774f01f feat(resume-skills): add dynamic columns with responsive breakpoints (#3260)
Implement configurable columns parameter (default 2) with progressive responsive grid: 1→2→3→4→5 columns across breakpoints. Replace the fixed flex layout with CSS Grid for better multi-column control.

Example to change the default layout from 2 cols to 3 cols:

```
  - block: skills
    content:
      title: Skills & Hobbies
      username: admin
    design:
      show_skill_percentage: false
      columns: 3
```
2025-09-15 22:19:57 +01:00
srgg 1852d99718 feat(block): show clockwise progress in resume-languages rather than counter-clockwise
Fix progress bar display in resume-languages block:  Correct stroke-dashoffset calculation to show accurate progress. Previously, progress bars displayed the gap segment (remaining progress) starting from the first quadrant, whereas for 80% progress it should appear in the 4th quadrant, causing the visual representation to appear inverted.

See #3252
2025-09-15 21:26:37 +01:00
srgg 40e2193a07 feat(blocK): improve resume-skills style to top align both sections (#3259)
Change 'items-center' to 'items-start' to prevent shorter content from centering vertically, ensuring the Skills and Hobbies categories align at the same top level regardless of content size/height differences.
2025-09-15 21:24:20 +01:00
github-actions[bot] 77d2cebad0 chore(starters): bump modules and Hugo 2025-09-08 22:23:01 +00:00
github-actions[bot] abb3798d72 chore(blox-tailwind): prepare v0.7.0 2025-09-08 22:22:59 +00:00
dependabot[bot] 3b8ec5b737 ci(deps): bump actions/stale from 9 to 10 (#3248)
Bumps [actions/stale](https://github.com/actions/stale) from 9 to 10.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v9...v10)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: '10'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 21:27:45 +01:00
dependabot[bot] d30e27c1d4 ci(deps): bump actions/setup-python from 5 to 6 (#3247)
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 21:27:14 +01:00
George Cushen 1675dd45f0 feat: add embed shortcode
Embed GitHub repos, HuggingFace, and custom providers

See Academic CV demo blog for examples
2025-09-07 23:04:43 +01:00
George Cushen 21a72ba522 feat(shortcode): port button shortcode to Tailwind
Example:
{{< button url="/contact" >}}Contact Us{{< /button >}}
2025-09-07 21:26:42 +01:00
George Cushen c64305e2fe ci: add welcome msg 2025-09-07 19:04:31 +01:00
George Cushen 9fa165c6c3 fix(style): prevent inheriting italic from Chroma in dark mode
See https://discord.com/channels/722225264733716590/1414174968052187328/1414174968052187328
2025-09-07 18:49:33 +01:00
George Cushen 34e5c4d87b starters: edit readme 2025-09-07 03:41:17 +01:00