unaltraweb 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/Makefile +412 -0
- data/README.md +226 -0
- data/_config.yml +842 -0
- data/_data/i18n/ca.yml +278 -0
- data/_data/i18n/en.yml +278 -0
- data/_data/i18n/es.yml +278 -0
- data/_includes/audio.liquid +30 -0
- data/_includes/bib_search.liquid +5 -0
- data/_includes/blog-list.liquid +66 -0
- data/_includes/book-citation.liquid +33 -0
- data/_includes/citation.liquid +26 -0
- data/_includes/custom_head.liquid +3 -0
- data/_includes/custom_scripts.liquid +5 -0
- data/_includes/cv/list.liquid +5 -0
- data/_includes/cv/list_groups.liquid +51 -0
- data/_includes/cv/map.liquid +29 -0
- data/_includes/cv/nested_list.liquid +16 -0
- data/_includes/cv/time_table.liquid +118 -0
- data/_includes/cv-download-card.liquid +26 -0
- data/_includes/developer-mode-switcher.liquid +24 -0
- data/_includes/disqus.liquid +13 -0
- data/_includes/distill_scripts.liquid +298 -0
- data/_includes/documentation-download-detail.liquid +76 -0
- data/_includes/documentation-downloads.liquid +71 -0
- data/_includes/documentation-profile-attributes.liquid +4 -0
- data/_includes/documentation-section-toc.liquid +9 -0
- data/_includes/documentation-sidebar.liquid +112 -0
- data/_includes/figure.liquid +87 -0
- data/_includes/footer.liquid +66 -0
- data/_includes/giscus.liquid +25 -0
- data/_includes/head.liquid +220 -0
- data/_includes/header.liquid +544 -0
- data/_includes/latest_posts.liquid +61 -0
- data/_includes/localized-date.liquid +5 -0
- data/_includes/manual-bibliography.liquid +2 -0
- data/_includes/manual-featured-readings.liquid +12 -0
- data/_includes/manual-other-readings.liquid +12 -0
- data/_includes/manual-page-toc.liquid +11 -0
- data/_includes/manual-sidebar.liquid +58 -0
- data/_includes/manual-teachers.liquid +74 -0
- data/_includes/metadata.liquid +278 -0
- data/_includes/news.liquid +48 -0
- data/_includes/newsletter.liquid +68 -0
- data/_includes/page-hero.liquid +96 -0
- data/_includes/page-link.liquid +8 -0
- data/_includes/pagination.liquid +22 -0
- data/_includes/post-reading-time.liquid +29 -0
- data/_includes/previous-next.liquid +37 -0
- data/_includes/profile-card.liquid +49 -0
- data/_includes/profile-feature-matrix.liquid +75 -0
- data/_includes/profile-highlights.liquid +122 -0
- data/_includes/project-grid.liquid +26 -0
- data/_includes/project-resource-link.liquid +45 -0
- data/_includes/project-resources.liquid +21 -0
- data/_includes/projects.liquid +38 -0
- data/_includes/projects_horizontal.liquid +37 -0
- data/_includes/publications-metrics-summary.liquid +69 -0
- data/_includes/publications-summary.liquid +127 -0
- data/_includes/reading-biblio-controls.liquid +65 -0
- data/_includes/reading-cover-card.liquid +93 -0
- data/_includes/reading-rating.liquid +11 -0
- data/_includes/recommended-readings.liquid +30 -0
- data/_includes/related_posts.liquid +39 -0
- data/_includes/repository/repo.liquid +48 -0
- data/_includes/repository/repo_trophies.liquid +44 -0
- data/_includes/repository/repo_user.liquid +35 -0
- data/_includes/resume/awards.liquid +19 -0
- data/_includes/resume/basics.liquid +28 -0
- data/_includes/resume/certificates.liquid +35 -0
- data/_includes/resume/education.liquid +54 -0
- data/_includes/resume/interests.liquid +34 -0
- data/_includes/resume/languages.liquid +31 -0
- data/_includes/resume/projects.liquid +32 -0
- data/_includes/resume/publications.liquid +28 -0
- data/_includes/resume/references.liquid +31 -0
- data/_includes/resume/skills.liquid +33 -0
- data/_includes/resume/volunteer.liquid +52 -0
- data/_includes/resume/work.liquid +52 -0
- data/_includes/scripts.liquid +364 -0
- data/_includes/search-data.js.liquid +341 -0
- data/_includes/selected_papers.liquid +3 -0
- data/_includes/t.liquid +31 -0
- data/_includes/team-grid.liquid +172 -0
- data/_includes/video.liquid +97 -0
- data/_layouts/about.liquid +93 -0
- data/_layouts/archive.liquid +45 -0
- data/_layouts/bib.liquid +677 -0
- data/_layouts/book-review.liquid +225 -0
- data/_layouts/book-shelf.liquid +66 -0
- data/_layouts/cv.liquid +127 -0
- data/_layouts/default.liquid +70 -0
- data/_layouts/distill.liquid +132 -0
- data/_layouts/documentation-download-detail.liquid +5 -0
- data/_layouts/documentation-home.liquid +100 -0
- data/_layouts/documentation-page.liquid +45 -0
- data/_layouts/manual-bib.liquid +73 -0
- data/_layouts/manual-chapter.liquid +99 -0
- data/_layouts/manual-featured-bib.liquid +100 -0
- data/_layouts/manual-home.liquid +120 -0
- data/_layouts/none.liquid +1 -0
- data/_layouts/outputs.liquid +29 -0
- data/_layouts/page.liquid +52 -0
- data/_layouts/post.liquid +95 -0
- data/_layouts/profile.liquid +36 -0
- data/_layouts/profiles.liquid +36 -0
- data/_layouts/project.liquid +7 -0
- data/_layouts/repositories.liquid +58 -0
- data/_layouts/theses.liquid +126 -0
- data/_plugins/bibliography_profiles.rb +164 -0
- data/_plugins/callouts.rb +104 -0
- data/_plugins/code_blocks.rb +277 -0
- data/_plugins/computation_figure_images.rb +266 -0
- data/_plugins/computation_sources.rb +42 -0
- data/_plugins/content_search_index.rb +210 -0
- data/_plugins/details.rb +23 -0
- data/_plugins/external-posts.rb +124 -0
- data/_plugins/figure_captions.rb +800 -0
- data/_plugins/file-exists.rb +22 -0
- data/_plugins/google-scholar-citations.rb +86 -0
- data/_plugins/hide-custom-bibtex.rb +18 -0
- data/_plugins/inspirehep-citations.rb +57 -0
- data/_plugins/localized_visual_sources.rb +145 -0
- data/_plugins/manual_release_metadata.rb +47 -0
- data/_plugins/mermaid_mmd_images.rb +233 -0
- data/_plugins/profile-pages.rb +28 -0
- data/_plugins/remove-accents.rb +32 -0
- data/_plugins/reproducible_build_time.rb +55 -0
- data/_plugins/search-data.rb +83 -0
- data/_plugins/theme-cache-bust.rb +56 -0
- data/_plugins/vega_visual_images.rb +290 -0
- data/_plugins/web_capture_images.rb +154 -0
- data/_sass/_base.scss +2133 -0
- data/_sass/_blog.scss +67 -0
- data/_sass/_callouts.scss +100 -0
- data/_sass/_custom.scss +437 -0
- data/_sass/_cv.scss +274 -0
- data/_sass/_developer.scss +97 -0
- data/_sass/_distill.scss +185 -0
- data/_sass/_documentation.scss +2220 -0
- data/_sass/_layout.scss +218 -0
- data/_sass/_manual.scss +2691 -0
- data/_sass/_profile.scss +323 -0
- data/_sass/_projects.scss +163 -0
- data/_sass/_reading.scss +465 -0
- data/_sass/_site-custom.scss +3 -0
- data/_sass/_tabs.scss +48 -0
- data/_sass/_team.scss +230 -0
- data/_sass/_themes.scss +254 -0
- data/_sass/_typograms.scss +132 -0
- data/_sass/_variables.scss +52 -0
- data/_sass/font-awesome/_animated.scss +152 -0
- data/_sass/font-awesome/_bordered-pulled.scss +20 -0
- data/_sass/font-awesome/_core.scss +49 -0
- data/_sass/font-awesome/_fixed-width.scss +7 -0
- data/_sass/font-awesome/_functions.scss +57 -0
- data/_sass/font-awesome/_icons.scss +13 -0
- data/_sass/font-awesome/_list.scss +18 -0
- data/_sass/font-awesome/_mixins.scss +65 -0
- data/_sass/font-awesome/_rotated-flipped.scss +31 -0
- data/_sass/font-awesome/_screen-reader.scss +14 -0
- data/_sass/font-awesome/_shims.scss +1578 -0
- data/_sass/font-awesome/_sizing.scss +16 -0
- data/_sass/font-awesome/_stacked.scss +32 -0
- data/_sass/font-awesome/_variables.scss +5044 -0
- data/_sass/font-awesome/brands.scss +30 -0
- data/_sass/font-awesome/fontawesome.scss +21 -0
- data/_sass/font-awesome/regular.scss +27 -0
- data/_sass/font-awesome/solid.scss +27 -0
- data/_sass/font-awesome/v4-shims.scss +11 -0
- data/_sass/tabler-icons/tabler-icons-filled.scss +1646 -0
- data/_sass/tabler-icons/tabler-icons-outline.scss +9859 -0
- data/_sass/tabler-icons/tabler-icons.scss +11463 -0
- data/_scripts/cronitor-analytics-setup.js +9 -0
- data/_scripts/giscus-setup.js +48 -0
- data/_scripts/google-analytics-setup.js +9 -0
- data/_scripts/open-panel-analytics-setup.js +14 -0
- data/_scripts/photoswipe-setup.js +11 -0
- data/assets/audio/epicaly-short-113909.mp3 +0 -0
- data/assets/bibliography/2018-12-22-distill.bib +7 -0
- data/assets/css/academicons.min.css +1 -0
- data/assets/css/bootstrap-toc.min.css +4 -0
- data/assets/css/bootstrap.min.css +7 -0
- data/assets/css/bootstrap.min.css.map +1 -0
- data/assets/css/jekyll-pygments-themes-github.css +209 -0
- data/assets/css/jekyll-pygments-themes-native.css +232 -0
- data/assets/css/jupyter-grade3.css +3758 -0
- data/assets/css/jupyter-monokai.css +3758 -0
- data/assets/css/jupyter.css +383 -0
- data/assets/css/main.scss +36 -0
- data/assets/css/mdb.min.css +48 -0
- data/assets/css/mdb.min.css.map +1 -0
- data/assets/css/scholar-icons.css +386 -0
- data/assets/fonts/academicons.ttf +0 -0
- data/assets/fonts/academicons.woff +0 -0
- data/assets/fonts/scholar-icons.ttf +0 -0
- data/assets/fonts/scholar-icons.woff +0 -0
- data/assets/fonts/tabler-icons-filled.ttf +0 -0
- data/assets/fonts/tabler-icons-filled.woff +0 -0
- data/assets/fonts/tabler-icons-filled.woff2 +0 -0
- data/assets/fonts/tabler-icons-outline.ttf +0 -0
- data/assets/fonts/tabler-icons-outline.woff +0 -0
- data/assets/fonts/tabler-icons-outline.woff2 +0 -0
- data/assets/fonts/tabler-icons.ttf +0 -0
- data/assets/fonts/tabler-icons.woff +0 -0
- data/assets/fonts/tabler-icons.woff2 +0 -0
- data/assets/html/relativity.html +15 -0
- data/assets/img/1.jpg +0 -0
- data/assets/img/10.jpg +0 -0
- data/assets/img/11.jpg +0 -0
- data/assets/img/12.jpg +0 -0
- data/assets/img/2.jpg +0 -0
- data/assets/img/3.jpg +0 -0
- data/assets/img/4.jpg +0 -0
- data/assets/img/5.jpg +0 -0
- data/assets/img/6.jpg +0 -0
- data/assets/img/7.jpg +0 -0
- data/assets/img/8.jpg +0 -0
- data/assets/img/9.jpg +0 -0
- data/assets/img/book_covers/the_godfather.jpg +0 -0
- data/assets/img/brand/dosquartsdedocs-logo-cafe.svg +31 -0
- data/assets/img/brand/dosquartsdedocs-logo-footer-cafe.svg +31 -0
- data/assets/img/brand/dosquartsdedocs-logo-white.svg +31 -0
- data/assets/img/brand/dosquartsdedocs-logo.svg +31 -0
- data/assets/img/prof_pic.jpg +0 -0
- data/assets/img/prof_pic_color.png +0 -0
- data/assets/img/profile-placeholder.svg +8 -0
- data/assets/img/publication_preview/brownian-motion.gif +0 -0
- data/assets/img/publication_preview/goodchild1992-gis-cover.jpg +0 -0
- data/assets/img/publication_preview/gutierrez2020-jtrg-preview.jpg +0 -0
- data/assets/img/publication_preview/harvey1989-postmodernity-cover.jpg +0 -0
- data/assets/img/publication_preview/tobler1970-economic-geography-cover.jpg +0 -0
- data/assets/img/publication_preview/tuan1977-space-place-cover.jpg +0 -0
- data/assets/img/publication_preview/wave-mechanics.gif +0 -0
- data/assets/img/publication_preview/zaragozi2025-rooftop-pv-preview.jpg +0 -0
- data/assets/img/rhino.png +0 -0
- data/assets/img/team/aaron-gutierrez.png +0 -0
- data/assets/img/team/alba-font.png +0 -0
- data/assets/img/team/alba-viana.png +0 -0
- data/assets/img/team/alejandro-gonzalez.png +0 -0
- data/assets/img/team/ana-pastor.png +0 -0
- data/assets/img/team/antoni-domenech.png +0 -0
- data/assets/img/team/benito-zaragozi.png +0 -0
- data/assets/img/team/cinta-sanz.png +0 -0
- data/assets/img/team/daniel-miravet.png +0 -0
- data/assets/img/team/eugenia-altamirano.png +0 -0
- data/assets/img/team/fiammetta-brandajs.png +0 -0
- data/assets/img/team/francesc-gonzalez.png +0 -0
- data/assets/img/team/isabel-paulino.png +0 -0
- data/assets/img/team/joan-borras.png +0 -0
- data/assets/img/team/julie-wilson.png +0 -0
- data/assets/img/team/liliana-sole.png +0 -0
- data/assets/img/team/maria-casado.png +0 -0
- data/assets/img/team/maria-medina.png +0 -0
- data/assets/img/team/marta-nello.png +0 -0
- data/assets/img/team/mogrify +1 -0
- data/assets/img/team/oscar-saladie.png +0 -0
- data/assets/img/team/paolo-russo.png +0 -0
- data/assets/img/team/raquel-santos.png +0 -0
- data/assets/img/team/salvador-anton.png +0 -0
- data/assets/img/team/sunsi-huertas.png +0 -0
- data/assets/img/team/user-placeholder.png +0 -0
- data/assets/img/team/wilbert-den-hoed.png +0 -0
- data/assets/img/team/xavier-delclos.png +0 -0
- data/assets/img/template_error.png +0 -0
- data/assets/js/bibsearch.js +70 -0
- data/assets/js/bootstrap-toc.min.js +5 -0
- data/assets/js/bootstrap.bundle.min.js +7 -0
- data/assets/js/bootstrap.bundle.min.js.map +1 -0
- data/assets/js/callouts.js +115 -0
- data/assets/js/chartjs-setup.js +14 -0
- data/assets/js/common.js +117 -0
- data/assets/js/content-search-match.js +159 -0
- data/assets/js/content-search.js +441 -0
- data/assets/js/copy_code.js +60 -0
- data/assets/js/custom.js +6 -0
- data/assets/js/developer-mode.js +103 -0
- data/assets/js/diff2html-setup.js +20 -0
- data/assets/js/distillpub/overrides.js +27 -0
- data/assets/js/distillpub/template.v2.js +9616 -0
- data/assets/js/distillpub/template.v2.js.map +1 -0
- data/assets/js/distillpub/transforms.v2.js +14557 -0
- data/assets/js/distillpub/transforms.v2.js.map +1 -0
- data/assets/js/documentation.js +435 -0
- data/assets/js/echarts-setup.js +29 -0
- data/assets/js/highlight-search-term.js +110 -0
- data/assets/js/jupyter_new_tab.js +18 -0
- data/assets/js/leaflet-setup.js +22 -0
- data/assets/js/manual.js +308 -0
- data/assets/js/masonry.js +12 -0
- data/assets/js/mathjax-setup.js +46 -0
- data/assets/js/mermaid-setup.js +37 -0
- data/assets/js/newsletter.js +105 -0
- data/assets/js/no_defer.js +24 -0
- data/assets/js/plotly-setup.js +52 -0
- data/assets/js/profile-nav.js +92 -0
- data/assets/js/progress-bar.js +73 -0
- data/assets/js/pseudocode-setup.js +18 -0
- data/assets/js/search/base-styles.min.js +286 -0
- data/assets/js/search/command-score.min.js +7 -0
- data/assets/js/search/hotkeys-js/hotkeys.esm.min.js +18 -0
- data/assets/js/search/lit/decorators.min.js +7 -0
- data/assets/js/search/lit/directives/class-map.min.js +7 -0
- data/assets/js/search/lit/directives/join.min.js +7 -0
- data/assets/js/search/lit/directives/live.min.js +7 -0
- data/assets/js/search/lit/directives/ref.min.js +7 -0
- data/assets/js/search/lit/directives/repeat.min.js +7 -0
- data/assets/js/search/lit/directives/unsafe-html.min.js +7 -0
- data/assets/js/search/lit/index.min.js +7 -0
- data/assets/js/search/lit-element/lit-element.min.js +12 -0
- data/assets/js/search/lit-html/directives/class-map.min.js +22 -0
- data/assets/js/search/lit-html/directives/join.min.js +12 -0
- data/assets/js/search/lit-html/directives/live.min.js +28 -0
- data/assets/js/search/lit-html/directives/ref.min.js +32 -0
- data/assets/js/search/lit-html/directives/repeat.min.js +27 -0
- data/assets/js/search/lit-html/directives/unsafe-html.min.js +22 -0
- data/assets/js/search/lit-html/is-server.min.js +12 -0
- data/assets/js/search/lit-html/lit-html.min.js +12 -0
- data/assets/js/search/ninja-action.min.js +101 -0
- data/assets/js/search/ninja-footer.min.js +62 -0
- data/assets/js/search/ninja-header.min.js +78 -0
- data/assets/js/search/ninja-keys.min.js +39 -0
- data/assets/js/search/reactive-element/decorators/custom-element.min.js +12 -0
- data/assets/js/search/reactive-element/decorators/event-options.min.js +12 -0
- data/assets/js/search/reactive-element/decorators/property.min.js +22 -0
- data/assets/js/search/reactive-element/decorators/query-all.min.js +17 -0
- data/assets/js/search/reactive-element/decorators/query-assigned-elements.min.js +17 -0
- data/assets/js/search/reactive-element/decorators/query-assigned-nodes.min.js +17 -0
- data/assets/js/search/reactive-element/decorators/query-async.min.js +17 -0
- data/assets/js/search/reactive-element/decorators/query.min.js +17 -0
- data/assets/js/search/reactive-element/decorators/state.min.js +27 -0
- data/assets/js/search/reactive-element/reactive-element.min.js +17 -0
- data/assets/js/search-setup.js +17 -0
- data/assets/js/shortcut-key.js +11 -0
- data/assets/js/tabs.min.js +5 -0
- data/assets/js/theme.js +314 -0
- data/assets/js/tooltips-setup.js +3 -0
- data/assets/js/typograms.js +1341 -0
- data/assets/js/vanilla-back-to-top.min.js +1 -0
- data/assets/js/vega-setup.js +24 -0
- data/assets/js/venobox-setup.js +5 -0
- data/assets/js/wechat.js +14 -0
- data/assets/js/zoom.js +15 -0
- data/assets/json/resume.json +98 -0
- data/assets/json/table_data.json +128 -0
- data/assets/jupyter/blog.ipynb +48 -0
- data/assets/pdf/example_pdf.pdf +0 -0
- data/assets/plotly/demo.html +72 -0
- data/assets/video/pexels-engin-akyurt-6069112-960x540-30fps.mp4 +0 -0
- data/assets/webfonts/fa-brands-400.ttf +0 -0
- data/assets/webfonts/fa-brands-400.woff2 +0 -0
- data/assets/webfonts/fa-regular-400.ttf +0 -0
- data/assets/webfonts/fa-regular-400.woff2 +0 -0
- data/assets/webfonts/fa-solid-900.ttf +0 -0
- data/assets/webfonts/fa-solid-900.woff2 +0 -0
- data/assets/webfonts/fa-v4compatibility.ttf +0 -0
- data/assets/webfonts/fa-v4compatibility.woff2 +0 -0
- data/docs/Gemfile +5 -0
- data/docs/_config.yml +83 -0
- data/docs/_documentation/en/01-quick-start.md +115 -0
- data/docs/_documentation/en/02-tools.md +146 -0
- data/docs/_documentation/en/03-usage.md +107 -0
- data/docs/_documentation/en/04-jekyll-basics.md +51 -0
- data/docs/_documentation/en/05-pages-collections.md +68 -0
- data/docs/_documentation/en/06-github-web-editing.md +92 -0
- data/docs/_documentation/en/10-profiles.md +125 -0
- data/docs/_documentation/en/11-unaltreselfie.md +39 -0
- data/docs/_documentation/en/12-unaltreprojecte.md +38 -0
- data/docs/_documentation/en/13-unaltremanual.md +237 -0
- data/docs/_documentation/en/14-unaltredocs.md +92 -0
- data/docs/_documentation/en/15-profile-checklist.md +39 -0
- data/docs/_documentation/en/20-syntax.md +353 -0
- data/docs/_documentation/en/21-themes.md +103 -0
- data/docs/_documentation/en/22-feature-reference.md +56 -0
- data/docs/_documentation/en/23-front-matter.md +51 -0
- data/docs/_documentation/en/24-data-files.md +28 -0
- data/docs/_documentation/en/30-customization.md +448 -0
- data/docs/_documentation/en/31-template.md +55 -0
- data/docs/_documentation/en/32-development.md +108 -0
- data/docs/_documentation/en/33-reusable-workflows.md +136 -0
- data/docs/_documentation/en/40-distribution.md +164 -0
- data/docs/_documentation/en/41-bibliometrics.md +137 -0
- data/docs/_documentation/en/42-docker-image.md +185 -0
- data/docs/_documentation/en/50-faq.md +33 -0
- data/docs/_pages/ca/index.md +35 -0
- data/docs/_pages/en/index.md +35 -0
- data/docs/_pages/es/index.md +35 -0
- data/docs/agents/action-prompts/00-start-site-session.txt +10 -0
- data/docs/agents/action-prompts/05-create-new-web.txt +5 -0
- data/docs/agents/action-prompts/10-content-update.txt +9 -0
- data/docs/agents/action-prompts/15-edit-default-content.txt +8 -0
- data/docs/agents/action-prompts/20-manual-teaching-materials.txt +18 -0
- data/docs/agents/action-prompts/22-manual-style-audit.txt +14 -0
- data/docs/agents/action-prompts/23-manual-structure-audit.txt +17 -0
- data/docs/agents/action-prompts/25-translation-prepublish.txt +8 -0
- data/docs/agents/action-prompts/30-project-site-update.txt +7 -0
- data/docs/agents/action-prompts/40-documentation-update.txt +7 -0
- data/docs/agents/action-prompts/50-bibliography-entry.txt +7 -0
- data/docs/agents/action-prompts/60-bibliometrics-refresh.txt +7 -0
- data/docs/agents/action-prompts/70-build-and-review.txt +12 -0
- data/docs/agents/manual-authoring-components.md +255 -0
- data/docs/agents/mcp-contract.md +162 -0
- data/docs/agents/quarto-computation-adoption.md +102 -0
- data/docs/assets/img/unaltraweb-docs-hero.svg +36 -0
- data/lib/unaltraweb/version.rb +8 -0
- data/lib/unaltraweb.rb +31 -0
- data/requirements.txt +5 -0
- data/scripts/biblio/fetch_scimago_csv.sh +126 -0
- data/scripts/biblio/metrics_common.py +154 -0
- data/scripts/biblio/metrics_merge_meta.py +73 -0
- data/scripts/biblio/metrics_update.py +826 -0
- data/scripts/computations/python/Dockerfile +37 -0
- data/scripts/computations/r/Dockerfile +31 -0
- data/scripts/computations/render.py +1267 -0
- data/scripts/cv/render_pdf_preview.sh +36 -0
- data/scripts/deploy/publish_branch.sh +80 -0
- data/scripts/generate_logo_variants.py +47 -0
- data/scripts/manual/Dockerfile +31 -0
- data/scripts/manual/build_pdf.py +1780 -0
- data/scripts/manual/filters/bibliography.lua +164 -0
- data/scripts/manual/filters/code-blocks.lua +102 -0
- data/scripts/manual/filters/figure-captions.lua +35 -0
- data/scripts/manual/publish_release.sh +281 -0
- data/scripts/manual/templates/manual.tex +494 -0
- data/scripts/manual/verify_release_assets.py +650 -0
- data/scripts/test_gem_build.py +128 -0
- data/scripts/test_reproducible_jekyll_build.py +191 -0
- data/scripts/test_wheel_install.py +282 -0
- data/scripts/unaltraweb-docker-mount.sh +36 -0
- data/scripts/unaltraweb-mcp-bootstrap.sh +105 -0
- data/scripts/unaltraweb-mcp-cleanup.sh +73 -0
- data/scripts/unaltraweb-mcp-project-id.sh +34 -0
- data/scripts/validate_distribution.py +563 -0
- data/scripts/validate_workflows.py +1285 -0
- data/scripts/web_captures/Dockerfile +31 -0
- data/scripts/web_captures/capture.mjs +157 -0
- data/scripts/web_captures/package-lock.json +56 -0
- data/scripts/web_captures/package.json +9 -0
- data/scripts/web_captures/render.py +867 -0
- data/src/unaltraweb_mcp/component-contract.json +153 -0
- data/src/unaltraweb_mcp/component-contract.schema.json +87 -0
- data/src/unaltraweb_mcp/docker_mount.py +19 -0
- metadata +861 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/docs/Gemfile
ADDED
data/docs/_config.yml
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
title: unaltraweb
|
|
2
|
+
description: Reusable Jekyll core for academic, research project and documentation websites.
|
|
3
|
+
url: https://dosquartsdedocs.github.io
|
|
4
|
+
baseurl: /unaltraweb
|
|
5
|
+
lang: en
|
|
6
|
+
default_lang: en
|
|
7
|
+
languages: [en, es, ca]
|
|
8
|
+
icon: "brand/dosquartsdedocs-logo.svg"
|
|
9
|
+
theme: unaltraweb
|
|
10
|
+
|
|
11
|
+
plugins:
|
|
12
|
+
- unaltraweb
|
|
13
|
+
- jekyll-3rd-party-libraries
|
|
14
|
+
- jekyll-archives-v2
|
|
15
|
+
- jekyll-cache-bust
|
|
16
|
+
- jekyll-email-protect
|
|
17
|
+
- jekyll-feed
|
|
18
|
+
- jekyll-get-json
|
|
19
|
+
- jekyll-imagemagick
|
|
20
|
+
- jekyll-link-attributes
|
|
21
|
+
- jekyll-minifier
|
|
22
|
+
- jekyll-paginate-v2
|
|
23
|
+
- jekyll-regex-replace
|
|
24
|
+
- jekyll/scholar
|
|
25
|
+
- jekyll-sitemap
|
|
26
|
+
- jekyll-socials
|
|
27
|
+
- jekyll-tabs
|
|
28
|
+
- jekyll-toc
|
|
29
|
+
- jekyll-twitter-plugin
|
|
30
|
+
- jemoji
|
|
31
|
+
|
|
32
|
+
include: ["_pages"]
|
|
33
|
+
third_party_libraries: {}
|
|
34
|
+
search_enabled: true
|
|
35
|
+
footer_fixed: true
|
|
36
|
+
|
|
37
|
+
collections:
|
|
38
|
+
documentation:
|
|
39
|
+
output: true
|
|
40
|
+
sort_by: weight
|
|
41
|
+
|
|
42
|
+
unaltraweb:
|
|
43
|
+
site_profile: unaltredocs
|
|
44
|
+
features:
|
|
45
|
+
docs: true
|
|
46
|
+
blog: false
|
|
47
|
+
cv: false
|
|
48
|
+
projects: false
|
|
49
|
+
publications: false
|
|
50
|
+
metrics: false
|
|
51
|
+
manual: false
|
|
52
|
+
documentation:
|
|
53
|
+
collection: documentation
|
|
54
|
+
logo: /assets/img/brand/dosquartsdedocs-logo.svg
|
|
55
|
+
logo_inverse: /assets/img/brand/dosquartsdedocs-logo-white.svg
|
|
56
|
+
logo_cafe: /assets/img/brand/dosquartsdedocs-logo.svg
|
|
57
|
+
profiles:
|
|
58
|
+
- id: github-publishers
|
|
59
|
+
label: GitHub publishers
|
|
60
|
+
- id: local-authors
|
|
61
|
+
label: Local authors
|
|
62
|
+
- id: site-designers
|
|
63
|
+
label: Site designers
|
|
64
|
+
- id: contributors
|
|
65
|
+
label: Contributors
|
|
66
|
+
- id: core-developers
|
|
67
|
+
label: Core developers
|
|
68
|
+
figure_captions:
|
|
69
|
+
enabled: true
|
|
70
|
+
collections: [documentation]
|
|
71
|
+
|
|
72
|
+
defaults:
|
|
73
|
+
- scope:
|
|
74
|
+
path: ""
|
|
75
|
+
type: documentation
|
|
76
|
+
values:
|
|
77
|
+
lang: en
|
|
78
|
+
layout: documentation-page
|
|
79
|
+
|
|
80
|
+
exclude:
|
|
81
|
+
- Gemfile
|
|
82
|
+
- Gemfile.lock
|
|
83
|
+
- README.md
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Choose Your unaltraweb Workflow
|
|
3
|
+
description: Create and edit an unaltraweb site through GitHub or locally with Docker.
|
|
4
|
+
lang: en
|
|
5
|
+
ref: quick_start
|
|
6
|
+
profiles:
|
|
7
|
+
- unaltredocs
|
|
8
|
+
documentation_profiles:
|
|
9
|
+
- github-publishers
|
|
10
|
+
- local-authors
|
|
11
|
+
- site-designers
|
|
12
|
+
- contributors
|
|
13
|
+
- core-developers
|
|
14
|
+
section: Start Here
|
|
15
|
+
weight: 10
|
|
16
|
+
permalink: "/quick-start/"
|
|
17
|
+
nav_title: Start Here
|
|
18
|
+
---
|
|
19
|
+
<p class="lede">Create a clean profile-specific site with the package-owned <code>new_web</code> operation. Its generated README starts with the GitHub Web workflow for content editors; maintainers use local Docker for previews, checks, and renders.</p>
|
|
20
|
+
|
|
21
|
+
## Choose A Path
|
|
22
|
+
|
|
23
|
+
- **Local Docker**: requires Git, Docker and Make. Good for previewing the site, larger edits, validation, and rendered-output review.
|
|
24
|
+
- **GitHub-only**: no local setup. Good for editing pages, posts, bibliography records, project data and small configuration changes; deployment is manual.
|
|
25
|
+
|
|
26
|
+
## GitHub-only Editing
|
|
27
|
+
|
|
28
|
+
1. Push a site created by `new_web` to a new repository.
|
|
29
|
+
2. Read its generated `README.md` to confirm the selected profile, editable paths, image rules, and paths that must not be changed in GitHub Web.
|
|
30
|
+
3. Open an issue and get assigned, or make an explicit file reservation and wait for maintainer acceptance. Only one active editor works on a file.
|
|
31
|
+
4. Create one branch for the task and never edit `main` directly.
|
|
32
|
+
5. Make a small content change in the profile-appropriate paths and open a Draft pull request linked to the issue.
|
|
33
|
+
6. If a conflict appears, stop and ask the maintainer rather than overwriting work.
|
|
34
|
+
7. The maintainer checks the branch locally, runs required renders, reviews the result, and merges it.
|
|
35
|
+
8. The maintainer runs the manual deploy workflow only when the reviewed `main` branch should be published.
|
|
36
|
+
|
|
37
|
+
This path is enough for small content updates such as adding a bibliography entry, editing a page, updating project data or correcting text. The detailed protocol is in [Edit Safely In GitHub Web](../github-web-editing/).
|
|
38
|
+
|
|
39
|
+
## Local Docker Editing
|
|
40
|
+
|
|
41
|
+
For an agent-first IDE session, create or select an empty Git repository, open that directory as the workspace, register the `unaltraweb` factory, and restart the IDE so `${workspaceFolder}` is used as the confined consumer root. Then call `new_web`; the generated `AGENTS.md` is the durable local contract for subsequent agents.
|
|
42
|
+
|
|
43
|
+
Create the site through the MCP, the installed package CLI, or this factory checkout:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
unaltraweb-mcp --project ./my-site new-web --site-profile unaltreselfie --title "My site" --default-lang en
|
|
47
|
+
# or: MCP_CONSUMER_WORKSPACE=./my-site make mcp-new-web NEW_WEB_PROFILE=unaltreselfie SITE_TITLE="My site" DEFAULT_LANG=en
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The scaffold is bundled with the Python package and MCP image. Creation aborts before writing when a managed path is a symlink or a differing file already exists. A manual also receives a default-language chapter directory, computation source/output roots, `README.md`, `AGENTS.md`, and a package baseline for conservative runtime updates. After pushing the generated site, install Git, Docker and GNU Make, then clone it normally:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
git clone https://github.com/YOUR-ORG/YOUR-SITE.git
|
|
54
|
+
cd YOUR-SITE
|
|
55
|
+
make serve
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The reusable layouts, styles, plugins and scripts come from the `unaltraweb` gem declared in the site's `Gemfile`. The selected MCP image provides the normal containerized build runtime. When working against an unpublished core candidate, build that image explicitly in the factory checkout first; a generated site reports this remediation instead of silently falling back to another version.
|
|
59
|
+
|
|
60
|
+
Use these commands during normal local work:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
make serve
|
|
64
|
+
make build
|
|
65
|
+
make test
|
|
66
|
+
make down
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The generated GitHub Actions workflow publishes to Pages only when a maintainer starts it manually. A push, local build, or local render does not deploy the site.
|
|
70
|
+
|
|
71
|
+
When developing `unaltraweb` and the template together, use this local port convention:
|
|
72
|
+
|
|
73
|
+
- `unaltraweb`: `4000`.
|
|
74
|
+
- `unaltreselfie`: `4001`.
|
|
75
|
+
- `unaltreprojecte`: `4002`.
|
|
76
|
+
- `unaltremanual`: `4003`.
|
|
77
|
+
- `unaltredocs`: `4004`.
|
|
78
|
+
|
|
79
|
+
Each generated repository has one profile-specific scaffold. Create a separate temporary site when comparing another profile instead of mixing profile content into the published repository.
|
|
80
|
+
|
|
81
|
+
## Windows
|
|
82
|
+
|
|
83
|
+
The supported Windows path is WSL2 with Docker Desktop and Docker's WSL integration enabled. Run the same `make` commands inside the WSL Linux shell.
|
|
84
|
+
|
|
85
|
+
Native PowerShell without WSL2 is not the primary supported path yet.
|
|
86
|
+
|
|
87
|
+
## Profiles
|
|
88
|
+
|
|
89
|
+
Select one profile in `_config.yml`:
|
|
90
|
+
|
|
91
|
+
```yaml
|
|
92
|
+
unaltraweb:
|
|
93
|
+
site_profile: unaltreselfie
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Available profiles are:
|
|
97
|
+
|
|
98
|
+
- `unaltreselfie`: personal academic or professional site.
|
|
99
|
+
- `unaltreprojecte`: research project site.
|
|
100
|
+
- `unaltremanual`: manual, course or book-like site.
|
|
101
|
+
- `unaltredocs`: documentation site.
|
|
102
|
+
|
|
103
|
+
`new_web` provides a separate clean scaffold for every profile. The optional `unaltraweb-template` fixture contains richer examples for all four profiles. This documentation site is called `unaltraweb`; it is the reference for the platform and uses real examples of supported behavior.
|
|
104
|
+
|
|
105
|
+
## Core Development
|
|
106
|
+
|
|
107
|
+
When changing `unaltraweb` and the template side by side, point the template at the local core checkout:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
make serve LOCAL_CORE=../unaltraweb
|
|
111
|
+
make build LOCAL_CORE=../unaltraweb
|
|
112
|
+
make serve-allprofiles LOCAL_CORE=../unaltraweb
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
This is for core/theme development, not for normal content editing.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Tools For Local Work
|
|
3
|
+
description: What users and maintainers need to work with unaltraweb.
|
|
4
|
+
lang: en
|
|
5
|
+
ref: tools_requirements
|
|
6
|
+
profiles:
|
|
7
|
+
- unaltredocs
|
|
8
|
+
documentation_profiles:
|
|
9
|
+
- local-authors
|
|
10
|
+
- contributors
|
|
11
|
+
- core-developers
|
|
12
|
+
section: Work Locally
|
|
13
|
+
weight: 110
|
|
14
|
+
permalink: "/tools/"
|
|
15
|
+
nav_title: Local Tools
|
|
16
|
+
---
|
|
17
|
+
<p class="lede">Most site authors can choose between the preferred local Docker workflow and a GitHub-only workflow for contributors who cannot work locally. The local path is intentionally small: Git, Docker and Make.</p>
|
|
18
|
+
|
|
19
|
+
## User Paths
|
|
20
|
+
|
|
21
|
+
| Path | Required tools | Best for |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| Local Docker | Git, Docker, GNU Make | Previewing, larger edits, screenshots, tests, and rendered-output review |
|
|
24
|
+
| GitHub-only | Browser, GitHub account, repository created from the template | Small content edits, bibliography entries, page text, YAML data and configuration changes, followed by a manual deploy workflow |
|
|
25
|
+
| Windows local | WSL2, Docker Desktop with WSL integration, Git and Make inside WSL | The supported Windows equivalent of the local Docker path |
|
|
26
|
+
| Core maintenance | Docker, Git, GitHub Actions, GHCR access; Ruby/Bundler optional for direct debugging | Changing layouts, plugins, Sass, scripts, workflows and the shared runtime image |
|
|
27
|
+
|
|
28
|
+
## Local Runtime
|
|
29
|
+
|
|
30
|
+
The template uses the shared runtime image by default:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
ghcr.io/dosquartsdedocs/unaltraweb:0.3.0
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
That image provides Ruby, Bundler, Jekyll system dependencies, ImageMagick, Node for ExecJS and Python tooling needed by local commands. The GHCR package must be public before unauthenticated users can pull it.
|
|
37
|
+
|
|
38
|
+
## Generated Site Commands
|
|
39
|
+
|
|
40
|
+
Clean sites created by `new_web` expose the Dockerized core workflow:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
make serve
|
|
44
|
+
make build
|
|
45
|
+
make test
|
|
46
|
+
make down
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Inspect the selected component contract and local project pins without network access:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
unaltraweb-mcp doctor --project .
|
|
53
|
+
unaltraweb-mcp doctor --project . --docker # local image inspection only; never pulls
|
|
54
|
+
unaltraweb-mcp --project . mcp site-doctor
|
|
55
|
+
unaltraweb-mcp --project . mcp scaffold-sync
|
|
56
|
+
unaltraweb-mcp --project . mcp html-audit
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The generated `make test` builds and runs the offline HTML audit. `build_site` returns the same audit after a successful build. External URLs are inventoried but never fetched.
|
|
60
|
+
|
|
61
|
+
## Calibre Metadata Import
|
|
62
|
+
|
|
63
|
+
The installed host CLI can import book metadata and `cover.jpg` files from an external Calibre library into `_books/` and `assets/img/books/`. It never copies ebook files. The command is a dry run unless `--write` is explicit:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
unaltraweb-mcp --project /path/to/site import-calibre \
|
|
67
|
+
--library /path/to/Calibre-Library \
|
|
68
|
+
--source-key geography \
|
|
69
|
+
--collection-name "Geography readings" \
|
|
70
|
+
--profiles unaltreselfie
|
|
71
|
+
|
|
72
|
+
# Repeat the reviewed command with --write to create project files.
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Use `--ids 12,34` or `--limit 10` to select records. `--refresh-existing` updates a Markdown file only when its front matter has the same `calibre_source` and `calibre_id`; unrelated Markdown and cover collisions stop the whole preflight without writing. Library paths and cover sources are checked for traversal and symlinks. This is deliberately a host CLI command, not an MCP tool, because external Calibre libraries are not mounted in the MCP container.
|
|
76
|
+
|
|
77
|
+
## Integration Template Commands
|
|
78
|
+
|
|
79
|
+
Run these from a child site created from `unaltraweb-template`:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
make serve
|
|
83
|
+
make build
|
|
84
|
+
make publish
|
|
85
|
+
make test
|
|
86
|
+
make screenshots
|
|
87
|
+
make web-capture-status
|
|
88
|
+
make web-capture-render WEB_CAPTURE_SOURCE=assets/captures/chapter.capture.yml
|
|
89
|
+
make web-capture-check
|
|
90
|
+
make visualization-status
|
|
91
|
+
make visualization-render
|
|
92
|
+
make visualization-check
|
|
93
|
+
make metrics-update
|
|
94
|
+
make cv-preview CV_PDF=assets/pdf/cv.pdf CV_PREVIEW=assets/img/cv-preview.jpg
|
|
95
|
+
make down
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Core Documentation Commands
|
|
99
|
+
|
|
100
|
+
Run these from the `unaltraweb` repository when working on this reference site:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
make docs-serve DOCKER_IMAGE=unaltraweb:dev
|
|
104
|
+
make docs-build DOCKER_IMAGE=unaltraweb:dev
|
|
105
|
+
make docs-publish DOCKER_IMAGE=unaltraweb:dev
|
|
106
|
+
make docs-down
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
After the GHCR image is public, `DOCKER_IMAGE` can be omitted.
|
|
110
|
+
|
|
111
|
+
Useful profile commands:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
make serve SITE_PROFILE=unaltremanual
|
|
115
|
+
make serve-unaltreselfie
|
|
116
|
+
make serve-unaltreprojecte
|
|
117
|
+
make serve-unaltremanual
|
|
118
|
+
make serve-unaltredocs
|
|
119
|
+
make serve-allprofiles
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Ports
|
|
123
|
+
|
|
124
|
+
When the core docs and all template profiles are running together, use this convention:
|
|
125
|
+
|
|
126
|
+
- `4000`: `unaltraweb` documentation.
|
|
127
|
+
- `4001`: `unaltreselfie`.
|
|
128
|
+
- `4002`: `unaltreprojecte`.
|
|
129
|
+
- `4003`: `unaltremanual`.
|
|
130
|
+
- `4004`: `unaltredocs`.
|
|
131
|
+
|
|
132
|
+
## Optional Tools
|
|
133
|
+
|
|
134
|
+
- Node/npm are only needed for formatting and frontend development tasks in the core repository.
|
|
135
|
+
- Playwright is pulled through its Docker image by the template tests; users do not need to install browsers manually.
|
|
136
|
+
- Python dependencies are installed inside the local workflow for metrics and bibliography tooling.
|
|
137
|
+
- Diagram rendering is delegated to the shared `diavisuals` MCP/CLI renderer. Jekyll rewrites diagram text sources to SVG and keeps `*.edited.svg` files as author-owned overrides.
|
|
138
|
+
- Static Vega-Lite and Vega rendering is delegated to the shared `vegavisuals` MCP/CLI factory. Set `VEGAVISUALS_PATH` to a sibling checkout or `VEGAVISUALS_CLI` to an installed executable when a project contains `.vegavisuals.yml`; projects without a manifest skip these commands.
|
|
139
|
+
|
|
140
|
+
## Publishing Checklist
|
|
141
|
+
|
|
142
|
+
- Generated-site route: enable GitHub Pages with GitHub Actions as the source and run the manual deploy workflow when needed.
|
|
143
|
+
- Keep deploy workflows as thin `workflow_dispatch` wrappers pinned to a reviewed full commit SHA of `dosquartsdedocs/unaltraweb/.github/workflows/site-deploy.yml`.
|
|
144
|
+
- The optional integration template may retain its local `gh-pages` publishing target for testing that separate workflow.
|
|
145
|
+
- After the first Docker publish, make `ghcr.io/dosquartsdedocs/unaltraweb` public.
|
|
146
|
+
- Confirm `docker pull ghcr.io/dosquartsdedocs/unaltraweb:0.3.0` works without `docker login`.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Run And Preview A Site
|
|
3
|
+
description: How to create, edit, preview and publish unaltraweb sites.
|
|
4
|
+
lang: en
|
|
5
|
+
ref: usage_workflow
|
|
6
|
+
profiles:
|
|
7
|
+
- unaltredocs
|
|
8
|
+
documentation_profiles:
|
|
9
|
+
- local-authors
|
|
10
|
+
- site-designers
|
|
11
|
+
- contributors
|
|
12
|
+
- core-developers
|
|
13
|
+
section: Work Locally
|
|
14
|
+
weight: 120
|
|
15
|
+
permalink: "/usage/"
|
|
16
|
+
nav_title: Run And Preview
|
|
17
|
+
---
|
|
18
|
+
<p class="lede">An <code>unaltraweb</code> site should keep content and local choices in the child repository. Shared rendering, styles, plugins, scripts and workflows stay in the core.</p>
|
|
19
|
+
|
|
20
|
+
## Create A Site
|
|
21
|
+
|
|
22
|
+
1. Call `new_web` with one `unaltraweb.site_profile` and the site identity/language settings.
|
|
23
|
+
2. Inspect the generated `_config.yml` and localized home page.
|
|
24
|
+
3. Reserve a focused task, create one branch, and open a small Draft pull request. Never edit `main` directly, and allow only one active editor per file.
|
|
25
|
+
4. Edit content and data files. MCP agents should read a source hash, review the default `site_source_write` dry-run, then apply the exact CAS update.
|
|
26
|
+
5. Stop and ask the maintainer if another task overlaps or a conflict appears.
|
|
27
|
+
6. The maintainer runs `site_doctor`, `profile_check`, `site_check`, `build_site`, and required renderers, then reviews the returned HTML audit and rendered outputs.
|
|
28
|
+
7. After review, the maintainer merges the pull request and manually runs the generated GitHub Pages workflow when publication is intended.
|
|
29
|
+
|
|
30
|
+
CLI equivalent:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
unaltraweb-mcp --project ./example-site new-web --site-profile unaltreselfie --title "Example Site" --url https://example.github.io --baseurl /example-site
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Minimal profile selection:
|
|
37
|
+
|
|
38
|
+
```yaml
|
|
39
|
+
title: Example Site
|
|
40
|
+
url: https://example.github.io
|
|
41
|
+
baseurl: /example-site
|
|
42
|
+
|
|
43
|
+
unaltraweb:
|
|
44
|
+
site_profile: unaltreselfie
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## What To Edit
|
|
48
|
+
|
|
49
|
+
| Path | Purpose |
|
|
50
|
+
|---|---|
|
|
51
|
+
| `_config.yml` | Site identity, URL, languages, profile, feature flags and profile-specific options |
|
|
52
|
+
| `_pages/` | Home, navigation pages, profile pages, manuals and documentation landing pages |
|
|
53
|
+
| `_posts/` and `_news/` | Blog posts and short dated announcements |
|
|
54
|
+
| `_projects/`, `_outputs/`, `_books/`, `_theses/` | Structured collections rendered by reusable layouts |
|
|
55
|
+
| `_chapters/` and `_documentation/` | Manual chapters and documentation pages |
|
|
56
|
+
| `_bibliography/` | Publication and manual bibliography BibTeX files |
|
|
57
|
+
| `_data/` | Team, metrics, repositories, translations and other structured data |
|
|
58
|
+
| `_sass/_site-custom.scss` | Local colors, type, spacing and small component overrides |
|
|
59
|
+
| `assets/` | Images, PDFs, diagrams, downloads and generated previews |
|
|
60
|
+
|
|
61
|
+
## What Not To Copy
|
|
62
|
+
|
|
63
|
+
Do not copy core `_layouts`, `_includes`, `_sass` or plugin files into a child site unless you are intentionally making a local override. Copying core code blocks future updates from the gem.
|
|
64
|
+
|
|
65
|
+
Use local overrides only when the site genuinely needs different behavior:
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
_layouts/my-local-page.liquid
|
|
69
|
+
_sass/_site-custom.scss
|
|
70
|
+
assets/img/local-brand.svg
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Preview And Build Locally
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
make serve
|
|
77
|
+
make build
|
|
78
|
+
make test
|
|
79
|
+
make down
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The generated repository contains one profile. Create a separate temporary site with `new_web` to compare another profile. Publication runs through the generated manual GitHub Pages workflow and is never triggered by a push or these local commands.
|
|
83
|
+
|
|
84
|
+
## Update Model
|
|
85
|
+
|
|
86
|
+
- Gem updates change layouts, includes, Sass, plugins and scripts.
|
|
87
|
+
- Docker image updates change local runtime dependencies and are published manually.
|
|
88
|
+
- Reusable workflow updates change optional GitHub build and deploy behavior.
|
|
89
|
+
- Package scaffold changes affect newly generated sites. Existing generated repositories can review `scaffold_sync`, which manages exactly `.gitignore`, `.unaltraweb/docker-mount.sh`, `.github/CONTRIBUTING.md`, `.github/dependabot.yml`, `Makefile`, `Gemfile`, `Gemfile.lock`, `.github/pull_request_template.md`, and `.github/workflows/deploy.yml` from `.unaltraweb/scaffold.json`. It can adopt bytes that already equal the current package payload without rewriting the file. A conflict aborts the entire apply, and retired entries are removed from the baseline without deleting project files. Synchronization never changes site-owned README/agent guidance, config, or content.
|
|
90
|
+
|
|
91
|
+
## Safe MCP Editing
|
|
92
|
+
|
|
93
|
+
`site_source_read`, `site_source_write`, and `site_source_delete` are deliberately restricted to `_config.yml`, Markdown/HTML content collections, YAML/JSON/CSV below `_data/`, and Markdown below `context/`. They do not expose generic filesystem access and cannot mutate workflows, runtime files, core overrides, bibliography, assets, or generated output. Writes default to dry-run and use SHA-256 optimistic concurrency; destructive deletes additionally require explicit confirmation and can never remove `_config.yml`.
|
|
94
|
+
|
|
95
|
+
Dependabot can stay enabled for Bundler and GitHub Actions in child sites, but deploy workflows should remain manual so dependency pull requests do not consume deploy minutes automatically.
|
|
96
|
+
|
|
97
|
+
## Content-Only Work
|
|
98
|
+
|
|
99
|
+
The GitHub web UI is enough for common edits when editors follow the [issue, reservation, branch, and Draft pull request protocol](../github-web-editing/):
|
|
100
|
+
|
|
101
|
+
- add or correct a BibTeX record;
|
|
102
|
+
- edit a Markdown page;
|
|
103
|
+
- add a post or news item;
|
|
104
|
+
- update a team member in `_data/`;
|
|
105
|
+
- change profile feature flags in `_config.yml`.
|
|
106
|
+
|
|
107
|
+
The maintainer uses local Docker to inspect the rendered result before merge. Publication remains an explicit manual workflow action after the reviewed change reaches `main`.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Jekyll Basics For Child Sites
|
|
3
|
+
description: The minimum Jekyll concepts needed to edit an unaltraweb site safely.
|
|
4
|
+
lang: en
|
|
5
|
+
ref: jekyll_basics
|
|
6
|
+
profiles:
|
|
7
|
+
- unaltredocs
|
|
8
|
+
documentation_profiles:
|
|
9
|
+
- local-authors
|
|
10
|
+
- site-designers
|
|
11
|
+
- contributors
|
|
12
|
+
- core-developers
|
|
13
|
+
section: Work Locally
|
|
14
|
+
weight: 130
|
|
15
|
+
permalink: "/jekyll-basics/"
|
|
16
|
+
nav_title: Jekyll Basics
|
|
17
|
+
---
|
|
18
|
+
`unaltraweb` sites are normal Jekyll sites with a reusable theme gem. You do not need to edit the theme to edit content.
|
|
19
|
+
|
|
20
|
+
## Front Matter
|
|
21
|
+
|
|
22
|
+
Every page starts with YAML front matter:
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
---
|
|
26
|
+
title: Projects
|
|
27
|
+
layout: page
|
|
28
|
+
lang: en
|
|
29
|
+
permalink: /en/projects/
|
|
30
|
+
profiles: [unaltreselfie]
|
|
31
|
+
feature: projects
|
|
32
|
+
---
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Collections
|
|
36
|
+
|
|
37
|
+
Collections are folders whose entries are rendered by layouts:
|
|
38
|
+
|
|
39
|
+
- `_projects/` for project cards and project pages.
|
|
40
|
+
- `_outputs/` for research outputs.
|
|
41
|
+
- `_books/` for readings.
|
|
42
|
+
- `_chapters/` for manuals.
|
|
43
|
+
- `_documentation/` for documentation pages.
|
|
44
|
+
|
|
45
|
+
## Theme Resolution
|
|
46
|
+
|
|
47
|
+
Jekyll looks in the child repository first and then in the `unaltraweb` gem. This lets a site override a layout intentionally, but normal sites should avoid copying core files.
|
|
48
|
+
|
|
49
|
+
## Static Build Rule
|
|
50
|
+
|
|
51
|
+
Normal builds should not fetch external APIs. Metrics, diagrams and PDF previews are generated by explicit commands before the site build.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Create Pages, Collections, And Navigation
|
|
3
|
+
description: How editable content becomes navigation and rendered pages.
|
|
4
|
+
lang: en
|
|
5
|
+
ref: pages_collections_navigation
|
|
6
|
+
profiles:
|
|
7
|
+
- unaltredocs
|
|
8
|
+
documentation_profiles:
|
|
9
|
+
- github-publishers
|
|
10
|
+
- local-authors
|
|
11
|
+
- site-designers
|
|
12
|
+
- contributors
|
|
13
|
+
- core-developers
|
|
14
|
+
section: Build A Site
|
|
15
|
+
weight: 210
|
|
16
|
+
permalink: "/pages-collections-navigation/"
|
|
17
|
+
nav_title: Pages And Navigation
|
|
18
|
+
---
|
|
19
|
+
Child sites keep navigation pages in `_pages/` and structured entries in collections.
|
|
20
|
+
|
|
21
|
+
## Navigation Pages
|
|
22
|
+
|
|
23
|
+
Set `nav: true` to add a page to the top navigation for profiles that use standard nav.
|
|
24
|
+
|
|
25
|
+
```yaml
|
|
26
|
+
---
|
|
27
|
+
title: Publications
|
|
28
|
+
layout: bib
|
|
29
|
+
lang: en
|
|
30
|
+
ref: publications
|
|
31
|
+
profiles: [unaltreselfie]
|
|
32
|
+
feature: publications
|
|
33
|
+
nav: true
|
|
34
|
+
nav_order: 40
|
|
35
|
+
permalink: /en/publications/
|
|
36
|
+
---
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Profile Filtering
|
|
40
|
+
|
|
41
|
+
Use `profiles` to keep a multi-profile starter repository without publishing every page in every profile.
|
|
42
|
+
|
|
43
|
+
```yaml
|
|
44
|
+
profiles: [unaltreprojecte]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Feature Flags
|
|
48
|
+
|
|
49
|
+
Feature flags hide standard sections from navigation without deleting content.
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
unaltraweb:
|
|
53
|
+
features:
|
|
54
|
+
publications: true
|
|
55
|
+
blog: false
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Documentation Pages
|
|
59
|
+
|
|
60
|
+
Documentation pages use the `documentation` collection and a `section` value for the left index.
|
|
61
|
+
|
|
62
|
+
```yaml
|
|
63
|
+
---
|
|
64
|
+
title: Install and run locally
|
|
65
|
+
section: User guides
|
|
66
|
+
weight: 30
|
|
67
|
+
---
|
|
68
|
+
```
|