Project Overview

This project began as an effort to model music beyond simple playlists or genre labels. Instead, it focuses on capturing relationships between sound, era, geography, and cultural context using a structured relational database.

The goal is to support flexible querying and exploration, such as browsing by artist, country, scene, genre, subgenre, or time period, rather than relying on rigid musical categories.

System & Technology

  • Python
  • Flask
  • PostgreSQL
  • SQL / Relational Database Design
  • JavaScript
  • HTML / CSS

Data Model & Design Decisions

The database is centered around albums as the main unit of discovery. Artists, genres, subgenres, countries, and scenes are connected through relational tables so that albums can be explored through multiple overlapping forms of context.

This design prioritizes clarity, extensibility, and meaningful relationships over rigid classification. Many albums can belong to multiple genres and subgenres, which better reflects how music actually moves across style, place, and time.

Music Database Explorer

A curated album discovery database

Explore albums through artists, countries, scenes, genres, subgenres, release years, and related musical connections. This project is built around the idea that music discovery should feel relational, not just searchable.

Interactive Layer

Interactive Database Interface

Search, filter, sort, paginate, and explore the database through albums, artists, genres, subgenres, countries, scenes, and related records.

Loading the music database...

Curated Discovery

Listening Paths

These paths use the database as a discovery tool rather than a static archive. Each one points visitors toward a different way of moving through the collection: by sound, region, scene, or musical lineage.

Project Architecture

How the Music Database Explorer Works

Music Database Explorer is built as a layered Flask and PostgreSQL application. The project separates the database model, backend API routes, frontend interface, and discovery logic so the site can grow without becoming tightly coupled or difficult to maintain.

01

Relational Data Model

The database is centered around albums as the primary unit of discovery. Artists, genres, subgenres, countries, and scenes connect to albums through structured relationships instead of being stored as flat text.

02

PostgreSQL Query Layer

SQL queries join albums, artists, genres, and subgenres so the frontend can receive complete album records with related metadata. Many-to-many junction tables allow albums to belong to multiple genres and subgenres.

03

Flask API Routes

Flask routes expose database-backed endpoints for albums, artists, genres, and statistics. Detail routes provide deeper archive pages for individual albums, artists, genres, and subgenres.

04

Frontend State Management

JavaScript manages the active tab, search query, sorting mode, filters, pagination, expanded modal state, and return position so the interface feels more like an application than a static project page.

05

Discovery & Recommendation Logic

Related albums are generated through shared metadata such as artist, country, genre, and subgenre overlap. This gives the project a recommendation-style discovery layer without needing machine learning or user accounts.

06

Portfolio-Focused Presentation

The interface is designed to show database design, backend development, SQL querying, frontend rendering, filtering, pagination, and dynamic detail pages in one cohesive project.