fix(ci): vendor wm-theme css for jekyll build - #76
Conversation
There was a problem hiding this comment.
Pull request overview
This PR resolves CI/Jekyll build instability caused by css/wm-theme being a non-existent symlink target in GitHub Actions by committing the theme CSS into the repository, while also rolling out a broader set of site UI/layout and content additions (projects pages, tag/project archives, weblog map view, and updated navigation/sidebars).
Changes:
- Vendor
@wintermuted/ui-themeCSS intocss/wm-theme/and reference it from the site head. - Introduce new/updated layouts and includes for posts, projects, wiki pages, tag/category archives, and weblog views (including a new map view).
- Expand client-side theming behavior (dark mode label sync + background tone selector) and add supporting data/content.
Reviewed changes
Copilot reviewed 59 out of 68 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
weblog-map.html |
Adds a top-level page that renders the weblog map include. |
tags.html |
Refactors the tags page layout and adds a script to sync archive column sizing. |
projects/wm-asset-workflows.md |
Adds a new project detail page (front matter + content). |
projects/wintermuted-ui-theme.md |
Adds a new project detail page (front matter + placeholder content). |
projects/sub-killer.md |
Adds a new project detail page (front matter + placeholder content). |
projects/playdate-skills.md |
Adds a new project detail page (front matter + content). |
projects/playdate-rpg-prototype.md |
Adds a new project detail page (front matter + content). |
projects/playdate-mcp.md |
Adds a new project detail page (front matter + content). |
js/dark-mode.js |
Updates dark mode initialization + adds background tone persistence and UI wiring. |
css/wm-theme/tokens.css |
Adds vendored theme design tokens. |
css/wm-theme/base.css |
Adds vendored base element styling. |
css/wm-theme/components/tag.css |
Adds vendored tag pill styling. |
css/wm-theme/components/side-nav.css |
Adds vendored side nav + floating nav primitives. |
css/wm-theme/components/separator.css |
Adds vendored separator primitive. |
css/wm-theme/components/list.css |
Adds vendored list primitive. |
css/wm-theme/components/layout.css |
Adds vendored layout primitives (app shell, docs topbar, sidebar layout, etc.). |
css/wm-theme/components/gallery.css |
Adds vendored gallery + lightbox styling primitives. |
css/wm-theme/components/code-block.css |
Adds vendored code block styling (header bar + copy button styling). |
css/wm-theme/components/card.css |
Adds vendored card component styling. |
css/wm-theme/components/button.css |
Adds vendored button component styling. |
css/wm-theme/components/badge.css |
Adds vendored badge primitive styling. |
collections/_posts/2026-06-11-game-of-life-devlog-rules-and-diagnostics.md |
Adds a new devlog post. |
collections/_posts/2026-05-18-game-of-life-devlog-url-share-state.md |
Adds a new devlog post. |
collections/_posts/2026-04-26-game-of-life-devlog-pattern-workflow.md |
Adds a new devlog post. |
collections/_posts/2026-04-07-game-of-life-devlog-render-loop.md |
Adds a new devlog post. |
collections/_posts/2022-06-01-microsoft-acquires-xandr.md |
Updates post image usage (switch to SVG + inline markup). |
collections/_posts/2021-9-20-rachel-birthday-foraging.md |
Adds structure/headings to the post content. |
assets/img/projects/game-of-life/gol-mark.svg |
Adds a new SVG mark asset. |
assets/img/posts/2022/jun/microsoft/logo-monochrome.svg |
Adds a new monochrome Microsoft logo SVG asset. |
about.md |
Refactors About page markup and content into structured sections. |
.github/plans/2026-06-28-homepage-split-hero.md |
Adds a planning doc for homepage hero layout work. |
_plugins/project_tag_archive_generator.rb |
Adds a generator to create tag archive pages for project-related slugs. |
_layouts/tag-archive.html |
Updates tag archive UI and adds project listing + column sizing script. |
_layouts/projects-home.html |
Updates projects home layout wrapper/structure. |
_layouts/project-detail.html |
Adds a new project detail layout with tabs, side nav, slideshow/lightbox, and Mermaid rendering. |
_layouts/post.html |
Refactors post layout into a multi-column detail grid with side nav + toggles. |
_layouts/page-wiki.html |
Refactors wiki detail layout into a multi-column grid with generated section nav. |
_layouts/page-wiki-hub.html |
Refactors wiki hub layout similarly (grid + section nav + sidebar tags). |
_layouts/page-about.html |
Simplifies About page layout wrapper. |
_layouts/default.html |
Adds homepage-specific body class + inline homepage style overrides. |
_layouts/category-archive.html |
Refactors category archive layout to match new archive UI + column sizing script. |
_includes/weblog.html |
Updates weblog list view wrapper and adds responsive column-sizing script. |
_includes/weblog-summary.html |
Updates weblog summary wrapper and improves SVG handling for post images. |
_includes/weblog-nav.html |
Replaces weblog view nav with a new “filter bar” style navigation. |
_includes/weblog-map.html |
Adds a Leaflet-based map view for posts with location metadata. |
_includes/weblog-gallery.html |
Refactors gallery view and extracts card rendering into a new include. |
_includes/weblog-gallery-card.html |
Adds reusable weblog gallery card include (with SVG handling + category badges). |
_includes/weblog-by-year.html |
Updates wrapper structure for the by-year weblog view. |
_includes/tag-cloud.html |
Refactors tag cloud rendering (sorting + new pill-style list). |
_includes/sidebar.html |
Updates weblog sidebar styling and adds a Dev Logs category link. |
_includes/sidebar-wiki.html |
Refactors wiki sidebar to show topic/tags/related pages with updated styling. |
_includes/sidebar-post.html |
Refactors post sidebar to show category + tag pills with updated styling. |
_includes/projects-home.html |
Adds client-side project filtering UI and hover effects for project cards. |
_includes/post-title.html |
Adds devlog icon support. |
_includes/homepage.html |
Refactors homepage hero into a split layout with link blocks. |
_includes/header.html |
Refactors header (homepage vs non-homepage variants; new scroll-to-top title button). |
_includes/footer.html |
Refactors footer markup and adds theme + background tone controls. |
_data/weblog_location_coordinates.yml |
Adds curated location-to-coordinate data for the weblog map. |
_data/picture.yml |
Updates picture preset configuration (removes a crop setting). |
| {% elsif post.category == 'roadtrip' %} | ||
| <i class="fas fa-car-side"></i> | ||
| {% elsif post.category == 'changelog' %} | ||
| <i class="fas fa-list-alt"></i> | ||
| {% elsif post.category == 'devlog' %} | ||
| <i class="fas fa-terminal"></i> | ||
| {% else %} |
| {% elsif post.category == 'travelogue' %} | ||
| <i class="fas fa-passport"></i> | ||
| {% elsif post.category == 'changelog' %} | ||
| <i class="fas fa-list-alt"></i> | ||
| {% elsif post.category == 'devlog' %} | ||
| <i class="fas fa-terminal"></i> | ||
| {% endif %} |
| def generate(site) | ||
| project_pages = site.pages.select { |page| page.data['layout'] == 'project-detail' } | ||
| return if project_pages.empty? | ||
|
|
||
| project_tag_slugs = Set.new |
| <div class="projects-filter-bar" role="tablist" aria-label="Weblog views"> | ||
| <a class="projects-filter-button{% if current[1] == 'weblog' %} is-active{% endif %}" href="/weblog" role="tab" {% if current[1] == 'weblog' %}aria-selected="true"{% else %}aria-selected="false"{% endif %}> | ||
| <i class="fas fa-bars" aria-hidden="true"></i> | ||
| Simple | ||
| </a> | ||
| <a class="projects-filter-button{% if current[1] == 'weblog-by-year' %} is-active{% endif %}" href="/weblog-by-year" role="tab" {% if current[1] == 'weblog-by-year' %}aria-selected="true"{% else %}aria-selected="false"{% endif %}> | ||
| <i class="fas fa-calendar" aria-hidden="true"></i> | ||
| By Year | ||
| </a> | ||
| <a class="projects-filter-button{% if current[1] == 'weblog-gallery' %} is-active{% endif %}" href="/weblog-gallery" role="tab" {% if current[1] == 'weblog-gallery' %}aria-selected="true"{% else %}aria-selected="false"{% endif %}> | ||
| <i class="fas fa-images" aria-hidden="true"></i> | ||
| Magazine | ||
| </a> | ||
| <!-- | ||
| <a class="projects-filter-button{% if current[1] == 'weblog-summary' %} is-active{% endif %}" href="/weblog-summary" role="tab" {% if current[1] == 'weblog-summary' %}aria-selected="true"{% else %}aria-selected="false"{% endif %}> | ||
| <i class="fas fa-newspaper" aria-hidden="true"></i> | ||
| Summary | ||
| </a> | ||
| --> | ||
| <a class="projects-filter-button{% if current[1] == 'weblog-map' %} is-active{% endif %}" href="/weblog-map" role="tab" {% if current[1] == 'weblog-map' %}aria-selected="true"{% else %}aria-selected="false"{% endif %}> | ||
| <i class="fas fa-map-marked-alt" aria-hidden="true"></i> | ||
| Map | ||
| </a> | ||
| </div> |
|
❌ Preview deployment failed! Common issues:
Check the workflow run for more details. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1e24ad9080
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| --site-link-color: #f3f3f3; | ||
| --site-link-hover-color: #ffffff; | ||
| --site-link-visited-color: #b7b7b7; | ||
| --site-link-underline: color-mix(in srgb, #f3f3f3 42%, transparent); |
There was a problem hiding this comment.
Set readable default link colors
On first paint, and for anyone with JavaScript disabled or delayed until all assets finish loading, the body has a white --wm-color-bg but the global body a rule uses these default --site-link-* values, making normal links nearly white on white. The neutral tone only fixes this after dark-mode.js adds bg-tone-neutral on window.load, so slow image/CDN loads can leave navigation and content links unreadable for a noticeable period; the defaults should match the light neutral colors instead of the dark-theme palette.
Useful? React with 👍 / 👎.
|
❌ Preview deployment failed! Common issues:
Check the workflow run for more details. |
|
❌ Preview deployment failed! Common issues:
Check the workflow run for more details. |
|
🧹 Preview deployment has been automatically cleaned up by Netlify. |
Summary
css/wm-themein CI.css/wm-themesymlink (which pointed to localnode_modules) with vendored theme CSS files tracked in the repo.Root cause
The deploy workflow failed with:
Errno::ENOENT: No such file or directory @ rb_sysopen - /home/runner/work/blog/blog/css/wm-themeCI runners do not have the local symlink target available, so Jekyll failed while scanning source files.
Validation
bundle exec jekyll buildlocally after the change.Notes