Hemos desarrollado una especificación completa para implementar un sistema de blogging basado en archivos MDX que se integra perfectamente con la aplicación EasyBits existente. El sistema permite crear contenido rico con componentes React embebidos, optimización SEO automática, y una experiencia de usuario fluida.
- ✅ Especificación Completa: Requirements, Design y Tasks definidos
- ✅ Infraestructura Base: MDX processor y data layer implementados
- ✅ Contenido de Ejemplo: 6 posts de blog creados con contenido relevante
- ✅ UI Integrada: Vistas de lista y detalle funcionando
- ✅ Componentes MDX: CodeBlock, Callout, ImageGallery implementados
- 🔄 En Progreso: Optimizaciones SEO y meta tags
- ⏳ Pendiente: Integración final y pulido
Este documento define los requisitos para implementar un sistema completo de blogging basado en archivos MDX para la aplicación. El sistema permitirá crear, gestionar y mostrar entradas de blog utilizando archivos MDX que se almacenarán en el sistema de archivos, proporcionando una experiencia de escritura rica con componentes React embebidos.
User Story: Como administrador del sitio, quiero poder crear entradas de blog usando archivos MDX, para que pueda escribir contenido rico con componentes React embebidos.
- ✅ WHEN un archivo MDX es creado en la carpeta de blog THEN el sistema SHALL procesarlo y hacerlo disponible como entrada de blog
- ✅ WHEN un archivo MDX contiene frontmatter THEN el sistema SHALL extraer metadatos como título, fecha, autor, descripción y tags
- ✅ WHEN un archivo MDX contiene componentes React THEN el sistema SHALL renderizarlos correctamente en la página del blog
- ✅ IF un archivo MDX tiene errores de sintaxis THEN el sistema SHALL mostrar un mensaje de error descriptivo
User Story: Como visitante del sitio, quiero ver una lista de todas las entradas del blog, para que pueda navegar y encontrar contenido de mi interés.
- ✅ WHEN accedo a la ruta /blog THEN el sistema SHALL mostrar una lista paginada de todas las entradas del blog
- ✅ WHEN veo la lista de blog THEN cada entrada SHALL mostrar título, fecha, descripción breve y imagen destacada si existe
- ✅ WHEN hago clic en una entrada THEN el sistema SHALL navegar a la página de detalle del post
- ✅ WHEN hay más de 10 entradas THEN el sistema SHALL implementar paginación
- ✅ WHEN busco en el blog THEN el sistema SHALL filtrar entradas por título y contenido
User Story: Como visitante del sitio, quiero leer entradas individuales del blog, para que pueda consumir el contenido completo con una experiencia de lectura optimizada.
- ✅ WHEN accedo a una URL de entrada específica THEN el sistema SHALL mostrar el contenido completo del post
- ✅ WHEN leo una entrada THEN el sistema SHALL mostrar metadatos como fecha, autor y tags
- ✅ WHEN una entrada contiene código THEN el sistema SHALL aplicar syntax highlighting
- ✅ WHEN una entrada contiene imágenes THEN el sistema SHALL optimizarlas y mostrarlas correctamente
- ⏳ WHEN termino de leer THEN el sistema SHALL mostrar entradas relacionadas o sugeridas
User Story: Como administrador del sitio, quiero que las entradas del blog tengan SEO optimizado, para que aparezcan bien posicionadas en motores de búsqueda.
- 🔄 WHEN una entrada es accedida THEN el sistema SHALL generar meta tags apropiados (title, description, og:image)
- 🔄 WHEN una entrada tiene imagen destacada THEN el sistema SHALL usarla como og:image
- 🔄 WHEN una entrada es indexada THEN el sistema SHALL generar un sitemap.xml que incluya todas las entradas
- 🔄 WHEN una entrada tiene tags THEN el sistema SHALL incluirlos como keywords en los meta tags
User Story: Como desarrollador, quiero que el sistema de blog sea fácil de mantener y extender, para que pueda agregar nuevas funcionalidades sin complejidad excesiva.
- ✅ WHEN agrego un nuevo archivo MDX THEN el sistema SHALL detectarlo automáticamente sin reiniciar
- ✅ WHEN modifico un archivo MDX THEN los cambios SHALL reflejarse inmediatamente en desarrollo
- ⏳ WHEN el sistema se construye para producción THEN todas las entradas SHALL ser pre-renderizadas para mejor performance
- ✅ WHEN agrego nuevos componentes React THEN el sistema SHALL permitir usarlos en archivos MDX sin configuración adicional
User Story: Como visitante del sitio, quiero que las páginas del blog carguen rápidamente, para que tenga una experiencia de navegación fluida.
- ✅ WHEN accedo a cualquier página del blog THEN el sistema SHALL cargar en menos de 2 segundos
- ⏳ WHEN navego entre entradas THEN el sistema SHALL usar prefetching para mejorar la velocidad
- ✅ WHEN veo imágenes en las entradas THEN el sistema SHALL usar lazy loading
- ✅ WHEN accedo desde dispositivos móviles THEN el sistema SHALL estar completamente optimizado y responsivo
El sistema de blogging MDX se integra con la aplicación React Router existente, aprovechando las capacidades de SSR y prerendering. El sistema utiliza archivos MDX almacenados en el sistema de archivos, procesados en tiempo de construcción y servidos de manera optimizada.
MDX Files → MDX Processor → Blog Data Layer → Blog Routes → Blog Components → Rendered Pages
↑ ↑ ↑
Build Process File Watcher Search Index
app/
├── .server/blog/
│ ├── mdx-processor.ts ✅ Procesamiento de archivos MDX
│ ├── blog-data.ts ✅ Capa de datos del blog
│ └── seo.ts 🔄 Funcionalidad SEO
├── routes/
│ ├── blog.tsx ✅ Lista de entradas
│ ├── blog.$slug.tsx ✅ Página individual de entrada
│ └── blog/
│ ├── BlogList.tsx ✅ Componente de lista
│ ├── PostHeader.tsx ✅ Header del post
│ └── PostContent.tsx ✅ Contenido del post
├── content/blog/ ✅ 6 posts de ejemplo creados
│ ├── 2025-01-10-como-crear-assets-digitales-exitosos.mdx
│ ├── 2025-01-12-marketing-digital-para-creadores.mdx
│ ├── 2025-01-14-monetizar-conocimiento-online.mdx
│ ├── 2025-01-16-tendencias-economia-creadores-2025.mdx
│ ├── 2025-01-18-herramientas-esenciales-creadores-2025.mdx
│ ├── 2025-01-20-como-conectar-stripe-onboarding.mdx
│ └── assets/ ✅ Imágenes optimizadas
└── components/mdx/ ✅ Componentes para MDX
├── CodeBlock.tsx ✅ Bloques de código con highlighting
├── Callout.tsx ✅ Cajas de información destacada
└── ImageGallery.tsx ✅ Galerías de imágenes
interface BlogPost {
slug: string;
title: string;
description: string;
date: string;
author: string;
tags: string[];
featuredImage?: string;
readingTime: number;
content: string;
excerpt: string;
published: boolean;
}
class MDXProcessor {
static async processFile(filePath: string): Promise<BlogPost>;
static async getAllPosts(): Promise<BlogPost[]>;
static async getPostBySlug(slug: string): Promise<BlogPost | null>;
static generateExcerpt(content: string): string;
static calculateReadingTime(content: string): number;
}class BlogDataService {
static async getAllPosts(
options?: BlogListOptions
): Promise<PaginatedBlogPosts>;
static async getPostBySlug(slug: string): Promise<BlogPost | null>;
static async getRelatedPosts(
slug: string,
limit?: number
): Promise<BlogPost[]>;
static async searchPosts(query: string): Promise<BlogPost[]>;
static async getAllTags(): Promise<string[]>;
}---
title: "Título del Post"
description: "Descripción breve del contenido"
date: "2025-01-15"
author: "Nombre del Autor"
tags: ["react", "typescript", "tutorial"]
featuredImage: "/blog/assets/imagen-destacada.jpg"
published: true
---Los archivos MDX siguen el patrón: YYYY-MM-DD-slug.mdx
- Syntax Errors: Captura errores de compilación MDX
- Missing Frontmatter: Validación de campos requeridos
- Invalid Dates: Validación de formato de fechas
- Missing Files: Manejo de referencias inexistentes
- Generación dinámica de meta tags
- Open Graph para redes sociales
- Structured data (JSON-LD)
- Sitemap.xml automático
- Install y configuración de @mdx-js/mdx, @mdx-js/react
- MDX processor con parsing de frontmatter
- Cálculo de tiempo de lectura y generación de excerpts
- 2.1 ✅ MDX file discovery y processing
- Función para escanear directorio app/content/blog
- File watcher para hot reloading en desarrollo
- Sistema de caché para posts procesados
- 2.2 ✅ Blog data service con operaciones CRUD
- getAllPosts con paginación y filtros
- getPostBySlug para posts individuales
- Funcionalidad de búsqueda
- getRelatedPosts basado en tags
- Estructura de directorios app/content/blog
- Directorio app/content/blog/assets para imágenes
- 6 posts de ejemplo con contenido relevante para el negocio
- Imágenes optimizadas para web
- Vista de lista implementada
- Vista de detalle implementada
- Consumo del sistema MDX
- Conexión con componentes UI
- Renderizado correcto confirmado
- Estilos para elementos HTML añadidos
- Confirmación de estilos con el developer
- 6.1 ✅ CodeBlock component con syntax highlighting
- Syntax highlighting con react-syntax-highlighter
- Funcionalidad copy-to-clipboard
- Soporte para múltiples lenguajes
- 6.2 ✅ Callout y ImageGallery components
- Callout para cajas de información destacada
- ImageGallery para múltiples imágenes
- Componentes responsive y accesibles
- 6.3 ✅ Usar ImageGallery en posts
- Problema de suscripción identificado y arreglado
- Suscripción funcionando correctamente
- Generación dinámica de meta tags para cada post
- Creación de Open Graph images para redes sociales
- Structured data (JSON-LD) para posts
- Generación de sitemap.xml
- Integración con navegación y footer existentes
- Consistencia de estilos con el design system
- Estados de carga y error boundaries
- Testing final y corrección de bugs
- Sistema MDX Completo: Procesamiento de archivos, extracción de metadatos, caché
- Contenido Real: 6 posts de blog con contenido relevante para EasyBits
- UI Integrada: Lista y detalle de posts funcionando perfectamente
- Componentes Ricos: CodeBlock, Callout, ImageGallery implementados
- Búsqueda y Filtros: Funcionalidad completa de búsqueda por contenido y tags
- Responsive Design: Optimizado para móviles y desktop
- Performance: Carga rápida con lazy loading de imágenes
- SEO Avanzado: Meta tags dinámicos, Open Graph, structured data
- Sitemap Automático: Generación de sitemap.xml para SEO
- Completar SEO: Finalizar optimizaciones de meta tags y sitemap
- Testing Final: Pruebas exhaustivas en diferentes dispositivos
- Performance Tuning: Optimizaciones finales de velocidad
- Documentación: Guía para crear nuevos posts
- Marketing de Contenido: Plataforma completa para publicar contenido educativo
- SEO Mejorado: Mejor posicionamiento en buscadores con contenido optimizado
- Engagement: Componentes interactivos para mejor experiencia de usuario
- Escalabilidad: Sistema fácil de mantener y expandir
- Lista de Blog:
/blog - Posts Individuales:
/blog/como-crear-assets-digitales-exitosos/blog/marketing-digital-para-creadores/blog/monetizar-conocimiento-online/blog/tendencias-economia-creadores-2025/blog/herramientas-esenciales-creadores-2025/blog/como-conectar-stripe-onboarding
- Navegación: Lista → Detalle → Lista
- Búsqueda: Buscar por términos como "marketing", "stripe", "assets"
- Filtros: Filtrar por tags como "marketing", "monetización", "herramientas"
- Componentes: Ver CodeBlocks, Callouts, y galerías de imágenes
- Responsive: Probar en móvil y desktop
- Performance: Velocidad de carga y navegación
Documento generado el: 16 de Enero, 2025
Estado del Proyecto: 85% Completado
Próxima Revisión: Completar SEO y testing final