26s/README.md
hacklab cb551e2a3c Contenido desde OASIS y colectivos
Comunicados, comisiones y debates salen del pub: los publica quien es
miembro de la tribu de la acampada y además sigue la cuenta de la
acampada. Directo enlaza al HUB. Lista de centros sociales y colectivos
de Madrid con enlaces comprobados.
2026-09-29 10:25:28 +02:00

3.9 KiB

acampada26s.net

Web de la acampada del 26S en Madrid. Comunicados, directo, cómo organizarse y dónde están los colectivos.

HTML y CSS. Sin JavaScript en el navegador, sin cookies, sin analítica y sin peticiones a terceros. La tipografía va dentro del repo.

La comunicación viva no depende de esta web: va por un pub de OASIS (Secure Scuttlebutt). Si la web cae o la tiran, el pub y lo publicado siguen en la red.

Estructura

site/        lo que se sirve (copiar tal cual a /var/www/acampada26s.net)
deploy/      nginx y timer de systemd
tools/       generador desde OASIS y limpieza de imágenes

Qué sale de dónde

  • Directo: enlace al HUB del pub (/c?type=feed). Lo sube la gente de comunicación desde OASIS. No pasa por esta web.
  • Comunicados, comisiones y debates: los genera tools/ a partir de OASIS cada dos minutos. Nadie edita HTML a mano.
  • Colectivos: lista fija en site/index.html. Para añadir uno, un <li> más. Solo webs o cuentas comprobadas.

Publicar desde OASIS

Quien publica en la web: miembros de la tribu pública de la acampada a los que la cuenta de la acampada sigue. Hacen falta las dos cosas. Unirse a una tribu es un mensaje que cualquiera puede publicar sobre sí mismo (el código de invitación solo lo comprueba la interfaz), así que la tribu sola no vale como permiso. El follow lo firma la cuenta de la acampada y no se puede falsificar.

  • Dar permiso: invitar a la tribu y seguir desde la cuenta de la acampada.
  • Quitarlo: dejar de seguir. Sus comunicados desaparecen en la siguiente pasada.

Qué se publica:

  • Comunicado: un post con #comunicado26s. La primera línea es el título. Las imágenes adjuntas salen en la página. Si se borra en OASIS, se borra aquí.
  • Comisión: una subtribu pública de la tribu de la acampada, creada por alguien con permiso.
  • Debate: un foro público abierto por alguien con permiso.

Las tribus privadas y lo que se escribe dentro de las tribus va cifrado; eso no sale en la web ni debe salir.

La tribu tiene que ser pública (no anónima) y con invitación estricta, y la tiene que crear la cuenta de la acampada.

Imágenes

Las de los comunicados las sirve el pub (/c/blob/...). Las que se suban a mano a site/img/, siempre limpias antes:

tools/limpia-img.sh site/img/*.jpg

El EXIF lleva GPS, modelo de móvil y hora. Caras tapadas salvo permiso expreso.

Despliegue

Requisitos: nginx, certbot, el pub OASIS en la misma máquina, Node 22 y Python 3.9+.

rsync -a --exclude comunicados/ site/ /var/www/acampada26s.net/
cp deploy/nginx.conf /etc/nginx/sites-available/acampada26s.net
cp deploy/hub.conf   /etc/nginx/snippets/acampada26s-hub.conf
ln -s ../sites-available/acampada26s.net /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Un rsync de index.html deja los bloques generados vacíos; el timer los repone en dos minutos.

Pub OASIS

sh oasis.sh server. El HUB web escucha en :3000; mejor solo en local (--host=127.0.0.1). nginx publica /c en solo lectura y sin la IP de quien visita.

Generador

cp -r . /opt/26s
cp deploy/web26s.service deploy/web26s.timer /etc/systemd/system/
# rellenar CUENTA, TRIBU, OASIS_DIR y User en web26s.service
systemctl enable --now web26s.timer

A mano:

OASIS_DIR=~/oasis CUENTA=@...ed25519 TRIBU=%...sha256 node tools/extrae.js \
  | python3 tools/genera.py site

extrae.js solo lee del sbot por su socket local. genera.py escapa todo lo que viene de SSB, solo deja enlaces http(s) y escribe de forma atómica.

Comprobaciones antes de subir

grep -rniE '<script|javascript:|\son[a-z]+=' site/   # nada
grep -rnoE 'https?://[^"]+' site/                   # solo enlaces salientes

Licencia

Código: AGPL-3.0 (LICENSE). Textos e imágenes: CC BY-SA 4.0. Tipografía Anton: SIL OFL 1.1 (site/fonts/OFL.txt).