- datetime instead of date-time on the publication date
- remove the obsolete X-UA-Compatible meta tag
- remove the obsolete <a name="top"> anchor: #top scrolls to the top
of the page
Refs #11
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YNHsWYTXPThURz6TbVS1j3
The image render hook converts the JPEG, PNG and WebP images to WebP in
several widths (480, 800, 1200, 1600 px, no wider than the original) with
srcset and sizes matching the layout. All images get their dimensions
(no layout shift) and are lazy loaded, except the first one of the page.
GIF and SVG images are served as-is.
The images downloaded by the pages go from 99 MB to 13 MB (desktop) or
8 MB (mobile), and the site from 168 MB to 101 MB.
The social image partial no longer reads the .RelPermalink of the page
images, which published all of them, and compares the images by name
since the content now refers to the processed variants.
Refs #11
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YNHsWYTXPThURz6TbVS1j3
The content now uses standard Markdown, rendered by render hooks
(layouts/_markup):
- images: , rendered as a figure when the
image is standalone (replaces attachedFigure and screenshotOf)
- links: resolved to a page resource (replaces attachedFileLink in
links), to a page of the current site or of the other site with a
language flag (replaces internalLink and relref), and relative links
are made relative to the site root (they were broken in RSS feeds)
- code blocks: ```yaml {filename="x.yaml" hl_lines="3"} or
{title="..."} (replaces highlightFile, highlightWithTitle, highlight)
The content was converted with scripts/convert-shortcodes.py, which can
also be used on the drafts. The attachedFileLink shortcode is kept for
the URLs in code blocks, as well as embeddedVideo and youtube.
The generated HTML is the same, except:
- figures are no longer nested in paragraphs (invalid HTML)
- the screenshots of tweets get an alt text
- the language flags are removed from the summaries
Closes#13
Refs #11
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YNHsWYTXPThURz6TbVS1j3
- the search index is generated by Hugo as a separate JSON file
(searchindex output format), loaded by the search page and cached by
the browser: the search pages go from 96 KB to 7 KB
- Fuse.js 6.4.3 -> 7.5.0 (basic build). Since Fuse.js 7 no longer
provides an UMD build, search.js is now an ES module importing it.
- search on the input event instead of keyup (paste, autocompletion)
Refs #11
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YNHsWYTXPThURz6TbVS1j3
Descriptions (meta description, Open Graph, Twitter cards, JSON-LD):
the description front matter parameter, the site description for the
home page, "Articles related to <term>" for the term pages, the page
summary truncated to 160 characters, or the site description. The meta
description used to be the title of the page.
Social images: the images front matter parameter, a *feature*, *cover*
or *thumbnail* page resource, the first image of the page content or
the default image of the site. The image is converted to JPEG and
resized to 1200 px wide max, without cropping, and its dimensions are
given in the Open Graph tags. The default image (avatar) uses a small
Twitter card.
Structured data: BlogPosting for the blog, Article for the talks and
publications, with the description, the image and the author.
Refs #11
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YNHsWYTXPThURz6TbVS1j3
The internalLink shortcode and the lang-detection partial it calls were
emitting newlines around the link, which rendered as a space before the
following punctuation ("Red Hat Summit Connect France 2024 ,"), in the
pages as well as in the summaries, meta descriptions and RSS feeds.
Refs #11
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YNHsWYTXPThURz6TbVS1j3
The Hugo minifier turns "z v15" into "z 15", which is an invalid SVG
path: the red diagonals of the flag were not clipped. Starting each
subpath with an explicit moveto avoids the issue.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YNHsWYTXPThURz6TbVS1j3
- convert Source Serif Pro and Source Sans Pro to woff2 (lossless,
~500 KB -> ~155 KB) and only declare the woff2 format, which is
supported by all current browsers
- only preload the body and menu fonts: JetBrains Mono is only used by
code blocks. Previously, five fonts were preloaded (~800 KB), including
JetBrains Mono in three formats.
- remove the unused material-icons fonts (icons are inline SVG)
Refs #11
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YNHsWYTXPThURz6TbVS1j3
- mathjax.html: no page sets enableMathJax, and it was loading a
useless polyfill along with some MathJax v2 code that never ran
- section.html: blog, speaking and writing have their own templates
- baseurl and figure shortcodes: no longer used
The generated site is identical.
Refs #11
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YNHsWYTXPThURz6TbVS1j3
Hugo upgrade (0.121.2 -> 0.167.0):
- remove the blackfriday and pygments* settings (markup.highlight instead)
- languageName -> label, _build -> build, .Scratch -> .Store,
.Sites -> hugo.Sites, .LanguageName -> .Label, .LanguageCode -> .Locale
- move the templates to the new layout tree (_partials, _shortcodes,
home.html, page.html, term.html, taxonomy.html, section.html)
- use the embedded pagination, opengraph and twitter_cards partials
- fix the term filtering in post-metadata.html (.Data.<singular> is gone)
- keep the taxonomy terms as written (capitalizeListTitles: false) and
give a proper title to the blog section ("Articles" instead of "Blogs")
- <s> is raw HTML (omitted by Goldmark): use ~~ instead
- use relref for a relative link that was broken in the RSS feeds
Mounts:
- the english content not translated in french is now published in the
french site through module mounts, instead of symlinks created by the
./hugo script. hugo and hugo server can be used directly.
- chroma.css is now versioned instead of generated at each build
- remove the ./hugo script and realpath.py
The generated site has the same set of files. The remaining differences
come from the new minifier, the new embedded templates (og:locale, empty
meta tags removed, youtube iframe) and the new summary computation.
Refs #11
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YNHsWYTXPThURz6TbVS1j3