|
1 | | -# CollabData - Plataforma Colaborativa de Ingeniería de Datos |
| 1 | +# 📊 CollabData |
2 | 2 |
|
3 | | -Esta es una aplicación Next.js construida con Firebase Studio. Es una plataforma diseñada para que equipos de datos colaboren en ingeniería y análisis de datos. |
| 3 | + |
| 4 | + |
| 5 | + |
| 6 | + |
| 7 | + |
| 8 | + |
4 | 9 |
|
5 | | -## 📝 Descripción del Proyecto |
| 10 | +> 🌐 **Live Demo:** [collabdata.vercel.app](https://collabdata.vercel.app) |
6 | 11 |
|
7 | | -CollabData es una plataforma web que permite a los usuarios gestionar proyectos de análisis de datos, cargar conjuntos de datos (datasets), ejecutar análisis automatizados y visualizar los resultados. La aplicación está diseñada con un enfoque en la colaboración en tiempo real y la eficiencia del flujo de trabajo. |
| 12 | +--- |
8 | 13 |
|
9 | | -## 🔑 Características Principales |
| 14 | +## 🧠 Overview |
10 | 15 |
|
11 | | -- **🔐 Autenticación de Usuarios:** Sistema completo de inicio de sesión, registro y autenticación social usando Google y GitHub. |
12 | | -- **📊 Panel de Control (Dashboard):** Un panel central para ver, buscar, filtrar y gestionar todos los proyectos de análisis. |
13 | | -- **✨ Creación de Nuevos Análisis:** Un flujo guiado para crear nuevos proyectos de análisis, configurar herramientas y cargar conjuntos de datos. |
14 | | -- **📈 Visualización de Resultados:** Paneles de resultados dinámicos con KPIs, gráficos, tablas de estadísticas descriptivas e insights generados por IA. |
15 | | -- **💻 Espacio de Trabajo Interactivo:** Un entorno similar a un IDE para explorar archivos de datos. |
16 | | -- **👤 Gestión de Perfil:** Página de ajustes para que los usuarios actualicen su información personal y gestionen su cuenta. |
17 | | -- **🤖 Integración de IA:** Utiliza Genkit para proporcionar sugerencias de análisis inteligentes basadas en las descripciones de los datasets. |
| 16 | +**CollabData** es una plataforma web full-stack orientada a equipos de ingeniería y análisis de datos. Construida sobre el ecosistema **Next.js 15 con App Router** y respaldada por **Firebase** como infraestructura de backend, la aplicación permite a múltiples usuarios gestionar proyectos de análisis de datos, cargar conjuntos de datos, obtener visualizaciones de resultados y recibir sugerencias inteligentes generadas por modelos de IA a través de **Google Genkit**. |
18 | 17 |
|
19 | | -## 🛠️ Stack Tecnológico |
| 18 | +El proyecto combina una arquitectura moderna de frontend orientada a componentes (React + ShadCN UI + Tailwind CSS) con un backend serverless basado en Firebase Authentication y Firestore, y se despliega mediante **Firebase App Hosting** con integración de CI/CD a través de **GitHub Actions**. El entorno de desarrollo está configurado para trabajar con **Firebase Studio (Project IDX)**. |
20 | 19 |
|
21 | | -- **Framework:** [Next.js](https://nextjs.org/) |
22 | | -- **Biblioteca UI:** [React](https://react.dev/) |
23 | | -- **Lenguaje:** [TypeScript](https://www.typescriptlang.org/) |
24 | | -- **Estilos:** [Tailwind CSS](https://tailwindcss.com/) |
25 | | -- **Componentes UI:** [ShadCN UI](https://ui.shadcn.com/) |
26 | | -- **Backend y Autenticación:** [Firebase](https://firebase.google.com/) (Authentication, Firestore) |
27 | | -- **IA Generativa:** [Genkit](https://firebase.google.com/docs/genkit) (Google AI) |
| 20 | +--- |
28 | 21 |
|
29 | | -## 🚀 Cómo Empezar |
| 22 | +## ⚙️ Features |
30 | 23 |
|
31 | | -Sigue estos pasos para poner en marcha el entorno de desarrollo. |
| 24 | +- **Autenticación social completa** mediante Firebase Authentication, con soporte para inicio de sesión con Google y GitHub, además de registro por email y contraseña. |
| 25 | +- **Dashboard centralizado de proyectos** con capacidades de búsqueda, filtrado y gestión visual de todos los análisis del usuario. |
| 26 | +- **Flujo guiado de creación de análisis** que permite definir configuración, seleccionar herramientas de procesamiento y cargar datasets paso a paso. |
| 27 | +- **Espacio de trabajo interactivo por proyecto** con una interfaz similar a un IDE para explorar la estructura de archivos de datos cargados. |
| 28 | +- **Visualización dinámica de resultados** que incluye paneles de KPIs, gráficos de análisis, tablas de estadísticas descriptivas y resúmenes ejecutivos. |
| 29 | +- **Sugerencias de análisis impulsadas por IA** mediante flujos de Genkit (Google AI) que interpretan las descripciones de los datasets y proponen estrategias de análisis. |
| 30 | +- **Gestión de perfil de usuario** con página de ajustes para actualizar información personal y preferencias de cuenta. |
| 31 | +- **Sistema de hooks de estado** para gestión reactiva del estado de los proyectos a lo largo de la sesión del usuario. |
| 32 | +- **CI/CD integrado** mediante GitHub Actions para automatizar el pipeline de validación y despliegue. |
| 33 | +- **Soporte nativo para RSC** (React Server Components) con tipado estricto a través de TypeScript en toda la codebase. |
| 34 | + |
| 35 | +--- |
| 36 | + |
| 37 | +## 🛠️ Tech Stack |
| 38 | + |
| 39 | +| Categoría | Tecnología | |
| 40 | +|---|---| |
| 41 | +| Framework web | Next.js 15+ (App Router) | |
| 42 | +| Lenguaje | TypeScript 5.x | |
| 43 | +| Biblioteca UI | React + ShadCN UI | |
| 44 | +| Estilos | Tailwind CSS 3.x | |
| 45 | +| Iconografía | Lucide React | |
| 46 | +| Backend & Auth | Firebase Authentication + Firestore | |
| 47 | +| Hosting | Firebase App Hosting + Vercel | |
| 48 | +| IA Generativa | Google Genkit (AI Flows) | |
| 49 | +| Linting | ESLint + Prettier | |
| 50 | +| CI/CD | GitHub Actions | |
| 51 | +| Dev Environment | Firebase Studio / Project IDX | |
| 52 | +| Package Manager | npm | |
| 53 | +| Node versioning | `.nvmrc` (Node 18+) | |
| 54 | + |
| 55 | +--- |
| 56 | + |
| 57 | +## 📦 Installation |
32 | 58 |
|
33 | 59 | ### Prerrequisitos |
34 | 60 |
|
35 | | -- Node.js (v18 o superior) |
36 | | -- npm |
| 61 | +- **Node.js** v18 o superior (gestionado via `.nvmrc`) |
| 62 | +- **npm** v9+ |
| 63 | +- Una cuenta en **Firebase** con un proyecto creado |
| 64 | +- Acceso a **Google AI / Genkit** (para los flujos de IA) |
| 65 | + |
| 66 | +### 1. Clonar el repositorio |
| 67 | +```bash |
| 68 | +git clone https://github.com/devsebastian44/CollabData.git |
| 69 | +cd CollabData |
| 70 | +``` |
| 71 | + |
| 72 | +### 2. Usar la versión correcta de Node |
| 73 | +```bash |
| 74 | +nvm use |
| 75 | +``` |
| 76 | + |
| 77 | +### 3. Instalar dependencias |
| 78 | +```bash |
| 79 | +npm install |
| 80 | +``` |
| 81 | + |
| 82 | +### 4. Configurar variables de entorno |
| 83 | + |
| 84 | +Crea un archivo `.env.local` en la raíz del proyecto con tus credenciales de Firebase y Genkit: |
| 85 | +```env |
| 86 | +# Firebase |
| 87 | +NEXT_PUBLIC_FIREBASE_API_KEY= |
| 88 | +NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN= |
| 89 | +NEXT_PUBLIC_FIREBASE_PROJECT_ID= |
| 90 | +NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET= |
| 91 | +NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID= |
| 92 | +NEXT_PUBLIC_FIREBASE_APP_ID= |
| 93 | +
|
| 94 | +# Google AI / Genkit |
| 95 | +GOOGLE_GENAI_API_KEY= |
| 96 | +``` |
37 | 97 |
|
38 | | -### Instalación y Ejecución |
| 98 | +### 5. Configurar Firebase |
39 | 99 |
|
40 | | -1. Instala las dependencias del proyecto: |
41 | | - ```sh |
42 | | - npm install |
43 | | - ``` |
44 | | -2. Inicia el servidor de desarrollo: |
45 | | - ```sh |
46 | | - npm run dev |
47 | | - ``` |
48 | | -3. Abre [http://localhost:9002](http://localhost:9002) en tu navegador para ver la aplicación. |
| 100 | +Asegúrate de que tu proyecto Firebase esté correctamente referenciado en `.firebaserc`: |
| 101 | +```json |
| 102 | +{ |
| 103 | + "projects": { |
| 104 | + "default": "tu-proyecto-firebase-id" |
| 105 | + } |
| 106 | +} |
| 107 | +``` |
| 108 | + |
| 109 | +--- |
| 110 | + |
| 111 | +## ▶️ Usage |
| 112 | + |
| 113 | +### Servidor de desarrollo |
| 114 | +```bash |
| 115 | +npm run dev |
| 116 | +``` |
| 117 | + |
| 118 | +Abre [http://localhost:9002](http://localhost:9002) en tu navegador. |
| 119 | + |
| 120 | +> El servidor Next.js corre en el puerto **9002** por configuración del proyecto. |
| 121 | +
|
| 122 | +### Build de producción |
| 123 | +```bash |
| 124 | +npm run build |
| 125 | +npm run start |
| 126 | +``` |
| 127 | + |
| 128 | +### Lint del código |
| 129 | +```bash |
| 130 | +npm run lint |
| 131 | +``` |
| 132 | + |
| 133 | +### Despliegue en Firebase App Hosting |
| 134 | + |
| 135 | +El despliegue se gestiona automáticamente a través de **GitHub Actions** al hacer push a la rama principal. De forma manual: |
| 136 | +```bash |
| 137 | +firebase deploy |
| 138 | +``` |
49 | 139 |
|
50 | | -## 📁 Estructura del Proyecto |
| 140 | +> La configuración en `apphosting.yaml` establece `maxInstances: 1` por defecto. Ajústalo según el tráfico esperado. |
51 | 141 |
|
52 | | -Aquí tienes una descripción general de los archivos y directorios más importantes del proyecto: |
| 142 | +--- |
53 | 143 |
|
| 144 | +## 📁 Project Structure |
54 | 145 | ``` |
55 | | -/ |
| 146 | +CollabData/ |
| 147 | +│ |
| 148 | +├── .github/ |
| 149 | +│ └── workflows/ # Pipelines de CI/CD con GitHub Actions |
| 150 | +│ |
| 151 | +├── .idx/ # Configuración de Firebase Studio / Project IDX |
| 152 | +│ |
| 153 | +├── docs/ # Documentación técnica adicional del proyecto |
| 154 | +│ |
56 | 155 | ├── src/ |
57 | | -│ ├── app/ |
58 | | -│ │ ├── layout.tsx # Layout raíz de la aplicación |
59 | | -│ │ ├── page.tsx # Landing Page |
60 | | -│ │ ├── login/page.tsx # Página de autenticación |
61 | | -│ │ ├── dashboard/ # Rutas del panel de control |
62 | | -│ │ │ ├── page.tsx # Vista principal del dashboard |
63 | | -│ │ │ ├── layout.tsx # Layout para las páginas del dashboard |
64 | | -│ │ │ ├── new-analysis/page.tsx # Página para crear un nuevo análisis |
65 | | -│ │ │ └── ... |
66 | | -│ │ └── projects/[id]/ # Rutas para proyectos individuales |
67 | | -│ │ ├── page.tsx # Espacio de trabajo del proyecto |
68 | | -│ │ └── results/page.tsx # Página de resultados del análisis |
| 156 | +│ ├── app/ # Next.js App Router — páginas y layouts |
| 157 | +│ │ ├── layout.tsx # Layout raíz global de la aplicación |
| 158 | +│ │ ├── page.tsx # Landing page pública |
| 159 | +│ │ ├── login/ |
| 160 | +│ │ │ └── page.tsx # Página de autenticación (login / registro) |
| 161 | +│ │ ├── dashboard/ |
| 162 | +│ │ │ ├── layout.tsx # Layout compartido del área privada |
| 163 | +│ │ │ ├── page.tsx # Vista principal del dashboard de proyectos |
| 164 | +│ │ │ └── new-analysis/ |
| 165 | +│ │ │ └── page.tsx # Flujo de creación de nuevo análisis |
| 166 | +│ │ └── projects/ |
| 167 | +│ │ └── [id]/ |
| 168 | +│ │ ├── page.tsx # Espacio de trabajo interactivo del proyecto |
| 169 | +│ │ └── results/ |
| 170 | +│ │ └── page.tsx # Panel de resultados y visualizaciones |
69 | 171 | │ │ |
70 | 172 | │ ├── components/ |
71 | | -│ │ ├── layout/ # Componentes de layout (header, footer) |
72 | | -│ │ ├── pages/ # Componentes específicos de cada página |
73 | | -│ │ └── ui/ # Componentes UI reutilizables (ShadCN) |
| 173 | +│ │ ├── layout/ # Componentes estructurales (header, footer, nav) |
| 174 | +│ │ ├── pages/ # Componentes específicos de cada vista |
| 175 | +│ │ └── ui/ # Biblioteca de componentes ShadCN UI reutilizables |
74 | 176 | │ │ |
75 | 177 | │ ├── firebase/ |
76 | | -│ │ ├── config.ts # Configuración de Firebase |
77 | | -│ │ ├── index.ts # Inicialización y exportación de servicios Firebase |
78 | | -│ │ ├── provider.tsx # Proveedor de contexto Firebase |
79 | | -│ │ └── auth/use-user.tsx # Hook para obtener el usuario autenticado |
| 178 | +│ │ ├── config.ts # Inicialización y configuración del SDK de Firebase |
| 179 | +│ │ ├── index.ts # Exportación centralizada de servicios Firebase |
| 180 | +│ │ ├── provider.tsx # Context Provider de Firebase para toda la app |
| 181 | +│ │ └── auth/ |
| 182 | +│ │ └── use-user.tsx # Hook personalizado para obtener el usuario autenticado |
80 | 183 | │ │ |
81 | 184 | │ ├── ai/ |
82 | | -│ │ ├── genkit.ts # Inicialización de Genkit |
83 | | -│ │ └── flows/ # Flujos de IA con Genkit |
| 185 | +│ │ ├── genkit.ts # Inicialización de la instancia de Genkit |
| 186 | +│ │ └── flows/ # Definición de flujos de IA (análisis de datasets) |
84 | 187 | │ │ |
85 | 188 | │ ├── hooks/ |
86 | | -│ │ └── use-project-store.ts # Hook para la gestión del estado del proyecto |
| 189 | +│ │ └── use-project-store.ts # Hook de gestión de estado global de proyectos |
87 | 190 | │ │ |
88 | 191 | │ └── lib/ |
89 | | -│ ├── utils.ts # Funciones de utilidad |
90 | | -│ ├── mock-data.ts # Datos de ejemplo para la aplicación |
91 | | -│ └── types.ts # Definiciones de tipos TypeScript |
| 192 | +│ ├── utils.ts # Funciones de utilidad generales (cn, formatters, etc.) |
| 193 | +│ ├── mock-data.ts # Datos de ejemplo para desarrollo y prototipado |
| 194 | +│ └── types.ts # Definiciones de tipos e interfaces TypeScript globales |
92 | 195 | │ |
93 | | -├── public/ # Archivos estáticos |
94 | | -├── package.json # Dependencias y scripts del proyecto |
95 | | -└── tailwind.config.ts # Configuración de Tailwind CSS |
| 196 | +├── public/ # Archivos estáticos (imágenes, iconos, fonts) |
| 197 | +│ |
| 198 | +├── .firebaserc # Referencia al proyecto Firebase activo |
| 199 | +├── .gitignore # Exclusiones de Git (node_modules, .env.local, etc.) |
| 200 | +├── .nvmrc # Versión de Node.js fijada para el proyecto |
| 201 | +├── apphosting.yaml # Configuración de Firebase App Hosting |
| 202 | +├── components.json # Configuración de ShadCN UI (estilo, aliases, iconos) |
| 203 | +├── eslint.config.js # Configuración de ESLint |
| 204 | +├── next.config.ts # Configuración de Next.js (remote images, etc.) |
| 205 | +├── package.json # Dependencias y scripts del proyecto |
| 206 | +├── postcss.config.mjs # Configuración de PostCSS (requerido por Tailwind) |
| 207 | +├── prettier.config.js # Reglas de formateo de código |
| 208 | +├── tailwind.config.ts # Configuración de Tailwind CSS |
| 209 | +└── tsconfig.json # Configuración del compilador TypeScript |
96 | 210 | ``` |
| 211 | + |
| 212 | +--- |
| 213 | + |
| 214 | +## 🔐 Security |
| 215 | + |
| 216 | +### Autenticación y autorización |
| 217 | + |
| 218 | +La autenticación está completamente delegada a **Firebase Authentication**, lo que garantiza el manejo seguro de credenciales, tokens JWT y sesiones. Las rutas del dashboard son accesibles únicamente por usuarios autenticados, verificados mediante el hook `use-user.tsx` en el lado del cliente. |
| 219 | + |
| 220 | +### Variables de entorno |
| 221 | + |
| 222 | +Todas las claves de API y configuraciones sensibles se gestionan a través de variables de entorno definidas en `.env.local`, el cual está incluido en `.gitignore` y nunca se expone en el repositorio. Las variables prefijadas con `NEXT_PUBLIC_` se exponen al cliente de forma controlada; las variables del lado servidor (como `GOOGLE_GENAI_API_KEY`) permanecen exclusivamente en el entorno de ejecución de Next.js. |
| 223 | + |
| 224 | +### Imágenes externas controladas |
| 225 | + |
| 226 | +El archivo `next.config.ts` define una lista blanca explícita de dominios permitidos para carga de imágenes remotas (`placehold.co`, `images.unsplash.com`, `picsum.photos`), previniendo el abuso del componente `<Image>` de Next.js para cargar contenido de dominios no autorizados. |
| 227 | + |
| 228 | +### Firestore Security Rules |
| 229 | + |
| 230 | +Se recomienda definir **Firestore Security Rules** granulares en la consola de Firebase para garantizar que cada usuario solo pueda leer y escribir sus propios documentos de proyecto, evitando acceso cruzado entre cuentas. |
| 231 | + |
| 232 | +--- |
| 233 | + |
| 234 | +## 🚀 Roadmap |
| 235 | + |
| 236 | +Mejoras técnicas sugeridas a partir del análisis de la arquitectura actual del código: |
| 237 | + |
| 238 | +- **Reemplazar `mock-data.ts` por Firestore real en todas las vistas:** La presencia de `mock-data.ts` sugiere que algunas rutas podrían estar funcionando aún con datos estáticos; migrar completamente a Firestore para producción es una mejora prioritaria. |
| 239 | +- **Implementar Firestore Security Rules** con validación por UID de usuario para proteger el acceso a documentos de proyectos y datasets. |
| 240 | +- **Añadir carga real de archivos a Firebase Storage:** Incorporar el SDK de Storage para persistir los datasets subidos por los usuarios más allá de la sesión. |
| 241 | +- **Ampliar los flujos de Genkit** con soporte para múltiples modelos (Gemini Pro, Gemini Flash) y prompts configurables por tipo de dataset. |
| 242 | +- **Tests de integración con Playwright o Cypress:** Automatizar pruebas E2E para los flujos críticos (login, creación de análisis, visualización de resultados). |
| 243 | +- **Escalar `maxInstances` en `apphosting.yaml`** para soportar tráfico concurrente real en producción. |
| 244 | +- **Modo colaborativo en tiempo real** mediante Firestore `onSnapshot` para que múltiples usuarios vean actualizaciones en tiempo real dentro del mismo proyecto. |
| 245 | +- **Exportación de resultados** en formatos PDF, CSV o JSON desde el panel de visualización. |
| 246 | +- **Internacionalización (i18n)** con `next-intl` dado el origen multicultural del proyecto. |
| 247 | + |
| 248 | +--- |
| 249 | + |
| 250 | +## 📄 License |
| 251 | + |
| 252 | +Este proyecto está distribuido bajo la licencia **MIT**. |
| 253 | + |
| 254 | +Esto significa que puedes usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y/o vender copias del software de forma libre, siempre que se incluya el aviso de copyright original. |
| 255 | + |
| 256 | +Copyright © 2025 **Sebastián Zhunaula** (devsebastian44) |
| 257 | + |
| 258 | +--- |
| 259 | + |
| 260 | +## 👨💻 Author |
| 261 | + |
| 262 | +<table> |
| 263 | + <tr> |
| 264 | + <td align="center"> |
| 265 | + <b>Sebastián Zhunaula</b><br/> |
| 266 | + <sub>Full-Stack Developer · Frontend Specialist · Data & AI Enthusiast</sub><br/><br/> |
| 267 | + <a href="https://github.com/devsebastian44"> |
| 268 | + <img src="https://img.shields.io/badge/GitHub-devsebastian44-black?style=flat&logo=github" /> |
| 269 | + </a> |
| 270 | + <br/><br/> |
| 271 | + <a href="https://collabdata.vercel.app"> |
| 272 | + <img src="https://img.shields.io/badge/Live%20Demo-CollabData-blue?style=flat&logo=vercel" /> |
| 273 | + </a> |
| 274 | + </td> |
| 275 | + </tr> |
| 276 | +</table> |
| 277 | + |
| 278 | +> Este proyecto forma parte de un portafolio de desarrollo web full-stack, demostrando integración moderna de Next.js 15, Firebase, ShadCN UI y Google Genkit en una plataforma de análisis de datos colaborativa lista para producción. |
0 commit comments