Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


Project Logo

SoundCloud Clone CMS

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
  1. About The Project
  2. Lessons Learned
  3. Getting Started
  4. Usage
  5. Contact
  6. Acknowledgments

About The Project

previewSGCsystemCompressedmp4.mp4

If the embedded video above is not displaying correctly, click here to watch/download the video demo »


Application Screenshots

Registration View

Step 1: Registration Form


Captcha Integration

Step 2: Google reCAPTCHA v2 Verification


Email Activation

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.

(back to top)


Built With

  • PHP
  • MySQL
  • Docker
  • Bootstrap
  • Leaflet
  • Google reCAPTCHA
  • OpenStreetMap
  • Nominatim
  • PHPMailer

(back to top)


Features & Key Highlights

  • 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.

(back to top)


Lessons Learned

  • 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.

(back to top)


Getting Started

Follow these instructions to set up a local copy of the project on your machine.

Prerequisites

  • Docker Desktop (Recommended)
  • Alternatively, XAMPP or any local web server stack.

Installation & Running Locally

  1. Clone the repository:

    git clone https://github.com/GuilhermeGraca/php-content-management-system.git
  2. Navigate to the directory:

    cd php-content-management-system
  3. Configure the credentials: Inside the src/ folder, rename the credenciais.exemplo.php file to credenciais.php. Fill in your SMTP details and Google reCAPTCHA keys if you want to test email and registration features.

  4. 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 XAMPP htdocs directory.
    • Create a database named bd_soundcloud_pt and import database/base_dados.sql.
    • Access the application at http://localhost/your-folder-name.

(back to top)


Usage

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.

(back to top)


Contact

Guilherme Graça - LinkedIn - GitHub

(back to top)


Acknowledgments

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.

(back to top)

About

An open-source SoundCloud Clone CMS built from scratch with PHP and MySQL. Designed for independent artists to upload music, manage content, and promote regional live events via interactive maps. Features secure 2FA authentication, Google reCAPTCHA, and batch uploads.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages