Museic es una aplicación web full-stack que simula una plataforma de streaming musical. Los usuarios pueden explorar un catálogo de canciones (integrado con la API de Jamendo), crear y gestionar sus propias playlists, guardar favoritos y consultar su historial de reproducción. Los administradores disponen de un panel de gestión independiente.
El proyecto cubre todo el ciclo de desarrollo: diseño de base de datos relacional, API REST con autenticación segura y frontend desacoplado en JavaScript puro — sin frameworks.
| Área | Características |
|---|---|
| Catálogo | Exploración y búsqueda de canciones vía Jamendo API · Filtros por género, estado de ánimo y propósito |
| Playlists | Crear, editar y eliminar playlists · Visibilidad pública/privada · Añadir y reordenar canciones |
| Favoritos | Marca y gestiona tus canciones favoritas |
| Historial | Registro automático de reproducciones por usuario |
| Autenticación | Registro e inicio de sesión con JWT · Contraseñas hasheadas con bcrypt |
| Roles | Sistema de roles USER / ADMIN · Rutas protegidas por middleware |
| Panel Admin | Gestión de usuarios, canciones y playlists desde una interfaz dedicada |
Museic/
├── frontend/ # SPA — HTML5 · CSS3 · JavaScript (ES Modules, vanilla)
│ ├── index.html
│ ├── css/styles.css
│ └── js/
│ ├── api.js # Capa de comunicación con la API REST
│ └── main.js # Lógica de vistas y routing en cliente
│
├── backend/ # API REST — Node.js + Express (patrón MVC)
│ ├── server.js
│ ├── config/db.js
│ ├── routes/ # Definición de endpoints
│ ├── controllers/ # Lógica de negocio
│ └── middleware/ # Auth JWT · Guard de admin
│
└── database/
└── museic_db.sql # Esquema MySQL completo con datos de prueba
| Método | Ruta | Descripción |
|---|---|---|
POST |
/api/v1/auth/register |
Registro de usuario |
POST |
/api/v1/auth/login |
Login → devuelve JWT |
GET |
/api/v1/songs |
Catálogo de canciones (con filtros) |
GET/POST/DELETE |
/api/v1/playlists |
CRUD de playlists |
GET/POST/DELETE |
/api/v1/favorites |
Gestión de favoritos |
GET/PUT/DELETE |
/api/v1/admin/... |
Rutas de administración (rol ADMIN) |
Backend
- Node.js + Express — servidor HTTP y enrutamiento
- mysql2 — driver MySQL con soporte de promesas
- jsonwebtoken — generación y verificación de tokens JWT
- bcrypt — hash seguro de contraseñas
- axios — consumo de la API externa de Jamendo
- dotenv — gestión de variables de entorno
Frontend
- HTML5 + CSS3 + JavaScript ES Modules (sin frameworks)
- Comunicación con la API mediante
fetch
Base de datos
- MySQL (XAMPP) con esquema relacional:
Usuarios,Canciones,Playlists,Favoritos,Historial
- Inicia MySQL desde el panel de XAMPP.
- Importa el esquema desde phpMyAdmin o por consola:
mysql -u root -p < database/museic_db.sqlEl script crea la base de datos
museic_dbsi no existe e incluye datos de prueba.
cd backend
npm installCrea el archivo backend/.env:
PORT=3002
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=
DB_NAME=museic_db
JWT_SECRET="ClaveSecretaDeMuseic"
JAMENDO_CLIENT_ID=1ebf1a56
# Código requerido para registrar cuentas ADMIN
ADMIN_REGISTRATION_CODE=websInicia el servidor:
npm run dev # Desarrollo (nodemon)
npm start # ProducciónServidor disponible en: http://localhost:3002
Sirve el frontend desde Apache (XAMPP con el proyecto en htdocs/Museic) y abre:
http://localhost/Museic/frontend/
- El sistema usa JWT (
Authorization: Bearer <token>) para proteger todas las rutas privadas. - Las contraseñas se almacenan como hash con bcrypt — nunca en texto plano.
- Roles disponibles:
USER(acceso estándar) yADMIN(acceso total al panel de gestión). - El registro como
ADMINrequiere el código definido enADMIN_REGISTRATION_CODE.
| Rol | Contraseña | |
|---|---|---|
ADMIN |
admin@museic.com |
admin123 |
USER |
user@museic.com |
user1234 |
Las canciones del catálogo provienen de Jamendo bajo licencias Creative Commons. Consulta MUSIC_LICENSES.md para los detalles completos.