Presentaciones y materiales de charlas, talleres y sesiones formativas.
Public archive and browsable catalogue of Ernesto Serrano's talks. Each talk is an eXeLearning unit (a self-contained, multi-page HTML learning object), and the repository publishes a static catalogue that lists and serves them.
- Website: https://erseco.github.io/talks/ (after enabling GitHub Pages)
- Pre-release artifacts: https://github.com/erseco/talks/releases/tag/pre-release
The website is in Spanish; the code, comments and this document are in English.
Each talk lives in its own folder and is described by a talk.yml (the single
source of truth for metadata). Every talk declares an engine:
| engine | what it is | served as |
|---|---|---|
exelearning (default) |
the committed, unzipped .elpx (content.xml + rendered index.html/html/libs/theme) |
the unit, under charlas/<id>/unit/ |
external |
slides hosted elsewhere (link only) | links from the card |
The eXeLearning units are pre-rendered and committed — the catalogue build just validates metadata and copies each unit. So CI needs nothing but Node:
scripts/validate-talks.jsvalidates everytalk.yml.scripts/generate-site.jsbuilds the catalogue (cards, filters, search, per-talk pages,index.json) and copies each unit undercharlas/<id>/unit/.
Regenerating a unit (Markdown spec → .elp → eXeLearning CLI → unzip) is a
local step — see Authoring and scripts/exe/.
talks/
├── .github/workflows/ # ci.yml, pages.yml, release.yml
├── assets/
│ ├── images/ # shared images
│ └── exe-themes/ # custom eXeLearning themes (jacquenetta…)
├── data/site.yml # site-level config (title, author, links…)
├── scripts/
│ ├── validate-talks.js
│ ├── generate-site.js
│ ├── import-external-talks.js
│ └── exe/ # exelib.py (spec→.elp), build.sh, specs/*.json
├── site/static/ # catalogue style.css + app.js + theme.js + fonts
├── talks/<year>/<id>/ # one folder per talk:
│ ├── talk.yml # metadata (required)
│ ├── README.md
│ ├── notes.md # speaker notes (recovered / authored)
│ ├── index.html, html/, libs/, content/, theme/, content.xml … ← the unit
│ └── external.md # provenance (for talks adapted from elsewhere)
├── output/ # generated site (gitignored, .gitkeep only)
├── Makefile · package.json · LICENSE
Requires Node.js ≥ 20 and make.
make install # install Node deps (js-yaml)
make # default: validate + build the static site (output/site/)
make validate # check every talk.yml
make site # (re)generate output/site/
make serve # serve the site locally (http://localhost:8080)
make clean # remove generated artifactsRegenerating the eXeLearning units (local only, needs the eXeLearning CLI):
# Requires python3 + `pip install markdown` and the eXeLearning CLI (Bun) repo.
EXE_DIR=/path/to/exelearning_5 make exe # rebuilds every unit from its specA talk's content is a small JSON spec in scripts/exe/specs/<id>.json:
pages → blocks → Markdown. scripts/exe/exelib.py turns it into an eXeLearning
.elp (Markdown iDevices), and scripts/exe/build.sh exports it with its theme
and unzips the unit into the talk folder.
- Create
talks/<year>/<id>/talk.ymlwithengine: exelearning. - Write
scripts/exe/specs/<id>.json(set"theme"tobaseorjacquenetta). - Custom themes live in
assets/exe-themes/; symlink them where the CLI looks ($EXE_DIR/public/files/perm/themes/base/<theme>). make exeto render, thenmake buildand commit the generated unit.
External / link-only talks use engine: external and the external: block.
- base — eXeLearning's default theme (used for the recent talks).
- jeanette (
assets/exe-themes/jeanette/) — a minimalist black & white theme built onbase; the working theme for our talks. Used by the older talks, whose pages are the rendered slide captures (one page per slide). - jacquenetta (
assets/exe-themes/jacquenetta/) — a faithful take on the Jacquenetta SlidesCarnival template (Arial, black/white + teal#158158accent, black title box), for HTML-text talks that should look like the original slides without captures. Set"theme": "jacquenetta"in a spec.
release.yml uses
ncipollo/release-action. On push
to main (or manual dispatch) it refreshes a rolling pre-release with the
site bundle (site.zip) and index.json; on a published release it attaches the
same artifacts. Pull requests only build.
pages.yml deploys output/site to GitHub Pages
on every push to main (minimal permissions). One-time setup: Settings → Pages
→ Source: GitHub Actions.
This repository — code and original presentation content — is licensed under
CC BY-SA 4.0 (see LICENSE). Every talk is CC BY-SA 4.0. Bundled
eXeLearning runtime files and third-party themes keep their own licenses.
Ernesto Serrano — https://ernesto.es · https://github.com/erseco