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.
This commit is contained in:
hacklab 2026-09-29 10:25:28 +02:00
parent f78773bb87
commit cb551e2a3c
13 changed files with 505 additions and 261 deletions

View file

@ -1,6 +1,7 @@
# acampada26s.net
Web de la acampada del 26S en Madrid. Comunicados, directo y cómo organizarse.
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.
@ -14,69 +15,95 @@ cae o la tiran, el pub y lo publicado siguen en la red.
```
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
tools/ generador desde OASIS y limpieza de imágenes
```
## Publicar un comunicado
## Qué sale de dónde
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:
- **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.
```
tools/limpia-img.sh site/img/*.jpg
```
## Publicar desde OASIS
El EXIF lleva GPS, modelo de móvil y hora. Además: caras tapadas salvo
permiso expreso.
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.
4. Toda imagen con `alt`, `width` y `height`.
- 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. Para el directo: el pub OASIS en la misma máquina,
Node 22 y Python 3.9+.
Requisitos: nginx, certbot, el pub OASIS en la misma máquina, Node 22 y
Python 3.9+.
```
rsync -a --delete site/ /var/www/acampada26s.net/
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
```
`rsync --delete` borra el bloque directo generado; el timer lo repone en un minuto.
Un `rsync` de `index.html` deja los bloques generados vacíos; el timer los
repone en dos minutos.
### 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.
`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.
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.
### Generador
```
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
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 node tools/ultimos.js @feed.ed25519 5 | python3 tools/directo.py site/index.html
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
```