recipes pages #17

Open
fauno wants to merge 92 commits from issue-16 into antifascista
64 changed files with 36773 additions and 950 deletions
+1
View File
@@ -6,6 +6,7 @@
*.rb
*.txt
.env*
_includes/svg/*.svg
_includes/*.scss
_bin/
assets/js/
+52 -53
View File
@@ -1,61 +1,59 @@
---
sass:
load_paths:
- node_modules
- node_modules
style: compressed
quiet_deps: true
silence_deprecations:
- import
- import
locales:
- es
- en
- ar
- en
early_plugins:
- gem: jekyll-activity-pub
version: "~> 0.3.0"
require:
- jekyll/activity_pub/commands
- jekyll-activity-pub-absolute-assets
- jekyll-activity-pub-link-iframes
- jekyll-activity-pub-assets-as-attachments
- jekyll-activity-pub-fep-fffd
- jekyll-activity-pub-fep-fffd-license
- jekyll-activity-pub-fep-1042
- gem: jekyll-activity-pub
version: "~> 0.3.0"
require:
- jekyll/activity_pub/commands
- jekyll-activity-pub-absolute-assets
- jekyll-activity-pub-link-iframes
- jekyll-activity-pub-assets-as-attachments
- jekyll-activity-pub-fep-fffd
- jekyll-activity-pub-fep-fffd-license
- jekyll-activity-pub-fep-1042
plugins:
- jekyll-activity-pub
- jekyll-brotli
- jekyll-data
- jekyll-drafts-as-metadata
- jekyll-embed-urls
- jekyll-gzip
- jekyll-hardlinks
- jekyll-ignore-layouts
- jekyll-images
- jekyll-include-cache
- jekyll-linked-posts
- jekyll-locales
- jekyll-logger-tap
- jekyll-order
- jekyll-raw-html-converter
- jekyll-relative-urls
- jekyll-seo-tag
- sutty-liquid
- jekyll-nokogiri
- jekyll-sitemap
excerpt_separator: ""
- jekyll-activity-pub
- jekyll-brotli
- jekyll-data
- jekyll-drafts-as-metadata
- jekyll-embed-urls
- jekyll-gzip
- jekyll-hardlinks
- jekyll-ignore-layouts
- jekyll-images
- jekyll-include-cache
- jekyll-linked-posts
- jekyll-locales
- jekyll-logger-tap
- jekyll-order
- jekyll-raw-html-converter
- jekyll-relative-urls
- jekyll-seo-tag
- sutty-liquid
- jekyll-nokogiri
- jekyll-sitemap
excerpt_separator: ''
markdown: RawHtmlConverter
liquid:
strict_filters: true
strict_render: true
yaml_to_scss:
reject_keys:
- uuid
- locales
- title
- order
- draft
- testing
- permalink
- uuid
- locales
- title
- order
- draft
- testing
- permalink
ignored_layouts: []
images:
interlaced: true
@@ -63,16 +61,17 @@ activity_pub:
url: https://social.distributed.press
announce: false
manually_approves_followers: false
activity_pub_private_key: ./privkey.pem
activity_pub_private_key: "./privkey.pem"
defaults:
- scope:
type: posts
values:
activity: false
sitemap: true
title: Sutty Base
description: Sutty Base Bootstrap 5
hostname: sutty-base-bootstrap-5.sutty.local
url: https://sutty-base-bootstrap-5.sutty.local:4000
- scope:
type: posts
values:
activity: false
sitemap: true
title: Coopcloud Testing
description: New website for Coopcloud Federation
hostname: coopcloud.testing.sutty.nl
url: https://coopcloud.testing.sutty.nl
brotli:
quality: 9
name: coopcloud.testing
+2
View File
@@ -5,3 +5,5 @@
- Roboto Mono
- Saira
- Space Grotesk
- BBH Hegarty
- IBM Plex Mono
+1
View File
@@ -9,6 +9,7 @@ theme_colors:
danger: $danger
light: $light
dark: $dark
purple: $purple
body-color: $body-color
theme_colors_dark:
body-color: $body-color-dark
+18
View File
@@ -19,6 +19,10 @@ sizes:
100: 100%
auto: auto
35px: 35px
80px: 80px
100px: 100px
150px: 150px
100vh: 100vh
content: 72ch
iframe_min_height: 480px
pixel_densities:
@@ -38,3 +42,17 @@ font_families:
headings: "$headings-font-family"
content: "$font-family-content"
color_mode_type: "data"
font_sizes:
1: "$h1-font-size"
2: "$h2-font-size"
3: "$h3-font-size"
4: "$h4-font-size"
5: "$h5-font-size"
6: "$h6-font-size"
font-weight-bold: 700
border-widths:
1: 1px
2: 2px
3: 3px
4: 4px
5: 5px
+1 -1
View File
@@ -5,10 +5,10 @@
- "buttons"
- "fonts"
- "utilities"
- "picture"
- "toggler"
- "details"
- "video"
- "card_recipe"
- "text"
- "checkbox"
- "radio"
+2 -1
View File
@@ -57,7 +57,8 @@ layouts:
about: "About this site"
code_of_conduct: "Code of conduct"
license: "License"
post: "Article"
post: "Blog post"
document: "Document"
privacy_policy: "Privacy policy"
theme: "Customize theme"
menu_internal: "Menu (internal item)"
+2 -1
View File
@@ -57,7 +57,8 @@ layouts:
about: "Información del sitio"
code_of_conduct: "Código de conducta"
license: "Licencia"
post: "Artículo"
post: "Artículo de blog"
document: "Documento"
privacy_policy: "Política de privacidad"
theme: "Personalizar plantilla"
menu_internal: "Menú (enlace interno)"
+20
View File
@@ -0,0 +1,20 @@
---
items:
- title: Gitea
description: 'a painless self-hosted git'
star: 0
image:
path: 'public/1312e65bl3pqdg293clazf83znbxb/gitea.png'
description: "gitea logo"
- title: Gitea
description: 'a painless self-hosted git'
star: 2
image:
path: 'public/1312e65bl3pqdg293clazf83znbxb/gitea.png'
description: "gitea logo"
- title: Gitea
description: 'a painless self-hosted git'
star: 4
image:
path: 'public/1312e65bl3pqdg293clazf83znbxb/gitea.png'
description: "gitea logo"
+5
View File
@@ -0,0 +1,5 @@
---
items:
- autonomic:
path: public/autonimic.png
description: 'logo autonomic'
+3
View File
@@ -10,3 +10,6 @@ plurals:
post: posts
privacy_policy: privacy_policies
theme: themes
document: documents
blog: blogs
contact: contacts
+6
View File
@@ -57,6 +57,12 @@ image:
help:
es: "Describí la imagen por razones de accesibilidad e indexacion en buscadores"
en: "Describe the image for accesibility purposes and for indexation in search engines"
content:
type: "new_content"
label:
en: "Post content"
help:
en: "Write your post here"
email:
type: "email"
label:
+34
View File
@@ -0,0 +1,34 @@
---
title:
type: "string"
required: true
label:
es: "Título del artículo"
en: "Post title"
help:
es: "¡Un título que invite a leer el artículo!"
en: "A title that invites people to read the post!"
locales:
type: "locales"
label:
es: "Traducciones"
en: "Translations"
help:
es: "Vínculo al mismo artículo en otros idiomas"
en: "Link to same post in other languages"
draft:
type: "boolean"
label:
es: "Borrador"
en: "Draft"
help:
es: 'Al activar "Borrador" este contenido se mantendrá disponible en el panel, pero no se publica en el sitio como los demás contenidos al tocar "Publicar todos los cambios"'
en: 'By activating "Draft", this content will remain available on the dashboard, but will not be published on the site when you tap "Publish all changes" (other content which does not have this option selected will).'
order:
type: "order"
label:
es: "Orden"
en: "Order"
help:
es: "La posición del artículo en la lista de artículos"
en: "Position in list of posts"
+34
View File
@@ -0,0 +1,34 @@
---
title:
type: "string"
required: true
label:
es: "Título del artículo"
en: "Post title"
help:
es: "¡Un título que invite a leer el artículo!"
en: "A title that invites people to read the post!"
locales:
type: "locales"
label:
es: "Traducciones"
en: "Translations"
help:
es: "Vínculo al mismo artículo en otros idiomas"
en: "Link to same post in other languages"
draft:
type: "boolean"
label:
es: "Borrador"
en: "Draft"
help:
es: 'Al activar "Borrador" este contenido se mantendrá disponible en el panel, pero no se publica en el sitio como los demás contenidos al tocar "Publicar todos los cambios"'
en: 'By activating "Draft", this content will remain available on the dashboard, but will not be published on the site when you tap "Publish all changes" (other content which does not have this option selected will).'
order:
type: "order"
label:
es: "Orden"
en: "Order"
help:
es: "La posición del artículo en la lista de artículos"
en: "Position in list of posts"
+139
View File
@@ -0,0 +1,139 @@
---
title:
type: "string"
required: true
label:
es: "Título del artículo"
en: "Post title"
help:
es: "¡Un título que invite a leer el artículo!"
en: "A title that makes people want to read the post!"
description:
type: "text"
required: true
label:
en: "Post description"
help:
en: "Description of post content, also used by social media and search engines."
content_warning:
type: "string"
label:
en: "Content warning"
help:
en: |
If the post is about violence and other sensitive topics, we
invite you to use it as a content warning, so others can decide
when they want to read it.
image:
type: "image"
path:
label:
en: "Main image"
help:
en: "Used to illustrate the article and as preview in social networks."
description:
label:
en: "Main image description"
help:
en: "Describe the image for accesibility purposes and for indexation in search engines"
category:
type: "new_predefined_array"
label:
en: "Category"
help:
en: "Select category"
values:
member:
en: "Member"
tutorial:
en: "Tutorial"
howto:
en: "HowTo"
reference:
en: "Reference"
meeting_notes:
en: "Meeting Notes"
tool:
en: "Tool"
article:
en: "Article"
topic:
type: "new_predefined_array"
label:
en: "Topic"
help:
en: "Select Topic"
values:
community:
en: "Community"
tech:
en: "Tech"
status:
type: "new_predefined_value"
label:
en: "Status"
help:
en: "Select Topic"
values:
en:
"pending": "Pending"
"in_progress": "In Progress"
"active": "Active"
"archived": "Archived"
content:
type: "new_content"
label:
en: "Post content"
help:
en: "Write your post here"
permalink:
type: "permalink"
label:
es: "Enlace"
en: "Permalink"
help:
es: |
Si no quieres utilizar el formato de enlaces general del sitio
para este artículo, especifica uno aquí. Usa "/" para cambiar la
portada del sitio, o dejalo vacío para auto-generar la dirección.
en: |
If you don't want to follow the site's link format for this post,
change it here. Use "/" to set this page as the home page, or
leave empty to auto-generate it.
activity:
type: "boolean"
label:
es: "Publicar en el Fediverso"
en: "Publish to Fediverse"
help:
es: "Si tu sitio tiene habilitado Social Distributed Press, habilita para publicar en el Fediverso"
en: "If your site has Social Distributed Press enabled, tick to publish to the Fediverse"
default:
es: false
en: false
in_reply_to:
type: "url"
label:
es: "En respuesta a"
en: "In reply to"
help:
es: "Agrega aquí el vínculo a un artículo para generar una respuesta"
en: "Add the link to another article to reply to"
locales:
type: "locales"
label:
en: "Translations"
help:
en: "Link to same post in other languages"
draft:
type: "boolean"
label:
en: "Draft"
help:
en: 'By activating "Draft", this content will remain available on the dashboard, but will not be published on the site when you tap "Publish all changes" (other content which does not have this option selected will).'
order:
type: "order"
label:
en: "Order"
help:
en: "Position in list of posts"
+1 -1
View File
@@ -13,10 +13,10 @@ post:
filter:
layout:
- "post"
- "page"
- "code_of_conduct"
- "license"
- "privacy_policy"
- "document"
label:
en: "Página"
es: "Page"
+2
View File
@@ -1,4 +1,6 @@
---
meta:
hidden: true
title:
type: "string"
required: true
+51 -60
View File
@@ -8,76 +8,84 @@ title:
help:
es: "¡Un título que invite a leer el artículo!"
en: "A title that makes people want to read the post!"
description:
type: "text"
required: true
label:
en: "Post description"
help:
en: "Description of post content, also used by social media and search engines."
content_warning:
type: "string"
label:
es: "Alerta de contenido"
en: "Content warning"
help:
es: |
Si el artículo trata de violencias y otros temas sensibles, te
invitamos a usar este campo como alerta de contenido, para que las
personas puedan determinar cuándo quieren abrirlo.
en: |
If the post is about violence and other sensitive topics, we
invite you to use it as a content warning, so others can decide
when they want to read it.
description:
type: "text"
label:
es: "Descripción del artículo"
en: "Post description"
help:
es: "Descripción del contenido del artículo, que también usarán redes sociales y buscadores."
en: "Description of post content, also used by social media and search engines."
author:
type: "new_array"
label:
es: "Autores"
en: "Authors"
help:
es: "Empieza a escribir para filtrar valores ya usados. Presiona enter para agregar el ítem seleccionado o agregar uno nuevo si no existe."
en: "Start typing to filter previously used values. Press enter to add the selected item or a new one if it doesn't exist yet."
image:
type: "image"
required: true
path:
label:
es: "Imagen principal"
en: "Main image"
help:
es: "Se utiliza para ilustrar el artículo y como previsualización en las redes sociales."
en: "Used to illustrate the article and as preview in social networks."
description:
label:
es: "Descripción de la imagen principal"
en: "Main image description"
help:
es: "Describí la imagen por razones de accesibilidad e indexacion en buscadores"
en: "Describe the image for accesibility purposes and for indexation in search engines"
topic:
type: "new_predefined_array"
label:
en: "Topic"
help:
en: "Select Topic"
values:
community:
en: "Community"
tech:
en: "Tech"
status:
type: "new_predefined_value"
label:
en: "Status"
help:
en: "Select Topic"
values:
en:
"pending": "Pending"
"in_progress": "In Progress"
"active": "Active"
"archived": "Archived"
author:
type: "new_array"
label:
en: "Author"
help:
en: "Author or authors of the document"
content:
type: "new_content"
label:
es: "Contenido del artículo"
en: "Post content"
help:
es: "Escribe aquí el artículo"
en: "Write your post here"
categories:
type: "new_array"
permalink:
type: "permalink"
label:
es: "Categorías"
en: "Categories"
es: "Enlace"
en: "Permalink"
help:
es: "Empieza a escribir para filtrar valores ya usados. Presiona enter para agregar el ítem seleccionado o agregar uno nuevo si no existe."
en: "Start typing to filter previously used values. Press enter to add the selected item or a new one if it doesn't exist yet."
tags:
type: "new_array"
label:
es: "Etiquetas"
en: "Tags"
help:
es: "Empieza a escribir para filtrar valores ya usados. Presiona enter para agregar el ítem seleccionado o agregar uno nuevo si no existe."
en: "Start typing to filter previously used values. Press enter to add the selected item or a new one if it doesn't exist yet."
es: |
Si no quieres utilizar el formato de enlaces general del sitio
para este artículo, especifica uno aquí. Usa "/" para cambiar la
portada del sitio, o dejalo vacío para auto-generar la dirección.
en: |
If you don't want to follow the site's link format for this post,
change it here. Use "/" to set this page as the home page, or
leave empty to auto-generate it.
activity:
type: "boolean"
label:
@@ -87,8 +95,8 @@ activity:
es: "Si tu sitio tiene habilitado Social Distributed Press, habilita para publicar en el Fediverso"
en: "If your site has Social Distributed Press enabled, tick to publish to the Fediverse"
default:
es: true
en: true
es: false
en: false
in_reply_to:
type: "url"
label:
@@ -100,35 +108,18 @@ in_reply_to:
locales:
type: "locales"
label:
es: "Traducciones"
en: "Translations"
help:
es: "Vínculo al mismo artículo en otros idiomas"
en: "Link to same post in other languages"
sitemap:
type: "boolean"
label:
es: "Permitir indexadores"
en: "Allow indexation"
help:
es: "Permitir que este artículo sea indexado por buscadores"
en: "Allow search engines to index this post"
default:
es: true
en: true
draft:
type: "boolean"
label:
es: "Borrador"
en: "Draft"
help:
es: 'Al activar "Borrador" este contenido se mantendrá disponible en el panel, pero no se publica en el sitio como los demás contenidos al tocar "Publicar todos los cambios"'
en: 'By activating "Draft", this content will remain available on the dashboard, but will not be published on the site when you tap "Publish all changes" (other content which does not have this option selected will).'
order:
type: "order"
label:
es: "Orden"
en: "Order"
help:
es: "La posición del artículo en la lista de artículos"
en: "Position in list of posts"
+2
View File
@@ -50,10 +50,12 @@ font_family_monospace:
'SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace': "Default"
Roboto Mono, monospace: "Roboto Mono"
Liberation Mono, monospace: "Liberation Mono"
ibm_plex_mono: "IBM Plex Mono"
es:
"": "Default"
Roboto Mono, monospace: "Roboto Mono"
Liberation Mono, monospace: "Liberation Mono"
ibm_plex_mono: "IBM Plex Mono"
headings_font_family:
type: "predefined_value"
label:
+34032
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -2,6 +2,9 @@
organization:
post: []
page: []
blog: []
contact: []
document: []
about:
- "code_of_conduct"
- "license"
+31
View File
@@ -0,0 +1,31 @@
---
title: about
tagline: about coopcloud
description: coopcloud
logo:
path: public/0n8e65bl3pqdg293clwzf93znbxj/cloud.png
description: cloud logo coopcloud
blurhash: LnJuAaD%4noft7xuIURj00j[xuof
image:
description: ''
path:
social_networks: []
locales: []
draft: false
order: 1
permalink: "/2026/05/31/about/"
alternate_permalinks: []
layout: about
uuid: 1c08400a-425e-4fae-bead-4a0d06fe6f2c
render_with_liquid: false
usuaries:
- 27
created_at: 2026-05-31 14:54:26.236392904 -06:00
---
<h3>We are a a federation, an open, democratic, peer governed community...</h3>
<h1>
Public interest infrastructure.<br>
An alternative to corporate clouds built by tech co-ops.
</h1>
+15
View File
@@ -0,0 +1,15 @@
---
title: Blog
draft: false
post: fdf68be0-1c27-4588-aa33-a57db70da755
order: 4
permalink: "/2026/05/31/blog/"
alternate_permalinks: []
layout: menu_internal
uuid: d1b75c0e-a888-40eb-a319-735fdd0c0bc6
render_with_liquid: false
usuaries:
- 27
created_at: 2026-05-31 15:30:15.456403097 -06:00
---
+17
View File
@@ -0,0 +1,17 @@
---
title: Comunity
post: fdf68be0-1c27-4588-aa33-a57db70da755
draft: false
order: 2
permalink: "/2026/05/31/comunity/"
alternate_permalinks: []
layout: menu_internal
uuid: 1f45a58c-2547-4748-96de-405135c5f2f4
render_with_liquid: false
usuaries:
- 27
- 2104
created_at: 2026-05-31 15:29:33.489548790 -06:00
last_modified_at: 2026-06-30 14:38:17.701598735 -06:00
---
+15
View File
@@ -0,0 +1,15 @@
---
title: Contact
draft: false
post: fdf68be0-1c27-4588-aa33-a57db70da755
order: 5
permalink: "/2026/05/31/contact/"
alternate_permalinks: []
layout: menu_internal
uuid: cf03ff90-5374-4a4d-b629-ef7cd1c16e34
render_with_liquid: false
usuaries:
- 27
created_at: 2026-05-31 15:30:36.210678561 -06:00
---
+37
View File
@@ -0,0 +1,37 @@
---
title: coopcloud-theme
font_family_sans_serif: Inter, sans-serif
font_family_monospace: Roboto Mono, monospace
headings_font_family: BBH Hegarty
font_family_content: Inter, sans-serif
enable_rounded: false
enable_shadows: false
body_bg: "#ffffff"
body_color: "#2f2f2f"
primary: "#7659ff"
secondary: "#2f2f2f"
link_color: "#7659ff"
link_hover_color: "#2f2f2f"
h1_font_size: 2.5rem
h2_font_size: 2rem
h3_font_size: 1.75rem
h4_font_size: 1.5rem
h5_font_size: 1.25rem
h6_font_size: 1rem
mark_bg: "#ff3751"
navbar_light_color: "#fcf8e3"
navbar_light_hover_color: "#2f2f2f"
navbar_light_active_color: "#212529"
testing: false
draft: false
order: 6
permalink: "/theme/"
alternate_permalinks: []
layout: theme
uuid: ab031a38-6ef7-4bc0-9a68-cc45de8922b9
render_with_liquid: false
usuaries:
- 27
created_at: 2026-05-31 15:35:45.671219817 -06:00
---
+17
View File
@@ -0,0 +1,17 @@
---
title: Tech stack
post: 20c19b09-92e0-4fae-9adf-bf54e02f443c
draft: false
order: 3
permalink: "/2026/05/31/tech-stack/"
alternate_permalinks: []
layout: menu_internal
uuid: 27ee2193-c539-4930-a421-04c91ebd089a
render_with_liquid: false
usuaries:
- 27
- 2104
created_at: 2026-05-31 15:29:58.029912576 -06:00
last_modified_at: 2026-06-30 14:40:29.987353953 -06:00
---
+37
View File
@@ -0,0 +1,37 @@
---
title: Tech stack
description: "..."
image:
description: ''
path:
category: []
topic:
- tech
status: pending
author: []
permalink: "/2026/06/30/tech-stack/"
activity: false
locales: []
draft: false
order: 8
alternate_permalinks: []
layout: document
uuid: 20c19b09-92e0-4fae-9adf-bf54e02f443c
render_with_liquid: false
usuaries:
- 2104
created_at: 2026-06-30 14:40:08.608656827 -06:00
---
<p style="text-align:start">A brief paragraph (expanded from the home page) plus a list of suggested links to start. </p>
<ul>
<li>
<p style="text-align:start">aoeu</p>
</li>
<li>
<p style="text-align:start">aoeu</p>
</li>
<li>
<p style="text-align:start">-drddr</p>
</li>
</ul>
+36
View File
@@ -0,0 +1,36 @@
---
title: The Community
description: CoopCloud is a community of people with shared values and objectives
image:
description: ''
path:
category: []
topic:
- community
status: in_progress
author: []
locales: []
draft: false
order: 7
permalink: "/2026/06/30/the-community/"
alternate_permalinks: []
layout: document
uuid: fdf68be0-1c27-4588-aa33-a57db70da755
render_with_liquid: false
usuaries:
- 2104
created_at: 2026-06-30 14:29:08.943282163 -06:00
---
<p style="text-align:start">Brief paragraph about the community (maybe expanded a bit from the home page) plus a list of suggested nodes to read/start: </p>
<ul>
<li>
<p style="text-align:start">aoeuaoeu </p>
</li>
<li>
<p style="text-align:start">aoeu aoeu oa</p>
</li>
<li>
<p style="text-align:start">aoeu</p>
</li>
</ul>
@@ -0,0 +1,381 @@
---
title: Códigos para compartir
description: Los códigos de convivencia nos permiten alojar comunidades inclusivas.
locales: []
draft: false
order: 2
permalink: "/2026/05/26/códigos-para-compartir/"
alternate_permalinks: []
layout: code_of_conduct
uuid: 407fb789-6922-4c89-8e6d-cba44bc193c6
render_with_liquid: false
usuaries:
- 1
created_at: 2026-05-26 13:33:06.296866923 -06:00
---
<h1>Códigos para compartir</h1>
<blockquote>
<p>Este código de convivencia está basado en los "<a href="https://utopia.partidopirata.com.ar/zines/codigos_para_compartir.html">Códigos para
compartir, hackear, piratear en
libertad</a>"
publicados por el <a href="https://partidopirata.com.ar/">Partido Interdimensional
Pirata</a>.</p>
</blockquote>
<blockquote>
<p>Utilizamos preferentemente la 'e' para referirnos a las personas en
general. En ese sentido, alentamos las diferentes formas, estrategias
y herramientas para incorporar prácticas no antropocéntricas,
sexistas, ni cisexistas en la lengua. Otras alternativas que apoyamos
--y eventualmente usamos-- son el uso del femenino, la letra e, arrobas,
equis, asteriscos, etc.</p>
</blockquote>
<h2>Introducción</h2>
<p>Este es un ejemplo de código que busca aportar un marco de consenso para
garantizar la asistencia, permanencia y cómoda estadía de todas las
personas que habitan y utilizan Sutty, así como para bienvenir a nueves
usuaries y potenciales aliades. Para esto, fija un piso de conductas
deseables, aceptables, indeseables y/o intolerables para la comunidad.
Podés usarlo sin cambios o modificarlo para adaptarlo a tus actividades.
Este código está en permanente mutación colectiva y se alimenta, copia e
inspira de las siguientes fuentes:</p>
<ul>
<li>
<p><a href="https://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy">https://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy</a></p>
</li>
<li>
<p><a href="https://trans-code.org/code-of-conduct/">https://trans-code.org/code-of-conduct/</a></p>
</li>
<li>
<p><a href="https://openhardware.science/logistics/gosh-code-of-conduct/">https://openhardware.science/logistics/gosh-code-of-conduct/</a></p>
</li>
<li>
<p><a href="https://hypatiasoftware.org/code-of-conduct/">https://hypatiasoftware.org/code-of-conduct/</a></p>
</li>
</ul>
<p>Procuramos mantener y fomentar una comunidad abierta, que invite y logre
la participación de cada vez más personas, en toda su diversidad.
Sabemos que los espacios de Software Libre, informática, sistemas, etc.
son habitados mayormente por varones cis, blancos y de clase media, pese
al reconocimiento de la necesidad de eliminar la brecha de géneros. En
este sentido, este es nuestro pequeño aporte, hecho de prácticas
colectivas de múltiples dimensiones, reflexiones, lecturas, experiencias
que crecen día a día.</p>
<h2>Que todes les seres sean bien tratades</h2>
<p>Cada ser con el que compartamos el espacio es merecedore de buen trato,
respeto y compasión. En otras palabras, compartimos a continuación los
criterios básicos de presentación y cuidados.</p>
<p>Para les humanes</p>
<p>Todes somos dignes de cuidados y de saludos y tenemos derecho a suponer
las buenas intenciones de le otre.</p>
<p>Para referirnos a otres humanes, trataremos de ser cuidadoses y
respuestuoses de su identidad de género. Para ello, son útiles los
siguientes principios:</p>
<ul>
<li>
<p>No presuponer, juzgar o "interpretar" el género de le otre.</p>
</li>
<li>
<p>No generizar de antemano. Se desprende del punto anterior, pero hace
especial énfasis en comportamientos naturalizados de generización (EJ:
presuponer que porque una persona usa un vestido se nombra en
femenino...). La propuesta es desecharlos.</p>
</li>
<li>
<p>Si la persona explicita sus pronombres y modos en que quiere ser
referenciade, lo respetamos, escuchando y procurando referirnos a elle
usando sus pronombres elegidos.</p>
</li>
<li>
<p>Si no se incluye en la presentación los pronombres preferidos, podemos
preguntar respetuosamente qué pronombres se usan. ¡Pero atención! Es
una pregunta que debe dirigirse a todes por igual, de lo contrario,
carga la "sospecha" sobre la persona señalada y puede resultar en una
forma de hostigamiento.</p>
</li>
<li>
<p>¿Es necesario conocer el género de una persona para relacionarnos o
referirnos a ella? Quizás una buena práctica es evitar generizar para
todas las personas. Pero si esto implica el uso compulsivo de la "e"
para todes, puede ser que alguna persona se sienta molesta. (Por
ejemplo, las personas trans* que se identifican en femenino o
masculino suelen sentirse molestas y "sacadas del clóset" u <em>outeadas</em>
si se refieren a ellas con la "e", ¡en especial si son las únicas en
ser generizadas de esta forma en un grupo!).</p>
</li>
<li>
<p>Ante cualquier duda, preguntar respetuosamente y disculparse
respetuosamente es una buena idea para ayudar a cuidarnos.</p>
</li>
</ul>
<h2>Puntos importantes para garantizar que nuestro espacio no resulte expulsivo</h2>
<p><strong>Escucharnos a todas y entre todas en un clima de cuidados</strong></p>
<ul>
<li>
<p>Escuchar lo que cada quien tiene para decir, conscientes de que todes
tenemos algo valioso para comunicar(nos).</p>
</li>
<li>
<p>Para la escucha activa, preferimos preguntar primero, en lugar de
hacer juicios.</p>
</li>
<li>
<p>Hacer silencio a veces es la condición para que otres puedan animarse
a hablar. Escuchar es un ejercicio que requiere práctica. También lo
es hablar.</p>
</li>
<li>
<p>Nos interesa lo que todes tengan para decir. Por lo tanto, si estás
más entrenade en el ejercicio de participar, hablar, opinar, tené en
cuenta que quizás haya otres que no lo estén tanto: darles el espacio
si quieren tomarlo. ¡Pero recordá que incentivar no es lo mismo que
presionar!</p>
</li>
<li>
<p>Tratamos de revisar y discontinuar alguna práctica que pueda haber
resultado ofensiva, para sumar al clima de respeto. Sin embargo, esto
no significa "bajar la cabeza" o estar necesariamente de acuerdo. Al
menos, fija un piso de respeto para comenzar un diálogo en el caso en
que sea necesario.</p>
</li>
<li>
<p>Es --al menos-- una falta de respeto repetir un comportamiento dañino
que ya se identificó como tal. Puede incomodar, lastimar y expulsar a
otres, por lo que preferimos llamar la atención sobre este punto todas
las veces que sea necesario y tolerable.</p>
</li>
<li>
<p>Evitamos esto nosotres y ayudamos a otres a darse cuenta cuando lo
están haciendo.</p>
</li>
<li>
<p>En los casos en los que los llamados de atención resulten
insuficientes, hemos de revisar estos acuerdos para sostener la
convivencia. Eso implica actuar de acuerdo a ellos. Y también que
estos códigos pueden ser revisados y actualizados en caso de que se
considere necesario (deje de haber consenso).</p>
</li>
<li>
<p>Una manera en la que los espacios de Software Libre y tecnologías
pueden y suelen ser expulsivos es mediante actitudes que no contemplan
la diversidad de saberes e interlocutor*s. So pretexto de incluir
tecnicismos, muches compañeres quedan al margen de lo que está
sucediendo, muchas veces, sin que nadie tenga la mínima delicadeza de
verificar que todes estén siguiendo la conversación.</p>
<p>Recomendamos fervientemente estar atentes a estas dinámicas para poder
evitarlas y/o revertirlas.</p>
</li>
<li>
<p>La otra cara de la situación anterior es el famoso <em>mansplaining</em>: un
tipo cis poniéndose en el lugar de la autoridad del saber para
(sobre-)explicar todo a le otre, de manera paternalista y sin tener en
cuenta lo que le otre quiere o no escuchar, decir, lo que sabe o hace,
etc.</p>
</li>
<li>
<p>Creemos que no hace falta ser "una voz autorizada" para opinar y
participar. La cultura libre se comparte entre todes.</p>
</li>
<li>
<p>"Compartir es bueno" vs. "Google es tu amigo". La meritocracia y
ciertos códigos tradicionales de ciertas ciber-comunidades suelen
operar de manera contraria a la propuesta de la cultura libre de
compartir. Apoyamos la cultura piratil que suma más piratas a los
barcos. Creemos que la cultura es para todes y desafiamos las
prácticas elitistas.</p>
</li>
<li>
<p>No damos por sentado que la persona con la que estamos interactuando
comparte gustos, creencias, pertenencias de clase, sexualidad, etc.
Podemos ser violentes si hacemos una lectura equivocada de le otre.
Recomendamos siempre preguntar de manera respetuosa y evitar
comentarios o chistes que puedan herir a les otres.</p>
</li>
<li>
<p>Usamos lenguaje amable e inclusivo y mostramos conductas amables e
inclusivas.</p>
</li>
<li>
<p>Respetamos los diferentes puntos de vista, experiencias, creencias,
etc. y lo tenemos en cuenta cuando estamos en grupo para verlo
reflejado en nuestras actitudes.</p>
</li>
<li>
<p>Aceptamos las críticas. En especial las constructivas ;)</p>
</li>
<li>
<p>Nos enfocamos en lo que es mejor para la comunidad, sin por ello
perder de vista la calidez, el respeto y la diversidad entre cada une
de nosotres.</p>
</li>
<li>
<p>Mostramos empatía con les otres. Queremos comunicarnos y compartir.</p>
</li>
<li>
<p>Es útil tener en cuenta que las personas tenemos capacidades,
historias, recorridos... diferentes. Es posible que algunos
comentarios no sean comprendidos. Trataremos de evitar la mala fe y
sumar todas las herramientas de accesibilidad para todas las personas.</p>
</li>
<li>
<p>El punto anterior incluye a personas neurodiversas y con experiencias
de trauma. A veces el sarcasmo o la ironía no es bien recibido o
comprendido por todes. Será útil tenerlo en cuenta para buscar
estrategias que no excluyan a las personas de nuestros intercambios.
Por otro lado, si creemos que determinados temas pueden ser sensibles
(desencadenantes de recuerdos, fobias, difíciles de tolerar o cargados
de violencia o imágenes corporales muy explícitas, por ejemplo) para
algunas personas y nos valemos de las advertencias de contenido o
<em>content warning</em> (cw) (ej: "cw: comentarios de violencia sexual y
violencia física") antes del contenido a introducir. Esto permite que
cada cual pueda elegir si acceder o no a esos contenidos y que no le
tomen por sorpresa.</p>
</li>
<li>
<p>Respetamos los límites que establecen otras personas (espacio
personal, contacto físico, ganas de interactuar, no querer dar datos
de contacto o ser fotografiades, etc.)</p>
</li>
<li>
<p>¡Queremos y (creemos) en sumar piratas!</p>
</li>
</ul>
<h2>Consentimiento para documentar o compartir en medios</h2>
<ul>
<li>
<p>Si vas a publicar video o fotos, obtené el consentimiento de las
personas.</p>
</li>
<li>
<p>Si hay menores, consultalo con su familia responsable.</p>
</li>
</ul>
<h2>Nuestro compromiso contra el acoso</h2>
<p>En el interés de fomentar una comunidad abierta, diversa y hospitalaria,
nosotres como contribuyentes y administradores nos comprometemos a hacer
de la participación en nuestro proyecto y nuestra comunidad una
experiencia libre de acoso para todes, independientemente de la edad,
diversidad corporal, capacidades, neuro-diversidad, etnia, identidad y
expresión de género, nivel de experiencia, nacionalidad, apariencia
física, raza, religión, identidad u orientación sexual y otras.</p>
<p>Ejemplos de comportamiento inaceptable por parte de participantes:</p>
<ul>
<li>
<p>Comentarios ofensivos relacionados con el/los género/s, la identidad
y expresión de género, la orientación sexual, las capacidades, las
enfermedades mentales, la neuro(a)tipicalidad, la apariencia física,
el tamaño corporal, la raza o la religión.</p>
</li>
<li>
<p>Comentarios indeseados relacionados con las elecciones y las prácticas
de estilo de vida de una persona, incluidas, entre otras, las
relacionadas con alimentos, salud, crianza de les hijes, drogas y
empleo.</p>
</li>
<li>
<p>Comentarios insultantes o despectivos (<em>trolling</em>) y ataques
personales o políticos.</p>
</li>
<li>
<p>Dar por sentado el género de las demás personas. En caso de duda,
preguntá educadamente por los pronombres. No uses nombres con los que
las personas no se identifican, usá el nombre, <em>nickname</em> o apodo que
hayan elegido (¿Realmente necesitás el nombre y el número de DNI,
datos biométricos, carta natal, etc.?).</p>
</li>
<li>
<p>Comentarios, imágenes o comportamientos sexuales innecesarios o fuera
de lugar en espacios en los que no son apropiados.</p>
</li>
<li>
<p>Contacto físico sin consentimiento o reiterado tras un pedido de cese.
En el mismo sentido, invasión del espacio corporal (y espacios en
general).</p>
</li>
<li>
<p>Amenazas contra otras personas.</p>
</li>
<li>
<p>Incitación a la violencia contra otra persona, que también incluye
alentar a una persona a autolesionarse.</p>
</li>
<li>
<p>Intimidación deliberada.</p>
</li>
<li>
<p>Acechar (<em>stalkear</em>) o perseguir.</p>
</li>
<li>
<p>Acosar fotografiando o grabando sin consentimiento, incluyendo también
subir información personal a Internet sobre alguien para acosarle.</p>
</li>
<li>
<p>Interrumpir constantemente en una conversación.</p>
</li>
<li>
<p>Hacer comentarios sexuales indeseados.</p>
</li>
<li>
<p>Patrones de contacto social inapropiados, como por ejemplo
pedir/suponer niveles de intimidad inapropiados con les demás.</p>
</li>
<li>
<p>Seguir tratando de entablar conversación con una persona cuando se te
pidió que no lo hagas.</p>
</li>
<li>
<p>Divulgar deliberadamente cualquier aspecto de la identidad de una
persona sin su consentimiento, excepto que sea necesario para proteger
a otras personas de abuso intencional.</p>
</li>
<li>
<p>Hacer pública una conversación privada de cualquier tipo.</p>
</li>
<li>
<p>Otros tipos de conducta que pudieran considerarse inapropiadas en un
entorno de camaradería.</p>
</li>
<li>
<p>Reiteración de actitudes que les participantes señalen como ofensivas
o violatorias de este código.</p>
</li>
</ul>
<h2>Consecuencias</h2>
<ul>
<li>
<p>Se espera que la persona a la que se la haya pedido que cese un
comportamiento que infringe este código acate el pedido de forma
inmediata, incluso si no está de acuerdo con este.</p>
</li>
<li>
<p>Les administradores pueden tomar cualquier acción que juzguen
necesaria y adecuada, incluyendo expulsar a la persona o dar de baja
sus sitios sin advertencia. Esta decisión la toman les administradores
en consenso y se reserva para casos extremos que comprometan la
continuidad de la comunidad o bien la posibilidad de permanencia en
ella de otres participantes sin sentirse agraviades o amenazades.</p>
</li>
<li>
<p>Les administradores se reservan el derecho a prohibir la asistencia a
cualquier actividad futura o publicación de sitios.</p>
</li>
</ul>
<p>Como mencionamos antes, este código está en permanente mutación
colectiva. El objetivo principal es generar un ambiente inclusivo y no
expulsivo, un ambiente transparente y abierto en el que no haya
escalones faltantes ("el escalón que falta en la escalera y todo el
mundo sabe y avisa pero nadie se quiere hacer cargo"). Es importante que
se adapte a las actividades y se nutra de las contribuciones de les
usuaries. Recibir tus comentarios y aportes nos ayudará a cumplir con
su objetivo principal.</p>
<h2>¡Sigamos en contacto!</h2>
<p>Si pasaste por alguna situación que quieras compartir --te hayas animado
o no a decirlo en el momento--, podés ponerte en contacto con nosotres.</p>
<p>Con respecto a quejas o avisos acerca de situaciones de violencia,
acoso, abuso o repetición de conductas que se advirtieron como
intolerables, tomamos la responsabilidad de tenerlas en cuenta y
trabajar en ellas para que el resultado sea el favorable al espíritu de
colectiva que elegimos y describimos aquí. Si bien consideramos que las
prácticas punitivistas no van con nosotres, nuestra decisión explícita
es escuchar a la persona que se manifiesta como violentada o víctima y
acompañarla.</p>
+45
View File
@@ -0,0 +1,45 @@
---
title: Creative Commons Atribución-CompartirIgual 4.0 Internacional (CC BY-SA 4.0)
description: Esta obra está bajo una Licencia Creative Commons Atribución-CompartirIgual
4.0 Internacional.
locales: []
draft: false
order: 1
permalink: "/2026/05/26/licencia/"
alternate_permalinks: []
layout: license
uuid: 7311e2f9-7e5f-4791-8db0-cdf8e1d420a2
render_with_liquid: false
usuaries:
- 1
created_at: 2026-05-26 13:33:06.206992237 -06:00
---
<p>Este es un resumen legible por humanes (y no un sustituto) de la
<a href="https://creativecommons.org/licenses/by/4.0/legalcode">licencia</a>.</p>
<h1>Usted es libre de:</h1>
<p><strong>Compartir</strong> -- copiar y redistribuir el material en cualquier
medio o formato.</p>
<p><strong>Adaptar</strong> -- remezclar, transformar y construir a partir del
material para cualquier propósito, incluso comercialmente.</p>
<p>La licenciante no puede revocar estas libertades en tanto usted siga los
términos de la licencia.</p>
<h1>Bajo los siguientes términos:</h1>
<p><strong>Atribución</strong> -- Usted debe dar crédito de manera adecuada, brindar
un enlace a la licencia, e indicar si se han realizado cambios.
Puede hacerlo en cualquier forma razonable, pero no de forma tal que
sugiera que usted o su uso tienen el apoyo de la licenciante.</p>
<p><strong>CompartirIgual</strong> -- Si remezcla, transforma o crea a partir del
material, debe distribuir su contribución bajo la lamisma licencia
del original.</p>
<p><strong>No hay restricciones adicionales</strong> -- No puede aplicar términos
legales ni medidas tecnológicas que restrinjan legalmente a otras a
hacer cualquier uso permitido por la licencia.</p>
<h1>Avisos:</h1>
<p>No tiene que cumplir con la licencia para elementos del materiale en
el dominio público o cuando su uso esté permitido por una excepción
o limitación aplicable.</p>
<p>No se dan garantías. La licencia podría no darle todos los permisos
que necesita para el uso que tenga previsto. Por ejemplo, otros
derechos como publicidad, privacidad, o derechos morales pueden
limitar la forma en que utilice el material.</p>
@@ -0,0 +1,67 @@
---
title: Políticas de privacidad
description: "¿Cuáles son los cuidados de este sitio con respecto a sus usuaries y
visitantes?"
locales: []
draft: false
order: 3
permalink: "/2026/05/26/políticas-de-privacidad/"
alternate_permalinks: []
layout: privacy_policy
uuid: 80b05eba-d60b-44d0-8cea-e7990fbdfc23
render_with_liquid: false
usuaries:
- 1
created_at: 2026-05-26 13:33:06.368746188 -06:00
---
<blockquote>
<p>Utilizamos la e como pronombre neutro para referirnos a personas
independientemente de su identidad de género, por ejemplo “usuarie”.</p>
</blockquote>
<p>Este documento detalla la política de privacidad de Sutty, incluyendo
sitio web, plataforma de edición, infraestructura relacionada (salas de
chat, etc.) y sitios creados por sus usuaries a través de la plataforma,
en adelante "Sutty".</p>
<h2>¡Esto es demasiado largo!</h2>
<p>Un resumen:</p>
<ul>
<li>
<p>Sutty no recolecta datos personales de ningún tipo</p>
</li>
<li>
<p>Sutty solo recolectaría datos analíticos que no identifican a
personas</p>
</li>
</ul>
<h2>Datos analíticos</h2>
<p>La única recolección de datos realizada por Sutty es con fines
analíticos (cantidad de visitas, duración, etc.), no asociados a datos
personales.</p>
<p>Los datos analíticos recolectados por cada sitio podrán ser utilizados
internamente por Sutty. Sutty no comparte datos analíticos con
terceros en forma privada. Datos analíticos seleccionados podrán ser
utilizados públicamente.</p>
<p>Sutty no recomienda la recolección de datos personales de ninguna forma,
pero no monitorea que les usuaries utilicen servicios de terceros con
sus propias políticas de privacidad. Recomendamos a les usuaries y
visitantes informarse antes de utilizar servicios de estadísticas de
terceros.</p>
<h2>No registro de datos personales</h2>
<p>Sutty no registra direcciones IP de usuaries ni de visitantes de ninguna
forma.</p>
<p>Sutty no solicita datos personales para el registro de cuentas de
usuarie en su plataforma.</p>
<p>Sutty solo utiliza “cookies” de sesión para identificar usuaries
mientras utilicen la plataforma. No se utilizan “cookies” para
identificar visitantes a los sitios alojados por Sutty.</p>
<p>El único caso en el que Sutty podría solicitar datos personales es
durante el pago de servicios. Se tomarán medidas de seguridad digital
para salvaguardar esta información y descartar lo que sea posible una
vez que ya no sea necesaria.</p>
<p>Se notificará a les usuaries cuando su información personal sea
eliminada.</p>
<p>Si les usuaries deciden alojar sus sitios con terceros, deberán
informarse de las políticas de privacidad correspondientes. Sutty
recomienda servicios de terceros con políticas de privacidad coherentes
con estas.</p>
+50
View File
@@ -0,0 +1,50 @@
---
class:
type: 'string'
default: 'bg-transparent justify-content-between px-0'
items:
type: 'array'
default: []
coopcloud_url:
type: 'string'
default: '?#'
color:
type: 'string'
default: 'primary'
uuid:
type: 'string'
default: ''
---
<nav class="navbar d-flex w-100 align-items-center justify-content-between {{ class }} bg-primary">
<div class="py-2">
<a class="navbar-brand d-flex flex-row align-items-end text-decoration-none" href="{{ coopcloud_url }}">
<div class="d-none d-md-flex w-150px">
{%- render 'svg/cloud.svg', color: -%}
</div>
<div class="d-md-none d-flex w-80px">
{%- render 'svg/cloud_text.svg', color: 'white' -%}
</div>
</a>
</div>
<div class="flex-grow-1 d-flex flex-row align-items-center justify-content-end">
<div class="d-none d-lg-flex justify-content-end w-100">
{% for item in items reversed %}
{% assign class = 'nav-link text-decoration-none p-3 fs-5 fw-bold text-' | append: color %}
{% if items.last %}
{% assign class = class | append: ' pe-0' %}
{% endif %}
{% render 'sutty/a.html',
content: item.title,
href: item.post.url,
class: class
%}
{% endfor %}
</div>
<div class="d-block d-lg-none">
{%- render 'menu.html',
items:,
id: 'menu',
coopcloud_url: '/#'
-%}
</div>
</nav>
+57
View File
@@ -0,0 +1,57 @@
---
title:
type: 'string'
description:
type: 'string'
image:
type: 'hash'
star:
type: 'integer'
default: 0
url:
type: 'string'
---
<div class="card mb-3">
<div class="d-flex align-items-center justify-content-center g-0">
<div class="d-flex">
{%
render 'sutty/picture.html',
image:,
img_class: 'w-100px w-md-150px border border-3 border-secondary rounded-3',
width: 100
%}
</div>
<div class="d-flex w-100 ps-3">
<div class="card-body d-flex flex-column justify-content-between h-100">
<p class="card-title fw-bold fs-3">
<a href="{{ url | component_escape }}">
{{- title -}}
</a>
</p>
<p class="card-text fst-italic">{{- description -}}</p>
{% assign rating = star %}
<div class="stars d-flex align-items-center justify-content-start">
{% for i in (1..5) %}
<svg
class="star w-35px px-1{% if i <= rating %} filled{% endif %}"
width="12.491mm"
height="11.984mm"
viewBox="0 0 12.491 11.984"
>
<g transform="translate(-74.484 -131.76)">
<path transform="rotate(-7.9572 -770.9 9164.7)" d="m1327.7 342.05c0.3406-0.10409-2.7556 2.2075-2.8948 2.4989-0.1277 0.26714 0.2922 3.3805 0.024 3.5064-0.2922 0.13731-2.951-1.9386-3.2711-1.981-0.2935-0.0389-3.1247 1.3226-3.3272 1.1066-0.221-0.23554 0.9317-3.4056 0.8732-3.7232-0.054-0.29118-2.2235-2.5631-2.0807-2.8224 0.1558-0.28288 3.5269-0.16621 3.8108-0.32006 0.2604-0.14106 1.7506-2.9066 2.0414-2.851 0.3171 0.0607 1.2479 3.3029 1.482 3.5254 0.2146 0.20399 3.3422 1.0604 3.3422 1.0604z"
fill="currentColor"
fill-opacity="0"
stroke="currentColor"
stroke-width="1.7"
stroke-linecap="square"
style="paint-order:fill markers stroke"/>
</g>
</svg>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
+21 -38
View File
@@ -1,40 +1,23 @@
---
social_networks:
type: array
default: []
---
<footer>
<ul>
{%- if site.activity_pub_profile -%}
<li>
{{ site.i18n.footer.fediverse }}
<span>@{{ site.activity_pub_profile }}</span>
</li>
{%- endif -%}
{% if include.license %}
<li>
<a href="{{ include.license.url | component_escape }}" rel="license">
{{- include.license.title | escape_once -}}
</a>
</li>
{% endif %}
{% if include.code_of_conduct %}
<li>
<a
href="{{ include.code_of_conduct.url | component_escape }}"
rel="code-of-conduct"
>
{{- include.code_of_conduct.title | escape_once -}}
</a>
</li>
{% endif %}
{% if include.privacy_policy %}
<li>
<a
href="{{ include.privacy_policy.url | component_escape }}"
rel="privacy-policy"
>
{{- include.privacy_policy.title | escape_once -}}
</a>
</li>
{% endif %}
</ul>
<div class="d-flex align-items-center justify-content-between w-100">
<div class="">
</div>
<div class="d-flex w-100">
{%- for social in contact.social_networks %}
{%- assign network = social | social_network %}
<div class="col m-auto py-3">
<a class="d-flex flex-column alig-items-center primary mx-2 text-center" href="{{ network.url }}" rel="noopener noreferrer me" target="_blank">
<p> {{ network.name | capitalize }}</p>
<span class="sr-only">{{ network.name | capitalize }}</span>
</a>
</div>
{% endfor %}
</div>
</div>
</footer>
+47
View File
@@ -0,0 +1,47 @@
---
items:
type: 'array'
default: []
id:
type: 'string'
class:
type: 'string'
default: 'position-fixed top-0 start-0 vh-100 w-100 bg-black z-3'
coopcloud_url:
type: 'string'
default: '/#'
color:
type: 'string'
default: 'white'
---
{%- block 'sutty/toggler/toggler_label.html', id: , class: 'py-3 ps-3' -%}
<div class="d-flex d-lg-none">
{%- render 'svg/menu.svg', class: 'w-35px cursor-pointer', color: -%}
</div>
{%- endblock -%}
{%- block 'sutty/toggler/toggler.html', id: , class: -%}
{%- block 'sutty/toggler/toggler_label.html', id: , class: 'w-100' -%}
<div class="d-flex justify-content-end p-4">
{%- render 'svg/x.svg', class: 'w-35px cursor-pointer', color: 'white' -%}
</div>
{%- endblock -%}
<div class="d-flex flex-column align-items-center justify-content-start p-3 w-100 h-100 text-center">
<div class="w-150px py-2">
<a class="navbar-brand" href="{{ coopcloud_url }}">
{%- render 'svg/cloud.svg', color: -%}
</a>
</div>
<ul class="p-0">
{% for item in items reversed %}
<li class="list-unstyled p-2 fw-bold {{ forloop.last | value_if: ' mb-3' }}">
{% render 'sutty/a.html',
content: item.title,
href: item.post.url,
class: 'nav-link text-white hover-secondary text-decoration-none fw-bold x-1 fs-4'
%}
</li>
{% endfor %}
</ul>
</div>
{%- endblock -%}
+4 -1
View File
@@ -6,6 +6,9 @@ href:
attributes:
type: 'string'
default: ''
class:
type: 'string'
default: ''
---
{%- assign internal_or_external = 'SUTTY ' | append: href -%}
@@ -13,6 +16,6 @@ attributes:
{%- assign attributes = attributes | append: ' rel="noopener noreferrer" target="_blank"' -%}
{%- endif -%}
<a href="{{ href | component_escape }}" {{ attributes }}>
<a class="{{ class }}" href="{{ href | component_escape }}" {{ attributes }}>
{{- content -}}
</a>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+24
View File
@@ -0,0 +1,24 @@
---
color:
type: 'string'
default: ''
---
<svg class="{{ color }}" version="1.1" viewBox="0 0 47.137 28.756" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(-115.89 -129.12)">
<g transform="matrix(.17373 0 0 .17373 62.634 97.149)" fill="{{ color }}">
<g fill="{{ color }}">
<path class="st0" d="m322.14 242.57v-3.9h-7.81v-3.9h-3.9v-7.81h-3.9v-27.33h3.9v-7.81h3.9v-3.9h7.81v-3.9h15.62v3.9h7.81v3.9h3.9v11.71h-7.81v-3.9h-3.9v-3.9h-15.62v3.9h-3.9v27.33h3.9v3.9h15.62v-3.9h3.9v-3.9h7.81v11.71h-3.9v3.9h-7.81v3.9z"/>
<path class="st0" d="m375.95 242.57v-3.9h-7.81v-3.9h-3.9v-7.81h-3.9v-27.33h3.9v-7.81h3.9v-3.9h7.81v-3.9h15.62v3.9h7.81v3.9h3.9v7.81h3.9v27.33h-3.9v7.81h-3.9v3.9h-7.81v3.9zm15.61-11.71v-3.9h3.9v-27.33h-3.9v-3.9h-15.62v3.9h-3.9v27.33h3.9v3.9z"/>
<path class="st0" d="m459.4 215.24h-42.95v-11.71h42.95z"/>
<path class="st0" d="m484.41 242.57v-3.9h-7.81v-3.9h-3.9v-7.81h-3.9v-27.33h3.9v-7.81h3.9v-3.9h7.81v-3.9h15.62v3.9h7.81v3.9h3.9v7.81h3.9v27.33h-3.9v7.81h-3.9v3.9h-7.81v3.9zm15.61-11.71v-3.9h3.9v-27.33h-3.9v-3.9h-15.62v3.9h-3.9v27.33h3.9v3.9z"/>
<path class="st0" d="m527.11 266v-81.99h11.71v7.81h3.9v-3.9h3.9v-3.9h15.62v3.9h7.81v3.9h3.9v7.81h3.9v27.33h-3.9v7.81h-3.9v3.9h-7.81v3.9h-15.62v-3.9h-3.9v-3.9h-3.9v31.23zm35.14-35.14v-3.9h3.9v-27.33h-3.9v-3.9h-15.62v3.9h-3.9v3.9h-3.9v19.52h3.9v3.9h3.9v3.9h15.62z"/>
<path class="st0" d="m322.14 349.51v-3.9h-7.81v-3.9h-3.9v-7.81h-3.9v-27.33h3.9v-7.81h3.9v-3.9h7.81v-3.9h15.62v3.9h7.81v3.9h3.9v11.71h-7.81v-3.9h-3.9v-3.9h-15.62v3.9h-3.9v27.33h3.9v3.9h15.62v-3.9h3.9v-3.9h7.81v11.71h-3.9v3.9h-7.81v3.9z"/>
<path class="st0" d="m362.16 349.51v-78.08h11.71v78.08z"/>
<path class="st0" d="m401.81 349.51v-3.9h-7.81v-3.9h-3.9v-7.81h-3.9v-27.33h3.9v-7.81h3.9v-3.9h7.81v-3.9h15.62v3.9h7.81v3.9h3.9v7.81h3.9v27.33h-3.9v7.81h-3.9v3.9h-7.81v3.9zm15.62-11.71v-3.9h3.9v-27.33h-3.9v-3.9h-15.62v3.9h-3.9v27.33h3.9v3.9z"/>
<path class="st0" d="m452.2 349.51v-3.9h-3.9v-3.9h-3.9v-50.75h11.71v42.95h3.9v3.9h11.71v-3.9h3.9v-3.9h3.9v-39.04h11.71v58.56h-11.71v-7.81h-3.9v3.9h-3.9v3.9h-19.52z"/>
<path class="st0" d="m517.72 349.51v-3.9h-7.81v-3.9h-3.91v-7.81h-3.9v-27.33h3.9v-7.81h3.9v-3.9h7.81v-3.9h15.62v3.9h3.9v3.9h3.9v-27.33h11.71v78.08h-11.71v-7.81h-3.9v3.9h-3.9v3.9h-15.61zm15.61-11.71v-3.9h3.9v-3.9h3.9v-19.52h-3.9v-3.9h-3.9v-3.9h-15.62v3.9h-3.9v27.33h3.9v3.9h15.62z"/>
</g>
</g>
</g>
</svg>
+13
View File
@@ -0,0 +1,13 @@
---
color:
type: 'string'
title:
type: 'string'
default: 'language'
---
<svg class="w-100" fill="{{ color }}" version="1.1" viewBox="0 0 13.525 15.663" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="{{ title }}">
<title>{{ title }}</title>
<g transform="translate(-113.25 -122.06)">
<path d="m118.38 137.59c-0.8797-0.1968-2.4247-0.8678-2.4247-1.0528 0-0.1833 0.1249-0.1512 1.0265 0.2616 1.0273 0.4709 1.771 0.633 2.8953 0.6313 1.1226 0 2.3627-0.3373 3.1505-0.8527 0.2415-0.1579 0.2451-0.1802 0.071-0.445l-0.1827-0.2788h0.6329c0.348 0 0.6328 0.034 0.6328 0.074s-0.086 0.3484-0.1918 0.6829l-0.1917 0.6082-0.1943-0.2577-0.1942-0.2573-0.431 0.2404c-1.2648 0.7054-3.1492 0.9699-4.5992 0.6453zm-5.1295-6.6816v-4.8327l0.7608-0.2669 0.7606-0.2668 0.057-1.6514 0.057-1.6513 2.3666 0.8386c1.3017 0.4613 2.4681 0.8171 2.5921 0.7907 0.1233-0.026 1.4171-0.4548 2.8737-0.9517s2.6864-0.88 2.7328-0.8511c0.047 0.029 0.085 0.902 0.085 1.9407v1.8886l0.6197 0.1955 0.6199 0.1953v9.4345l-0.648-0.1991c-0.3565-0.1095-1.8784-0.5907-3.3819-1.0695l-2.7339-0.8701-3.2391 1.0796c-1.7814 0.5939-3.3024 1.0797-3.3798 1.0797-0.111 0-0.1403-1.0422-0.1403-4.8326zm3.5782 3.4311 2.9583-0.9839v-4.5669c0-3.6061-0.029-4.556-0.1403-4.5151-0.077 0.028-1.4721 0.4946-3.0992 1.0356l-2.9582 0.984v4.5669c0 3.6061 0.029 4.5559 0.1404 4.5151 0.077-0.029 1.4721-0.4946 3.0991-1.0357zm-1.6636-2.1012c1.0303-1.2383 2.5525-3.7099 2.2846-3.7099-0.314 0-1.6565 0.4751-1.7661 0.625-0.085 0.1157-0.2539 0.1692-0.4578 0.1451-0.3395-0.04-0.5242-0.29-0.266-0.3606 0.9411-0.2573 1.9614-0.5981 2.491-0.8318 0.3576-0.1579 0.6826-0.2548 0.7221-0.2154 0.088 0.089-0.2387 0.827-0.7244 1.634-0.2014 0.3347-0.3657 0.6403-0.3648 0.6793 0 0.038 0.4026 0.2394 0.8927 0.4453 0.7682 0.3228 1.1405 0.6149 0.9836 0.7719-0.086 0.086-0.6978-0.2093-1.3345-0.6439l-0.6493-0.4433-0.6082 0.8158c-0.7478 1.0026-1.4603 1.7734-1.6392 1.7734-0.074 0 0.1218-0.3083 0.4363-0.6852zm0.6386-4.5923c-0.2045-0.2259-0.2509-0.4105-0.077-0.3026 0.06 0.037 0.375-0.016 0.6984-0.1063 0.6017-0.1788 0.8277-0.1188 0.7103 0.1865-0.1582 0.4123-1.0289 0.5577-1.3323 0.2224zm9.6229 5.0804c0-0.047-0.3398-1.3399-0.7609-2.8742l-0.7654-2.7896-0.3672-0.1218c-0.202-0.066-0.4221-0.1034-0.4893-0.08-0.2095 0.069-2.0173 4.6448-1.8675 4.7261 0.072 0.038 0.2904 0.1048 0.4838 0.1465 0.3303 0.071 0.3629 0.048 0.5353-0.3836 0.2044-0.5109 0.1388-0.5054 1.3906-0.1187 0.3537 0.1095 0.6552 0.2433 0.6698 0.2976 0.016 0.054 0.083 0.317 0.1512 0.5835 0.083 0.3226 0.2076 0.5181 0.3725 0.5844 0.3112 0.125 0.6406 0.1404 0.6468 0.029zm-2.103-2.599-0.5767-0.1903 0.3148-0.7326c0.1887-0.4389 0.3383-0.6647 0.3732-0.5634 0.097 0.2833 0.5011 1.691 0.4827 1.6835-0.016 0-0.2768-0.092-0.594-0.1972zm1.8729-6.0506c0-0.8986-0.037-1.634-0.082-1.634-0.1675 0-4.9895 1.6325-4.9873 1.6885 0 0.073 4.5984 1.5502 4.872 1.5674 0.1793 0.016 0.1972-0.1357 0.1972-1.6219z" stroke-width=".42594"/>
</g>
</svg>
+29
View File
@@ -0,0 +1,29 @@
---
class:
type: 'string'
default: ''
width:
type: 'string'
default: "100%"
height:
type: 'string'
default: "100%"
color:
type: 'string'
default: 'black'
title:
type: 'string'
default: 'menú icon'
---
<svg
class="{{ class }}"
width="{{ width }}"
height="{{ height }}"
viewBox="0 0 16 14"
fill="{{ color }}"
xmlns="http://www.w3.org/2000/svg" role="img" aria-label="{{ title }}">
<title>{{ title }}</title>
<line x1="1" y1="1" x2="15" y2="1" stroke="{{ color }}" stroke-width="2" stroke-linecap="round"/>
<line x1="1" y1="6.81836" x2="15" y2="6.81836" stroke="{{ color }}" stroke-width="2" stroke-linecap="round"/>
<line x1="1" y1="12.6362" x2="15" y2="12.6362" stroke="{{ color }}" stroke-width="2" stroke-linecap="round"/>
</svg>
+11
View File
@@ -0,0 +1,11 @@
<svg class="star" width="12.491mm" height="11.984mm" viewBox="0 0 12.491 11.984" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(-74.484 -131.76)">
<path transform="rotate(-7.9572 -770.9 9164.7)" d="m1327.7 342.05c0.3406-0.10409-2.7556 2.2075-2.8948 2.4989-0.1277 0.26714 0.2922 3.3805 0.024 3.5064-0.2922 0.13731-2.951-1.9386-3.2711-1.981-0.2935-0.0389-3.1247 1.3226-3.3272 1.1066-0.221-0.23554 0.9317-3.4056 0.8732-3.7232-0.054-0.29118-2.2235-2.5631-2.0807-2.8224 0.1558-0.28288 3.5269-0.16621 3.8108-0.32006 0.2604-0.14106 1.7506-2.9066 2.0414-2.851 0.3171 0.0607 1.2479 3.3029 1.482 3.5254 0.2146 0.20399 3.3422 1.0604 3.3422 1.0604z"
fill="currentColor"
fill-opacity="0"
stroke="currentColor"
stroke-width="1.7"
stroke-linecap="square"
style="paint-order:fill markers stroke"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 855 B

+5
View File
@@ -0,0 +1,5 @@
<svg width="12.491mm" height="11.984mm" version="1.1" viewBox="0 0 12.491 11.984" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(-74.484 -131.76)">
<path transform="rotate(-7.9572 -770.9 9164.7)" d="m1327.7 342.05c0.2584-0.0117-2.7556 2.2075-2.8948 2.4989-0.1277 0.26714 0.2922 3.3805 0.024 3.5064-0.2922 0.13731-2.951-1.9386-3.2711-1.981-0.2935-0.0389-3.1247 1.3226-3.3272 1.1066-0.221-0.23554 0.9317-3.4056 0.8732-3.7232-0.054-0.29118-2.2235-2.5631-2.0807-2.8224 0.1558-0.28288 3.5269-0.16621 3.8108-0.32006 0.2604-0.14106 1.7506-2.9066 2.0414-2.851 0.3171 0.0607 1.2479 3.3029 1.482 3.5254 1.1179 0.30359 2.2333 0.67555 3.3424 1.0604z" fill="none" stroke="#7659ff" stroke-linecap="square" stroke-width="1.7" style="paint-order:fill markers stroke"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 782 B

+14
View File
@@ -0,0 +1,14 @@
---
class:
type: 'string'
default: ''
title:
type: 'string'
default: 'arrow link external'
---
<svg class="{{ class }}" width="5.3263mm" height="4.9764mm" fill="#8e00f7" version="1.1" viewBox="0 0 5.3263 4.9764" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="{{ title }}">
<title>{{ title }}</title>
<g transform="translate(-115.67 -123.39)">
<path d="m115.78 127.96 1.1028-0.027c1.4503-6e-4 1.6705-0.0268 1.9105-0.26683 0.1063-0.1063 0.1344-0.1544 0.1863-0.3186 0.094-0.2977 0.1132-0.6707 0.1053-2.0545l-0.01-1.2275-0.5888 0.6713c-0.3238 0.369-0.6131 0.6882-0.6428 0.7089-0.1026 0.072-0.2342 0.029-0.2933-0.096-0.033-0.07-0.033-0.089 0-0.1576 0.043-0.1007 1.4866-1.7102 1.5406-1.7541 0.054-0.0439 0.13628-0.0501 0.2289-0.047 0.0926 3e-3 0.13345 1e-3 0.2068 0.049 0.0733 0.048 1.44 1.6848 1.4626 1.7747 0.037 0.1481-0.1384 0.3023-0.282 0.2477-0.033-0.013-0.3006-0.3147-0.6171-0.6972l-0.5582-0.6751-0.014 1.4534c-0.01 0.8653-0.024 1.5063-0.04 1.5844-0.05 0.2601-0.084 0.3722-0.163 0.5395-0.1912 0.4059-0.529 0.6057-1.1416 0.6752-0.1179 0.013-0.7095 0.024-1.3146 0.024l-1.0784 1e-4c-0.1499-0.082-0.1499-0.3398 0-0.40677z"/>
</g>
</svg>
+37
View File
@@ -0,0 +1,37 @@
---
class:
type: 'string'
default: ''
width:
type: 'string'
default: "100%"
height:
type: 'string'
default: "100%"
color:
type: 'string'
default: 'black'
title:
type: 'string'
default: 'close'
---
<svg
class="{{ class }}"
width="{{ width }}"
height="{{ height }}"
fill="{{ color }}"
viewBox="0 0 13 13"
version="1.1"
id="svg1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg" role="img" aria-label="{{ title }}">
<title>{{ title }}</title>
<defs
id="defs1" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M 0.961648,0.3138003 C 0.678571,0.3414483 0.437603,0.53143695 0.344765,0.80030695 0.251675,1.0691769 0.324215,1.3674719 0.529934,1.5638119 l 4.93175,4.94318 -4.93175,4.9317701 c -0.285611,0.285601 -0.285611,0.7485 0,1.034101 0.28561,0.2857 0.748508,0.2857 1.03416,0 l 4.94318,-4.9431411 4.9317,4.9431411 c 0.2857,0.2857 0.7486,0.2857 1.0339,0 0.2857,-0.285601 0.2857,-0.7485 3e-4,-1.034101 l -4.94318,-4.9317701 4.94318,-4.94318 c 0.2169,-0.20952 0.2821,-0.531401 0.1636,-0.80889495 -0.1187,-0.277493 -0.3962,-0.4530258 -0.6978,-0.44110377 -0.1884,0.004566 -0.3675,0.0819282 -0.4999,0.21610977 L 6.507284,5.4616819 1.564104,0.52992295 C 1.426114,0.39016345 1.237403,0.31228721 1.041325,0.31381318 c -0.02663,-0.001268 -0.05301,-0.001268 -0.07965,0 z"
id="path1"
/>
</svg>
+20
View File
@@ -0,0 +1,20 @@
---
data:
type: hash
locale:
type: string
i18n:
type: hash
---
{%assign recipes = data.fixtures.card_recipe.items %}
{% for recipe in recipes %}
{% render 'card_recipe.html',
title: recipe.title,
description: recipe.description,
image: recipe.image,
star: recipe.star,
url: '#?'
%}
{% endfor %}
+10
View File
@@ -0,0 +1,10 @@
---
data:
type: hash
locale:
type: string
i18n:
type: hash
---
{% render 'footer.html', %}
+10 -3
View File
@@ -34,11 +34,18 @@
{{ site.i18n.accessibility.skip_to_content }}
</a>
</div>
{% unless page.layout == 'home' %}
{% render 'bootstrap/navbar.html',
class: 'px-5',
items: site.menu_internals,
color: 'white',
uuid: uuid,
cache: false
%}
{% endunless %}
<main tabindex="-1" role="main" id="content" class="flex-grow-1 container">
<main tabindex="-1" role="main" id="content" class="flex-grow-1 m-0">
{{ content }}
</main>
{% include_cached footer.html about=site.about license=site.license privacy_policy=site.privacy_policy code_of_conduct=site.code_of_conduct %}
</body>
</html>
+71
View File
@@ -0,0 +1,71 @@
---
layout: default
---
{% assign license = site.posts | find: 'layout', 'license' %}
{%- assign date_format = site.i18n.date.format | default: '%b %-d, %Y' -%}
<article class="h-entry mw-content m-auto ms-3" itemscope itemtype="http://schema.org/Article">
<header>
<h1 class="p-name" itemprop="name headline">{{ page.title | default: '' | escape }}</h1>
{%- if page.description -%}
<p class="lead p-summary" itemprop="description">{{ page.description | default: '' | escape }}</p>
{%- endif -%}
{%- if page.image.path -%}
<picture>
{% for size in site.images.sizes %}
<source srcset="{{ page.image.path | thumbnail: size }}" media="(max-width: {{ size }}px)">
{% endfor %}
<img class="img-fluid" src="{{ page.image.path | thumbnail: 1140 }}" alt="{{ page.image.description }}">
</picture>
{%- endif -%}
<p>
<time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
{{ page.date | date_local: date_format }}
</time>
{%- for author in page.author -%}
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
<span class="p-author h-card" itemprop="name">
{{ author | default: '' | escape }}
</span>
</span>
{%- endfor -%}
</p>
</header>
<div class="e-content content" itemprop="articleBody">
{{ content }}
</div>
<footer>
<a class="u-url" itemprop="url" href="{{ page.url }}" hidden>
{{ site.url -}}
{{- page.url }}
</a>
{%- if page.uuid -%}
<span hidden itemprop="identifier">{{ page.uuid }}</span>
{%- endif -%}
{%- if license -%}
<p itemprop="license" itemtype="http://schema.org/CreativeWork">
<a rel="license" itemprop="url" href="{{ license.url }}">
<span itemprop="articleBody">
{{ license.description }}
</span>
</a>
</p>
{%- endif -%}
{%- if page.tags %}
<span itemprop="keywords" hidden>{{ page.tags | join: ', ' }}</span>
{%- for tag in page.tags -%}
<span hidden class="h-category">{{ tag }}</span>
{%- endfor -%}
{%- endif -%}
</footer>
</article>
+20 -3
View File
@@ -1,8 +1,25 @@
---
layout: default
---
<h1>{{ site.i18n.locale | default: site.locale }}</h1>
<section class="mt-3">
<a href="{{ site.theme.url | component_escape }}">{{ site.theme.title }}</a>
<section class="row align-items-center justify-content-center w-100 mx-0 h-100vh">
<div class="col-12 col-md-6 d-flex flex-column justify-content-between bg-primary h-100vh text-white">
{% render 'bootstrap/navbar.html',
class: 'container-lg',
items: site.menu_internals,
color: 'white',
uuid: uuid,
cache: false
%}
<div class="fs-3 fw-bold fst-italic text-monospace">
<p>We are a a federation, an open, democratic, peer governed community...</p>
<p>
Public interest infrastructure.<br>
An alternative to corporate clouds built by tech co-ops.
</p>
</div>
</div>
<div class="col-12 col-md-6 d-flex flex-column justify-content-between m-0 h-100vh">
{% render 'svg/cloud_srv.svg' %}
</div>
</section>
+71
View File
@@ -0,0 +1,71 @@
---
layout: default
---
{% assign license = site.posts | find: 'layout', 'license' %}
{%- assign date_format = site.i18n.date.format | default: '%b %-d, %Y' -%}
<article class="h-entry mw-content m-auto ms-3" itemscope itemtype="http://schema.org/Article">
<header>
<h1 class="p-name" itemprop="name headline">{{ page.title | default: '' | escape }}</h1>
{%- if page.description -%}
<p class="lead p-summary" itemprop="description">{{ page.description | default: '' | escape }}</p>
{%- endif -%}
{%- if page.image.path -%}
<picture>
{% for size in site.images.sizes %}
<source srcset="{{ page.image.path | thumbnail: size }}" media="(max-width: {{ size }}px)">
{% endfor %}
<img class="img-fluid" src="{{ page.image.path | thumbnail: 1140 }}" alt="{{ page.image.description }}">
</picture>
{%- endif -%}
<p>
<time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
{{ page.date | date_local: date_format }}
</time>
{%- for author in page.author -%}
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
<span class="p-author h-card" itemprop="name">
{{ author | default: '' | escape }}
</span>
</span>
{%- endfor -%}
</p>
</header>
<div class="e-content content" itemprop="articleBody">
{{ content }}
</div>
<footer>
<a class="u-url" itemprop="url" href="{{ page.url }}" hidden>
{{ site.url -}}
{{- page.url }}
</a>
{%- if page.uuid -%}
<span hidden itemprop="identifier">{{ page.uuid }}</span>
{%- endif -%}
{%- if license -%}
<p itemprop="license" itemtype="http://schema.org/CreativeWork">
<a rel="license" itemprop="url" href="{{ license.url }}">
<span itemprop="articleBody">
{{ license.description }}
</span>
</a>
</p>
{%- endif -%}
{%- if page.tags %}
<span itemprop="keywords" hidden>{{ page.tags | join: ', ' }}</span>
{%- for tag in page.tags -%}
<span hidden class="h-category">{{ tag }}</span>
{%- endfor -%}
{%- endif -%}
</footer>
</article>
+71
View File
@@ -0,0 +1,71 @@
---
layout: default
---
{% assign license = site.posts | find: 'layout', 'license' %}
{%- assign date_format = site.i18n.date.format | default: '%b %-d, %Y' -%}
<article class="h-entry mw-content m-auto ms-3" itemscope itemtype="http://schema.org/Article">
<header>
<h1 class="p-name" itemprop="name headline">{{ page.title | default: '' | escape }}</h1>
{%- if page.description -%}
<p class="lead p-summary" itemprop="description">{{ page.description | default: '' | escape }}</p>
{%- endif -%}
{%- if page.image.path -%}
<picture>
{% for size in site.images.sizes %}
<source srcset="{{ page.image.path | thumbnail: size }}" media="(max-width: {{ size }}px)">
{% endfor %}
<img class="img-fluid" src="{{ page.image.path | thumbnail: 1140 }}" alt="{{ page.image.description }}">
</picture>
{%- endif -%}
<p>
<time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
{{ page.date | date_local: date_format }}
</time>
{%- for author in page.author -%}
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
<span class="p-author h-card" itemprop="name">
{{ author | default: '' | escape }}
</span>
</span>
{%- endfor -%}
</p>
</header>
<div class="e-content content" itemprop="articleBody">
{{ content }}
</div>
<footer>
<a class="u-url" itemprop="url" href="{{ page.url }}" hidden>
{{ site.url -}}
{{- page.url }}
</a>
{%- if page.uuid -%}
<span hidden itemprop="identifier">{{ page.uuid }}</span>
{%- endif -%}
{%- if license -%}
<p itemprop="license" itemtype="http://schema.org/CreativeWork">
<a rel="license" itemprop="url" href="{{ license.url }}">
<span itemprop="articleBody">
{{ license.description }}
</span>
</a>
</p>
{%- endif -%}
{%- if page.tags %}
<span itemprop="keywords" hidden>{{ page.tags | join: ', ' }}</span>
{%- for tag in page.tags -%}
<span hidden class="h-category">{{ tag }}</span>
{%- endfor -%}
{%- endif -%}
</footer>
</article>
+10
View File
@@ -0,0 +1,10 @@
---
layout: "default"
---
<article id="{{ page.recipe }}">
<header>
<h1>{{ page.title }}</h1>
<p class="lead">{{ page.metadata.description }}</p>
</header>
</article>
+17
View File
@@ -0,0 +1,17 @@
---
layout: "default"
---
<div class="container">
{% if page.recipes == empty %}
<h1>Error: No recipes were processed</h1>
{% else %}
<div class="row row-cols-1">
{% for recipe in page.recipes %}
{% assign image = 'path,description' | create_hash: recipe.metadata.icon, recipe.description %}
<div class="col">
{% render 'card_recipe.html', title: recipe.title, description: recipe.description, image:, star: recipe.metadata.features.status, url: recipe.url %}
</div>
{% endfor %}
</div>
{% endif %}
</div>
+15
View File
@@ -1,4 +1,19 @@
# frozen_string_literal: true
Jekyll::Router.draw do |router|
get '/:recipe/', recipe: (site.data.dig('recipes') || {}).keys do |page, recipe|
page.data['metadata'] = site.data.dig('recipes', recipe)
page.data['title'] = recipe
page.data['description'] = page['metadata']['description']
page.data['categories'] = [ page['metadata']['category'] ]
page.data['uuid'] = recipe
end
get '/recipes/' do |page|
page.data['title'] = 'Recipes'
page.data['uuid'] = SecureRandom.uuid
page.data['recipes'] = site.pages.select do |p|
p['layout'] == 'recipe'
end
end
end
+1
View File
@@ -4,3 +4,4 @@
@use "inter_ital_opsz_wght_0_14..32_100..900_1_14..32_100..900";
@use "saira_ital_wght_0_100..900_1_100..900";
@use "space_grotesk_wght_300..700";
@use "ibm_plex_mono";
+7
View File
@@ -0,0 +1,7 @@
@font-face {
font-family: 'IBM Plex Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(../fonts/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n5ig.ttf) format('truetype');
}
+8
View File
@@ -65,3 +65,11 @@ $fonts: (
@extend .vh-100;
}
}
.star {
color: #7659ff;
}
.star.filled path {
fill-opacity: 1;
}
+682 -788
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.