BUMI-UNEFA (Buscador de Material de Investigación de la UNEFA) es un repositorio institucional open-source diseñado para centralizar y optimizar la gestión de materiales e informes de investigación generados en instituciones académicas. Este sistema permite registrar, organizar, consultar y descargar documentos académicos como:
- 📄 Tesis y proyectos de grado
- 📰 Artículos científicos
- 📑 Informes técnicos
- 🎤 Presentaciones académicas
BUMI supera las limitaciones de los sistemas de archivo tradicionales ofreciendo una plataforma colaborativa moderna con arquitectura serverless, fomentando el descubrimiento de investigaciones, la replicación de estudios y la colaboración académica.
| Característica | Descripción |
|---|---|
| 🗄️ Centralización | Almacena y organiza materiales académicos en un solo lugar |
| 🎨 UI/UX Moderna | Interfaz intuitiva diseñada para usuarios de todos los niveles |
| 🔍 Búsqueda avanzada | Función de búsqueda insensible a acentos (search_projects_unaccent) |
| 🔐 Autenticación | Gestión de sesiones con Supabase Auth |
| 📊 RLS Policies | Control de acceso por roles y áreas de investigación |
| 📁 PDF Storage | Almacenamiento en Cloudflare R2 con URLs pre-firmadas |
| 🚀 Serverless | Despliegue escalable en Vercel |
┌─────────────────────────────────────────────────────────┐
│ BUMI - Producción │
├─────────────────────────────────────────────────────────┤
│ Frontend: Next.js 14 (App Router) │
│ Backend: Supabase (PostgreSQL + Auth) │
│ Storage: Cloudflare R2 (PDFs) │
│ Deploy: Vercel │
│ Auth: Supabase Authentication │
│ DB: PostgreSQL (via Supabase) │
└─────────────────────────────────────────────────────────┘
| Tecnología | Propósito |
|---|---|
| Next.js 14 | Frontend (migrado desde React.js/Create React App) |
| Supabase | Backend BaaS (migrado desde Laravel/PHP) |
| PostgreSQL | Base de datos |
| Cloudflare R2 | Almacenamiento de PDFs (S3-compatible) |
| Vercel | Plataforma de despliegue |
| Supabase Auth | Autenticación de usuarios |
- Node.js y npm instalados (para el frontend en Next.js).
- Una cuenta y proyecto en Supabase (Base de datos PostgreSQL + autenticación).
- Una cuenta en Cloudflare con un bucket R2 configurado.
- (Opcional) Cuenta en Vercel si deseas replicar el despliegue en producción.
Nota importante:
- Este proyecto ha sido migrado de React.js (Create React App) a Next.js. El frontend ahora está en la raíz del proyecto, no en la carpeta
client/.- El backend original en Laravel/PHP fue reemplazado por Supabase como backend as a service. Ya no es necesario levantar un servidor Laravel ni clonar el repositorio antiguo del backend.
-
Clona el repositorio:
git clone https://github.com/0vethor0/BUMI.git
-
Navega al directorio del proyecto (raíz del repositorio):
cd BUMI -
Instala las dependencias del frontend (Next.js):
npm install
-
Configura las variables de entorno para Supabase y Cloudflare R2:
Crea un archivo
.env.localen la raíz del proyecto con la siguiente configuración mínima:# Supabase (backend BaaS) NEXT_PUBLIC_SUPABASE_URL=https://TU_PROYECTO.supabase.co NEXT_PUBLIC_SUPABASE_PUBLISHABLE_OR_ANON_KEY=TU_SUPABASE_ANON_KEY # Cloudflare R2 (almacenamiento de PDFs) CLOUDFLARE_R2_ACCOUNT_ID=TU_ACCOUNT_ID CLOUDFLARE_R2_ACCESS_KEY_ID=TU_ACCESS_KEY_ID CLOUDFLARE_R2_SECRET_ACCESS_KEY=TU_SECRET_ACCESS_KEY CLOUDFLARE_R2_BUCKET=nombre-de-tu-bucket CLOUDFLARE_R2_PUBLIC_URL=https://tu-subdominio.r2.dev
- Las variables
NEXT_PUBLIC_SUPABASE_URLyNEXT_PUBLIC_SUPABASE_PUBLISHABLE_OR_ANON_KEYson utilizadas por el SDK de Supabase tanto en el navegador como en el servidor (verlib/supabase/client.jsylib/supabase/server.js). - Las variables que comienzan con
CLOUDFLARE_R2_son usadas en la ruta de APIapp/api/r2-presign/route.jsxpara generar URLs pre-firmadas de subida y construir los enlaces públicos de los PDFs. - En producción (Vercel), estas mismas variables deben configurarse en el panel de Environment Variables del proyecto para que el frontend y las API routes funcionen correctamente.
- Las variables
-
Configura tu proyecto en Supabase:
- Crea las tablas y relaciones necesarias siguiendo el diagrama de base de datos incluido en los anexos de este README.
- Habilita la autenticación de usuarios (correo/contraseña u otros proveedores según tus necesidades).
- Opcionalmente ajusta las RLS policies para controlar qué usuarios pueden leer/escribir los registros asociados a los proyectos y documentos.
-
Asegúrate de tener creado y configurado tu bucket en Cloudflare R2:
- Crea un bucket (por ejemplo,
bumi-pdfs) y obtén las credenciales de acceso (Access Key / Secret Key). - Configura un dominio público o endpoint (
.r2.devu otro) que se usará enCLOUDFLARE_R2_PUBLIC_URLpara servir los PDFs. - Verifica que las credenciales configuradas en
.env.localtengan permisos de escritura en el bucket.
- Crea un bucket (por ejemplo,
-
Inicia el servidor frontend Next.js (asegúrate de estar en la raíz del proyecto BUMI):
npm run dev
Nota sobre comandos:
npm run dev- Inicia el servidor de desarrollo (con hot-reload).npm start- Inicia el servidor de producción (requierenpm run buildprimero).
Si vienes de React.js, el equivalente a
npm startde Create React App ahora esnpm run deven Next.js.El frontend estará disponible en
http://localhost:3000y se comunicará con:- Tu proyecto de Supabase (autenticación y base de datos).
- Tu bucket de Cloudflare R2 a través del endpoint
/api/r2-presignpara la subida y gestión de archivos PDF.
- ✅ CRUD completo de proyectos de investigación
- ✅ Búsqueda con función
search_projects_unaccent - ✅ Filtrado por área, periodo, carrera, tutor y estudiante
- ✅ Control de visibilidad por área de investigación
- ✅ Autenticación con Supabase Auth
- ✅ Roles: administrador, tutor, estudiante
- ✅ Asignación de áreas de investigación
- ✅ Entity visibility policies
- ✅ Subida de PDFs a Cloudflare R2
- ✅ URLs pre-firmadas para seguridad
- ✅ Enlaces públicos de descarga
- ✅ Metadatos asociados a cada documento
- ✅ Tutores (crear, editar, eliminar, buscar)
- ✅ Estudiantes (crear, editar, eliminar, buscar)
- ✅ Carreras académicas
- ✅ Áreas de investigación
- ✅ Grupos de trabajo
¡Las contribuciones son bienvenidas! Si deseas contribuir al proyecto, por favor sigue estos pasos:
- Haz un fork del repositorio.
- Crea una nueva rama (
git checkout -b feature/nueva-funcionalidad). - Realiza tus cambios y haz commit (
git commit -m 'Añade nueva funcionalidad'). - Sube tus cambios (
git push origin feature/nueva-funcionalidad).
Consulta las instrucciones de contribución para más detalles.
Si necesitas ayuda con el proyecto, puedes contactar al mantenedor principal a través de:
- GitHub: 0vethor0
- Redes sociales: @vincent_fernandez
- Issues: Abre un issue en el repositorio para reportar errores o sugerir mejoras.
Pagina del Buscador Principal (Diseño en Figma):

Diagrama de la base de datos:

