Un sistema web en PHP y MySQL para un instituto de educación superior tecnológica: asistencias con QR, horarios, unidades didácticas, justificaciones, pagos y reportes.
Lo desarrollé para el IESTP, un instituto de educación superior tecnológica que llevaba la gestión académica con registros manuales y dispersos. El sistema centraliza el día a día: los docentes pasan asistencia con un escáner de QR, se planifican horarios y unidades didácticas, se registran justificaciones y pagos, y la administración saca reportes sin depender de hojas sueltas.
Tiene acceso por roles (Administrador, Director, Profesor, Pagos y Notas), así que cada persona ve y hace lo que le corresponde. Además, comparte la base de datos con la app Android del instituto (aplicativo-java), que usa los mismos datos para el portal del estudiante.
Está hecho en PHP con MySQL/MariaDB y corre tanto en un servidor propio como en Railway o Vercel.
- Pasar asistencia escaneando el código QR de cada estudiante con la cámara; el sistema marca puntual, tardanza o falta y evita duplicados en el mismo día.
- Cargar y gestionar horarios por programa (desde PDF) y organizar unidades didácticas por programa, período y semestre.
- Registrar estudiantes con alta masiva desde Excel (generando su QR) y administrar usuarios y roles.
- Registrar justificaciones con imágenes adjuntas y revisarlas (aceptar o rechazar).
- Importar pagos desde Excel y administrarlos.
- Registrar y consultar notas por estudiante y unidad didáctica.
- Generar reportes institucionales en PDF y Excel.
- Entrar con roles distintos, con contraseñas con hash y bloqueo tras varios intentos fallidos.
Capturas reales del sistema:
Un ejemplo del reporte PDF institucional: reporte-general.pdf.
- Backend: PHP y MySQL/MariaDB (PDO), Composer.
- Frontend: Bootstrap, jQuery, DataTables y SweetAlert2, todo local.
- QR y documentos: endroid/qr-code y phpqrcode para los códigos, FPDF para los reportes PDF y PhpSpreadsheet para los Excel.
- Despliegue: Vercel, Railway y servidor local con el PHP built-in.
Necesitas PHP 8.1+, Composer y MySQL/MariaDB.
La forma más rápida (Windows / Git Bash):
git clone https://github.com/progamins/iestp.git cd iestp composer install # instala dependencias y copia .env.example → .env bash start-local.sh # levanta MariaDB local + crea la BD + servidor PHP
Abre http://localhost:8080. La primera vez, el script crea una cuenta demo: admin@iestp.local / Admin123!.
Si prefieres hacerlo a mano en cualquier sistema:
composer install mysql -u root -p < database/schema.sql # crea la BD y carga el esquema php -S 0.0.0.0:8080 -t . # docroot = raíz del proyecto
Ojo: el docroot debe ser la raíz del proyecto (no
public/), porque los controladores AJAX referencian../app/controllers/.... Elindex.phpde la raíz ya redirige al login.
Requisitos: PHP 8.1+, Composer y MySQL/MariaDB.
composer install composer lint # sintaxis PHP de app/ y public/ composer validate # valida composer.json composer audit # auditoría de seguridad del lock
El CI de GitHub Actions corre php -l, composer validate y composer audit en cada push o PR.
app/ # Configuración (conexión PDO, seguridad) y controladores
public/ # Páginas PHP: login, asistencias, justificaciones, notas, pagos...
database/ # Esquema SQL y migraciones
api/ # Entry point serverless para Vercel
screenshots/ # Capturas del proyecto
- Contexto del proyecto — CONTEXTO_PROYECTO.txt
- Arquitectura — docs/architecture.md
- Despliegue — docs/deployment.md
- Variables de entorno — .env.example
- Seguridad — SECURITY.md
- Contribuir — CONTRIBUTING.md
- Historial de cambios — CHANGELOG.md
El sistema está en uso y en desarrollo activo: hay funcionalidades nuevas casi todos los meses. El CI valida sintaxis, composer y dependencias, pero los flujos críticos (login, asistencia, justificaciones) todavía se prueban a mano, no con tests automatizados.
Si despliegas en Vercel, ten en cuenta que el modo serverless tiene filesystem efímero: las imágenes subidas no persisten entre requests. Para un uso continuo conviene Railway o un servidor propio.
- Añadir pruebas automatizadas de los flujos críticos.
- Revisar las consultas con contraseñas en texto plano que queden.
- Seguir mejorando los reportes y el panel administrativo.
Desarrollado por Progamins para el IESTP.