BuscaRamos es una plataforma para explorar cursos y recursos universitarios, permitiendo a los estudiantes buscar, revisar y compartir opiniones sobre ramos académicos.
Construido con Next.js 15, Tailwind CSS v4, y desplegado en Cloudflare Pages con integración a Cloudflare D1 y R2 para la base de datos.
- ✨ Catálogo completo de cursos con información detallada
- 📝 Sistema de reseñas para compartir experiencias de estudiantes
- 🔍 Búsqueda avanzada con filtros y ordenamiento
- 📱 Diseño responsive optimizado mobile-first
- ⚡ Rendimiento optimizado con Next.js 15 y Turbopack
- 🌐 SEO optimizado con meta tags dinámicos y structured data
- 🔒 Autenticación integrada
- ♿ Accesibilidad siguiendo estándares web
- Framework: Next.js 15 con App Router
- Estilos: Tailwind CSS v4 con breakpoints personalizados (
tablet:
,desktop:
) - Base de datos: Cloudflare D1 (SQLite)
- Deployment: Cloudflare Pages
- TypeScript: Tipado estático completo
- UI Components: Radix UI + shadcn/ui
- Búsqueda: Fuse.js para búsqueda fuzzy
- Validación: Zod
- Node.js 22+
- npm, yarn, pnpm o bun
- Cuenta de Cloudflare (para deployment y base de datos)
- Wrangler CLI instalado globalmente:
npm install -g wrangler
git clone https://github.com/open-source-uc/BuscaRamos-v2.git
cd BuscaRamos-v2
npm install
npm run dev
# Los datos deben ser solicitados
bash ./migration/load-backup.sh
Crear archivo .env.local
:
# Configuración local para desarrollo
API_SECRET=ALGO_MUY_SECRETO
# Modo desarrollo con Turbopack
npm run dev
# Desarrollo con preview de Cloudflare Pages
npm run preview
Abrir http://localhost:3000 para ver la aplicación.
Script | Descripción |
---|---|
npm run dev |
Servidor de desarrollo con Turbopack |
npm run build |
Build de producción |
npm run start |
Servidor de producción local |
npm run lint |
Ejecutar ESLint |
npm run lint:fix |
Ejecutar ESLint con auto-fix |
npm run pages:build |
Build para Cloudflare Pages |
npm run preview |
Preview local con Wrangler |
npm run deploy |
Deploy a Cloudflare Pages |
npm run cf-typegen |
Generar tipos de Cloudflare |
src/
├── app/ # App Router de Next.js
│ ├── page.tsx # Página principal (catálogo)
│ ├── [sigle]/ # Páginas de cursos individuales
│ └── review/ # Páginas de reseñas
├── components/ # Componentes reutilizables
│ ├── ui/ # Componentes base (shadcn/ui)
│ ├── courses/ # Componentes específicos de cursos
│ └── reviews/ # Componentes de reseñas
├── lib/ # Utilidades y funciones helper
├── hooks/ # Custom React hooks
├── styles/ # Estilos globales de Tailwind
└── types/ # Definiciones de TypeScript
El proyecto usa Tailwind CSS v4 con breakpoints personalizados:
tablet:
- Para tablets y arribadesktop:
- Para desktop y arriba
Ejemplo:
<div className="text-sm tablet:text-base desktop:text-lg">Texto responsive</div>
Basados en Radix UI y shadcn/ui para máxima accesibilidad:
import { Button } from "@/components/ui/button";
import { Card } from "@/components/ui/card";
- Turbopack para desarrollo rápido
- Edge Runtime para respuestas instantáneas
- Lazy loading de componentes
- Optimización de imágenes automática de Next.js
- Build y deploy:
npm run deploy
- Configurar variables de entorno en Cloudflare Dashboard
- Configurar base de datos D1 en production
- Configurar dominios personalizados (opcional)
En Cloudflare Pages > Settings > Environment variables:
NEXT_PUBLIC_ENVIRONMENT=production
# Verificar código
npm run lint
# Auto-fix problemas
npm run lint:fix
- Next.js recommended
- Prettier integration
- TypeScript support
- Accessibility rules
Archivo | Propósito |
---|---|
next.config.ts |
Configuración de Next.js |
tailwind.config.js |
Configuración de Tailwind CSS |
wrangler.jsonc |
Configuración de Cloudflare |
tsconfig.json |
Configuración de TypeScript |
eslint.config.mjs |
Configuración de ESLint |
- Fork el proyecto
- Crear rama para feature (
git checkout -b feature/nueva-funcionalidad
) - Commit cambios (
git commit -m 'Agregar nueva funcionalidad'
) - Push a la rama (
git push origin feature/nueva-funcionalidad
) - Abrir Pull Request
- Usar TypeScript para todo el código
- Seguir convenciones de ESLint/Prettier
- Componentes funcionales con hooks
- Mobile-first para diseño responsive
- Accesibilidad como prioridad
Este proyecto está bajo la licencia AGPL-V3. Ver LICENSE.md
para más detalles.
Habla a @osuc.dev en instagram.
Desarrollado con ❤️ para la comunidad estudiantil