Proyecto oficial para construir un portal educativo del IPVCE, enfocado en estudiantes y personal del centro. El sistema combina informacion institucional publica con acceso privado a datos academicos.
El portal debe:
- Centralizar noticias, calendario e informacion institucional.
- Proveer acceso seguro a notas, escalafon, asistencia y estadisticas.
- Facilitar el seguimiento academico por parte del profesorado.
- Visitantes (publico): acceso libre a landing, noticias, calendario institucional e informacion general.
- Usuarios autenticados: estudiantes, profesores y administradores con acceso a datos privados.
- Stack: Next.js + TailwindCSS v4 + HeroUI v3 (beta) + ECharts (frontend) y NestJS + Prisma + PostgreSQL + GraphQL (backend).
- UI: estilo moderno, limpio y coherente con HeroUI v3.
- Idioma: solo espanol.
- Infraestructura: sin decision de hosting/infra por ahora; se prioriza despliegue local/institucional.
- Integraciones externas: no previstas.
- ESTUDIANTE: consulta de notas, asistencia, escalafon, horario, calendario y estadisticas personales.
- PROFESOR: acceso a grupos/asignaturas, revision de rendimiento y estadisticas por grupo.
- ADMIN: gestion de usuarios, grupos, asignaturas, periodos, noticias y calendarios.
Notas importantes:
- Un mismo usuario puede tener mas de un perfil. Un administrador puede tener perfil docente cuando sea necesario.
- Dentro de ADMIN habra permisos internos para controlar quien publica noticias u opera modulos sensibles.
- Landing (
/) con noticias destacadas, breve descripcion y accesos rapidos. - Noticias institucionales y calendario institucional en modo lectura.
- Informacion general del centro.
- Noticias en landing consumidas via GraphQL para consultas flexibles.
- Perfil academico con datos basicos, notas, asistencia y escalafon.
- Horario por grupo.
- Calendario personal y de grupo.
- Estadisticas academicas personales (promedios, tendencias, distribuciones).
- Vista de grupos y asignaturas asignadas.
- Perfil academico del estudiante.
- Estadisticas por grupo/asignatura.
- Horario docente.
- Gestion de usuarios, grupos, asignaturas y periodos.
- Administracion de noticias y calendarios.
- Estadisticas globales.
- Sistema de permisos internos para tareas sensibles.
- Se contemplan calendarios multiples: institucional, por grupo y personal.
- Pueden existir eventos comunes para todos los grupos.
- El horario principal del estudiante se organiza por grupo.
- Se utilizara ECharts para graficos de rendimiento.
- Indicadores base: promedios por periodo, tendencias, distribucion de notas, comparativas por grupo.
- Inicio de sesion con usuario/contrasena.
- Sesiones via JWT almacenado en cookie HTTP-only.
- Contrasenas con hashing seguro (bcrypt o equivalente).
- Datos academicos solo visibles para usuarios autenticados y autorizados.
/Landing publica./newsNoticias institucionales (lectura publica)./calendarCalendario institucional (lectura publica)./infoInformacion general (dinamica)./loginAcceso a usuarios.
/graphqlAPI GraphQL para consultas flexibles (por ahora noticias en landing).
/dashboardResumen general con atajos./profilePerfil con nombre, grado, aula, numero, notas, asistencia y escalafon.
/student/overviewResumen academico./student/gradesNotas por asignatura + escalafon./student/scheduleHorario por grupo./student/calendarCalendario personal/grupo./student/statisticsEstadisticas academicas personales.
/teacher/overviewResumen docente./teacher/classesGrupos/asignaturas asignadas./teacher/students/[id]Perfil academico del estudiante./teacher/scheduleHorario docente./teacher/statisticsEstadisticas por grupo/asignatura.
/admin/users/admin/subjects/admin/groups/admin/periods/admin/news/admin/calendar/admin/statistics/admin/permissions
Entidades principales (sujeto a refinamiento):
- User
- RoleAssignment / Permission
- StudentProfile
- TeacherProfile
- Group
- Subject
- AcademicPeriod
- Enrollment
- Grade
- Attendance
- News
- Calendar
- CalendarEvent
- ScheduleEntry
/apps
/frontend
/app
/backend
/src
/docs
/db
Notas:
- El backend NestJS vive en
apps/backendy el frontend enapps/frontend. - La documentacion de base de datos vivira en
docs/db.
Documento vivo y oficial del proyecto. Se actualiza conforme se definan detalles y se avance en el desarrollo.
- Copiar los archivos de ejemplo:
apps/backend/.env.example->apps/backend/.envapps/frontend/.env.example->apps/frontend/.env
- Instalar dependencias y generar Prisma Client:
npm run setupEjecutar migraciones y seed en backend:
npm run prisma:migrate --prefix apps/backend
npm run prisma:seed --prefix apps/backendnpm run dev:allEste comando genera Prisma Client antes de iniciar backend/frontend en modo watch.
npm run checkcheck ejecuta validaciones encadenadas de backend y frontend para detectar roturas antes de continuar desarrollo.
- Backend (
apps/backend/.env):DATABASE_URL: cadena de conexion PostgreSQL.JWT_SECRET: secreto para firmar JWT.JWT_EXPIRES_IN_DAYS: duracion de sesion.BACKEND_PORT: puerto preferido del backend (fallback aPORT, luego3001).
- Frontend (
apps/frontend/.env):NEXT_PUBLIC_API_URL: URL base para peticiones al backend.
- Si Prisma Client queda incompleto o faltan modulos:
# PowerShell
Remove-Item -Recurse -Force apps/backend/node_modules/.prisma
# Linux/macOS
rm -rf apps/backend/node_modules/.prisma
npm run prisma:generate --prefix apps/backend- Si hay dudas de versiones instaladas:
npm ls @prisma/client @prisma/adapter-pg prisma --prefix apps/backend- Si persiste el problema, reinstalar dependencias de backend y regenerar:
npm install --prefix apps/backend
npm run prisma:generate --prefix apps/backend