Teaching Explorer es una página web creada con el objetivo de facilitar la compra y venta de cursos y contenidos educativos de manera sencilla y segura. Su funcionamiento está inspirado en plataformas de compraventa entre particulares como Wallapop, pero adaptado específicamente al ámbito formativo y ofreciendo un espacio dedicado al intercambio de conocimiento.
Ver demo en producción »
Ver repositorio
·
Reportar error
·
Solicitar mejora
Tabla de contenidos
Teaching Explorer es una aplicación web educativa desarrollada principalmente con Symfony. Su objetivo es facilitar la relación entre estudiantes y profesores mediante una plataforma donde se pueden publicar cursos, gestionar inscripciones, subir recursos, crear tareas, corregir entregas y controlar el progreso del alumnado.
El proyecto incluye autenticación tradicional, inicio de sesión con Google, sistema de roles, panel de administración, panel docente, recuperación de contraseña, traducción dinámica, modo claro/oscuro y un sistema de recomendación de cursos apoyado por Python.
- Registro e inicio de sesión de los usuarios.
- Inicio de sesión mediante Google OAuth.
- Recuperación y restablecimiento de contraseña por correo.
- Gestión de roles: estudiante, profesor y administrador.
- Panel de administración para gestionar usuarios y solicitudes de profesor.
- Solicitud de cuenta de profesor desde ajustes (vista de estudiantes).
- Gestión de suscripciones docentes con planes y límites de cursos (vista de profesores).
- Creación, edición y eliminación de cursos por parte del profesor.
- Inscripción de estudiantes en cursos.
- Validación manual de pagos e inscripciones.
- Subida de recursos asociados a cursos.
- Creación y gestión de tareas con fecha límite.
- Entrega de tareas por parte del estudiante.
- Corrección de entregas y asignación de nota por parte del profesor.
- Comentarios en cursos y entregas.
- Control de progreso del estudiante dentro de cada curso.
- Buscador de cursos y opiniones de usuarios con Vue.
- Recomendador de cursos mediante script Python.
- Traducción manual y dinámica en español e inglés mediante la API LibreTranslate.
- Selector de idioma.
- Modo claro y modo oscuro.
- Página de contacto con envío directo a nuestro correo empresarial.
- Página personalizada de error 404.
Estas instrucciones permiten levantar el proyecto en local para desarrollo o pruebas.
Necesitas tener instalado:
- XAMPP 8.2.12
- Composer 2.9.5
- Symfony CLI 5.16.1
- Node.js 24.14
- Npm 11.9.0
- Python 3.14.4
- Git
- MySQL o MariaDB
- (recomendación) Visual Studio Code
Comprobar versiones:
php -v
composer -V
symfony -v
node -v
npm -v
python --version- Clonar el repositorio:
git clone https://github.com/daaniii13/proyectoDAW.git
cd proyectoDAW- Instalar dependencias de PHP:
composer install- Instalar dependencias de JavaScript:
npm installEdita .env.local con tus datos locales:
APP_ENV=dev
APP_DEBUG=1
APP_SECRET=CAMBIA_ESTE_VALOR
DATABASE_URL="mysql://root:@127.0.0.1:3306/hazlosen_teachingexplorer?serverVersion=8.0&charset=utf8mb4"
MAILER_DSN=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
APP_URL=http://127.0.0.1:8000
DEFAULT_URI=http://127.0.0.1:8000Variables importantes:
| Variable | Uso |
|---|---|
APP_ENV |
Entorno de Symfony. En local debe estar en dev. |
APP_SECRET |
Clave interna de la aplicación. Debe cambiarse. |
APP_URL |
URL base del proyecto. |
DEFAULT_URI |
URL usada por Symfony para generar enlaces absolutos. |
DATABASE_URL |
Conexión a MySQL/MariaDB. |
MAILER_DSN |
Configuración del envío de correos. |
GOOGLE_CLIENT_ID |
ID del cliente OAuth de Google. |
GOOGLE_CLIENT_SECRET |
Secreto del cliente OAuth de Google. |
- Crear la base de datos:
CREATE DATABASE hazlosen_teachingexplorer CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;- Importar el archivo SQL incluido en el proyecto:
mysql -u root -p hazlosen_teachingexplorer < "hazlosen_teachingexplorer.sql"También se puede importar desde phpMyAdmin.
- Otra opción es generar la estructura con Doctrine:
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate- Para crear un usuario administrador manualmente, la contraseña debe estar hasheada, para ello ejecuta el siguiente comando e introduce tu contraseña:
php bin/console security:hash-passwordEjemplo de inserción SQL:
INSERT INTO `user` (`email`, `roles`, `password`, `nombre`, `fecha_registro`, `activo`)
VALUES ('admin@gmail.com', '["ROLE_ADMIN"]', 'HASH_GENERADO_POR_SYMFONY', 'Administrador', NOW(), 1);En una terminal, iniciar Symfony:
symfony server:startAbrir en el navegador:
http://127.0.0.1:8000
Para generar los assets de producción:
npm run buildEl estudiante puede registrarse, iniciar sesión, consultar los cursos disponibles, inscribirse en cursos, cambiar sus ajustes y preferencias, acceder a los recursos, entregar tareas, revisar su progreso, solicitar el cambio a una cuenta docente y escribir comentarios en cursos y tareas.
El profesor puede solicitar una cuenta docente, crear y gestionar cursos, añadir recursos, crear tareas, revisar entregas, corregir actividades, validar inscripciones y consultar los cursos disponibles. Además, también puede inscribirse en cursos como estudiante, acceder a recursos, entregar tareas, revisar su progreso y escribir comentarios en cursos y tareas.
El administrador puede gestionar usuarios, revisar solicitudes de profesor, aprobar o rechazar cambios de plan y controlar el acceso a funciones avanzadas.
proyectoDAW-main-dev/
├── assets/ # Archivos fuente del frontend: JavaScript, Vue y estilos
│ ├── js/ # Código JavaScript y componentes Vue
│ ├── styles/ # Hojas de estilo fuente
│ └── app.js # Entrada principal del frontend para Vite
│
├── bin/ # Ejecutables de Symfony
│ └── console # Consola de comandos de Symfony
│
├── config/ # Configuración general de Symfony
│
├── images/ # Imágenes usadas en el READNE
│
├── public/ # Carpeta pública accesible desde el navegador
│ ├── build/ # Archivos generados por Vite tras ejecutar npm run build
│ ├── uploads/ # Archivos subidos por usuarios o gestionados por la aplicación
│ ├── favicon.ico # Icono del sitio web
│ └── index.php # Punto de entrada principal de Symfony
│
├── python/ # Scripts auxiliares en Python
│ └── recomendador.py # Sistema de recomendación de cursos
│
├── src/ # Código principal PHP de la aplicación
│ ├── Controller/ # Controladores y rutas
│ ├── Entity/ # Entidades de Doctrine
│ ├── EventSubscriber/ # Suscriptores de eventos
│ ├── Repository/ # Consultas personalizadas a la base de datos
│ ├── Security/ # Seguridad, login y autenticación
│ ├── Service/ # Servicios reutilizables de la aplicación
│ └── Kernel.php # Núcleo de Symfony
│
├── templates/ # Plantillas Twig de la interfaz
│ ├── componentes/ # Componentes visuales reutilizables
│ ├── paginas/ # Vistas principales de cada página
│ └── base.html.twig # Plantilla base común del sitio
│
├── tests/ # Pruebas del proyecto
│
├── translations/ # Archivos de traducción en español e inglés
│
├── composer.json # Dependencias PHP del proyecto
├── composer.lock # Versiones bloqueadas de dependencias PHP
├── package.json # Dependencias y scripts JavaScript
├── package-lock.json # Versiones bloqueadas de dependencias JavaScript
├── symfony.lock # Registro de recetas instaladas por Symfony Flex
├── vite.config.js # Configuración de Vite
├── .env # Variables de entorno generales
├── .env.local # Variables de entorno locales no compartidas
└── hazlosen_teachingexplorer.sql # Archivo SQL con la base de datos del proyecto
| Rol | Descripción |
|---|---|
ROLE_ESTUDIANTE |
Usuario base de la plataforma. Puede consultar cursos, inscribirse, acceder a recursos, entregar tareas, revisar su progreso y escribir comentarios en cursos y tareas. |
ROLE_PROFESOR |
Usuario docente. Puede crear y gestionar cursos, añadir recursos, crear tareas, revisar entregas, corregir actividades, validar inscripciones y escribir comentarios. Además, también puede realizar las mismas acciones que un estudiante. |
ROLE_ADMIN |
Usuario administrador. Puede acceder al panel de administración, gestionar usuarios, activar o desactivar cuentas, modificar roles y validar solicitudes de profesores. |
Hay una carpeta llamada images en la raíz del repositorio donde se encuentran las siguientes capturas mostradas.
Para producción:
- Configurar
.env.localo variables reales del servidor:
APP_ENV=prod
APP_DEBUG=0
APP_SECRET=CAMBIA_ESTE_VALOR
DATABASE_URL="mysql://USUARIO:CONTRASEÑA@HOST:3306/BASE_DE_DATOS?serverVersion=8.0&charset=utf8mb4"
MAILER_DSN=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
APP_URL=https://dominio.com
DEFAULT_URI=https://dominio.com- Instalar dependencias sin paquetes de desarrollo:
composer install --no-dev --optimize-autoloader- Compilar assets:
npm install
npm run build- Limpiar caché:
php bin/console cache:clear --env=prod
php bin/console cache:warmup --env=prod- Configurar el document root del hosting para que apunte a:
public/
Actualmente, el proyecto está desplegado en producción y disponible en:
- Registro e inicio de sesión.
- Roles de estudiante, profesor y administrador.
- Panel de administración.
- Gestión de usuarios desde administración.
- Activación y desactivación de cuentas.
- Gestión de cursos.
- Creación y edición de cursos por parte del profesor.
- Inscripciones y validación manual.
- Estados de inscripción: pendiente de pago, pendiente de validación, activa, rechazada y completada.
- Recursos y tareas.
- Entregas de tareas por parte del estudiante.
- Corrección de actividades por parte del profesor.
- Control de progreso del curso.
- Acceso ordenado a recursos y tareas.
- Sistema de comentarios en cursos y tareas.
- Recuperación de contraseña.
- Login con Google.
- Traducción ES/EN.
- Traducción dinámica de contenido.
- Recomendador de cursos.
- Preferencias de usuario y cambio de tema.
- Subida de archivos.
- Despliegue en producción.
- Configuración básica del dominio y acceso público.
- Sistema de notificaciones.
- Foro de dudas por curso.
- Chat privado entre estudiante y profesor.
- Añadir pruebas automatizadas completas.
- Mejorar la monitorización de errores en producción.
- Carlos Castellano Gómez
- Juan Daniel Colque Calcina
- Fernando Martínez Moreno
- Daniel Muñoz Martínez
- Juan Luis Sánchez Galindo
Correo de contacto: teachingexplorerdaw@gmail.com










