R packages, spatial data, maps and open-source projects by dieghernan.
This repository contains the source of One World, my personal blog and portfolio. I share R tutorials, mapping experiments and the tools I build along the way.
The site runs on Jekyll with my Chulapa theme and is hosted on GitHub Pages.
- Blog: R tutorials, package updates and experiments with geographic data.
- Projects: R packages, datasets and other open-source work, including historical Pebble projects.
- Gallery: Maps, plots and Wikimedia contributions.
- About: A little about me and where to find my work.
- Archive: Posts and projects ordered by date.
Featured packages include tidyterra, giscoR, mapSpain and geobounds for spatial data, cffr for software citation and resmush for image optimization.
| Path | Contents |
|---|---|
| index.md | Home page. |
| _pages/ | About, projects, gallery, archives and other site pages. |
| collections/_posts/ | Published blog articles in Markdown. |
| collections/_projects/ | Individual project pages. |
| _Rmd/ | R Markdown sources for tutorials and mapping experiments. |
| _includes/ and _layouts/ | Site customizations that extend Chulapa. |
| assets/ | Styles, scripts and other static assets. |
| _config.yml | Jekyll configuration and site settings. |
| llms.txt | A curated guide to the site for language models. |
Use Ruby 3.4, as specified in .ruby-version, and Bundler. The Gemfile specifies Jekyll 4.4 and the site's plugins.
From the repository root:
bundle install
bundle exec jekyll serveOpen localhost:4000 to preview the site. Jekyll downloads the remote Chulapa theme during the build, so an internet connection is required.
To build without starting a server:
bundle exec jekyll buildThe generated site is written to _site/, which is ignored by Git.
The GitHub Actions workflows build the site and deploy it to GitHub Pages when changes are pushed to main or master. Deployment can also be started manually from the Actions tab.
The root llms.txt follows the llms.txt proposal. Jekyll copies it unchanged to /llms.txt, and the deployment workflows include it with the generated site. Update its selected links when the site structure or featured resources change.
The blog uses its discoverable Atom and RSS feeds to publish through
Bridgy Fed. The home page's
representative h-card supplies the blog's display name, avatar, banner and bio.
Keep its u-url pointing to the site's canonical home page.
Edit indieweb_profile in _config.yml to update the name, nickname, bio,
location, topics and profile links. The custom/h-card.html include renders
the card outside the home page's h-entry so parsers can discover it directly.
The file .well-known/atproto-did contains the DID of
the blog's bridged Bluesky account, not the author's personal account. Jekyll
includes .well-known explicitly so the file is published without HTML layout.
After deployment, check that https://dieghernan.github.io/.well-known/atproto-did
returns only the DID, then complete the custom Bluesky handle change from the
blog's Bridgy Fed user page. Publishing the file alone does not change the handle.
Refresh the profile there after publishing changes to the h-card.
Keep feed-based publishing enabled: sending even one webmention to Bridgy Fed switches the site to webmention-based publishing and stops feed polling. The incoming webmention.io endpoint is separate and can remain enabled. Feed polling is asynchronous; the current Bridgy Fed implementation schedules checks between two hours and one day apart. A profile refresh does not import posts.
When a post also exists on another service, add its actual public permalink (not a profile URL) to the post's frontmatter:
syndication:
- https://social.example/@author/123456
- https://bsky.app/profile/example.com/post/exampleThese are illustrative URLs, not existing copies of this site's posts. Replace
them with the real permalinks before publishing. If the post has an equivalent
.Rmd source, keep its frontmatter synchronized.
The default layout displays an “Also published on” list outside the article's
e-content and inside its h-entry. Each link has u-syndication and
rel="syndication", allowing IndieWeb readers to identify the copies. Only
absolute HTTP(S) links with a hostname are rendered; no section appears when
there are no usable links. No JavaScript, notifications or new service is
required. This does not change Bridgy Fed's feed-based publishing.
After the Pages deployment succeeds on main, its workflow reads posts from the
exact deployed HTML artifact and sends Webmentions to external links inside each
article's e-content. Navigation, syndicated-copy footers and project pages are
not included. Discovery supports HTTP Link headers and HTML rel="webmention".
The source article must also match the live public page before any sends occur;
a stale CDN response is retried on the next deployment.
The first run creates a baseline without notifying the historical archive.
Later runs process new or edited articles. A dedicated webmention-state branch
records each accepted source/target/content combination and links without an
endpoint. Unchanged deliveries are skipped; failed requests are retried on the
next successful deployment. An edited article may notify existing destinations
again. Removing links or deleting posts does not send deletion notifications.
Keep this state branch: deleting it resets the baseline. Ledger version 2
uses the audited fingerprint pairs in _scripts/webmention-scope-v2.json to
migrate recorded targets to the editorial-only e-content scope without
resending them just because the layout changed. Both the old and new hashes
must match; an editorial edit does not match that pair and is still processed.
Targets without a record (including failed submissions) remain pending. No extra
secret, service or Python dependency is needed; the job uses the repository's
GITHUB_TOKEN with permission to write this branch.
The sender excludes this site's own domain and fed.brid.gy (including its
subdomains), endpoints and redirect destinations. This preserves Bridgy Fed's
feed-based publishing. It also pins each connection to a validated public IP while retaining the
original hostname for HTTPS certificate checks, and never follows endpoint POST
redirects. The sender requires direct network access (as on GitHub-hosted
runners); it refuses requests if a forward proxy is configured because a proxy
would resolve the destination independently. Receiver failures are logged and do not block
the already completed deployment. Review the Send outgoing Webmentions job
log for accepted, unsupported and retryable destinations. Disabling that job
stops outgoing notifications without affecting incoming Webmentions.
Local checks do not send notifications:
python -m unittest discover -s _scripts -p 'test_*.py'
python _scripts/webmentions.py --site _site --state /tmp/webmention-state.json --dry-runThis repository is distributed under the MIT license.