Un vistazo a Brisa CMS
Brisa CMS es el CMS ligero, sin base de datos que estabas buscando para sustituir a WordPress
Un fin de semana productivo, donde no solo he mejorado mucho CastoPOST, sino que he creado este CMS para sustituir a WordPress, desde cero, usando Claude.
Brisa CMS es todo lo que siempre he necesitado, un CMS ligero, sin base de datos, sin alto consumo, pero que me ofrezca un poco más de lo mínimo indispensable a la hora de escribir y mostrar la información. Este CMS, que va creciendo poco a poco, tiene de todo.
Esto es en resumen todo lo que tiene este CMS de momento:
🏗️ Base del sistema
- Sin base de datos — todo el contenido se guarda en archivos JSON en content/articles/ y content/pages/
- PHP 8.0+ puro, sin frameworks ni dependencias externas
- Instalador web en /install/ — crea config.json, carpetas y contenido de ejemplo. Se desactiva automáticamente con el archivo .installed
- Router de URLs limpias — /article/slug, /page/slug, /category/x, /tag/x, /search?q=
- RSS en /rss.xml, Sitemap XML en /sitemap.xml, robots.txt dinámico
🔒 Seguridad
- Contraseña hasheada con Argon2id
- Tokens CSRF en todos los formularios
- Rate limiting — 5 intentos fallidos de login bloquean la IP 15 minutos
- Regeneración de sesión cada 5 minutos
- Cookies con HttpOnly, SameSite=Strict, Secure
- Timeout de sesión tras 4 horas de inactividad
- Carpetas core/, cache/, content/ bloqueadas públicamente
- Ejecución PHP bloqueada en /media/ y /uploads/
🎨 Panel de administración
- Sidebar colapsable — modo icono con tooltips, estado guardado en localStorage
- Responsive — en móvil el sidebar se convierte en drawer deslizante con overlay
- 4 esquemas de color del panel: Dark, Midnight, Slate, Warm — selector de puntos en la topbar
- Selector de idioma ES/EN en la topbar — también detecta automáticamente el idioma del navegador
- Botón "Nuevo artículo" fijo en la parte superior del sidebar
✍️ Editor de contenido
- Tres modos: WYSIWYG (HTML visual), HTML raw, Markdown con preview en vivo
- Toolbar completa: H2, H3, párrafo, negrita, cursiva, subrayado, tachado, listas, cita, código, enlace, imagen, audio, vídeo, divisor, deshacer/rehacer
- Toolbar flotante al seleccionar texto — activable/desactivable, guardado en localStorage
- Modo sin distracciones — F11 o botón ⤢, oculta todo excepto el editor, Esc para salir
- Control de tamaño de fuente — botones +/− en la toolbar, rango 12–28px, guardado en localStorage
- Título y toolbar anclados — solo el área de escritura hace scroll
- Enter crea <p>, Shift+Enter crea <br> suave
- Primer párrafo siempre envuelto en <p> automáticamente via observer
- <div> convertidos a <p> al guardar
- Margen entre párrafos visible en el editor (1em)
- Auto-embed YouTube — URLs sueltas se convierten en iframes responsivos
- Markdown: encabezados, negrita, cursiva, tachado, código inline/bloque, tablas, citas, listas, imágenes, enlaces, HR, HTML inline
- Vista previa del artículo — abre pestaña nueva con el tema activo del sitio, funciona con borradores via /admin/preview.php, banner con estado y enlace "Volver al editor"
- Se guarda en borrador automáticamente cada 60 segundos
📋 Panel lateral del editor
- Estado (Borrador / Publicado)
- URL Slug — auto-generado del título, personalizable
- Resumen (excerpt) para listados y SEO
- Categorías con chips visuales y sugerencias de las existentes
- Etiquetas con autocomplete dropdown — filtra entre las existentes mientras escribes, Enter para añadir nuevas (sin lista estática)
- Imagen destacada — URL o subida directa
- URL de Mastodon para comentarios
🖼️ Media
- Gestor de media con pestañas: Todo / Imágenes / Audio / Vídeo
- Subida con drag & drop
- Imágenes: JPG, PNG, GIF, WebP, SVG, AVIF — máx. 10 MB
- Audio: MP3, OGG, WAV, M4A, FLAC — máx. 200 MB — preview con reproductor anclado al fondo
- Vídeo: MP4, WebM, OGV, MOV — máx. 2 GB
- Archivos organizados en /media/YYYY/MM/
- Copiar URL al portapapeles, eliminar con confirmación
🎵 Reproductores en artículos
- Audio: <figure class="media-audio"> — barra horizontal con controles nativos, borde de color acento y emoji 🎵
- Vídeo: <figure class="media-video"> — reproductor a ancho completo, máx. 540px de alto
- Nginx configurado con Accept-Ranges: bytes para seeking sin descargar el archivo completo
📥 Importador WordPress
- Importa posts → artículos, pages → páginas, categorías, etiquetas, fechas, estado
- Descarga automática de imágenes preservando estructura de carpetas /media/YYYY/MM/
- Reescribe URLs en el contenido para apuntar al nuevo dominio
- Limpia bloques Gutenberg automáticamente
🎨 Temas
- Cinco temas incluidos, todos con Roboto Condensed + Roboto, hamburguesa nav, paginador (1–10 + › »):
- SystemInside: Header oscuro, fondo claro, sidebar con categorías
- SystemInside Dark: Completamente oscuro
- SystemInside Light: Completamente claro
- Default: Claro minimalista, grid de tarjetas
- Dark: Oscuro minimalista, grid de tarjetas
- Color de acento configurable — 10 presets + selector libre, aplicado via variables CSS en todos los temas
- Sidebar del blog muestra Categorías (etiquetas eliminadas para no saturar)
- Footer sticky — el footer siempre queda al fondo aunque el contenido sea corto
- Responsive en todos los temas — sidebar bajo el contenido en móvil
💬 Mastodon
- <link rel-"me"> y <meta name="fediverse:creator> automáticos para verificación de perfil
- Comentarios: carga el hilo completo de Mastodon — incluyendo respuestas a respuestas — con indentación visual por niveles
- Enlace "Responder en Mastodon →" en cada comentario
- Caché de 3 minutos en cache/mastodon_*.json
- Integrado en los cinco temas
🔧 Herramientas del panel
- Buscar y reemplazar en todo el contenido — modo Simular antes de aplicar, acceso rápido para cambio de dominio
- Importar imágenes — descarga imágenes externas de artículos ya importados
- Exportar contenido — ZIP con artículos + páginas + config (sin contraseña) + imágenes opcional
🌐 SEO y metadatos
- og:title, og:description, og:image, og:url, og:type automáticos
- <meta name="description"> y <link rel="canonical"> en cada página
- Autodescubrimiento RSS con <link rel="alternate">
⚙️ Ajustes
- Título del sitio, tagline, URL base, artículos por página, texto del footer
- Tema activo y color de acento
- Handle y URL de Mastodon
- Cambio de usuario y contraseña (requiere contraseña actual)
🌍 Internacionalización
- 207 strings traducidos — español e inglés completos
- Detección automática por Accept-Language del navegador
- Selector manual ES/EN en la topbar del panel
- Fácil de ampliar: crear core/lang/fr.php copiando en.php y traduciendo
📖 Documentación
- README.md completo — instalación, estructura, todas las funciones, crear temas, Nginx, seguridad, solución de problemas, análisis de 5 opciones de estadísticas
- nginx.conf.example — plantilla lista para usar con SSL, redirecciones, bloqueos de seguridad, soporte audio/vídeo con Range requests, client_max_body_size 2GB
Como pueden ver, no ha sido poco todo lo que le he ido pidiendo a Claude que haga. Pero de la IA hablamos en otro momento.. Con esto de momento estoy más que satisfecho, y si te sirve, lo puedes descargar desde Github y disfrutarlo también..
Bye.
Comentarios desde Mastodon
Para comentar, responde a este post en Mastodon.