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.
Files changed (444) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +20 -0
  3. data/Makefile +412 -0
  4. data/README.md +226 -0
  5. data/_config.yml +842 -0
  6. data/_data/i18n/ca.yml +278 -0
  7. data/_data/i18n/en.yml +278 -0
  8. data/_data/i18n/es.yml +278 -0
  9. data/_includes/audio.liquid +30 -0
  10. data/_includes/bib_search.liquid +5 -0
  11. data/_includes/blog-list.liquid +66 -0
  12. data/_includes/book-citation.liquid +33 -0
  13. data/_includes/citation.liquid +26 -0
  14. data/_includes/custom_head.liquid +3 -0
  15. data/_includes/custom_scripts.liquid +5 -0
  16. data/_includes/cv/list.liquid +5 -0
  17. data/_includes/cv/list_groups.liquid +51 -0
  18. data/_includes/cv/map.liquid +29 -0
  19. data/_includes/cv/nested_list.liquid +16 -0
  20. data/_includes/cv/time_table.liquid +118 -0
  21. data/_includes/cv-download-card.liquid +26 -0
  22. data/_includes/developer-mode-switcher.liquid +24 -0
  23. data/_includes/disqus.liquid +13 -0
  24. data/_includes/distill_scripts.liquid +298 -0
  25. data/_includes/documentation-download-detail.liquid +76 -0
  26. data/_includes/documentation-downloads.liquid +71 -0
  27. data/_includes/documentation-profile-attributes.liquid +4 -0
  28. data/_includes/documentation-section-toc.liquid +9 -0
  29. data/_includes/documentation-sidebar.liquid +112 -0
  30. data/_includes/figure.liquid +87 -0
  31. data/_includes/footer.liquid +66 -0
  32. data/_includes/giscus.liquid +25 -0
  33. data/_includes/head.liquid +220 -0
  34. data/_includes/header.liquid +544 -0
  35. data/_includes/latest_posts.liquid +61 -0
  36. data/_includes/localized-date.liquid +5 -0
  37. data/_includes/manual-bibliography.liquid +2 -0
  38. data/_includes/manual-featured-readings.liquid +12 -0
  39. data/_includes/manual-other-readings.liquid +12 -0
  40. data/_includes/manual-page-toc.liquid +11 -0
  41. data/_includes/manual-sidebar.liquid +58 -0
  42. data/_includes/manual-teachers.liquid +74 -0
  43. data/_includes/metadata.liquid +278 -0
  44. data/_includes/news.liquid +48 -0
  45. data/_includes/newsletter.liquid +68 -0
  46. data/_includes/page-hero.liquid +96 -0
  47. data/_includes/page-link.liquid +8 -0
  48. data/_includes/pagination.liquid +22 -0
  49. data/_includes/post-reading-time.liquid +29 -0
  50. data/_includes/previous-next.liquid +37 -0
  51. data/_includes/profile-card.liquid +49 -0
  52. data/_includes/profile-feature-matrix.liquid +75 -0
  53. data/_includes/profile-highlights.liquid +122 -0
  54. data/_includes/project-grid.liquid +26 -0
  55. data/_includes/project-resource-link.liquid +45 -0
  56. data/_includes/project-resources.liquid +21 -0
  57. data/_includes/projects.liquid +38 -0
  58. data/_includes/projects_horizontal.liquid +37 -0
  59. data/_includes/publications-metrics-summary.liquid +69 -0
  60. data/_includes/publications-summary.liquid +127 -0
  61. data/_includes/reading-biblio-controls.liquid +65 -0
  62. data/_includes/reading-cover-card.liquid +93 -0
  63. data/_includes/reading-rating.liquid +11 -0
  64. data/_includes/recommended-readings.liquid +30 -0
  65. data/_includes/related_posts.liquid +39 -0
  66. data/_includes/repository/repo.liquid +48 -0
  67. data/_includes/repository/repo_trophies.liquid +44 -0
  68. data/_includes/repository/repo_user.liquid +35 -0
  69. data/_includes/resume/awards.liquid +19 -0
  70. data/_includes/resume/basics.liquid +28 -0
  71. data/_includes/resume/certificates.liquid +35 -0
  72. data/_includes/resume/education.liquid +54 -0
  73. data/_includes/resume/interests.liquid +34 -0
  74. data/_includes/resume/languages.liquid +31 -0
  75. data/_includes/resume/projects.liquid +32 -0
  76. data/_includes/resume/publications.liquid +28 -0
  77. data/_includes/resume/references.liquid +31 -0
  78. data/_includes/resume/skills.liquid +33 -0
  79. data/_includes/resume/volunteer.liquid +52 -0
  80. data/_includes/resume/work.liquid +52 -0
  81. data/_includes/scripts.liquid +364 -0
  82. data/_includes/search-data.js.liquid +341 -0
  83. data/_includes/selected_papers.liquid +3 -0
  84. data/_includes/t.liquid +31 -0
  85. data/_includes/team-grid.liquid +172 -0
  86. data/_includes/video.liquid +97 -0
  87. data/_layouts/about.liquid +93 -0
  88. data/_layouts/archive.liquid +45 -0
  89. data/_layouts/bib.liquid +677 -0
  90. data/_layouts/book-review.liquid +225 -0
  91. data/_layouts/book-shelf.liquid +66 -0
  92. data/_layouts/cv.liquid +127 -0
  93. data/_layouts/default.liquid +70 -0
  94. data/_layouts/distill.liquid +132 -0
  95. data/_layouts/documentation-download-detail.liquid +5 -0
  96. data/_layouts/documentation-home.liquid +100 -0
  97. data/_layouts/documentation-page.liquid +45 -0
  98. data/_layouts/manual-bib.liquid +73 -0
  99. data/_layouts/manual-chapter.liquid +99 -0
  100. data/_layouts/manual-featured-bib.liquid +100 -0
  101. data/_layouts/manual-home.liquid +120 -0
  102. data/_layouts/none.liquid +1 -0
  103. data/_layouts/outputs.liquid +29 -0
  104. data/_layouts/page.liquid +52 -0
  105. data/_layouts/post.liquid +95 -0
  106. data/_layouts/profile.liquid +36 -0
  107. data/_layouts/profiles.liquid +36 -0
  108. data/_layouts/project.liquid +7 -0
  109. data/_layouts/repositories.liquid +58 -0
  110. data/_layouts/theses.liquid +126 -0
  111. data/_plugins/bibliography_profiles.rb +164 -0
  112. data/_plugins/callouts.rb +104 -0
  113. data/_plugins/code_blocks.rb +277 -0
  114. data/_plugins/computation_figure_images.rb +266 -0
  115. data/_plugins/computation_sources.rb +42 -0
  116. data/_plugins/content_search_index.rb +210 -0
  117. data/_plugins/details.rb +23 -0
  118. data/_plugins/external-posts.rb +124 -0
  119. data/_plugins/figure_captions.rb +800 -0
  120. data/_plugins/file-exists.rb +22 -0
  121. data/_plugins/google-scholar-citations.rb +86 -0
  122. data/_plugins/hide-custom-bibtex.rb +18 -0
  123. data/_plugins/inspirehep-citations.rb +57 -0
  124. data/_plugins/localized_visual_sources.rb +145 -0
  125. data/_plugins/manual_release_metadata.rb +47 -0
  126. data/_plugins/mermaid_mmd_images.rb +233 -0
  127. data/_plugins/profile-pages.rb +28 -0
  128. data/_plugins/remove-accents.rb +32 -0
  129. data/_plugins/reproducible_build_time.rb +55 -0
  130. data/_plugins/search-data.rb +83 -0
  131. data/_plugins/theme-cache-bust.rb +56 -0
  132. data/_plugins/vega_visual_images.rb +290 -0
  133. data/_plugins/web_capture_images.rb +154 -0
  134. data/_sass/_base.scss +2133 -0
  135. data/_sass/_blog.scss +67 -0
  136. data/_sass/_callouts.scss +100 -0
  137. data/_sass/_custom.scss +437 -0
  138. data/_sass/_cv.scss +274 -0
  139. data/_sass/_developer.scss +97 -0
  140. data/_sass/_distill.scss +185 -0
  141. data/_sass/_documentation.scss +2220 -0
  142. data/_sass/_layout.scss +218 -0
  143. data/_sass/_manual.scss +2691 -0
  144. data/_sass/_profile.scss +323 -0
  145. data/_sass/_projects.scss +163 -0
  146. data/_sass/_reading.scss +465 -0
  147. data/_sass/_site-custom.scss +3 -0
  148. data/_sass/_tabs.scss +48 -0
  149. data/_sass/_team.scss +230 -0
  150. data/_sass/_themes.scss +254 -0
  151. data/_sass/_typograms.scss +132 -0
  152. data/_sass/_variables.scss +52 -0
  153. data/_sass/font-awesome/_animated.scss +152 -0
  154. data/_sass/font-awesome/_bordered-pulled.scss +20 -0
  155. data/_sass/font-awesome/_core.scss +49 -0
  156. data/_sass/font-awesome/_fixed-width.scss +7 -0
  157. data/_sass/font-awesome/_functions.scss +57 -0
  158. data/_sass/font-awesome/_icons.scss +13 -0
  159. data/_sass/font-awesome/_list.scss +18 -0
  160. data/_sass/font-awesome/_mixins.scss +65 -0
  161. data/_sass/font-awesome/_rotated-flipped.scss +31 -0
  162. data/_sass/font-awesome/_screen-reader.scss +14 -0
  163. data/_sass/font-awesome/_shims.scss +1578 -0
  164. data/_sass/font-awesome/_sizing.scss +16 -0
  165. data/_sass/font-awesome/_stacked.scss +32 -0
  166. data/_sass/font-awesome/_variables.scss +5044 -0
  167. data/_sass/font-awesome/brands.scss +30 -0
  168. data/_sass/font-awesome/fontawesome.scss +21 -0
  169. data/_sass/font-awesome/regular.scss +27 -0
  170. data/_sass/font-awesome/solid.scss +27 -0
  171. data/_sass/font-awesome/v4-shims.scss +11 -0
  172. data/_sass/tabler-icons/tabler-icons-filled.scss +1646 -0
  173. data/_sass/tabler-icons/tabler-icons-outline.scss +9859 -0
  174. data/_sass/tabler-icons/tabler-icons.scss +11463 -0
  175. data/_scripts/cronitor-analytics-setup.js +9 -0
  176. data/_scripts/giscus-setup.js +48 -0
  177. data/_scripts/google-analytics-setup.js +9 -0
  178. data/_scripts/open-panel-analytics-setup.js +14 -0
  179. data/_scripts/photoswipe-setup.js +11 -0
  180. data/assets/audio/epicaly-short-113909.mp3 +0 -0
  181. data/assets/bibliography/2018-12-22-distill.bib +7 -0
  182. data/assets/css/academicons.min.css +1 -0
  183. data/assets/css/bootstrap-toc.min.css +4 -0
  184. data/assets/css/bootstrap.min.css +7 -0
  185. data/assets/css/bootstrap.min.css.map +1 -0
  186. data/assets/css/jekyll-pygments-themes-github.css +209 -0
  187. data/assets/css/jekyll-pygments-themes-native.css +232 -0
  188. data/assets/css/jupyter-grade3.css +3758 -0
  189. data/assets/css/jupyter-monokai.css +3758 -0
  190. data/assets/css/jupyter.css +383 -0
  191. data/assets/css/main.scss +36 -0
  192. data/assets/css/mdb.min.css +48 -0
  193. data/assets/css/mdb.min.css.map +1 -0
  194. data/assets/css/scholar-icons.css +386 -0
  195. data/assets/fonts/academicons.ttf +0 -0
  196. data/assets/fonts/academicons.woff +0 -0
  197. data/assets/fonts/scholar-icons.ttf +0 -0
  198. data/assets/fonts/scholar-icons.woff +0 -0
  199. data/assets/fonts/tabler-icons-filled.ttf +0 -0
  200. data/assets/fonts/tabler-icons-filled.woff +0 -0
  201. data/assets/fonts/tabler-icons-filled.woff2 +0 -0
  202. data/assets/fonts/tabler-icons-outline.ttf +0 -0
  203. data/assets/fonts/tabler-icons-outline.woff +0 -0
  204. data/assets/fonts/tabler-icons-outline.woff2 +0 -0
  205. data/assets/fonts/tabler-icons.ttf +0 -0
  206. data/assets/fonts/tabler-icons.woff +0 -0
  207. data/assets/fonts/tabler-icons.woff2 +0 -0
  208. data/assets/html/relativity.html +15 -0
  209. data/assets/img/1.jpg +0 -0
  210. data/assets/img/10.jpg +0 -0
  211. data/assets/img/11.jpg +0 -0
  212. data/assets/img/12.jpg +0 -0
  213. data/assets/img/2.jpg +0 -0
  214. data/assets/img/3.jpg +0 -0
  215. data/assets/img/4.jpg +0 -0
  216. data/assets/img/5.jpg +0 -0
  217. data/assets/img/6.jpg +0 -0
  218. data/assets/img/7.jpg +0 -0
  219. data/assets/img/8.jpg +0 -0
  220. data/assets/img/9.jpg +0 -0
  221. data/assets/img/book_covers/the_godfather.jpg +0 -0
  222. data/assets/img/brand/dosquartsdedocs-logo-cafe.svg +31 -0
  223. data/assets/img/brand/dosquartsdedocs-logo-footer-cafe.svg +31 -0
  224. data/assets/img/brand/dosquartsdedocs-logo-white.svg +31 -0
  225. data/assets/img/brand/dosquartsdedocs-logo.svg +31 -0
  226. data/assets/img/prof_pic.jpg +0 -0
  227. data/assets/img/prof_pic_color.png +0 -0
  228. data/assets/img/profile-placeholder.svg +8 -0
  229. data/assets/img/publication_preview/brownian-motion.gif +0 -0
  230. data/assets/img/publication_preview/goodchild1992-gis-cover.jpg +0 -0
  231. data/assets/img/publication_preview/gutierrez2020-jtrg-preview.jpg +0 -0
  232. data/assets/img/publication_preview/harvey1989-postmodernity-cover.jpg +0 -0
  233. data/assets/img/publication_preview/tobler1970-economic-geography-cover.jpg +0 -0
  234. data/assets/img/publication_preview/tuan1977-space-place-cover.jpg +0 -0
  235. data/assets/img/publication_preview/wave-mechanics.gif +0 -0
  236. data/assets/img/publication_preview/zaragozi2025-rooftop-pv-preview.jpg +0 -0
  237. data/assets/img/rhino.png +0 -0
  238. data/assets/img/team/aaron-gutierrez.png +0 -0
  239. data/assets/img/team/alba-font.png +0 -0
  240. data/assets/img/team/alba-viana.png +0 -0
  241. data/assets/img/team/alejandro-gonzalez.png +0 -0
  242. data/assets/img/team/ana-pastor.png +0 -0
  243. data/assets/img/team/antoni-domenech.png +0 -0
  244. data/assets/img/team/benito-zaragozi.png +0 -0
  245. data/assets/img/team/cinta-sanz.png +0 -0
  246. data/assets/img/team/daniel-miravet.png +0 -0
  247. data/assets/img/team/eugenia-altamirano.png +0 -0
  248. data/assets/img/team/fiammetta-brandajs.png +0 -0
  249. data/assets/img/team/francesc-gonzalez.png +0 -0
  250. data/assets/img/team/isabel-paulino.png +0 -0
  251. data/assets/img/team/joan-borras.png +0 -0
  252. data/assets/img/team/julie-wilson.png +0 -0
  253. data/assets/img/team/liliana-sole.png +0 -0
  254. data/assets/img/team/maria-casado.png +0 -0
  255. data/assets/img/team/maria-medina.png +0 -0
  256. data/assets/img/team/marta-nello.png +0 -0
  257. data/assets/img/team/mogrify +1 -0
  258. data/assets/img/team/oscar-saladie.png +0 -0
  259. data/assets/img/team/paolo-russo.png +0 -0
  260. data/assets/img/team/raquel-santos.png +0 -0
  261. data/assets/img/team/salvador-anton.png +0 -0
  262. data/assets/img/team/sunsi-huertas.png +0 -0
  263. data/assets/img/team/user-placeholder.png +0 -0
  264. data/assets/img/team/wilbert-den-hoed.png +0 -0
  265. data/assets/img/team/xavier-delclos.png +0 -0
  266. data/assets/img/template_error.png +0 -0
  267. data/assets/js/bibsearch.js +70 -0
  268. data/assets/js/bootstrap-toc.min.js +5 -0
  269. data/assets/js/bootstrap.bundle.min.js +7 -0
  270. data/assets/js/bootstrap.bundle.min.js.map +1 -0
  271. data/assets/js/callouts.js +115 -0
  272. data/assets/js/chartjs-setup.js +14 -0
  273. data/assets/js/common.js +117 -0
  274. data/assets/js/content-search-match.js +159 -0
  275. data/assets/js/content-search.js +441 -0
  276. data/assets/js/copy_code.js +60 -0
  277. data/assets/js/custom.js +6 -0
  278. data/assets/js/developer-mode.js +103 -0
  279. data/assets/js/diff2html-setup.js +20 -0
  280. data/assets/js/distillpub/overrides.js +27 -0
  281. data/assets/js/distillpub/template.v2.js +9616 -0
  282. data/assets/js/distillpub/template.v2.js.map +1 -0
  283. data/assets/js/distillpub/transforms.v2.js +14557 -0
  284. data/assets/js/distillpub/transforms.v2.js.map +1 -0
  285. data/assets/js/documentation.js +435 -0
  286. data/assets/js/echarts-setup.js +29 -0
  287. data/assets/js/highlight-search-term.js +110 -0
  288. data/assets/js/jupyter_new_tab.js +18 -0
  289. data/assets/js/leaflet-setup.js +22 -0
  290. data/assets/js/manual.js +308 -0
  291. data/assets/js/masonry.js +12 -0
  292. data/assets/js/mathjax-setup.js +46 -0
  293. data/assets/js/mermaid-setup.js +37 -0
  294. data/assets/js/newsletter.js +105 -0
  295. data/assets/js/no_defer.js +24 -0
  296. data/assets/js/plotly-setup.js +52 -0
  297. data/assets/js/profile-nav.js +92 -0
  298. data/assets/js/progress-bar.js +73 -0
  299. data/assets/js/pseudocode-setup.js +18 -0
  300. data/assets/js/search/base-styles.min.js +286 -0
  301. data/assets/js/search/command-score.min.js +7 -0
  302. data/assets/js/search/hotkeys-js/hotkeys.esm.min.js +18 -0
  303. data/assets/js/search/lit/decorators.min.js +7 -0
  304. data/assets/js/search/lit/directives/class-map.min.js +7 -0
  305. data/assets/js/search/lit/directives/join.min.js +7 -0
  306. data/assets/js/search/lit/directives/live.min.js +7 -0
  307. data/assets/js/search/lit/directives/ref.min.js +7 -0
  308. data/assets/js/search/lit/directives/repeat.min.js +7 -0
  309. data/assets/js/search/lit/directives/unsafe-html.min.js +7 -0
  310. data/assets/js/search/lit/index.min.js +7 -0
  311. data/assets/js/search/lit-element/lit-element.min.js +12 -0
  312. data/assets/js/search/lit-html/directives/class-map.min.js +22 -0
  313. data/assets/js/search/lit-html/directives/join.min.js +12 -0
  314. data/assets/js/search/lit-html/directives/live.min.js +28 -0
  315. data/assets/js/search/lit-html/directives/ref.min.js +32 -0
  316. data/assets/js/search/lit-html/directives/repeat.min.js +27 -0
  317. data/assets/js/search/lit-html/directives/unsafe-html.min.js +22 -0
  318. data/assets/js/search/lit-html/is-server.min.js +12 -0
  319. data/assets/js/search/lit-html/lit-html.min.js +12 -0
  320. data/assets/js/search/ninja-action.min.js +101 -0
  321. data/assets/js/search/ninja-footer.min.js +62 -0
  322. data/assets/js/search/ninja-header.min.js +78 -0
  323. data/assets/js/search/ninja-keys.min.js +39 -0
  324. data/assets/js/search/reactive-element/decorators/custom-element.min.js +12 -0
  325. data/assets/js/search/reactive-element/decorators/event-options.min.js +12 -0
  326. data/assets/js/search/reactive-element/decorators/property.min.js +22 -0
  327. data/assets/js/search/reactive-element/decorators/query-all.min.js +17 -0
  328. data/assets/js/search/reactive-element/decorators/query-assigned-elements.min.js +17 -0
  329. data/assets/js/search/reactive-element/decorators/query-assigned-nodes.min.js +17 -0
  330. data/assets/js/search/reactive-element/decorators/query-async.min.js +17 -0
  331. data/assets/js/search/reactive-element/decorators/query.min.js +17 -0
  332. data/assets/js/search/reactive-element/decorators/state.min.js +27 -0
  333. data/assets/js/search/reactive-element/reactive-element.min.js +17 -0
  334. data/assets/js/search-setup.js +17 -0
  335. data/assets/js/shortcut-key.js +11 -0
  336. data/assets/js/tabs.min.js +5 -0
  337. data/assets/js/theme.js +314 -0
  338. data/assets/js/tooltips-setup.js +3 -0
  339. data/assets/js/typograms.js +1341 -0
  340. data/assets/js/vanilla-back-to-top.min.js +1 -0
  341. data/assets/js/vega-setup.js +24 -0
  342. data/assets/js/venobox-setup.js +5 -0
  343. data/assets/js/wechat.js +14 -0
  344. data/assets/js/zoom.js +15 -0
  345. data/assets/json/resume.json +98 -0
  346. data/assets/json/table_data.json +128 -0
  347. data/assets/jupyter/blog.ipynb +48 -0
  348. data/assets/pdf/example_pdf.pdf +0 -0
  349. data/assets/plotly/demo.html +72 -0
  350. data/assets/video/pexels-engin-akyurt-6069112-960x540-30fps.mp4 +0 -0
  351. data/assets/webfonts/fa-brands-400.ttf +0 -0
  352. data/assets/webfonts/fa-brands-400.woff2 +0 -0
  353. data/assets/webfonts/fa-regular-400.ttf +0 -0
  354. data/assets/webfonts/fa-regular-400.woff2 +0 -0
  355. data/assets/webfonts/fa-solid-900.ttf +0 -0
  356. data/assets/webfonts/fa-solid-900.woff2 +0 -0
  357. data/assets/webfonts/fa-v4compatibility.ttf +0 -0
  358. data/assets/webfonts/fa-v4compatibility.woff2 +0 -0
  359. data/docs/Gemfile +5 -0
  360. data/docs/_config.yml +83 -0
  361. data/docs/_documentation/en/01-quick-start.md +115 -0
  362. data/docs/_documentation/en/02-tools.md +146 -0
  363. data/docs/_documentation/en/03-usage.md +107 -0
  364. data/docs/_documentation/en/04-jekyll-basics.md +51 -0
  365. data/docs/_documentation/en/05-pages-collections.md +68 -0
  366. data/docs/_documentation/en/06-github-web-editing.md +92 -0
  367. data/docs/_documentation/en/10-profiles.md +125 -0
  368. data/docs/_documentation/en/11-unaltreselfie.md +39 -0
  369. data/docs/_documentation/en/12-unaltreprojecte.md +38 -0
  370. data/docs/_documentation/en/13-unaltremanual.md +237 -0
  371. data/docs/_documentation/en/14-unaltredocs.md +92 -0
  372. data/docs/_documentation/en/15-profile-checklist.md +39 -0
  373. data/docs/_documentation/en/20-syntax.md +353 -0
  374. data/docs/_documentation/en/21-themes.md +103 -0
  375. data/docs/_documentation/en/22-feature-reference.md +56 -0
  376. data/docs/_documentation/en/23-front-matter.md +51 -0
  377. data/docs/_documentation/en/24-data-files.md +28 -0
  378. data/docs/_documentation/en/30-customization.md +448 -0
  379. data/docs/_documentation/en/31-template.md +55 -0
  380. data/docs/_documentation/en/32-development.md +108 -0
  381. data/docs/_documentation/en/33-reusable-workflows.md +136 -0
  382. data/docs/_documentation/en/40-distribution.md +164 -0
  383. data/docs/_documentation/en/41-bibliometrics.md +137 -0
  384. data/docs/_documentation/en/42-docker-image.md +185 -0
  385. data/docs/_documentation/en/50-faq.md +33 -0
  386. data/docs/_pages/ca/index.md +35 -0
  387. data/docs/_pages/en/index.md +35 -0
  388. data/docs/_pages/es/index.md +35 -0
  389. data/docs/agents/action-prompts/00-start-site-session.txt +10 -0
  390. data/docs/agents/action-prompts/05-create-new-web.txt +5 -0
  391. data/docs/agents/action-prompts/10-content-update.txt +9 -0
  392. data/docs/agents/action-prompts/15-edit-default-content.txt +8 -0
  393. data/docs/agents/action-prompts/20-manual-teaching-materials.txt +18 -0
  394. data/docs/agents/action-prompts/22-manual-style-audit.txt +14 -0
  395. data/docs/agents/action-prompts/23-manual-structure-audit.txt +17 -0
  396. data/docs/agents/action-prompts/25-translation-prepublish.txt +8 -0
  397. data/docs/agents/action-prompts/30-project-site-update.txt +7 -0
  398. data/docs/agents/action-prompts/40-documentation-update.txt +7 -0
  399. data/docs/agents/action-prompts/50-bibliography-entry.txt +7 -0
  400. data/docs/agents/action-prompts/60-bibliometrics-refresh.txt +7 -0
  401. data/docs/agents/action-prompts/70-build-and-review.txt +12 -0
  402. data/docs/agents/manual-authoring-components.md +255 -0
  403. data/docs/agents/mcp-contract.md +162 -0
  404. data/docs/agents/quarto-computation-adoption.md +102 -0
  405. data/docs/assets/img/unaltraweb-docs-hero.svg +36 -0
  406. data/lib/unaltraweb/version.rb +8 -0
  407. data/lib/unaltraweb.rb +31 -0
  408. data/requirements.txt +5 -0
  409. data/scripts/biblio/fetch_scimago_csv.sh +126 -0
  410. data/scripts/biblio/metrics_common.py +154 -0
  411. data/scripts/biblio/metrics_merge_meta.py +73 -0
  412. data/scripts/biblio/metrics_update.py +826 -0
  413. data/scripts/computations/python/Dockerfile +37 -0
  414. data/scripts/computations/r/Dockerfile +31 -0
  415. data/scripts/computations/render.py +1267 -0
  416. data/scripts/cv/render_pdf_preview.sh +36 -0
  417. data/scripts/deploy/publish_branch.sh +80 -0
  418. data/scripts/generate_logo_variants.py +47 -0
  419. data/scripts/manual/Dockerfile +31 -0
  420. data/scripts/manual/build_pdf.py +1780 -0
  421. data/scripts/manual/filters/bibliography.lua +164 -0
  422. data/scripts/manual/filters/code-blocks.lua +102 -0
  423. data/scripts/manual/filters/figure-captions.lua +35 -0
  424. data/scripts/manual/publish_release.sh +281 -0
  425. data/scripts/manual/templates/manual.tex +494 -0
  426. data/scripts/manual/verify_release_assets.py +650 -0
  427. data/scripts/test_gem_build.py +128 -0
  428. data/scripts/test_reproducible_jekyll_build.py +191 -0
  429. data/scripts/test_wheel_install.py +282 -0
  430. data/scripts/unaltraweb-docker-mount.sh +36 -0
  431. data/scripts/unaltraweb-mcp-bootstrap.sh +105 -0
  432. data/scripts/unaltraweb-mcp-cleanup.sh +73 -0
  433. data/scripts/unaltraweb-mcp-project-id.sh +34 -0
  434. data/scripts/validate_distribution.py +563 -0
  435. data/scripts/validate_workflows.py +1285 -0
  436. data/scripts/web_captures/Dockerfile +31 -0
  437. data/scripts/web_captures/capture.mjs +157 -0
  438. data/scripts/web_captures/package-lock.json +56 -0
  439. data/scripts/web_captures/package.json +9 -0
  440. data/scripts/web_captures/render.py +867 -0
  441. data/src/unaltraweb_mcp/component-contract.json +153 -0
  442. data/src/unaltraweb_mcp/component-contract.schema.json +87 -0
  443. data/src/unaltraweb_mcp/docker_mount.py +19 -0
  444. metadata +861 -0
Binary file
Binary file
Binary file
Binary file
Binary file
data/docs/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ group :jekyll_plugins do
4
+ gem "unaltraweb", path: ".."
5
+ end
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
+ ```