# 🎓 Tapir - Sistema de Gestión de Asistencia Académica Sistema web moderno para la gestión de asistencia estudiantil en instituciones educativas, desarrollado con Next.js 15, TypeScript, Prisma y PostgreSQL. ## ✨ Características Principales - **Gestión de Usuarios**: Administradores, profesores y estudiantes con roles diferenciados - **Control de Asistencia**: Registro y seguimiento detallado de asistencia por clase - **Gestión Académica**: Manejo de periodos, materias, secciones y horarios - **Dashboard Interactivo**: Visualización de estadísticas y reportes en tiempo real - **Autenticación Segura**: Sistema de login con NextAuth.js y encriptación bcrypt - **Interfaz Moderna**: UI responsiva con shadcn/ui y TailwindCSS ## 🛠️ Stack Tecnológico - **Frontend**: Next.js 15, React 19, TypeScript - **Backend**: Next.js API Routes, Prisma ORM - **Base de Datos**: PostgreSQL - **Autenticación**: NextAuth.js - **UI/UX**: shadcn/ui, TailwindCSS 3, Radix UI - **Validación**: Zod, React Hook Form - **Notificaciones**: Sonner ## 📋 Requisitos Previos - Node.js 18+ - PostgreSQL 12+ - npm, yarn, pnpm o bun ## 🚀 Instalación ### 1. Clonar el repositorio ```bash git clone https://git.checkthis.space/nekomataokayu/tapir.git cd tapir ``` ### 2. Instalar dependencias ```bash npm install ``` ### 3. Configurar variables de entorno Crea un archivo `.env` en la raíz del proyecto: ```env # Base de datos PostgreSQL DATABASE_URL="postgresql://usuario:contraseña@localhost:5432/tapir_db" # NextAuth.js NEXTAUTH_SECRET="tu-clave-secreta-muy-segura-aqui" NEXTAUTH_URL="http://localhost:3000" ``` ### 4. Configurar la base de datos #### Crear la base de datos ```sql -- Conectarse a PostgreSQL y crear la base de datos CREATE DATABASE tapir_db; ``` #### Ejecutar migraciones ```bash npx prisma migrate dev ``` #### Poblar con datos iniciales ```bash npm run db:seed ``` Esto creará: - Usuario administrador: `admin@universidad.edu` / `admin123` - Periodo académico de ejemplo - Datos de prueba para desarrollo ## 🏃‍♂️ Ejecutar el Proyecto ### Modo Desarrollo ```bash npm run dev ``` Abre [http://localhost:3000](http://localhost:3000) en tu navegador. ### Modo Producción ```bash npm run build npm run start ``` ## 📊 Comandos Útiles ```bash # Desarrollo npm run dev # Servidor de desarrollo con Turbopack npm run build # Build de producción npm run start # Servidor de producción npm run lint # Linting del código # Base de datos npm run db:seed # Poblar base de datos con datos iniciales npx prisma studio # Interfaz gráfica para explorar la BD npx prisma migrate dev # Crear y aplicar migraciones npx prisma generate # Regenerar cliente de Prisma npx prisma db push # Sincronizar esquema sin migraciones ``` ## 🗄️ Estructura de la Base de Datos ### Entidades Principales - **Users**: Usuarios del sistema (Admin, Profesores, Estudiantes) - **Teachers**: Información específica de profesores - **Students**: Información específica de estudiantes - **Periods**: Periodos académicos - **Subjects**: Materias/Asignaturas - **Classes**: Clases específicas (Materia + Profesor + Periodo) - **Sections**: Secciones de clases - **Attendances**: Registros de asistencia - **TeacherAssignments**: Asignaciones de profesores a materias - **StudentEnrollments**: Inscripciones de estudiantes ### Roles de Usuario - **ADMIN**: Acceso completo al sistema - **TEACHER**: Gestión de sus clases y asistencia - **STUDENT**: Visualización de su asistencia ## 🔐 Credenciales por Defecto Después de ejecutar el seed: - **Email**: `admin@universidad.edu` - **Contraseña**: `admin123` - **Rol**: Administrador > ⚠️ **Importante**: Cambia estas credenciales en producción. ## 📁 Estructura del Proyecto ``` tapir/ ├── src/ │ ├── app/ # App Router de Next.js │ │ ├── api/ # API Routes │ │ ├── admin/ # Panel de administración │ │ ├── teacher/ # Panel de profesores │ │ └── student/ # Panel de estudiantes │ ├── components/ # Componentes reutilizables │ ├── lib/ # Utilidades y configuraciones │ └── types/ # Definiciones de tipos TypeScript ├── prisma/ │ ├── schema.prisma # Esquema de base de datos │ ├── migrations/ # Migraciones de BD │ └── seed.ts # Datos iniciales └── public/ # Archivos estáticos ``` ## 🔧 Configuración Adicional ### Variables de Entorno Opcionales ```env # Configuración de desarrollo NODE_ENV="development" # Configuración de base de datos (opcional) DATABASE_POOL_SIZE=10 DATABASE_TIMEOUT=30000 ``` ### Variables de Entorno para Producción ```env DATABASE_URL="postgresql://..." NEXTAUTH_SECRET="clave-super-segura-para-produccion" NEXTAUTH_URL="https://tu-dominio.com" ```