26s/README.md
hacklab f78773bb87 Web de la acampada del 26S
Home con directo, comunicados y organización. HTML y CSS, sin JS.
Configuración de nginx, timer del directo y limpieza de EXIF.
2026-09-29 10:10:54 +02:00

2.8 KiB

acampada26s.net

Web de la acampada del 26S en Madrid. Comunicados, directo y cómo organizarse.

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/       limpiar imágenes y regenerar el directo

Publicar un comunicado

  1. Copiar site/comunicados/2026-09-26-convocatoria.html a site/comunicados/AAAA-MM-DD-titulo.html y cambiar título, fecha y texto.

  2. Añadir un <li> arriba del todo en la lista #comunicados de site/index.html.

  3. Fotos a site/img/, siempre limpias antes:

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

    El EXIF lleva GPS, modelo de móvil y hora. Además: caras tapadas salvo permiso expreso.

  4. Toda imagen con alt, width y height.

Despliegue

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

rsync -a --delete 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

rsync --delete borra el bloque directo generado; el timer lo repone en un minuto.

Pub OASIS

El pub se arranca con sh oasis.sh server y el HUB web escucha en :3000. Conviene que escuche solo en local (--host=127.0.0.1): nginx publica /c en solo lectura (GET/HEAD) y le quita la IP del visitante.

Invite para la home: sh oasis.sh invite 1000, y pegarlo en #organizate.

Directo

tools/ultimos.js lee los últimos posts de la identidad de la acampada por el socket local del sbot. tools/directo.py los escribe en index.html entre <!-- directo:inicio --> y <!-- directo:fin -->, escapado y con escritura atómica. Sigue siendo un fichero estático: aguanta mucha carga y no hace falta JavaScript.

cp -r . /opt/26s
cp deploy/directo.service deploy/directo.timer /etc/systemd/system/
# editar FEED, OASIS_DIR y User en directo.service
systemctl enable --now directo.timer

A mano:

OASIS_DIR=~/oasis node tools/ultimos.js @feed.ed25519 5 | python3 tools/directo.py site/index.html

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).