Changes in version 0.3.4 (2026-10-14) - Every function that writes into a site now requires the site directory: dir has no default any more in build_site(), serve_site(), stop_server(), bundle_install(), new_post(), use_pages_workflow(), add_feed(), use_r_bloggers(), add_footer_credit(), remove_footer_credit(), set_theme_color(), set_theme_style(), set_theme_skin(), set_theme_font(), set_element_style(), add_css() and add_mathjax(). CRAN policy does not allow writing to a default location such as the working directory. Pass dir = "." from a session running inside the site, or the site's path from outside; the functions still climb to the site root from any directory inside it. Calling one without dir aborts with a message saying so. check() only reads and keeps its default. - The examples of install_ruby(), install_git(), install_quarto() and bundle_install() are gone (CRAN asks that examples never install software, not even inside \dontrun{}); their help pages describe the calls instead. - New add_feed(): renders the site's Atom feeds from a site-level copy of jekyll-feed's template (_includes/atom-feed.xml), patched so that al-folio's title: blank convention yields the author's full name as the feed title. The plugin alone printed the literal word "blank". Optional per-category feeds (feed/.xml, full text, only the posts carrying that category) on any theme. The template is taken from the jekyll-feed gem installed for the site (the version pinned in Gemfile.lock), falling back to that version's tag on GitHub and then to a copy shipped with the package. The include records its provenance so a later gem upgrade regenerates it. In the feeds, root-relative image and link paths in the post body are made absolute from url: in _config.yml, as aggregators such as R-Bloggers ask. The title patch targets one anchor line and aborts with a clear message if upstream moves it. - New use_r_bloggers(): the site side of an R-Bloggers submission in one call: an R-only feed via add_feed(category = "R"), the link back to R-Bloggers under the blog header on al-folio (a snippet to place on other themes), and the feed URL to submit. - new_site(theme = "al-folio") and, through it, migrate_hugo() call add_feed() so fresh al-folio sites never publish a feed titled "blank". - use_r_bloggers() leaves _pages/blog.md alone when it already links to R-Bloggers outside the jekylldown markers, instead of adding a second line. Changes in version 0.3.3 - Pandoc-style attributes on links ([x](u){target="_blank"}) are now rewritten as kramdown inline attribute lists during migration, as image attributes already were. Before, the braces were printed as literal text after the link in migrated posts. - The same rewrite runs on every knitted or pandoc-rendered post as a safety net, outside code blocks, so hand-written posts that copy the pandoc form render correctly too. Changes in version 0.3.2 - README and getting-started vignette open with the case for the package: the concrete benefits over a Hugo/blogdown setup (the Jekyll theme ecosystem led by al-folio, publishing sources instead of build artifacts, the plain-Markdown contract with no R-Ruby bridge, the one-call toolchain on every platform, one-call migration validated against real sites, customization as code, and the background preview loop) -- stated as verifiable facts, up front. Changes in version 0.3.1 - Scaffolded and migrated sites exclude *.Rproj from the Jekyll build -- RStudio project files were being copied into the published site. - Publishing docs corrected after the first real deploy: al-folio's bundled workflow publishes to a gh-pages branch, so its GitHub Pages source must be "Deploy from a branch: gh-pages" -- not "GitHub Actions", which fits Chirpy's workflow and use_pages_workflow()'s. The README and vignette also note that a history-replacing first push does not match the workflows' paths filters (trigger the first run by hand). - al-folio deploys on GitHub Actions no longer fail with "frozen mode" Gemfile.lock errors: the scrub that drops the jekyll-jupyter-notebook gem from the template's Gemfile now removes it from the shipped Gemfile.lock too (specs, DEPENDENCIES and CHECKSUMS sections) -- found on the first real deploy of a migrated site. Changes in version 0.3.0 - Three migration fixes surfaced by inspecting every generated page of the six-site battery, not just the build output: blogdown's {{< blogdown/postref >}} prefix is stripped before the bundle path rewrites (it was hiding raw tags from them, leaving broken figures); raw HTML img tags with bundle-relative paths are rewritten like Markdown links; and plain non-page files under Hugo's content/ tree (old blogdown sites keep figures in content/figs/) are published to the site root exactly like static/, honoring only_referenced. - {{< vimeo >}} shortcodes convert to an embedded player, like {{< youtube >}} already did. - One broken post no longer kills the whole build: when a _source file fails to knit (typical on migrated sites whose posts need packages from the original author's setup), build_site() skips it with a prominent warning listing the affected files, removes any partial output, and builds everything else. Surfaced by a six-site migration battery (this package's own test sites plus the three real sites from the migration gallery) run against this release. - Migrated and demo-free sites really are demo-free now. al-folio's template ships tens of MB of sample media (photos, videos, audio, notebooks, book covers, publication previews, resume data) that the content scrub used to leave behind; the scrub now removes every demo file that nothing left in the site references, checks references a second time at the end of migrate_hugo() (template pages protect some files until your content replaces them), prunes the preview/cover folders file by file (the bibliography references them by bare file name), and drops the placeholder portrait once the profile picture is yours. The demo jekyll_get_json resume feed goes from _config.yml along with its data file. Net effect on a real migration: the site keeps only what came from the original site plus what Jekyll and the theme need (~62 MB of demo media gone). Changes in version 0.2.5 - Footer credit: add_footer_credit() inserts "Built from R with jekylldown X.Y.Z." (linked) into the theme's own footer line -- right after the "Powered by Jekyll ..." sentence on al-folio (via footer_text: in _config.yml), and as a managed block in a local _includes/footer.html on minima, Chirpy and Minimal Mistakes. new_site() adds it to fresh sites, build_site() keeps the version number current on every build, and remove_footer_credit() takes it out. Hosting claims ("Hosted by GitHub Pages") are the theme's own footer_text defaults and stay untouched. Changes in version 0.2.4 - Faster live preview: serve_site() rebuilds content-only edits (posts, pages) with jekyll's incremental mode, regenerating just the changed pages; edits that incremental mode does not track (sass partials, _config.yml, data files) still get a full build. The .jekyll-metadata cache joins the serve artifacts in .gitignore. - Documented the big Windows speed lever (excluding the site and toolchain directories from real-time antivirus scanning) in ?serve_site and the README. Changes in version 0.2.3 - The Windows CI smoke test grew an al-folio end-to-end leg (new_site from the template, bundle_install with its git-sourced gem, build_site), so the theme that exercises the most toolchain now runs on a real Windows on every push. - New install_git() (Windows): downloads MinGit -- the portable build Git for Windows publishes for embedding -- into the isolated toolchain, with the same API-then-github.com-then-pinned release ladder, file = for offline installs and toolchain reuse as install_ruby(). Bundler and new_site()'s template fetch find it automatically, so al-folio's git-sourced gem installs without a system git; bundle_install()'s missing-git message and check() now point at it. Changes in version 0.2.2 - al-folio scaffolds cleanly on Windows again: upstream started shipping hidden tooling directories with symlinks that Windows' tar cannot extract -- the archive extraction now tolerates that noise, and every hidden file or directory a template ships (except the deploy workflow, .gitignore and .nojekyll) is dropped from the scaffolded site, on every platform and fetch path. - Clear guidance instead of a Ruby stack trace, twice: building a site whose gems were never installed now says to run bundle_install(), and bundle_install() on a Gemfile with git-sourced gems (al-folio's has one) checks for git upfront and points at git-scm.com -- the one step of the workflow that genuinely needs git. Changes in version 0.2.1 - new_site() no longer requires git for the GitHub-hosted themes (al-folio and the Chirpy starter): when git is missing -- common on Windows -- the template is downloaded as a plain archive of the default branch instead, and a failed clone falls back to the same download. - Documentation refreshed for Windows: a CI badge in the README, the Windows setup section notes that neither git nor admin rights are needed to scaffold and build, and the "cloned with git" wording is gone from ?new_site and the vignettes. Changes in version 0.2.0 - serve_site() works on Windows: the build command was assembled as a shell string with a POSIX-only VAR=value environment prefix and a /dev/null-style redirect, which Windows cannot run (" 'JEKYLL_NO_BUNDLER_REQUIRE=true' not found"). Rebuilds now go through processx with the environment passed properly, the output silenced without a shell redirect, and .bat/.cmd wrappers routed through cmd.exe -- on every platform. - The Windows CI smoke test now also starts (and stops) a background serve_site(), so the serving path is exercised on a real Windows from here on. Changes in version 0.1.19 - Re-running install_ruby() is now cheap: a working provisioned Ruby is reused (no re-download; force = TRUE starts over) and already-installed gems are skipped (gem install --conservative), so the function doubles as "complete whatever is missing". - install_ruby() also installs the minima gem: the second Windows CI run got all the way through Ruby, MSYS2 and Jekyll, then failed building the scaffolded default site because the theme gem was missing. The README's Linux/macOS gem install one-liners gained minima too -- a fresh toolchain set up from those instructions had the same gap on every platform. Changes in version 0.1.18 - When api.github.com is unreachable, the latest release is now discovered from the releases/latest page on github.com itself (the same host the archive downloads from) before resorting to the pinned fallback, and the DNS warning noise is suppressed. - First real-Windows CI run, three fixes fed back from it: install_ruby() now sets up the MSYS2 build tools by default (devkit = TRUE) -- Jekyll depends on the eventmachine gem, which has no precompiled binary for current Rubies and failed to compile without a proper toolchain; two test expectations compare normalized paths (Windows mixes separators and 8.3 short names); the tilde expansion test is skipped on Windows, where R_USER is fixed at startup and the fixture's HOME override cannot take effect. Changes in version 0.1.17 - install_ruby() no longer depends on api.github.com being reachable: when the release lookup fails (that host is blocked on some networks even where github.com works), a known-good pinned RubyInstaller release is downloaded directly from github.com, with a new version argument to pick a specific release; download failures now explain the proxy/offline escape hatches. - devkit = TRUE fixed before it ever worked: upstream publishes no portable .7z of the devkit variant, so the MSYS2 toolchain is now added by running RubyInstaller's own ridk install after unpacking. - New GitHub Actions workflow: R CMD check on Linux and Windows, plus a Windows end-to-end smoke test that runs install_ruby(), scaffolds a site and builds it. Changes in version 0.1.16 - Windows support for the isolated toolchain: new install_ruby() downloads the portable RubyInstaller archive (a .7z; needs the archive package to unpack) into tools::R_user_dir("jekylldown", "data") and installs the jekyll and bundler gems there -- no admin rights, no graphical installer, nothing system-wide. install_ruby(devkit = TRUE) adds the MSYS2 build tools for gems that compile C extensions. - Windows plumbing to match: executable discovery now finds the .bat/.cmd/.exe wrappers Ruby uses there, those wrappers are run through cmd.exe /c (processx cannot exec batch files directly), the quiet serve rebuild redirects to NUL instead of /dev/null, and check()'s advice for a missing Ruby points at install_ruby() on Windows. Changes in version 0.1.15 - set_element_style("socials", size = ...) now actually resizes the icons. The mapped selectors were losing to the themes' own, more specific rules (al-folio nests .contact-icons under .social; Chirpy nests .sidebar-bottom under #sidebar) -- the maps now match the themes' specificity. On top of the font-size, the sizing writes companion rules for what a font size cannot reach: al-folio's image icons, minima's fixed 16px SVG icons, and Chirpy's fixed-size circular buttons all track the requested size now. Changes in version 0.1.14 - Breaking change (ergonomics): the customization functions now take what you are setting as the first argument and the site as the last -- so calls like set_element_style("socials", size = "3rem") and set_theme_color("red") work directly from inside the site's project. New signatures: set_theme_color(color, dir = "."), set_theme_style(..., dir = "."), set_theme_skin(skin, dir = "."), set_theme_font(family, size, headings, code, google, dir = "."), set_element_style(element, ..., dir = "."), add_css(css, id, dir = "."). From outside a site, pass the location by name: set_theme_color("red", dir = "my-site"). - Calls in the old style (site path first) do not fail obscurely: when the first argument is an existing site directory, the functions abort with a message pointing at the dir argument. Changes in version 0.1.13 - Undo for the accent color: set_theme_color(dir, NULL) removes the override and returns to the theme default. Deleting the site-local stylesheet (assets/css/main.scss) remains the documented way to drop every customization at once. - New "socials" element in set_element_style()'s per-theme maps (al-folio's about-page icon row, Chirpy's sidebar icons, Minimal Mistakes' author links, minima's footer icons) -- e.g. set_element_style(site, "socials", size = "2rem"). - Calling any of these (or build_site()) from outside a site now aborts with a message that tells you to pass the site's path via dir, instead of a bare "no _config.yml" error. - All customization functions (set_theme_color(), set_theme_style(), set_theme_skin(), set_theme_font(), set_element_style(), add_css(), add_mathjax()) now find the site root from any subdirectory, exactly like build_site() -- running them from inside the site's RStudio project just works with the default dir = ".". Changes in version 0.1.12 - The blank-Viewer race, actually fixed: waiting for a TCP connection was not enough (the kernel accepts connections before the app answers anything). serve_site() now waits for a real HTTP response -- which also warms the server up before the Viewer's own request -- plus a short settle before opening the preview. - Calling serve_site() again for a site that is already being served now reuses the running server and just reopens the preview, instead of silently piling up background workers (the pid file records the port too). Changes in version 0.1.11 - Fixed the blank RStudio Viewer on serve_site(): the preview was opened while the background worker was still doing the initial build, before anything listened on the port (the Viewer does not retry). serve_site() now waits for the server to answer before opening the preview -- and if the worker dies during the initial build, the last log lines are surfaced as the error instead of a silent blank page. - serve_site() itself now keeps .jekylldown-serve.* (its log and pid files) in the site's .gitignore -- covering sites created by older versions or not created by jekylldown at all; users never need to know the line exists. Changes in version 0.1.10 - serve_site() opens the preview in RStudio's Viewer pane again when running inside RStudio (background mode was sending it to the system browser); elsewhere the default browser keeps being used. - new_site() adds .jekylldown-serve.* (the background server's log and pid files) to the site's .gitignore on every theme. Changes in version 0.1.9 - Fixed a critical serve_site() bug: since the servr::httw() rewrite, source edits never triggered a rebuild -- servr evaluates its file watcher lazily from inside the served _site/ directory, so the watcher was silently watching the wrong tree. The watch path is now absolute, and the live loop truly works: save a watched file with the preview tab open and the site re-knits, rebuilds and reloads. - serve_site() now runs in a separate background R process by default (background = TRUE in interactive sessions): the console stays free, nothing spams it, and rebuild output goes to .jekylldown-serve.log in the site (one status line per rebuild instead of the full jekyll echo). stop_server("site") stops it via the recorded PID. background = FALSE keeps the old in-session daemon. - knit_all() gained quiet =, used by the serve loop to silence the per-poll "all posts up to date" chatter. Changes in version 0.1.8 - The migration gallery's before/after comparisons are side-by-side again, composed at a fixed 680px so the two halves split the vignette's text width exactly and can never overflow it (plus a CSS guard in the vignette itself). - Visual audit of the migrated software, talks and contact pages across Chirpy, Minimal Mistakes and minima: all render correctly (package logos at their ported size, floated where the theme allows). Changes in version 0.1.7 - Fixed, for real this time: Markdown tables written GitHub-style -- without the leading pipe (Topic|Length over ----|----) and/or glued to the previous paragraph with no blank line -- were not recognized by kramdown on any theme, and rendered as prose full of pipe characters. tag_tables() (applied both when knitting and when migrating) now normalizes them: leading pipes added, a blank line inserted before the table, and the {: .table} styling tag applied. Fenced code and {% highlight %} blocks remain untouched. Changes in version 0.1.6 Theme-parity pass: everything that worked on al-folio now works on the other three themes. - Fixed: posts on Minimal Mistakes rendered with no layout at all (the theme has no post layout -- it uses single), which looked like "nothing renders", tables included. The scaffold now ships a _layouts/post.html alias, so every jekylldown post works unchanged. - Fixed: figure classes ported from the Hugo theme had no effect on Chirpy -- its content pipeline moves the image's class onto a wrapping , so img.pkg matched nothing and logos rendered full-size. Ported rules now target both shapes (img.pkg, .pkg img). - Fixed: ./-relative paths in plain posts (e.g. , which Hugo's relativeURLs used to paper over) resolved against the post URL and 404'd; they are now rooted to the site during migration. - Audited the rest: tables, socials, avatar, identity, publications, MathJax, styling layers and deploy workflows behave equivalently on all four themes; the intentional differences that remain are minima's lack of a CSS-variable layer (documented) and jekyll-scholar being al-folio-only (other themes get the formatted-citation page). Changes in version 0.1.5 - Fixed: on a site with a Gemfile but no Gemfile.lock (that is, before bundle_install()), build_site() and serve_site() crashed -- Jekyll insisted on Bundler.setup and died on any version skew (You have already activated bigdecimal ...). Plain-jekyll runs now set JEKYLL_NO_BUNDLER_REQUIRE, Jekyll's own escape hatch; once a lockfile exists, bundle exec takes over as before. - publications = "bib" now produces a decent page on every theme: on al-folio it keeps feeding jekyll-scholar, and on themes without it (minima, Chirpy, Minimal Mistakes) the page is rebuilt as a clean Markdown list of formatted citations (APA, fetched from doi.org -- the same authoritative source), each ending in a single DOI link. Raw-HTML publication pages, which kramdown mangles, are no longer the fallback when the DOIs are fetchable. Changes in version 0.1.4 - The getting-started vignette shows what the first build of each scaffold looks like (minima, al-folio, Chirpy), screenshots taken from freshly generated sites. - new_site(theme = "al-folio") now sets baseurl: "" (the template ships its own /al-folio, which 404'd every asset on a fresh site served at the root -- the first build looked completely unstyled), and the scrub comments out the placeholder profile picture (Einstein) so an empty site starts with no photo; migrate_hugo() re-enables the line when it finds a real avatar. Changes in version 0.1.3 - The getting-started vignette maps the home page per theme: where the welcome text lives, where your name and photo come from, and which file controls the social icons shown (al-folio _data/socials.yml, Chirpy _data/contact.yml + config usernames, Minimal Mistakes author.links, minima footer keys). Changes in version 0.1.2 - New "Edit the site afterwards" section in the getting-started vignette: the source-vs-artifact rule for posts, a per-theme map of where pages and their menu positions live, where identity/socials/ publications data go, the live-edit loop (including why _config.yml changes apply without a server restart under serve_site()), and the pages-are-not-Rmd limitation. The README's file map gained the pages row and points there. Changes in version 0.1.1 - New use_pages_workflow(): writes the standard GitHub Actions workflow that builds and deploys the site to GitHub Pages (checkout, cached Ruby/bundle, jekyll build, deploy) for themes that do not ship one (minima, Minimal Mistakes, ...); sites whose theme already includes a deploy workflow (al-folio, Chirpy) are left alone. - New "Publishing" section in the README: the three GitHub Pages routes (Actions, classic branch build and its plugin limits, local build + gh-pages), plus Netlify/Cloudflare Pages, GitLab Pages and plain static hosting -- _site/ is static files, any host works. Changes in version 0.1.0 First minor release: four themes with scaffolding, styling, migration and a real-world gallery -- the package is feature-complete for its anchor use cases. - New add_mathjax(): enables LaTeX math the way each theme expects (al-folio's native flag, Chirpy's per-page math default, Minimal Mistakes' head_scripts, or a configured MathJax script inserted into a site-local head include on minima), with inline $...$ and display $$...$$ both rendering. Demonstrated in the gallery on a 2007 post. - The migration gallery closes the loop with a "make it yours" section: the customization layers applied to the gallery sites, with results shown -- Chirpy CSS variables plus the author portrait recovered from the Hugo source, a Minimal Mistakes skin with an inlined Google Font, and al-folio fonts/background/managed CSS. - All before/after comparisons are now stacked and labeled (original on top, migrated below), sized to the vignette page. Changes in version 0.0.9 - New vignette, "Migration gallery": four real published blogdown sites -- yihui.org (Yihui Xie, 1884 posts), juliasilge.com (Julia Silge), jennybryan.org (Jenny Bryan) and allanvc.github.io -- migrated from their public sources to the four supported themes, with before/after screenshots of more than one page per site. - The gallery hardened migrate_hugo() against the real world: - menus are also found in [[menu.header]], [[menu.nav]] and theme-specific [[params.mainMenu]] lists (link/text keys); - content directories dominated by date-named files (multilingual content/en/, custom section names) are detected as post sections; - shortcodes in the {{% %}} form and with quoted arguments convert like their {{< >}} cousins, and blogdown's {{< blogdown/postref >}} wrappers are resolved away; - literal {{/{% in migrated content (LaTeX math, template snippets) are Liquid-escaped -- previously a single such post aborted the entire Jekyll build; - new rerender argument: rerender = FALSE migrates the rendered Markdown blogdown committed next to each R source instead of queueing years of old posts for re-knitting -- the right mode for archival migrations. - Fixed: gem-based Minimal Mistakes sites now include _pages in the Jekyll build -- without it every migrated page 404'd. Changes in version 0.0.8 - The package Title now says what has been true since 0.0.3: sites are written from 'R Markdown' and 'Quarto'. - Documentation synchronized with everything shipped since the first prototype: the README gained a "Customizing the theme" section (the four styling layers plus Minimal Mistakes skins), the Quarto CLI install, the three post flavors and the multi-theme migration scope; the getting-started vignette now covers deployment for all four themes; the migration vignette points out that every supported theme is a migrate_hugo() target (with al-folio as its worked example); and the package Description mentions the four themes and the declarative customization. - Removed a stale claim: build.R is no longer described as the hook behind serve_site() (it has not been since the servr::httw() rewrite); the generated file documents itself as a compatibility hook for users driving servr::jekyll() directly. Changes in version 0.0.7 - First-class support for the most popular Jekyll themes, joining al-folio and minima: new_site(theme = "chirpy") clones the Chirpy starter (stripped of the upstream repo tooling, Pages deploy workflow kept, and the theme gem un-pinned so bundler can pick a release the local Ruby runs); new_site(theme = "minimal-mistakes") generates a gem-based Minimal Mistakes site locally. The knit/serve pipeline, the styled tables and the customization layers know all four themes: set_theme_style() speaks Chirpy's CSS variables, the new set_theme_skin() switches Minimal Mistakes' compiled skins, set_element_style() carries per-theme selector maps, and set_theme_color() delegates sensibly. - migrate_hugo() targets the new themes too: menu pages become Chirpy _tabs/ entries (icon + order) or Minimal Mistakes _pages/ plus _data/navigation.yml; the Hugo home lands in Chirpy's about tab or above the Minimal Mistakes post list; the avatar becomes Chirpy's avatar: or Minimal Mistakes' author.avatar; social profiles are written to Chirpy's social: config block (plus its github/twitter buttons) or Minimal Mistakes' author: sidebar links, with URLs rebuilt deterministically from the extracted usernames. publications = "bib" falls back to "html" on themes without _bibliography/. Changes in version 0.0.6 - Declarative theme customization, in four layers of decreasing robustness, all written as managed idempotent blocks in the site-local stylesheet: set_theme_style() overrides al-folio's own CSS variables (background, text, dividers, code/card/footer colors, ...) with light/dark-aware values; set_theme_font() sets font families (Google Fonts faces are fetched and inlined as @font-face, valid anywhere in a stylesheet, unlike @import) and the base size; set_element_style() styles one semantic element ("navbar", "footer", "headings", ...) through a curated selector map -- documented as the fragile layer, with a warning when the installed theme no longer contains a mapped selector; add_css() is the escape hatch: free-form CSS in a managed, removable block. Changes in version 0.0.5 - Every exported function now has runnable examples and a documented return value. - New "Getting started with jekylldown" vignette covering the full workflow: toolchain check, site creation, the three post flavors, build/preview, customization and GitHub Pages deployment. Changes in version 0.0.4 - .Rmd posts can opt into a pandoc pipeline with knit_method: pandoc in the front matter (or site-wide with options(jekylldown.knit_method = "pandoc")): the post is rendered through rmarkdown's md_document(variant = "gfm"), which enables the pandoc-only features -- citations (bibliography:), footnotes, cross-references -- while figures and front matter get the same treatment as every other post. The default remains plain knitr (fast, no pandoc needed). - serve_site() was rebuilt on servr::httw(): it now watches the whole source tree (.Rmd, .qmd, Markdown pages, _config.yml, data files, styles) and re-knits/re-renders whatever is outdated before rebuilding -- Quarto posts included. Previously only .Rmd changes triggered a rebuild. - install_quarto() downloads the Quarto CLI into jekylldown's isolated toolchain directory (tools::R_user_dir("jekylldown", "data")/quarto), where the package finds it automatically -- nothing system-wide, no shell configuration, delete the directory to uninstall. check() reports the Quarto found (toolchain, PATH, or the quarto package's discovery). Changes in version 0.0.3 - Quarto support: _source/*.qmd posts are rendered by build_site() through the Quarto CLI (quarto render --to gfm) and adapted to the same conventions as .Rmd posts: source front matter carried over (minus Quarto-only keys), pandoc's repeated title/date heading stripped, figures moved to assets/img/posts// behind {{ site.baseurl }}. new_post() gained format = c("Rmd", "qmd", "md"). - Markdown pipe tables (hand-written or from knitr::kable()) are tagged with a {: .table} kramdown IAL when knitting and when migrating, so al-folio styles them (a bare gets almost no styling from the theme); code blocks are left untouched. Changes in version 0.0.2 - migrate_hugo() fills al-folio's _data/socials.yml from the Hugo pages: profile URLs (GitHub, LinkedIn, ORCID, Google Scholar, ResearchGate, StackOverflow, X, and friends), the first mailto: address, and a CV/resume PDF link. Only profile-shaped URLs on non-post pages count, so repository links and profiles mentioned in posts are not mistaken for the site owner's. - publications = "bib" is now the default in migrate_hugo() (it falls back to "html" automatically without _bibliography/, DOIs or network), after a real-world migration with the old "html" default produced a broken publications page. - The al-folio scrub goes deeper: the theme's own top-level dev docs are deleted together with their exclude entries, the upstream repo tooling is dropped (hidden files and directories except .gitignore, the docs/ tree, demo data files, and all of .github except the Pages deploy workflow), and the jekyll-jupyter-notebook plugin is removed (the demo posts were its only content, and without jupyter/nbconvert on the PATH it aborts every local build). Changes in version 0.0.1 First prototype. Do for Jekyll what blogdown does for Hugo: - new_site() scaffolds a Jekyll site with the jekylldown conventions (_source/*.Rmd knitted to _posts/*.md), with the minima theme generated locally or al-folio cloned from GitHub. - new_post() creates dated posts with Jekyll front matter. - build_site() / knit_post() knit outdated posts (front matter preserved, kramdown/rouge fences, figures in assets/img/posts/ via {{ site.baseurl }}) and run jekyll build when available. - serve_site() / stop_server() wrap servr::jekyll() for live preview with automatic re-knitting. - bundle_install() installs a theme's Gemfile dependencies into the isolated gem environment; sites with a Gemfile.lock are then built with bundle exec jekyll automatically. - migrate_hugo() converts a Hugo/blogdown site guided by its config: post filenames, YAML and TOML front matter, page bundles, figure/ youtube shortcodes, and Pandoc image attributes. The Hugo menu ([[menu.main]]) drives page migration (content/.md becomes a Jekyll page with the same URL and nav_order), content/_index.md becomes the landing page (with avatar-to-profile-picture conversion on al-folio), and the site identity (name, url, description, jekyll-scholar author names) is written into _config.yml. only_referenced = TRUE copies from static/ only the files the migrated content actually references. publications = "bib" converts a hand-written publications page deterministically: the DOIs are extracted, each reference is fetched as authoritative BibTeX from doi.org (Crossref/DataCite content negotiation), preview images are paired with their DOIs, and _bibliography/papers.bib drives al-folio's jekyll-scholar page (badges and buttons included). theme_color = picks the al-folio accent color. url/baseurl are derived from the Hugo baseURL (empty baseurl for user pages). A report lists everything that needs manual porting. - {{< figure >}} conversion keeps class/width/height as a kramdown inline attribute list, and the CSS rules behind those classes (which is where Hugo themes define figure display sizes) are ported from the Hugo theme's sass into the new site's stylesheet, with sass variables resolved and selectors rewritten for kramdown output -- so images keep the size they had on the old site. - set_theme_color() changes al-folio's accent color at any time: named palette colors ("red", "blue", ...) resolved from the theme's own variables, or any hex value; implemented as a CSS-variable override appended to a site-local copy of the theme's main.scss. - new_site(demo = FALSE) (implied by migrate_hugo()) scrubs al-folio's demo content: sample posts, news, projects, books, teachings, the Einstein pages, the demo bibliography and the external demo blog feeds (external_sources). - check() prints a situation report on the Ruby/Jekyll toolchain, with support for a fully isolated toolchain under tools::R_user_dir("jekylldown", "data").