Commit Graph
100 Commits
Author SHA1 Message Date
George Cushen 456a0faf43 tpl(starter): add minimal Tailwind starter template 2026-04-22 01:40:43 +01:00
George Cushen 3fc7cd05e4 docs: edit 2026-04-21 20:53:19 +01:00
George Cushen 8e726a3518 fix(footer): don't default to CC license when param null 2026-04-21 20:48:51 +01:00
George Cushen 032e2ce5c5 docs: edit 2026-04-19 07:02:21 +01:00
George Cushen ab31415552 docs: edit 2026-04-19 06:52:37 +01:00
George Cushen fe1f4d6a23 fix(render-image): warn with source position on unresolved local images
BREAKING CHANGE:

Requires Hugo v0.160
2026-04-16 02:18:38 +01:00
George Cushen ca9888609e fix(sections): update stale singular section path references to plural
- Fix build_links.html project/ → projects/ GetPage lookup (breaking bug)
- Fix collection block.html event/publication → events/publications type checks
- Update academic-cv publication archetypes, import workflow (publication/ → publications/)
- Update data-science-blog import workflow, notebook, author RSS URL (post/ → blog/)
- Update documentation and startup-landing-page author RSS URLs (post/ → blog/)
2026-04-16 02:16:23 +01:00
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
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
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
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
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
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
George Cushen bf41049de2 fix(blocks): Feature widget off-center Preact icons 2026-02-18 19:28:28 +00:00
George Cushen 9916ea5d2a feat(layouts): hide pager on root pages 2026-02-18 19:22:19 +00:00
George Cushen ef8a34e33a feat: convert remaining Landing Page blocks from Go HTML to React 2026-02-18 19:21:54 +00:00
George Cushen 214e40464e chore: edit socials 2026-02-15 20:54:34 +00:00
George Cushen 3fd11f9853 chore: edit ext ID 2026-02-15 20:51:54 +00:00
George Cushen 4660d30978 tpl(resume): edit navbar 2026-02-15 20:50:15 +00:00
George Cushen a139f74289 refactor(workflows): replace grep/awk with yq for robust YAML parsing
Pin yq v4.44.1 in all template workflows with retry logic,
error handling, and input validation.
2026-01-26 01:30:00 +00:00
George Cushen 58f7dcdaf9 fix(biography): make status.icon optional in resume-biography block
Add explicit type checking and proper trimming for status icon extraction
to match the more robust pattern used in resume-biography-3.

Fixes issue where users couldn't omit the emoji status badge.
2026-01-24 19:19:43 +00:00
George Cushen 77f7678f08 fix(blox): restore side-by-side layout in cta-image-paragraph block
Previous commits broke the 2-column grid layout by prematurely closing
the grid container after the image, leaving the text content outside
the grid. Now both image and text are properly wrapped within the same
md:grid md:grid-cols-2 container.

Fixes regression where image and paragraph appeared stacked vertically
instead of side-by-side on medium+ screens.
2026-01-24 04:00:29 +00:00
George Cushen c043870d3d feat(biography): re-implement ruby pronunciation annotations for CJK names
Add visual pronunciation guides (pinyin, furigana, IPA) displayed as ruby text annotations above the profile name in biography blocks.

- Add conditional ruby rendering in resume-biography and resume-biography-3
- Include browser fallback for non-ruby-supporting browsers

Usage: Set `name.pronunciation` in author YAML (e.g., "Wáng Wěi")
2026-01-24 03:30:32 +00:00
George Cushen 34959c03b1 tpl(ci): modernize CI/CD workflows
- Refactor build into reusable workflow (DRY)
- Add deploy.host config to control deployment target
- Upgrade to latest action versions (Node 22, Go 1.23, Python 3.13)
- Add timeout-minutes and concurrency groups for safety
- Use github.run_id for unique PR branch names
- Fix package_json_path for standalone repo compatibility
- Scope GITHUB_TOKEN to specific steps for security
2026-01-24 03:05:12 +00:00
George Cushen f99801d147 tpl(startup): add content adapter to solve author profile 404s
Introduces a Hugo Content Adapter ([content/authors/_content.gotmpl](templates/startup-landing-page/content/authors/_content.gotmpl:0:0-0:0)) to the Startup template. This automatically generates author pages for every entry in `data/authors/*.yaml`, ensuring that team members without published content effectively possess a profile page instead of returning a 404 error. This is critical for Organization/Team sites where all members are displayed in the Team block.
2026-01-24 02:52:05 +00:00
Geo 9991cc1884 docs: edit
Added a link to user attachments in the README.
2026-01-18 00:26:21 +00:00
George Cushen 14a6fcf7ff docs: edit 2026-01-17 19:43:45 +00:00
George Cushen 65c25ff8d0 fix(blox): render markdown and emoji in summary/bio fields
- Add emojify | $page.RenderString to experience summary
- Add emojify | $page.RenderString to education summary
- Add emojify | $page.RenderString to biography bio fallback
2026-01-16 01:33:22 +00:00
George Cushen 27742d31a0 fix(kit): correct gitignore to track docs layouts 2026-01-15 00:41:43 +00:00
George Cushen 3c4fb879d1 fix: restore sidebar visibility in docs layouts
Refactor the sidebar component logic to correctly handle the `no_sidebar` parameter.
Previously, `default true` treated an explicit `false` value as empty, causing the sidebar
to be hidden unintentionally. Replaced with an explicit inequality check.
2026-01-14 13:28:05 +00:00
George Cushen 71baea8b57 tpl: allow previews 2026-01-13 19:49:37 +00:00
George Cushen aa9edea5df feat(slides): add persistent branding with per-slide visibility control
- Add branding overlays: logo, title, author, and footer text
- Use Reveal.js theme CSS variables for automatic color adaptation
- Inline SVGs for currentColor support on any theme
- Per-slide control via HTML comments:
  - <!-- no-branding -->: hide all elements
  - <!-- no-header -->: hide logo + title
  - <!-- no-footer -->: hide author + footer
- Fix body-level CSS selectors for proper visibility
- Add comprehensive documentation in example slides
2026-01-13 15:36:32 +00:00
George Cushen 1352d89867 docs: edit 2026-01-10 23:58:12 +00:00
George Cushen 96aa04356e fix: respect new event start/end fields when filtering past/future in collection block 2026-01-10 18:45:01 +00:00
George Cushen d7ada2b73f docs: edit 2026-01-10 15:53:35 +00:00
George Cushen 2754d1590f fix(blox): resolve template syntax errors in cta-image-paragraph
- Fix malformed if/else block causing "undefined variable $title"
- Add missing closing div tags to correct HTML generation
- Remove orphaned {{ end }} tag preventing proper parsing
2026-01-10 03:53:05 +00:00
George Cushen af716f0c18 fix(blox): solve variable scoping regression in cta-image-paragraph
- Lift $image_path variable declaration in cta-image-paragraph to fix scope error
- Remove unused $banner_path variable in resume-biography
2026-01-10 03:43:34 +00:00
George Cushen 3323f61390 fix(blox): unify image path resolution logic across blocks
- Update 'resume-biography', 'research-areas', 'logos', and 'cta-image-paragraph' blocks
- Add support for remote images (http/https) via resources.GetRemote
- Add support for Page Resources (bundles) via .Resources.GetMatch
- Normalize paths to handle 'assets/', 'media/', './' prefixes consistently
- Maintain backward compatibility with global assets and static URLs
2026-01-10 02:02:42 +00:00
George Cushen f500a081dd fix(testimonials): enhance avatar image resolution logic
- Support image resolution from Page Bundles, Remote URLs, and Global Assets
- Normalize paths to correctly handle 'assets/', 'media/', and './' prefixes
- Add fallback to static URLs if resource processing fails
- Fixes issue where avatar images failed to load in certain templates
2026-01-10 00:55:52 +00:00
George Cushen f612eb1dee chore: format 2026-01-10 00:37:41 +00:00
George Cushen dffe943e89 ci: edit 2026-01-10 00:36:15 +00:00
George Cushen dd143313a5 docs: update ext id 2026-01-09 19:06:36 +00:00
George Cushen b374e3d1d9 fix: portfolio filter limits, View All logic, and status badge configuration 2026-01-09 19:00:56 +00:00
George Cushen 2c2d7cd403 fix(team-showcase): align headers, square avatars, respect sort order 2026-01-09 01:04:21 +00:00
George Cushen d1d1c8a77d fix(portfolio): respect per-filter count while keeping filters populated 2026-01-09 01:02:59 +00:00
Geo 1096b7494e docs: edit 2026-01-08 01:36:11 +00:00
George Cushen b018a2d8ba tpl(ci): add GITHUB_TOKEN to avoid github rate limiting 2026-01-07 23:58:39 +00:00
George Cushen b252f10dee fix(team-showcase): honor sort direction and improve portrait layout 2026-01-07 23:29:59 +00:00
George Cushen ac0f161733 fix(portfolio): prevent pre-filter slicing and clarify count usage 2026-01-07 23:06:05 +00:00
George Cushen dd8be97667 ci: fix - switch from npx to pnpx 2026-01-07 21:41:57 +00:00
George Cushen ae338f0ba0 feat(authors): preserve entered casing and links for author names
- keep raw front-matter author strings as preferred display when no profile exists
- fall back to title-cased humanized slug only as last resort to avoid lowercase initials
- render authors directly from Params order and resolve links via taxonomy pages when present

Fix https://discord.com/channels/722225264733716590/1457522006462435541/1458539152160067784
2026-01-07 20:21:14 +00:00
George Cushen 62b8f3f8f6 feat: schema optimization
Reviewed all 27 block schemas in modules/blox/blox against their block.html implementations and applied best-practice optimizations. Here's what was updated:

Schemas Updated with New Properties

Schema	Changes
cta-button-list	Added label, name, link aliases; added new_tab boolean; changed required to anyOf for flexibility
dev-hero	Added content as required; added design.animations boolean
faq	Added title/text aliases for items; added padding_sm and defaults to spacing arrays
knowledge-categories	Added link field per category item; added minimum: 0 for count
portfolio	Added design.animations boolean; added sort_by enum
tech-stack	Added design.animations boolean

Schemas Updated with Improved Descriptions & Enums

Schema	Improvements
collection	Added sort_by enum; improved view description; changed columns to integer with min/max constraints
resume-experience	Added $comment documenting author profile fields (button, tags, etc.)
resume-skills	Added $comment documenting skill group structure
resume-awards	Added $comment documenting award item fields
resume-languages	Added $comment documenting language level conversions
resume-biography	Enhanced avatar size description with pixel values
resume-biography-3	Enhanced avatar/name size descriptions
stats	Improved statistic description with formatting examples
hero	Clarified no_padding description with Tailwind classes
logos	Enhanced display_mode description with layout behaviors
research-areas	Enhanced layout description with style explanations
team-showcase	Added sort_by enum with common values
search-hero	Added examples array for suggestions
testimonials	Added image processing note and examples
cta-image-paragraph	Added responsive image processing note
features	Enhanced icon description with pack formats and examples

Schemas Already Well-Aligned
These schemas were already in good shape and required no changes:
contact-info, cta-card, hero, markdown, stats, testimonials, trending-questions

Notes

New alias fields (label/name/link in buttons, title/text in FAQ items) provide backward compatibility with alternate naming conventions used in templates
The $comment fields document author profile data structures that aren't directly in the schema but are consumed by resume blocks
2026-01-07 19:58:32 +00:00
George Cushen 09eb7f7b18 feat: harden block inputs (batch 2)
Finished hardening the remaining blocks by guarding content/design maps, normalizing list inputs, coercing numeric/boolean values, and sanitizing links; also tightened scroll target handling in block.html.

Changes

Normalized portfolio tags/tech stacks/links, made archive defaults safe, and ensured filter JS uses JSON-safe tags in block.html.

Validated research area layouts and item fields, added safe media/link handling, and made CTA rendering resilient in block.html.

Hardened resume blocks for profile fields, buttons/links, and dates using try with time in block.html, block.html, and block.html.
Improved numeric parsing and labeling for language/skill meters in block.html and block.html.

Added guarded items and predictable grid classes in block.html.

Sanitized badge/title/suggestions/stats rendering in block.html, normalized tech categories and made list style exclusive in block.html, and hardened testimonials’ items/image handling in block.html.

Normalized dynamic/static question data, badges, and safe links in block.html.
2026-01-07 19:18:50 +00:00
George Cushen 98f0d201c1 feat: harden block inputs (batch 1)
Hardened 1st batch of five homepage blocks by normalizing config types, clamping unsafe values, and guarding bad inputs so user‑supplied params fail safe without template errors.

Changes

coerce_bool.html and coerce_int.html: added shared coercion helpers for consistent, safe defaults across blocks.

block.html: sanitized content/design inputs, robust user_groups parsing, safer role/affiliation/interest/link handling, and CTA URL validation.

block.html: guarded avatar/banner/name/headings/bio, safe
button/link resolution, and resilient parsing for affiliations, education, interests, and social links.

block.html: hardened filters (kinds/folders/tags), safer sort/order handling, clamped numeric params, and archive link safety/fallbacks.

block.html and block.html: defensive content rendering, clamped overlay opacity, and safe button link handling.

schema.json, schema.json, schema.json: added view enum entries, added new_tab, and Biome formatting applied.
2026-01-07 18:23:51 +00:00
George Cushen 3651909ac2 fix: team-showcase block enhancements 2026-01-07 17:53:09 +00:00
George Cushen b199122d65 style: improve spacing between groups 2026-01-07 17:33:36 +00:00
George Cushen 967404b3f0 feat: add hugoblox upgrade workflow 2026-01-07 17:22:16 +00:00
George Cushen 8ca8e40a8f feat(team-showcase): polish sorting, layout, and docs for labs/startups
- default to last-name sort with numeric-friendly keys for weight/graduation_year
- support per-group sorting, optional empty-state, and role fallback to affiliation
- add grid/interest caps, alignment controls, and avatar initial placeholders
- expose graduation_year/weight/name_family_pref in profiles; update schema/README
2026-01-07 16:04:26 +00:00
George Cushen 4a758fb82e ci: fix 2026-01-07 15:48:52 +00:00
George Cushen d466212f43 ci: fix 2026-01-06 20:46:01 +00:00
George Cushen 7f163e3e31 ci: fix 2026-01-06 20:41:58 +00:00
George Cushen e19b52a216 ci: add markdown-slides 2026-01-06 20:15:31 +00:00
George Cushen 85307a8097 feat(authors): preserve author casing when profiles are missing
- retain raw front-matter author strings as display names when no profile data is present
- title-case humanized slug only as last-resort fallback to avoid lowercase surnames
- reduce need for author profile files while keeping names correctly capitalized

Fixes https://discord.com/channels/722225264733716590/1457522006462435541
2026-01-06 20:13:34 +00:00