Squalk, un motor de foro tradicional sobre Nostr, llega con NIP‑29 y NIP‑7D
Squalk es una aplicación de foro de código abierto que funciona sobre Nostr y permite gestionar comunidades simples o extensas con chats, recursos y búsqueda, todo configurado vía variables de entorno.
Squalk es un motor de foro construido sobre Nostr que permite gestionar comunidades de cualquier tamaño. Se despliega en dos modos: simple, con un único foro, y full, con un número ilimitado de salas. Cada sala incluye un chat en la barra lateral derecha, útil para interacciones rápidas.
Stack técnico
Squalk implementa los NIP‑29 (grupos) y NIP‑7D (hilos). Requiere un relay personal que soporte NIP‑29 para alojar los grupos y un servidor Blossom para los uploads de medios; la recomendación es usar Pyramid, que incluye ambos. La configuración se hace a través de variables de entorno prefijadas con PUBLIC_. El archivo .env.example se copia a .env y se completa. SvelteKit lee además .env.development y .env.production según el modo de construcción.
Las variables más relevantes son:
PUBLIC_RELAY_URL: WebSocket del relay NIP‑29.PUBLIC_MODE:simpleofull.PUBLIC_GROUP_ID: ID del grupo en modo simple.PUBLIC_TITLE: Título del foro.PUBLIC_JOINCODE: Muestra un campo de código de invitación cuando la solicitud es rechazada.PUBLIC_SSR: Habilita el renderizado del lado servidor para HTML crawlable.PUBLIC_SEARCH: Activa la barra de búsqueda en la portada (requiere NIP‑50).PUBLIC_BLOSSOM_URL: URL del servidor Blossom para uploads.
El renderizado SSR se puede optimizar con PUBLIC_SSR_WARM, PUBLIC_SSR_CACHE_FRESH y PUBLIC_SSR_CACHE_STALE.
Personalización de contenido
Squalk obtiene enlaces de la barra lateral y páginas personalizadas (inicio y contactos) a partir de eventos NIP‑23 (kind 30023) publicados en el mismo relay. Solo los eventos firmados por administradores (pubkey incluido en el evento NIP‑29 39001) son visibles. El contenido es markdown puro. Los recursos se publican con etiquetas "t", "squalk-resource" y un slug "d". La posición se controla con la etiqueta "position".
Los partials (páginas de inicio y contactos) usan la etiqueta "t", "squalk-partial" y el slug "d" con valor home o contacts.
Desarrollo y despliegue
Para desarrollar, tras clonar el repo y ejecutar npm install, se lanza el servidor con npm run dev. Se puede abrir automáticamente con npm run dev -- --open.
Squalk soporta dos modos de construcción:
- Static (valor por defecto
PUBLIC_SSR=no):npm run buildgenera una sola página que se sirve con cualquier web server. - SSR (
PUBLIC_SSR=yes):npm run build-ssrcrea una aplicación Node que entrega HTML crawlable, con robots.txt, sitemap y 404 reales.
El código base es el mismo; la diferencia es el destino de la compilación.
¿Por qué importa?
Con Squalk se puede montar un foro con chat y recursos sin depender de una infraestructura centralizada. Su diseño puro de Nostr facilita la descentralización y la resistencia a la censura. Para equipos que ya usan Nostr, la curva de adopción es mínima: basta con configurar un relay y un servidor Blossom. La capacidad de cambiar de modo simple a full en tiempo de ejecución añade flexibilidad.
Para probarlo, visita el demo en https://squalk-test.dtonon.com/ y explora la documentación en https://github.com/dtonon/squalk.
