Skip to content

Upgrade al-folio to v1.0#2968

Open
alshedivat wants to merge 26 commits intomainfrom
v1.0-dev
Open

Upgrade al-folio to v1.0#2968
alshedivat wants to merge 26 commits intomainfrom
v1.0-dev

Conversation

@alshedivat
Copy link
Copy Markdown
Owner

@alshedivat alshedivat commented Jan 19, 2025

Overview

This PR delivers the v1.0 architecture and runtime upgrade for al-folio.

al-folio moves from a monolithic theme repo to a thin starter + plugin ecosystem model, while preserving visual identity and core behavior.

What this PR changes

1) Starter becomes orchestration-only

al-folio is now responsible for:

  • starter wiring (Gemfile, _config.yml)
  • sample/demo content
  • user-facing docs
  • visual regression and cross-plugin integration tests

Component/runtime ownership is moved to dedicated gems.

2) Runtime and feature ownership split into plugins

al_folio_core now provides shared runtime/layout primitives and contracts, and delegates feature modules to owning gems.

Key plugin ownership in v1:

  • al_folio_core: core theme runtime/contracts
  • al_folio_distill: Distill layouts/runtime
  • al_folio_cv: CV rendering
  • al_search: search runtime and modal behavior
  • al_icons: icon runtime (Font Awesome, Academicons, Scholar Icons)
  • al_cookie: cookie-consent runtime
  • al_img_tools: image/gallery/lightbox tooling
  • al_math: math/TikZ runtime integration
  • additional al-* plugins for analytics/charts/citations/comments/newsletter/external posts/upgrade tooling

3) Styling/runtime modernization

  • Tailwind-first v1 runtime is established.
  • Legacy Bootstrap behavior is isolated behind optional al_folio_bootstrap_compat for migration windows.
  • jQuery-dependent runtime paths are removed/replaced in plugin-owned implementations.

4) Test ownership policy is enforced

  • al-folio keeps only starter-level integration and visual integrity checks.
  • Component correctness tests are owned by the corresponding plugin repos.

This mirrors runtime ownership and reduces duplication/drift.

5) Upgrade and migration workflow

al_folio_upgrade is integrated for audit/apply/report migration flows, including:

  • config contract checks
  • ownership drift detection
  • legacy marker detection
  • plugin wiring validation

6) Documentation and contributor model for v1

Docs are updated to reflect modular v1 behavior and contribution routing.

New governance additions include:

  • plugin ownership/boundary guidance (BOUNDARIES.md)
  • plugin naming convention (theme-coupled vs reusable plugin tracks)
  • featured-vs-bundled plugin distinction
  • plugin catalog source + page (_data/featured_plugins.yml, _pages/plugins.md)
  • plugin feature proposal issue template
  • PR template updates for ownership routing

Compatibility and migration notes

  • Plugin integration in starter is via Gemfile + _config.yml.
  • al-folio starter intentionally does not use a gemspec in v1.
  • Transitional Bootstrap compatibility remains available via al_folio_bootstrap_compat.
  • Existing front-matter contracts are preserved where possible; runtime implementations are now plugin-owned.

Validation strategy in this PR

  • visual parity checks against the v0.16.3 baseline
  • starter integration suites (comments, plugin toggles, distill, compat, upgrade CLI)
  • style contract checks and repository linting

Scope intent

This is the foundational v1 architecture PR.

Post-merge feature work should generally target owning plugin repos first, with al-folio limited to starter wiring, docs, examples, and integration/visual validation.

@netlify
Copy link
Copy Markdown

netlify bot commented Jan 19, 2025

Deploy Preview for relaxed-lollipop-b6bc17 ready!

Name Link
🔨 Latest commit d0b918b
🔍 Latest deploy log https://app.netlify.com/sites/relaxed-lollipop-b6bc17/deploys/67a8bd02904849000879476f
😎 Deploy Preview https://deploy-preview-2968--relaxed-lollipop-b6bc17.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@stale
Copy link
Copy Markdown

stale bot commented Apr 11, 2025

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the wontfix label Apr 11, 2025
@stale
Copy link
Copy Markdown

stale bot commented Jun 10, 2025

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the wontfix label Jun 10, 2025
@stale
Copy link
Copy Markdown

stale bot commented Aug 11, 2025

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the wontfix label Aug 11, 2025
@stale stale bot closed this Aug 19, 2025
@alshedivat alshedivat reopened this Nov 7, 2025
@george-gca
Copy link
Copy Markdown
Collaborator

I decided to already move my contributions to this PR to the main repository, since it will already make it a little simpler. Also, I think the external-posts and analytics would be useful for more jekyll users, so maybe they should be created as jekyll- plugins?

@alshedivat
Copy link
Copy Markdown
Owner Author

agreed. instead of having these changes stuck in this dev branch, best to merge them into main. will see if I can find time to do it this weekend.

@netlify
Copy link
Copy Markdown

netlify bot commented Feb 7, 2026

Deploy Preview for relaxed-lollipop-b6bc17 ready!

Name Link
🔨 Latest commit 596763a
🔍 Latest deploy log https://app.netlify.com/projects/relaxed-lollipop-b6bc17/deploys/6998975122f087000883e7ae
😎 Deploy Preview https://deploy-preview-2968--relaxed-lollipop-b6bc17.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Removes `_plugins/google-scholar-citations.rb` and
`_plugins/inspirehep-citations.rb` and switches to using `al_citations`
gem instead.
Removes `_plugins/external_posts.rb` and switches to using
`al_ext_posts` gem.
switches to using
[`al-img-tools`](https://github.com/al-org-dev/al-img-tools/tree/main)
gem and removes unnecessary code and scripts.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 7, 2026

Failed prettier code check. Check this file for more information.

alshedivat and others added 7 commits February 7, 2026 00:17
## Summary
- add `al_utils` plugin gem dependency in `Gemfile`
- register `al_utils` in `_config.yml` plugin list
- remove local utility helpers from `_plugins/` that are now provided by
`al_utils`

## Extracted features
- `details` liquid block tag
- `file_exists` liquid tag
- `hideCustomBibtex` filter
- `remove_accents` filter

## Source plugin repository
- https://github.com/al-org-dev/al-utils
## Summary
- add `al_search` gem dependency from `al-org-dev/al-search`
- register `al_search` in `_config.yml` plugin list
- replace hardcoded search asset block in both script includes with `{%
al_search_assets %}`

## Notes
- plugin repo: https://github.com/al-org-dev/al-search
- this PR focuses on integration wiring and keeps current theme files in
place to avoid disruptive file deletions
)

## Summary
- add `al_charts` gem dependency from `al-org-dev/al-charts`
- register `al_charts` in `_config.yml` plugin list
- replace chart/diagram script-loading blocks in:
  - `_includes/scripts.liquid`
  - `_includes/distill_scripts.liquid`
  with plugin tag `{% al_charts_scripts %}`

## Notes
- plugin repo: https://github.com/al-org-dev/al-charts
- this PR migrates integration wiring while preserving existing theme
asset files for compatibility
## Summary
- add `al_math` gem dependency from `al-org-dev/al-math`
- register `al_math` in `_config.yml` plugin list
- replace math/tikzjax asset loading with plugin tags:
  - `{% al_math_styles %}` in `_includes/head.liquid`
  - `{% al_math_scripts %}` in `_includes/scripts.liquid`
  - `{% al_math_scripts %}` in `_includes/distill_scripts.liquid`

## Notes
- plugin repo: https://github.com/al-org-dev/al-math
- this PR focuses on integration wiring while preserving existing
theme-side assets for compatibility
## Summary
- add `al_comments` gem dependency from `al-org-dev/al-comments`
- register `al_comments` in `_config.yml` plugin list
- replace layout-level Disqus/Giscus includes with plugin tag `{%
al_comments %}` in:
  - `_layouts/post.liquid`
  - `_layouts/page.liquid`
  - `_layouts/distill.liquid`
  - `_layouts/book-review.liquid`

## Notes
- plugin repo: https://github.com/al-org-dev/al-comments
- PR keeps legacy include files in-place for backward compatibility
while switching primary rendering path to plugin
alshedivat and others added 8 commits February 7, 2026 02:39
)

## Summary
- add `al_newsletter` gem dependency from `al-org-dev/al-newsletter`
- register `al_newsletter` in `_config.yml` plugin list
- replace newsletter include/script usage with plugin tags:
  - `_includes/footer.liquid`
  - `_includes/related_posts.liquid`
  - `_layouts/about.liquid`
  - `_includes/scripts.liquid`

## Notes
- plugin repo: https://github.com/al-org-dev/al-newsletter
- PR switches rendering and JS loading to plugin-provided tags while
preserving existing theme include file for compatibility
@george-gca
Copy link
Copy Markdown
Collaborator

@alshedivat I saw that you started support for Tailwind in #3509. Think you can also finish #3481? I started a test with GitHub Copilot in #3481 and one with Jules in #3482 to see which one could better handle updating our dependencies, but I haven't finished it. I decided to go with the Copilot one, but I am still iterating/testing the solution. There are still some layout differences, and a thorough test is needed for the blog posts.

@alshedivat
Copy link
Copy Markdown
Owner Author

@george-gca, thanks for experimenting with copilot and jules for bootstrap upgrade.

i'm envisioning v1.0 as a modularization upgrade of al-folio, and potentially a revamp of all the underlying styles. migrating to tailwind would be ideal b/c it's more flexible and less opinionated about visual appearance compared to bootstrap. so it's easier to exactly reproduce al-folio's visual appearance with tailwind. that said, migrating from bootstrap to tailwind is a pretty substantial change, so my PR is an experiment to see if the latest version codex is able to execute such migration while fully preserving visual appearance and functionality.

…3509)

## Summary
- resolve open review feedback on integration assertions and visual
workflow triggers
- finalize starter wiring for strict v1 ownership boundaries
(`al_cookie` added as plugin-owned cookie runtime)
- keep starter tests focused on style contract, cross-gem integration,
and visual parity
- add optional Python setup helper for Jupyter deps
(`bin/setup-python-deps`) and update docs (`INSTALL.md`, `CUSTOMIZE.md`,
`FAQ.md`, `BOUNDARIES.md`)

## Key wiring changes
- add `al_cookie` to Gemfile/plugin list
- set `al_folio.distill.allow_remote_loader: true` to match current
distill runtime contract
- update integration checks (`integration_distill.sh`) to verify pinned
distill runtime hash via packaged gem asset

## Validation
- `npm run lint:prettier`
- `npm run lint:style-contract`
- `bash test/integration_bootstrap_compat.sh`
- `bash test/integration_distill.sh`
- `bash test/integration_upgrade_cli.sh`
Comment thread test/visual/helpers.js Fixed
Comment thread test/visual/helpers.js Fixed
@alshedivat alshedivat marked this pull request as ready for review February 20, 2026 05:15
@alshedivat alshedivat changed the title [DRAFT] v1.0 dev Upgrade al-folio to v1.0 Feb 20, 2026
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d7a8bd61c1

ℹ️ 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".

Comment thread .github/workflows/visual-regression.yml Outdated
Comment thread test/visual/helpers.js Outdated
@alshedivat
Copy link
Copy Markdown
Owner Author

Addressed latest review + CI feedback in commits 8828f47 and 596763a:\n\n- Increased visual regression timeout budget to 20 minutes.\n- Updated parity helper to capture full-page screenshots by default for parity checks.\n- Added a safe fallback for very long pages to avoid Playwright's 32767px screenshot limit.\n- Kept distill baseline parity on viewport capture (to avoid long-page image hard limit while preserving the dedicated distill stability checks).\n- Hardened broken-link checks with retries and replaced the flaky demo redirect in _projects/3_project.md.\n\nCurrent status: required CI checks are green on the latest head.

@george-gca
Copy link
Copy Markdown
Collaborator

I will try to find some time this week to properly review this. After all, it is a HUGE change.

@dfuchss
Copy link
Copy Markdown
Contributor

dfuchss commented Mar 2, 2026

Hi @alshedivat, hi @george-gca, from my perspective, it may be interesting to address this question here in the FAQs or somewhere as part of v1.0 :)

Most people that I know and that are using al-folio have their own tweaks / customizations; so far this was straightforward to keep up-to-date with upstream - thanks to git :)
With the upcoming changes, I guess, this get's rather tricky (even when you use subtrees - the solution I mentioned in the discussions). Maybe you have a better solution/idea for those people. Perhaps it would even be an option to have a de-modularized version of the repository that simply contains the subtrees and aggregates the changes via CI (so basically an artificial, full-blown al-folio that is read-only and fetches upstream changes from all al-folio-modules) .. That was an idea I had 10 minutes ago :)

@alshedivat
Copy link
Copy Markdown
Owner Author

thank you, @dfuchss, this is a great question. just wanted to note here that this PR won't be merged until everything is fully battle-tested and all important use cases are addressed. we'll certainly need to make sure upgrading + retaining existing customizations in most cases should be possible. (switch from bootstrap to tailwind will make this a bit more challenging, but the current design of v1.0 supports bootstrap backward compatibility.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants