Generate the site from content instead of hand-written HTML - #1
Merged
Conversation
The redesign needs a bundler and a second language, and hand-written HTML gives neither. Three.js cannot be loaded from a CDN under this site's own rules, so it has to be bundled; and a French counterpart for every page would mean sixteen files with the prose written twice. So content moves into content/, one file per page holding every language, and tools/build-pages.mjs renders it through src/templates/ into .gen/, which Vite builds. Pages deploy from CI rather than straight off the branch. Nothing about the rendered site changes: text, computed styles and element counts match the live pages exactly. Two things improve on the way past. The header, breadcrumb and footer were fetched and assembled in the browser; they are now in the HTML, so the site reads with JavaScript switched off rather than only mostly reading. And the design tokens, which were copy-pasted into five repositories and had already drifted into three different versions, are now one file at /site/tokens.css. The project sites are same-origin, so they can link it instead of keeping copies. Renaming a token there would restyle four live sites with no signal anywhere, so the names are pinned in site/tokens.lock.json and the build fails if one goes missing. The README claimed no build step and no framework. Two thirds of that stops being true here, so it says what is still true instead: nothing from a CDN, no third-party code in the browser, every dependency bundled. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This page attributed four things to the GAEL internship that belong to a Prolog course project which happened to be submitted in the same repository: the two tournament agents, the standings, the equilibrium analysis and the error found in it later. The report's own game is not the 5x5 undercutting game, and that project has since moved to the coursework repository. The story is kept, because it is the better of the two, but it is now labelled as coursework and linked there. What the internship itself produced, the survey and the imitation model, now leads the page instead of trailing it. Two preview images pointed at paths that only still resolve because neither repository has been pushed since the move. They now point at the coursework repository, where those figures actually live. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Tewf
added a commit
that referenced
this pull request
Aug 29, 2026
Generate the site from content instead of hand-written HTML
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 1 of the redesign: the plumbing, with nothing visual changed yet.
Why
The redesign needs a bundler and a second language, and hand-written HTML gives
neither. Three.js cannot come from a CDN under this site's own rules, so it has
to be bundled; and a French counterpart for every page would mean sixteen files
with the prose written twice.
What changed
Content moved into
content/, one file per page holding every language.tools/build-pages.mjsrenders it throughsrc/templates/into.gen/, whichVite builds into
dist/. Deployment moves from branch-serving to Actions.The rendered site is unchanged. Verified against the live pages with
Playwright: text content identical character for character, nine groups of
computed styles identical, and every element count (cards, reductions, headings,
preview images) identical.
Two things improve on the way past:
They are now in the HTML, so the site reads with JavaScript switched off
rather than only mostly reading.
drifted into three different versions. They are now one file at
/site/tokens.css. The project sites are same-origin, so they can link itinstead of keeping copies. A rename there would restyle four live sites with
no signal anywhere, so the names are pinned in
site/tokens.lock.jsonand thebuild fails if one goes missing.
The README claimed no build step and no framework. Two thirds of that stops
being true, so it now says what is still true: nothing from a CDN, no
third-party code in the browser, every dependency bundled.
Before merging
The Pages source has to be flipped first, or
deploy-pagesfails:Order matters. The previous deployment keeps serving in the gap. The API call
reverses cleanly, but the repo layout does not: once
mainholdscontent/andsrc/instead of servable HTML, reverting to branch-serving would serve abroken site.
Known dependency, not introduced here
b0280damoves the tournament's credit to the coursework repository, butUniversity-Courseworkhas 10 unpushed commits and that path is still a 404 onGitHub. Until it is pushed, two preview images and one card link on
/research/strategic-pricing/are broken:.../Prolog/StrategyTournament/results/leaderboard.png.../Prolog/StrategyTournament/Still to come
Direction round, the visual world, motion, the French pages, repointing the four
sibling repos at the shared stylesheet, and the social cards.
🤖 Generated with Claude Code