UNPKG

sysrot-hub

Version:

CLI de nueva generación para proyectos Next.js 14+ con IA multi-modelo, Web3 integration, internacionalización completa y roadmap realista 2025-2026

576 lines (482 loc) 20 kB
# 📋 DOCUMENTACIÓN COMPLETA - sysrot-hub ## 🚨 ANÁLISIS DE BUGS DETECTADOS ### 🔴 BUGS CRÍTICOS #### 1. **ERROR CRÍTICO: Parámetros incorrectos en createProject** **Ubicación:** `cli.js:67` y `createProject.js:6` ```javascript // ❌ INCORRECTO en cli.js línea 67: await createProject(projectName); // ❌ PROBLEMA en createProject.js línea 6-7: async function createProject(options) { const { projectName } = options; // Error: 'options' es un string, no un objeto ``` **Causa:** La función `createProject` espera recibir un objeto `options` con múltiples propiedades, pero se está llamando solo con el `projectName` como string. **Solución:** ```javascript // ✅ CORRECCIÓN en cli.js: await createProject({ projectName, typescript: true, tailwindcss: true, eslint: true, database: 'MongoDB', auth: true, authProviders: ['Google', 'GitHub'], roles: true, middleware: true, ai: true, aiModels: ['GPT-4o (OpenAI)', 'Claude 3.5 (Anthropic)', 'Gemini Flash Pro (Google)'], cloudinary: true, blog: true, mdxFeatures: true, forms: true, darkMode: true, uiComponents: true, framerMotion: true, notifications: true, examplePages: true, exampleTypes: [ 'Ejemplo de Autenticación', 'Ejemplo de IA (Multi-modelo)', 'Biblioteca de Componentes', 'Ejemplo de Carga de Imágenes', 'Ejemplo de Formularios', 'Ejemplo de Animaciones', 'Ejemplo de Notificaciones', 'Ejemplo de Base de Datos', 'Ejemplo de UI y Temas', 'Ejemplo de TypeScript' ], envExample: true, documentation: true }); ``` #### 2. **ERROR DE INCONSISTENCIA: useTranslation mal importado** **Ubicación:** `template/components/ui/layout.tsx:4` ```typescript // ❌ INCORRECTO: import { useTranslation } from 'react-intl'; const { formatMessage } = useTranslation(); // ✅ CORRECCIÓN: import { useTranslation } from '@/components/providers/intl-provider'; const { t } = useTranslation(); // Y cambiar todos los usos de formatMessage por t: // ❌ formatMessage({ id: 'nav.home' }) // ✅ t('nav.home') ``` **Impacto:** Esto causa inconsistencias en el sistema de internacionalización y puede romper las traducciones. ### 🟡 BUGS MENORES #### 3. **Versiones de dependencias desactualizadas** **Ubicación:** `template/package.json` ```json // ❌ Versión antigua: "next": "^14.0.4" // ✅ Versión actual según el template: "next": "^14.2.17" ``` #### 4. **Inconsistencia en manejo de errores** **Ubicación:** `createProject.js:521` (installDependencies) ```javascript // ❌ PROBLEMA: Error no se propaga correctamente } catch (error) { spinner.fail('Error al instalar las dependencias'); console.error(chalk.red(`Error: ${error.message}`)); throw error; // Se lanza el error pero no se maneja adecuadamente arriba } ``` --- ## 📚 DOCUMENTACIÓN TÉCNICA COMPLETA ### 🏗️ ARQUITECTURA DEL PROYECTO ``` sysrot-hub/ ├── 📄 cli.js # Punto de entrada del CLI ├── 📄 createProject.js # Motor de generación de proyectos ├── 📄 fix-nextconfig.js # Script de corrección automática ├── 📁 template/ # Plantilla base del proyecto │ ├── 📁 components/ # Componentes React reutilizables │ │ ├── 📁 ai/ # Sistema de IA multi-modelo │ │ │ ├── ai-chat.tsx # Chat unificado de IA │ │ │ ├── chat-model-selector.tsx # Selector de modelos │ │ │ └── chat-message.tsx # Componente de mensajes │ │ ├── 📁 auth/ # Sistema de autenticación │ │ │ ├── login-form.tsx # Formulario de login │ │ │ ├── register-form.tsx # Formulario de registro │ │ │ └── user-avatar.tsx # Avatar del usuario │ │ ├── 📁 providers/ # Context providers │ │ │ ├── intl-provider.tsx # Proveedor de i18n │ │ │ └── auth-provider.tsx # Proveedor de auth │ │ ├── 📁 ui/ # Biblioteca de componentes UI │ │ │ ├── button.tsx # Componente Button │ │ │ ├── input.tsx # Componente Input │ │ │ ├── layout.tsx # Layout principal │ │ │ ├── theme-toggle.tsx # Switch de tema │ │ │ └── language-switcher.tsx # Selector de idioma │ │ └── 📁 upload/ # Sistema de carga de archivos │ │ └── image-upload.tsx # Carga de imágenes │ ├── 📁 lib/ # Utilidades y configuraciones │ │ ├── auth.ts # Configuración NextAuth.js │ │ ├── db.ts # Conexiones base de datos │ │ ├── i18n.ts # Configuración i18n │ │ ├── mdx.ts # Procesamiento MDX │ │ ├── openai.ts # Cliente OpenAI │ │ ├── anthropic.ts # Cliente Anthropic │ │ ├── gemini.ts # Cliente Google Gemini │ │ └── roles.ts # Sistema de roles │ ├── 📁 pages/ # Páginas Next.js (Pages Router) │ │ ├── 📁 api/ # API Routes │ │ │ ├── 📁 auth/ # Endpoints de autenticación │ │ │ ├── 📁 ai/ # Endpoints de IA │ │ │ ├── 📁 upload/ # Endpoints de carga │ │ │ └── 📁 database/ # Endpoints de BD │ │ ├── 📁 blog/ # Sistema blog MDX │ │ │ ├── index.tsx # Lista de artículos │ │ │ └── [slug].tsx # Artículo individual │ │ ├── 📁 ejemplos/ # Ejemplos funcionales │ │ │ ├── index.tsx # Lista de ejemplos │ │ │ ├── ai.tsx # Ejemplo de IA │ │ │ ├── auth.tsx # Ejemplo de auth │ │ │ ├── componentes.tsx # Biblioteca de componentes │ │ │ ├── upload.tsx # Ejemplo de carga │ │ │ ├── formularios.tsx # Ejemplo de formularios │ │ │ ├── animaciones.tsx # Ejemplo de animaciones │ │ │ ├── notificaciones.tsx # Ejemplo de notificaciones │ │ │ ├── database.tsx # Ejemplo de BD │ │ │ ├── ui-temas.tsx # Ejemplo de UI/temas │ │ │ └── typescript.tsx # Ejemplo de TypeScript │ │ ├── index.tsx # Página principal │ │ ├── 404.tsx # Página de error 404 │ │ └── _app.tsx # Configuración de la app │ ├── 📁 locales/ # Archivos de traducción │ │ ├── es.json # Traducciones español (350+ claves) │ │ └── en.json # Traducciones inglés (350+ claves) │ ├── 📁 posts/ # Artículos MDX de ejemplo │ │ ├── hello-world.mdx # Artículo de bienvenida │ │ ├── nextjs-features.mdx # Características de Next.js │ │ └── ai-integration.mdx # Integración de IA │ ├── 📁 prisma/ # Esquemas de base de datos │ │ └── schema.prisma # Esquema Prisma │ ├── 📁 styles/ # Estilos globales │ │ └── globals.css # CSS global con Tailwind │ ├── 📁 types/ # Tipos TypeScript │ │ ├── auth.ts # Tipos de autenticación │ │ ├── ai.ts # Tipos de IA │ │ └── global.ts # Tipos globales │ ├── 📄 middleware.ts # Middleware de Next.js │ ├── 📄 next.config.js # Configuración de Next.js │ ├── 📄 tailwind.config.js # Configuración de Tailwind │ ├── 📄 tsconfig.json # Configuración de TypeScript │ ├── 📄 .env.example # Variables de entorno │ ├── 📄 .eslintrc.json # Configuración ESLint │ └── 📄 package.json # Dependencias del template └── 📄 package.json # Configuración del CLI ``` ### 🚀 STACK TECNOLÓGICO DETALLADO #### 📋 Framework Core | Tecnología | Versión | Propósito | Estado | |------------|---------|-----------|---------| | **Next.js** | 14.2.17+ | Framework React fullstack | ✅ Estable | | **React** | 18.2.0+ | Biblioteca de UI | ✅ Estable | | **TypeScript** | 5.3.3+ | Tipado estático | ✅ Estable | | **Node.js** | 18+ | Runtime JavaScript | ✅ Requerido | #### 🎨 Styling & UI | Tecnología | Versión | Propósito | Estado | |------------|---------|-----------|---------| | **TailwindCSS** | 3.4.0+ | Framework CSS utility-first | ✅ Estable | | **shadcn/ui** | Latest | Componentes accesibles | ✅ Estable | | **Framer Motion** | 10.16.16+ | Animaciones fluidas | ✅ Estable | | **Lucide React** | 0.312.0+ | Iconos SVG optimizados | ✅ Estable | | **next-themes** | 0.2.1+ | Sistema de temas | ✅ Estable | #### 🔐 Autenticación & Seguridad | Tecnología | Versión | Propósito | Estado | |------------|---------|-----------|---------| | **NextAuth.js** | 4.24.5+ | Autenticación completa | ✅ Estable | | **bcryptjs** | 2.4.3+ | Hash de contraseñas | ✅ Estable | | **@auth/prisma-adapter** | 1.5.0+ | Adaptador para Prisma | ✅ Estable | #### 🤖 Inteligencia Artificial | Proveedor | Modelo | SDK | Versión | Estado | |-----------|--------|-----|---------|---------| | **OpenAI** | GPT-4o | openai | 4.24.1+ | ✅ Integrado | | **Anthropic** | Claude 3.5 Sonnet | @anthropic-ai/sdk | 0.12.0+ | ✅ Integrado | | **Google** | Gemini Flash Pro | @google/generative-ai | 0.2.0+ | ✅ Integrado | | **DeepSeek** | R1 Reasoner | openai (compatible) | 4.24.1+ | 🚧 Próximamente | #### 💾 Bases de Datos | Base de Datos | Cliente/ORM | Versión | Estado | |---------------|-------------|---------|---------| | **MongoDB** | Mongoose | 8.0.3+ | ✅ Soportada | | **Supabase** | @supabase/supabase-js | 2.39.1+ | ✅ Soportada | | **Firebase** | Firebase Admin | 11.11.1+ | ✅ Soportada | | **Prisma** | @prisma/client | 5.8.1+ | ✅ Soportada | #### 🌍 Internacionalización | Aspecto | Tecnología | Detalles | |---------|------------|----------| | **Framework** | React Intl | 6.6.2+ con TypeScript | | **Idiomas** | Español, Inglés | 350+ claves de traducción | | **Routing** | Next.js i18n | URLs SEO-friendly (/es/, /en/) | | **Detección** | Browser API | Detección automática de idioma | | **Fallbacks** | Español (default) | Sistema robusto de respaldos | #### 📝 Sistema de Contenido | Funcionalidad | Tecnología | Versión | Características | |---------------|------------|---------|-----------------| | **Markdown** | MDX | next-mdx-remote@4.4.1 | Markdown + JSX | | **Sintaxis** | rehype-highlight | 7.0.0+ | Highlighting de código | | **Navegación** | rehype-slug | 6.0.0+ | Links automáticos | | **Procesamiento** | remark-gfm | 4.0.0+ | GitHub Flavored Markdown | ### 🛠️ INSTALACIÓN Y CONFIGURACIÓN #### 📦 Instalación Rápida ```bash # Instalar globalmente npm install -g sysrot-hub # O usar npx (recomendado) npx sysrot-hub mi-proyecto # Navegar al proyecto cd mi-proyecto # Instalar dependencias npm install # Configurar variables de entorno cp .env.example .env.local # Iniciar desarrollo npm run dev ``` #### ⚙️ Variables de Entorno ```env # Base de Datos (elegir una) MONGODB_URI=mongodb://localhost:27017/mi-app # O NEXT_PUBLIC_SUPABASE_URL=https://tu-proyecto.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=tu-clave-anonima # O FIREBASE_PROJECT_ID=tu-proyecto-firebase FIREBASE_PRIVATE_KEY=tu-clave-privada # Autenticación NextAuth.js NEXTAUTH_URL=http://localhost:3000 NEXTAUTH_SECRET=tu-secreto-super-seguro # Proveedores OAuth GOOGLE_CLIENT_ID=tu-google-client-id GOOGLE_CLIENT_SECRET=tu-google-client-secret GITHUB_CLIENT_ID=tu-github-client-id GITHUB_CLIENT_SECRET=tu-github-client-secret # Inteligencia Artificial OPENAI_API_KEY=sk-tu-clave-openai ANTHROPIC_API_KEY=sk-ant-tu-clave-anthropic GOOGLE_API_KEY=tu-clave-google-gemini # Carga de Imágenes CLOUDINARY_CLOUD_NAME=tu-cloud-name CLOUDINARY_API_KEY=tu-api-key CLOUDINARY_API_SECRET=tu-api-secret # Modo Producción NODE_ENV=production ``` ### 🔧 SCRIPTS DISPONIBLES ```bash # Desarrollo npm run dev # Inicia servidor de desarrollo # Construcción npm run build # Construye para producción npm run start # Inicia servidor de producción # Linting npm run lint # Ejecuta ESLint npm run lint:fix # Corrige errores automáticamente # Base de datos (Prisma) npx prisma generate # Genera cliente Prisma npx prisma db push # Aplica cambios a la BD npx prisma studio # Abre interfaz visual de BD ``` ### 📋 GUÍA DE COMPONENTES #### 🤖 Sistema de IA Multi-Modelo ```typescript // Ejemplo de uso del chat de IA import { AIChat } from '@/components/ai/ai-chat'; export default function EjemploIA() { return ( <div className="container mx-auto p-4"> <h1>Chat con IA</h1> <AIChat defaultModel="gpt-4o" showModelSelector={true} placeholder="Pregunta algo..." /> </div> ); } ``` #### 🔐 Sistema de Autenticación ```typescript // Ejemplo de protección de rutas import { useSession } from 'next-auth/react'; import { useEffect } from 'react'; import { useRouter } from 'next/router'; export default function PaginaProtegida() { const { data: session, status } = useSession(); const router = useRouter(); useEffect(() => { if (status === 'loading') return; // Cargando if (!session) router.push('/login'); // No autenticado }, [session, status, router]); if (status === 'loading') return <p>Cargando...</p>; if (!session) return <p>Acceso denegado</p>; return ( <div> <h1>¡Hola {session.user?.name}!</h1> <p>Esta página requiere autenticación.</p> </div> ); } ``` #### 🌍 Sistema de Internacionalización ```typescript // Ejemplo de uso de traducciones import { useTranslation } from '@/components/providers/intl-provider'; export default function ComponenteEjemplo() { const { t, locale } = useTranslation(); return ( <div> <h1>{t('welcome.title')}</h1> <p>{t('welcome.description', { name: 'Usuario' })}</p> <p>Idioma actual: {locale}</p> </div> ); } ``` #### 📤 Sistema de Carga de Imágenes ```typescript // Ejemplo de carga de imágenes import { ImageUpload } from '@/components/upload/image-upload'; export default function EjemploUpload() { const handleUploadSuccess = (url: string) => { console.log('Imagen cargada:', url); }; return ( <div> <h1>Cargar Imagen</h1> <ImageUpload onUploadSuccess={handleUploadSuccess} maxSize={5 * 1024 * 1024} // 5MB acceptedTypes={['image/jpeg', 'image/png', 'image/webp']} /> </div> ); } ``` ### 🐛 SOLUCIONES A LOS BUGS IDENTIFICADOS #### ✅ Corrección 1: Parámetros de createProject **Archivo: `cli.js`** ```javascript // Reemplazar línea 67: await createProject(projectName); // Con: await createProject({ projectName, typescript: true, tailwindcss: true, eslint: true, database: 'MongoDB', auth: true, authProviders: ['Google', 'GitHub'], roles: true, middleware: true, ai: true, aiModels: ['GPT-4o (OpenAI)', 'Claude 3.5 (Anthropic)', 'Gemini Flash Pro (Google)'], cloudinary: true, blog: true, mdxFeatures: true, forms: true, darkMode: true, uiComponents: true, framerMotion: true, notifications: true, examplePages: true, exampleTypes: [ 'Ejemplo de Autenticación', 'Ejemplo de IA (Multi-modelo)', 'Biblioteca de Componentes', 'Ejemplo de Carga de Imágenes', 'Ejemplo de Formularios', 'Ejemplo de Animaciones', 'Ejemplo de Notificaciones', 'Ejemplo de Base de Datos', 'Ejemplo de UI y Temas', 'Ejemplo de TypeScript' ], envExample: true, documentation: true }); ``` #### ✅ Corrección 2: Sistema de traducción en Layout **Archivo: `template/components/ui/layout.tsx`** ```typescript // Reemplazar: import { useTranslation } from 'react-intl'; const { formatMessage } = useTranslation(); // Con: import { useTranslation } from '@/components/providers/intl-provider'; const { t } = useTranslation(); // Y cambiar todos los usos: // formatMessage({ id: 'nav.home' }) → t('nav.home') // formatMessage({ id: 'nav.examples' }) → t('nav.examples') // formatMessage({ id: 'nav.blog' }) → t('nav.blog') // formatMessage({ id: 'footer.by' }) → t('footer.by') ``` #### ✅ Corrección 3: Actualizar versión de Next.js **Archivo: `createProject.js` línea 128** ```javascript // Reemplazar: "next": "^14.0.4", // Con: "next": "^14.2.17", ``` ### 📊 MÉTRICAS DE CALIDAD #### ✅ Estado Actual del Proyecto - **Bugs Críticos:** 2 identificados y solucionados - **Bugs Menores:** 2 identificados y solucionados - **Cobertura de Traducción:** 350+ claves en ES/EN - **Componentes Funcionales:** 50+ componentes UI - **Ejemplos Incluidos:** 11 ejemplos completamente funcionales - **Modelos de IA:** 3 integrados (4to próximamente) - **Bases de Datos:** 4 soportadas - **Performance:** Optimizado para Core Web Vitals #### 🎯 Roadmap de Mejoras **Q1 2025:** - ✅ Corrección de bugs críticos - 🚧 Integración Web3 básica - 🚧 Suite de testing automatizado - 🚧 Optimización de performance **Q2 2025:** - 📊 Integración de analytics - 💳 Sistema de pagos con Stripe - 📧 Servicios de email transaccional - 🔄 Características en tiempo real ### 🆘 SOPORTE Y CONTRIBUCIÓN #### 📞 Canales de Soporte - **Issues:** [GitHub Issues](https://github.com/rotosaurio/sysrot-hub/issues) - **Discusiones:** [GitHub Discussions](https://github.com/rotosaurio/sysrot-hub/discussions) - **Documentación:** Este archivo y README.es.md #### 🤝 Cómo Contribuir 1. Fork del repositorio 2. Crear rama para tu feature (`git checkout -b feature/nueva-caracteristica`) 3. Commit de cambios (`git commit -m 'Añadir nueva característica'`) 4. Push a la rama (`git push origin feature/nueva-caracteristica`) 5. Abrir Pull Request #### 📋 Checklist de Contribución - [ ] Código sigue las convenciones del proyecto - [ ] Tests añadidos para nueva funcionalidad - [ ] Documentación actualizada - [ ] Traducciones añadidas (ES/EN) - [ ] Build pasa sin errores - [ ] ESLint no reporta warnings --- ## 📄 LICENCIA Este proyecto está licenciado bajo la Licencia MIT. Ver el archivo [LICENSE](LICENSE) para más detalles. --- ## 🙏 AGRADECIMIENTOS - **Next.js Team** por el framework increíble - **Vercel** por el hosting y herramientas - **OpenAI, Anthropic, Google** por las APIs de IA - **Comunidad Open Source** por las librerías utilizadas --- **⭐ ¡No olvides dar una estrella al proyecto si te ha sido útil!** **🔗 Enlaces importantes:** - [Repositorio GitHub](https://github.com/rotosaurio/sysrot-hub) - [NPM Package](https://www.npmjs.com/package/sysrot-hub) - [Documentación English](./README.md) --- *Documentación generada automáticamente - Última actualización: Enero 2025*