An audio content management system that allows users to upload, manage, and stream music tracks.
Explore the Documentation »
Report Bug
·
Request Feature
Table of Contents
previewSGCsystemCompressedmp4.mp4
If the embedded video above is not displaying correctly, click here to watch/download the video demo »
Step 1: Registration Form
Step 2: Google reCAPTCHA v2 Verification
Step 3: Account Activation via E-mail
This repository contains SoundCloud Clone CMS, an academic project developed from scratch for the Sistemas Multimédia para a Internet (SMI) course at ISEL (Instituto Superior de Engenharia de Lisboa). Developed in 2026, this project also marks my first hands-on experience building a backend system with PHP. The primary goal of this project is to build a web platform exclusively for independent Portuguese artists. It organizes music regionally by district and allows musicians to share their audio tracks directly with their local audience.
Note: You can find a detailed technical report written in Portuguese inside the academic-documentation/ folder.
- User Roles & Access Control: Distinct profiles from casual guests and fans to content-creating artists and platform administrators.
- Batch Audio Uploads: Artists can upload entire albums at once using a single ZIP file containing MP3/WAV files, cover images, and an XML metadata file.
- Interactive Concert Map: Artists can announce live events, and the system automatically geocodes the location using the Nominatim API to display it on a Leaflet.js interactive map.
- Subscriptions & In-App Notifications: Fans can subscribe to specific districts or music genres and receive automatic notifications when new tracks are published.
- Secure Authentication: Includes password hashing, two-factor authentication via email using PHPMailer, and Google reCAPTCHA v2 to prevent automated bots.
- Server-Side Architecture: Understanding the client-server model, where PHP executes logic and interacts with the database exclusively on the server before generating and returning the final HTML to the user's browser.
- Server-Side File Processing: Handling binary file uploads, extracting ZIP archives, and safely parsing XML metadata with PHP SimpleXML.
- Relational Database Integrity: Designing MySQL schemas with cascading foreign keys to securely link users, audio content, genres, and geographic regions.
- Web Security Principles: Applying the principle of least privilege, preventing SQL Injection with prepared statements, and securely validating user sessions.
- Third-Party Integrations: Interacting with external services like the OpenStreetMap Nominatim API for geocoding and Google APIs for spam protection.
Follow these instructions to set up a local copy of the project on your machine.
- Docker Desktop (Recommended)
- Alternatively, XAMPP or any local web server stack.
-
Clone the repository:
git clone https://github.com/GuilhermeGraca/php-content-management-system.git
-
Navigate to the directory:
cd php-content-management-system -
Configure the credentials: Inside the
src/folder, rename thecredenciais.exemplo.phpfile tocredenciais.php. Fill in your SMTP details and Google reCAPTCHA keys if you want to test email and registration features. -
Start the environment:
Using Docker (Recommended):
docker-compose up -d
Access the application at
http://localhost:8080.Using XAMPP:
- Copy the contents of the
src/folder into your XAMPPhtdocsdirectory. - Create a database named
bd_soundcloud_ptand importdatabase/base_dados.sql. - Access the application at
http://localhost/your-folder-name.
- Copy the contents of the
After starting the application, you can register a new account. Since email activation is required, ensure your credenciais.php has valid SMTP details, or manually set your account as active directly in the utilizadores table via PHPMyAdmin (http://localhost:8081). Once logged in as an artist, you can access the dashboard to upload music tracks using the provided XML/ZIP structure.
Guilherme Graça - LinkedIn - GitHub
This project was developed in collaboration with:
- Martim Ramos
- Joana Ramos
A special thanks to ISEL and the professors of the Sistemas Multimédia para a Internet (SMI) course for the academic guidance and support during the development of this project.