Logo de Nammu

CMS y CRM ligero para proyectos

Nammu condensa en una sola instalación PHP 8 lo que normalmente obligaría a combinar varios servicios: blog, diccionario, podcast, newsletter, avisos, itinerarios, portal de actualidad, nodo propio en el Fediverso, biblioteca multimedia, SEO técnico, automatización social y estadísticas propias, todo sobre Markdown y sin ceder tus datos a terceros.

Acceder al repositorio
Ligero y portable Funciona en cualquier hosting con PHP 8+, sin exigir Composer para el núcleo.
Sin piezas sueltas Publicación, difusión, federación, analítica, recursos y formación conviven en el mismo panel.
Compatible con PicoCMS Reutiliza la estructura de content/ y assets/ para migrar con menos fricción.
Nodo propio en el Fediverso Expone identidad ActivityPub completa para que tu sitio pueda seguir y ser seguido como @nombre@dominio.

Desarrollado para RuralNEXT por Compañía Maximalista S.Coop..

Características

Panel de administración

Desde admin.php puedes crear el usuario inicial, publicar entradas, páginas, newsletters y podcasts en Markdown con front matter YAML, previsualización, borradores, publicaciones programadas, páginas privadas visibles solo para el administrador logueado y acciones rápidas para difundir contenidos.

Blog o diccionario (wiki) con un botón

Cambia del modo cronológico al alfabético para convertir el sitio en un diccionario online, con índices por categorías, letras, buscador configurable y plantillas adaptadas a cada formato.

Itinerarios

Construye cursos, libros o colecciones de temas con portada propia, imágenes, quizzes y lógicas free, sequential y assessment, incluyendo seguimiento del progreso por cookies, reseteo de estadísticas y métricas por itinerario.

Podcasts

Nammu genera podcast.xml, páginas HTML por episodio, slugs editables y metadatos compatibles con plataformas de podcasting para que mantengas el feed y el archivo bajo tu propio dominio.

Fediverso y ActivityPub

El sitio expone WebFinger, actor, clave pública, outbox, inbox, followers y following para funcionar como una cuenta federada completa. Puede seguir y bloquear actores, recibir seguidores, favoritos, impulsos y respuestas, enviar mensajes privados y repartir nuevas publicaciones a seguidores remotos.

Timeline, mensajes y notificaciones federadas

Desde la pestaña Fediverso puedes seguir actores públicos, leer su timeline, gestionar notificaciones, revisar mensajes y mantener conversaciones públicas o privadas desde tu propio dominio, con caché local precalentada por cron para acelerar Inicio, Mensajes y Notificaciones.

Categorías y letras

Crea índices de categorías y vistas específicas por letra en modo diccionario, con contenidos relacionados y ordenación adaptable al tipo de proyecto.

Gestión de recursos

Administra imágenes, vídeos, audios y documentos en assets/ con subida múltiple, renombrado seguro, etiquetas, buscador instantáneo, editor básico de imágenes, selector reutilizable y variantes WebP automáticas cuando procede.

Plantillas configurables

Controla tipografías, paleta, portadas, cabeceras, botones, tipos de tarjeta, TOC por defecto, comportamiento del buscador, footer editable y enlaces sociales desde la pestaña Plantilla.

Feeds y SEO técnico

Genera automáticamente rss.xml, sitemap.xml, itinerarios.xml, podcast.xml, noticias.xml, fediverso.xml y llms.txt, con canonical, datos estructurados, Open Graph, Twitter Cards, twitter:site e integración IndexNow.

Markdown con incrustaciones útiles

El editor soporta [toc], tablas, superíndices, bloques de código, callouts y TOC automático configurable, además de incrustación automática de vídeos de YouTube y PeerTube pegando su URL.

Integración con redes sociales

Automatiza o lanza manualmente publicaciones hacia Telegram, Facebook Pages, X, Bluesky, Instagram y LinkedIn, con imágenes, contador de caracteres, negritas básicas y reenvío desde fuentes RSS externas configuradas en Redes.

Lista de avisos por email

Conecta Gmail mediante OAuth2 para mantener una lista de suscriptores y enviar avisos de nuevas publicaciones sin depender de plataformas externas de mailing.

Newsletters

Crea newsletters con vista web propia, archivo privado y control de envío. Cada lector puede gestionar sus preferencias para recibir newsletters, avisos o ambas modalidades.

Gestión de suscriptores postales

Nammu mantiene libreta de direcciones postales y ficheros de suscripción en config/, junto con el resto de datos del proyecto para evitar depender de servicios externos.

Portal de Actualidad y perfil federado

actualidad.php compone una portada pública con fuentes RSS externas y notas manuales creadas desde Redes. Esa selección alimenta noticias.xml, puede difundirse en redes y también convivir con la página pública de perfil Fediverso en rutas tipo /@usuario@dominio.

Banners de anuncios y notificaciones WebPush

Coloca banners en portada o páginas internas y activa notificaciones WebPush con VAPID para mandar avisos de nuevas publicaciones e itinerarios directamente al navegador.

Estadísticas integradas

Mide usuarios únicos, páginas vistas, búsquedas internas, orígenes, bots y rendimiento de itinerarios con analítica propia. El consentimiento de cookies es obligatorio para usuarios humanos y los datos no se envían a terceros.

Optimizado para buscadores

Incluye SEO técnico de fábrica, cachés para buscadores, integración opcional con Google Search Console y Bing Webmaster Tools, y soporte para snapshots públicos regenerados por cron.

Actualidad agregada

La página actualidad.php compone una portada pública a partir de fuentes RSS configuradas, notas manuales y noticias externas, publica la selección en noticias.xml, cachea imágenes sociales y puede intentar recuperar la primera imagen útil cuando la fuente no la trae.

Automatización y backups

Un cron central puede publicar contenidos programados, procesar colas, revisar RSS externas, refrescar actores seguidos en Fediverso, repartir entregas pendientes y regenerar snapshots públicos dependientes del cron. Además incluye copias diarias de estadísticas y backups semanales completos de contenido y configuración.

  • admin.php --run-scheduled ejecuta la tarea principal.
  • core/backup-daily.php y core/backup-weekly.php cubren restauración y retención.

Compatible y extensible

El núcleo funciona sin Composer, usa parser propio robusto y puede aprovechar Symfony Yaml o integraciones opcionales como WebPush y Nisaba cuando están disponibles, además de sugerencias editoriales desde el botón Ideas.

Google Search Console y Bing

La analítica propia puede complementarse con integración opcional de Google Search Console y Bing Webmaster Tools para consolidar visibilidad, consultas y cachés de buscadores desde el mismo proyecto.

Logo EUPL

Software libre

Distribuido bajo la licencia EUPL v1.2 para que puedas usarlo, estudiarlo, modificarlo y compartirlo libremente, también en proyectos comerciales u open source con atribución y reciprocidad.

Instalación y requisitos

Requisitos mínimos

  • PHP 8.0 o superior.
  • Extensiones habituales: json, mbstring e iconv.
  • curl muy recomendable para integraciones externas y redes sociales.
  • gd recomendable para edición de imágenes, WebP e imágenes de podcast.
  • openssl para notificaciones push.
  • Permisos de escritura en config/, content/, assets/, itinerarios/ y backups/.

Puesta en marcha rápida

  1. Clona o copia Nammu en la carpeta pública del dominio.
  2. Crea si hace falta config/, content/, assets/, itinerarios/ y backups/.
  3. Ajusta propiedad y permisos para el usuario y grupo del servidor web.
  4. Apunta el dominio a esa carpeta y abre /admin.php para crear el usuario inicial.
  5. Revisa Configuración, Plantilla, Difusión y Lista en el primer acceso.

Opcionales recomendados

Composer no es obligatorio, pero algunas integraciones mejoran si está disponible. Para activar WebPush:

composer require minishlink/web-push

Después, al activar Push en Difusión, Nammu genera las claves VAPID automáticamente.

Cron y mantenimiento

Tarea principal

La ejecución recomendada es php /var/www/html/<carpeta-publica>/admin.php --run-scheduled. Conviene lanzarla cada minuto con el usuario del servidor web para mantener ágil el módulo Fediverso.

  • Publica contenidos programados y procesa colas pendientes.
  • Revisa RSS externas configuradas en Redes.
  • Refresca actores seguidos y precalienta cachés locales de hilos y stores federados.
  • Regenera snapshots públicos que dependen del cron.

Bloque de cron recomendado

* * * * * php /var/www/html/<carpeta-publica>/admin.php --run-scheduled >> /var/www/html/<carpeta-publica>/backups/cron.log 2>&1

15 3 * * * php /var/www/html/<carpeta-publica>/core/backup-daily.php --retention=7 >> /var/www/html/<carpeta-publica>/backups/backup.log 2>&1

30 3 * * 0 php /var/www/html/<carpeta-publica>/core/backup-daily.php --cleanup-only --retention=7 >> /var/www/html/<carpeta-publica>/backups/backup.log 2>&1

45 3 * * 0 php /var/www/html/<carpeta-publica>/core/backup-weekly.php --retention-weeks=8 >> /var/www/html/<carpeta-publica>/backups/backup-full.log 2>&1

Backups y restauración

El backup diario guarda estadísticas y cachés analíticas. El semanal comprime content/, assets/, config/ e itinerarios/.

Restauración rápida de estadísticas:

tar -xzf /var/www/html/<carpeta-publica>/backups/nammu-stats-backup-AAAA-MM-DD_HHMMSS.tar.gz -C /var/www/html/<carpeta-publica>