Sistema de gestión de proyectos, tareas, archivos y clientes. Construido con React 19, Nitro 3 y PostgreSQL 16.
Entipedia es un MVP funcional que permite:
- Gestionar proyectos con tableros Kanban
- Organizar tareas con filtros y vistas personalizadas
- Administrar clientes
- Subir y organizar archivos por proyecto
- Autenticación segura con sesiones
- Node.js 20+
- npm 9+
- PostgreSQL 14 o 16 (con extensiones
uuid-ossp/pgcryptodisponibles) - Cuenta de Cloudflare (R2) y un bucket configurado
git clone https://github.com/Georgeb779/entipedia.git
cd entipedia/entipedia
npm installbrew install postgresql@14
brew services start postgresql@14
# Crear usuario y base de datos esperados por el proyecto
/opt/homebrew/opt/postgresql@14/bin/createuser -s postgres
/opt/homebrew/opt/postgresql@14/bin/createdb entipedia-
Instala PostgreSQL 14 or 16 con
wingeto el instalador oficial:winget install PostgreSQL.PostgreSQL.14 or 16 # o choco install postgresql14 or 16 -y
-
Agrega el directorio
bina tuPATHsi el instalador no lo hizo (por defectoC:\Program Files\PostgreSQL\14 or 16 \bin). -
Inicia el servicio desde el panel de servicios o ejecuta:
net start postgresql-x64-14 or 16
-
Crea el usuario y la base de datos si no existen (ajustando la ruta si instalaste en otra carpeta):
"C:\Program Files\PostgreSQL\14 or 16 \bin\createuser.exe" -s postgres "C:\Program Files\PostgreSQL\14 or 16 \bin\createdb.exe" entipedia
docker run --name entipedia-postgres \
-e POSTGRES_PASSWORD=$(openssl rand -hex 16) \
-e POSTGRES_USER=postgres \
-e POSTGRES_DB=entipedia \
-p 5432:5432 \
-d postgres:16Crea un archivo .env en la raíz del proyecto y completa:
DATABASE_URL=postgresql://postgres:@localhost:5432/entipedia
SESSION_SECRET=tu-clave-secreta-de-al-menos-32-caracteres
# Cloudflare R2 (obligatorio para subida/descarga de archivos)
R2_ACCOUNT_ID=xxxxxxxxxxxxxxxxxxxx
R2_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx
R2_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
R2_BUCKET_NAME=entipedianpm run db:pushSi prefieres migraciones versionadas: npm run db:generate seguido de npm run db:migrate.
npm run devEl frontend queda en http://localhost:5000 y la API en http://localhost:5999/api/\*
Si no tienes PostgreSQL instalado:
docker run --name entipedia-postgres \
-e POSTGRES_PASSWORD=$(openssl rand -hex 16) \
-e POSTGRES_USER=postgres \
-e POSTGRES_DB=entipedia \
-p 5432:5432 \
-d postgres:16| Comando | Descripción |
|---|---|
npm run dev |
Inicia frontend y backend en paralelo |
npm run dev:client |
Solo frontend (Vite) |
npm run dev:server |
Solo backend (Nitro) |
npm run dev:integrated |
Modo integrado (un solo servidor) |
npm run build |
Build de producción |
npm run start |
Inicia servidor de producción |
npm run db:push |
Sincroniza esquema de BD (desarrollo) |
npm run db:migrate |
Aplica migraciones |
npm run db:studio |
Abre Drizzle Studio (explorador de BD) |
npm run lint |
Revisa el código con ESLint |
entipedia/
├── routes/api/ # Endpoints de la API (Nitro)
│ ├── auth/ # Autenticación
│ ├── projects/ # Proyectos
│ ├── tasks/ # Tareas
│ ├── clients/ # Clientes
│ └── files/ # Archivos
├── src/
│ ├── pages/ # Páginas de la aplicación
│ ├── components/ # Componentes React reutilizables
│ ├── hooks/ # Hooks personalizados (React Query)
│ └── utils/ # Utilidades y helpers
├── db/
│ └── schema.ts # Esquema de base de datos (Drizzle)
└── middleware/ # Middlewares de Nitro
- Frontend: React 19, Vite 7, Tailwind CSS 4, shadcn/ui
- Backend: Nitro 3 (H3), Drizzle ORM, Cloudflare R2 (AWS SDK v3)
- Base de datos: PostgreSQL 16
- Autenticación: Sesiones con cookies HTTP-only
No conecta a la base de datos:
- Verifica que PostgreSQL esté corriendo
- Revisa que
DATABASE_URLen.envsea correcta
Error de SESSION_SECRET:
- Asegúrate de tener
SESSION_SECRETen tu.env - Debe tener al menos 32 caracteres
Problemas con migraciones:
- En desarrollo, usa
npm run db:pushpara sincronizar - En producción, usa
npm run db:migrate
Errores al subir/descargar archivos (R2):
- Verifica que todas las variables
R2_*existan y sean correctas - Asegúrate de que el bucket existe y las credenciales tienen permisos de lectura/escritura
- El endpoint usado es
https://{R2_ACCOUNT_ID}.r2.cloudflarestorage.comconregion=auto
La gestión de archivos usa Cloudflare R2 a través del SDK de AWS (S3 compatible). El backend expone endpoints autenticados y valida permisos por usuario.
R2_ACCOUNT_ID: ID de cuenta de CloudflareR2_ACCESS_KEY_ID: Access Key de R2R2_SECRET_ACCESS_KEY: Secret Key de R2R2_BUCKET_NAME: Nombre del bucket en R2
Si falta cualquiera de estas variables, el servidor fallará al iniciar.
- Tamaño máximo por archivo: definido en
MAX_FILE_SIZE(versrc/constants) - Tipos permitidos: ver
ALLOWED_FILE_TYPES - Los archivos se asocian opcionalmente a un proyecto y pueden tener descripción
-
POST /api/files— Subir un archivo- FormData esperado:
file(obligatorio),projectId(opcional),description(opcional) - Respuesta: metadata del archivo almacenado
- FormData esperado:
-
GET /api/files/:id— Descargar un archivo- Responde como stream con headers
Content-Type,Content-DispositionyContent-Length
- Responde como stream con headers
-
PATCH /api/files/:id— Actualizar metadatos- Cuerpo JSON:
{ "projectId?": string | "all", "description?": string } - Permite cambiar proyecto y/o descripción después de la subida
- Cuerpo JSON:
-
DELETE /api/files/:id— Eliminar un archivo -
GET /api/storage/health— Salud de R2 (requiere sesión)
- En la página de Archivos puedes:
- Subir con arrastrar/soltar o selector
- Filtrar por proyecto o tipo
- Editar proyecto y descripción tras la subida (diálogo “Editar Archivo”)
- Descargar o eliminar
npm run build
npm run startPara más detalles de despliegue, consulta doc/DEPLOYMENT.md.