2275 Commits
Author SHA1 Message Date
George Cushen 3f5e979aa1 fix(icons): replace hand-rolled entity decoder with browser-native parser (CWE-116) 2026-04-08 19:31:46 +01:00
George Cushen 87a8fc714e fix(rss): hide private/unlisted pages in RSS feed 2026-04-08 19:02:34 +01:00
George Cushen 9b2f6809f3 docs: edit 2026-04-08 18:19:15 +01:00
George Cushen a955161dbb fix(spacing): connect section spacing to design token system
Wire .hbb-section to var(--hb-spacing-section) instead of hardcoded 6rem,
enabling hugoblox.layout.spacing (compact/comfortable/spacious) to take effect.

- Default to "spacious" (6rem) to preserve existing visual layouts
- Per-section override via design.spacing.padding still works (inline > class)
- Remove dead design.spacing frontmatter field from all templates
- Set correct layout.spacing token in each template's params.yaml

Closes #3314
2026-04-08 18:19:15 +01:00
github-actions[bot] 117881f658 chore(templates): bump modules and Hugo 2026-04-02 21:02:26 +00:00
github-actions[bot] bf6e028728 chore(blox): prepare v0.12.0 2026-04-02 21:02:25 +00:00
George Cushen 0bb02ee2cf docs: edit 2026-04-02 21:59:22 +01:00
George Cushen ae1b67e9d1 docs: edit 2026-04-02 21:52:19 +01:00
George Cushen e8fcdf2e86 ci: format 2026-04-02 21:26:33 +01:00
George Cushen a17ae9d6de chore: bump v 2026-04-02 21:25:53 +01:00
George Cushen 73f56fc1aa fix(biography): fix Resume section spacing and implement show_status option
- Use design.spacing.padding to remove top padding on biography section
  with banner image (previously caused a large 96px gap above the banner)
- Add proper vertical spacing (mt-4) between bio text and Download Résumé button
- Implement design.show_status option in both biography and biography-3 blocks
  (config was accepted but never checked — status emoji always rendered)
2026-04-02 21:18:29 +01:00
George Cushen 060a7e41fe fix(team-showcase): align section header with standard block pattern 2026-04-02 20:32:52 +01:00
George Cushen f53402d057 chore: update workspace 2026-04-02 20:21:07 +01:00
George Cushen 3468c50da0 fix(portfolio): remove leave transition to prevent grid reflow jump on filter
Removes x-transition:leave directives from portfolio cards so hidden items
exit the grid flow immediately. This fixes two visual glitches when clicking
filter buttons: "ghost" cards briefly appearing during the overlap of enter
and leave animations, and cards snapping from their original grid position
to the start after a delayed reflow.

Fixes #3309
2026-03-30 20:37:44 +01:00
Aki ArigaandClaude Opus 4.6 611be3562f feat: use get_featured_image partial consistently for og:image and JSON-LD (#3311)
site_head.html, jsonld/article.html, jsonld/qapage.html, and
jsonld/event.html hardcode `(.Resources.ByType "image").GetMatch
"*featured*"` to find featured images. This ignores custom filenames
set via `.Params.image.filename` in front matter, causing og:image
and JSON-LD image to fall back to the site icon.

Replace the hardcoded pattern with the `get_featured_image` partial
(already used by jsonld/webpage.html), which properly searches for:
1. Files matching `*featured*` in the page directory
2. Custom filename from `.Params.image.filename` in the page directory
3. Custom filename in `assets/media/` directory

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 20:29:18 +01:00
George Cushen f972c65119 fix(ci): detect .github dir changes in template splitter workflow 2026-03-30 19:55:50 +01:00
George Cushen 6a2f1ba2ae fix(tpl): resolve broken assets on GitHub Pages subdirectory deployments
Add `actions/configure-pages` step to all template build workflows and
pass the detected base_url to `hugo --baseURL`, so sites deployed to
subdirectory paths (e.g. user.github.io/repo-name/) generate correct
asset URLs. Also fix leading-slash relURL calls in slides layout that
would ignore the baseURL path component.
2026-03-30 19:27:42 +01:00
George Cushen 26e1f775a2 chore(ci): bump GitHub Actions to Node.js 24-compatible versions
Bumps actions across all template and repo workflows to avoid the
Node.js 20 deprecation (enforced June 2026):
- actions/checkout v3/v4 → v6
- actions/cache v4 → v5
- actions/setup-go v5 → v6
- actions/setup-python v4/v5 → v6
- peter-evans/create-pull-request v5/v6 → v7
2026-03-30 19:20:15 +01:00
George Cushen ec5aca1fdb chore(tpl): migrate support for Hugo Content adaptor in Hugo v0.158+ 2026-03-30 19:04:08 +01:00
George Cushen 1c3e70a5f5 chore(tpl): devicon renamed aws icon 2026-03-30 19:03:13 +01:00
George Cushen 27313292ed chore(tpl): fix hugo version detection 2026-03-30 18:52:22 +01:00
github-actions[bot] f54d1c825e chore(templates): update modules to latest commits 2026-03-27 04:45:11 +00:00
George Cushen 76023f9461 refactor(images): adopt Hugo reflect.IsImageResource* API for type-safe image processing
Replace manual format detection (printf "%T", MediaType.SubType whitelists,
duck-typing) with Hugo's new reflect.IsResource, reflect.IsImageResource, and
reflect.IsImageResourceProcessable functions across 19 template files.

Key changes:
- process_responsive_image: collapse 15-line format whitelist into single
  reflect.IsImageResourceProcessable call
- Unify three-way SVG/processable/GIF branches into two-way $canProcess guard
- Remove duplicate GIF passthrough branches in single.html, events/page.html
- Add missing SVG guard in research-areas block (was calling .Fill unprotected)
- Replace nil checks with reflect.IsResource in get_cover_image/get_featured_image

Design decision: GIFs are intentionally excluded from processing despite Hugo
supporting it — processing strips animation frames, so we preserve user-optimized
animated GIFs by checking (IsImageResourceProcessable AND not GIF).
2026-03-27 04:35:53 +00:00
George Cushen ee683c8cd1 feat(hugo): replace deprecated cascade._target for Hugo v0.156+ compatibility 2026-03-27 04:17:17 +00:00
George Cushen 4fa40b91e2 feat(css): co-locate block CSS with auto-discovery via Tailwind pipeline
Move block-specific CSS from centralized assets/css/blox/ to co-located
style.css files within each block directory. The css.html partial now
auto-discovers style.css files from bundled and community blocks and
concatenates them into the Tailwind entry via resources.Concat, enabling
full @apply support while avoiding VFS path resolution issues.

Shared biography styles (avatar, ruby) are extracted to blox/shared/css/
and auto-included before per-block styles. Navbar CSS moves to
components/ as it's a framework-level concern. The separate community
CSS pipeline in site_head.html is removed — all block CSS now flows
through a single Tailwind entry point.
2026-03-27 04:15:49 +00:00
George Cushen 13dde12ae0 refactor(hugo): use strings.ReplacePairs for chained replacements
Adopt Hugo v0.158's strings.ReplacePairs in rss.xml and
parse_block_v3.html to replace nested replace calls.
2026-03-27 03:33:15 +00:00
George Cushen 815d25ca9d feat(hugo): replace deprecated language APIs for Hugo v0.158+ compatibility
Replace site.LanguageCode → site.Language.Locale and
.Language.LanguageCode → .Language.Locale in module layouts,
and languageCode → locale in all template language configs.
2026-03-27 03:30:44 +00:00
George Cushen ef8ed449c7 feat(hugo): replace deprecated APIs for Hugo v0.156+ compatibility
Migrate site.Data → hugo.Data (42 occurrences), site.IsMultiLingual →
hugo.IsMultilingual, and site.AllPages → hugo.Sites nested range.
Simplify Netlify redirects template to use pre-processed aliases
instead of relLangURL per gohugoio/hugo#14408.
2026-03-27 03:25:42 +00:00
George Cushen 94703c5c4f fix(share): use urls.PathEscape for mailto share links per RFC 6068
Enabled by new Hugo v0.153 release.

Replace the brittle `urlquery` + blanket `+` → `%20` workaround with
Hugo's `urls.PathEscape` for mailto URIs, which natively percent-encodes
spaces as `%20`. The old approach could corrupt titles containing
literal `+` characters.
2026-03-27 03:13:04 +00:00
George Cushen 5733b053bb feat(icons): expand brands icon pack and update all packs
Also, refactor icon resolution to avoid duplicated logic:

get_icon_svg.html	New shared core — alias resolution, pack lookup, hb fallback, user assets, hugo fallback. Returns raw SVG string.

get_icon.html	Thin wrapper — emoji handling, calls get_icon_svg, Unicode emoji fallback for bare names, attribute injection, safeHTML return.

get_icon_data.html	Thin wrapper — one-liner delegating to get_icon_svg.
2026-03-27 00:19:41 +00:00
George Cushen 2bb78df692 refactor(frontmatter): rename hide_date → show_date for consistent positive booleans
All other display toggles use positive naming (show_*, toc, share, etc.).
Flipping to show_date (default: true) aligns the API and reduces cognitive load.

BREAKING CHANGE
2026-03-26 23:17:42 +00:00
George Cushen c8702b2c5e chore: add AGENTS placeholder 2026-03-26 22:54:43 +00:00
George Cushen e02d32190a refactor(theme): prefix font/theme pack CSS vars with --hb- namespace 2026-03-13 15:46:35 +00:00
George Cushen 71b5a1b844 feat(typography): auto-detect bundled fonts and skip Google Fonts CDN
Add a second resolution tier to the typography system: before falling
back to Google Fonts, check assets/dist/font/ for a matching local
file. When found, emit @font-face with local() fallback instead of a
CDN <link>. Variable fonts detected from ".var." filename convention.

Bundle JetBrains Mono alongside Inter so the default "modern" pack
loads entirely from local files — zero external font requests.
2026-03-13 15:29:32 +00:00
George Cushen aa272895d8 fix: prevent double-unescaping in Icon SVG decoder (CWE-116)
Move \u0026 decode after HTML entity decodes so sequences like
\u0026lt; aren't double-unescaped into raw '<'.
2026-03-13 13:49:30 +00:00
George Cushen 2c3a2491f1 fix: handle SVG images in responsive image processing
SVG resources don't support .Width, .Height, or .Process in Hugo,
causing crashes in process_responsive_image.html and all callers
that pass SVGs without guards.

Add SVG checks to process_responsive_image.html, preact-wrapper.html,
resume-biography, resume-biography-3, authors/term, and
page_author_card.

Fixes #3305
2026-03-13 13:39:56 +00:00
dependabot[bot] 71f472d381 ci(deps): bump docker/login-action from 3 to 4 (#3308)
Bumps [docker/login-action](https://github.com/docker/login-action) from 3 to 4.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: '4'
  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>
2026-03-13 12:18:39 +00:00
dependabot[bot] 949d15febb ci(deps): bump docker/build-push-action from 6 to 7 (#3307)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6 to 7.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6...v7)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: '7'
  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>
2026-03-13 12:18:06 +00:00
George Cushen 7bc44d0a31 ci: format 2026-03-03 00:31:09 +00:00
George Cushen 37f3c7bf32 ci: fix lint 2026-03-03 00:30:51 +00:00
George Cushen 5c03d17d38 feat: add experimental registry 2026-03-03 00:30:27 +00:00
George Cushen 4d38c40f9f feat(i18n): add multilingual support for author data files
Hugo doesn't natively merge language-specific data directories with the default data. Add a `get_authors_data` partial that manually
looks up `data/<lang>/authors/` and deep-merges translated fields
on top of the default data/authors/ profiles.

Centralizes all `site.Data.authors` access through this new partial
so author names, bios, roles, and other fields can be translated
per language while inheriting non-translated fields from the default.
2026-03-03 00:30:27 +00:00
George Cushen dbe0c86df7 fix(blocks): restore missing background design features in v3 parser
- Fix background image brightness filter not applying (closes issue URL below)
- Add CSS filters: blur, contrast, saturate, grayscale
- Add background image size, position, and repeat controls
- Add background.css_class for custom classes on bg layer
- Add design.clip_path for shaped section edges
- Add errorf for missing background images
- Remove dead v2 parser (no longer referenced)

Fixes https://discord.com/channels/722225264733716590/1477717661981999114/1477717661981999114
2026-03-03 00:30:27 +00:00
George Cushen 24dc36f6d7 feat(typography): extend typography system with Google Fonts and font packs 2026-03-03 00:30:27 +00:00
github-actions[bot] 4fcfe33cc0 chore(templates): update modules to latest commits 2026-02-19 15:29:19 +00:00
George Cushen 9965378d18 refactor(slides): consolidate config into config/_default/hugo.yaml 2026-02-19 15:12:39 +00:00
George Cushen 764756ab50 feat(hugo): add support for Hugo v0.153 breaking changes
migrate deprecated `includeFiles` to `files` glob slice (Hugo >= 0.153.0)

Replace `module.mounts.includeFiles` with the new `files` setting
introduced in Hugo v0.153.0. Update minimum Hugo version accordingly.

Affected files:
- modules/blox/hugo.yaml
- All template module.yaml configs (7 templates)

BREAKING CHANGE

See: https://gohugo.io/configuration/module/#files
2026-02-19 14:57:09 +00:00
George Cushen a3c21b401e fix: lint 2026-02-19 14:15:26 +00:00
George Cushen 00147612cd feat(footer): add social icons and nav links to default minimal footer 2026-02-18 22:29:17 +00:00
George Cushen ab44db81d7 feat(blocks): add columns footer block 2026-02-18 22:09:10 +00:00