Update track IDs and add FontAwesome dependencies

- Changed track IDs in fetched-songs.json and song-links.json from hyphenated to underscore format for consistency.
- Added FontAwesome dependencies to package.json for icon support.
- Introduced a new function in fetch-song-links.ts to retrieve song links by ID.
- Refactored TrackCard component to utilize the new hash functionality for track modals.
- Updated layout.tsx to include FontAwesome styles and configuration.
This commit is contained in:
m4x809 2025-10-25 03:03:11 +02:00
parent 7df7c86ce3
commit b93b0c2160
Signed by: m4x809
SSH key fingerprint: SHA256:YCoFF78p2DUP94EnCScqLwldjkKDwdKSZq3r8p/6EiU
12 changed files with 411 additions and 169 deletions

3
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,3 @@
{
"cSpell.words": ["emily"]
}

View file

@ -1,39 +1,39 @@
{
"hybrid-theory-1": true,
"hybrid-theory-2": true,
"hybrid-theory-3": true,
"hybrid-theory-4": true,
"hybrid-theory-5": true,
"hybrid-theory-6": true,
"hybrid-theory-7": true,
"hybrid-theory-8": true,
"hybrid-theory-9": true,
"hybrid-theory-10": true,
"hybrid-theory-11": true,
"hybrid-theory-12": true,
"meteora-1": true,
"meteora-2": true,
"meteora-3": true,
"meteora-4": true,
"meteora-5": true,
"meteora-6": true,
"meteora-7": true,
"meteora-8": true,
"meteora-9": true,
"meteora-10": true,
"meteora-11": true,
"meteora-12": true,
"meteora-13": true,
"minutes-to-midnight-1": true,
"minutes-to-midnight-2": true,
"minutes-to-midnight-3": true,
"minutes-to-midnight-4": true,
"minutes-to-midnight-5": true,
"minutes-to-midnight-6": true,
"minutes-to-midnight-7": true,
"minutes-to-midnight-8": true,
"minutes-to-midnight-9": true,
"minutes-to-midnight-10": true,
"minutes-to-midnight-11": true,
"minutes-to-midnight-12": true
"hybrid-theory_1": true,
"hybrid-theory_2": true,
"hybrid-theory_3": true,
"hybrid-theory_4": true,
"hybrid-theory_5": true,
"hybrid-theory_6": true,
"hybrid-theory_7": true,
"hybrid-theory_8": true,
"hybrid-theory_9": true,
"hybrid-theory_10": true,
"hybrid-theory_11": true,
"hybrid-theory_12": true,
"meteora_1": true,
"meteora_2": true,
"meteora_3": true,
"meteora_4": true,
"meteora_5": true,
"meteora_6": true,
"meteora_7": true,
"meteora_8": true,
"meteora_9": true,
"meteora_10": true,
"meteora_11": true,
"meteora_12": true,
"meteora_13": true,
"minutes-to-midnight_1": true,
"minutes-to-midnight_2": true,
"minutes-to-midnight_3": true,
"minutes-to-midnight_4": true,
"minutes-to-midnight_5": true,
"minutes-to-midnight_6": true,
"minutes-to-midnight_7": true,
"minutes-to-midnight_8": true,
"minutes-to-midnight_9": true,
"minutes-to-midnight_10": true,
"minutes-to-midnight_11": true,
"minutes-to-midnight_12": true
}

View file

@ -1,221 +1,221 @@
{
"hybrid-theory-1": {
"hybrid-theory_1": {
"spotify": "https://open.spotify.com/track/4HvcbAR8LisalXKt7cpqE1",
"youtube": "https://www.youtube.com/watch?v=vjVkXlxsO8Q",
"youtubeMusic": "https://music.youtube.com/watch?v=vjVkXlxsO8Q",
"appleMusic": "https://geo.music.apple.com/de/album/_/528436018?i=528436568&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"hybrid-theory-2": {
"hybrid-theory_2": {
"spotify": "https://open.spotify.com/track/4bYLTrlcqctyHck3fjhMgW",
"youtube": "https://www.youtube.com/watch?v=4qlCC1GOwFw",
"youtubeMusic": "https://music.youtube.com/watch?v=4qlCC1GOwFw",
"appleMusic": "https://geo.music.apple.com/de/album/_/590431776?i=590431778&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"hybrid-theory-3": {
"hybrid-theory_3": {
"spotify": "https://open.spotify.com/track/1Q9QN6dHEDeUegsySY012f",
"youtube": "https://www.youtube.com/watch?v=M8UTS2iFXOo",
"youtubeMusic": "https://music.youtube.com/watch?v=M8UTS2iFXOo",
"appleMusic": "https://geo.music.apple.com/de/album/_/528436018?i=528437421&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"hybrid-theory-4": {
"hybrid-theory_4": {
"spotify": "https://open.spotify.com/track/214LJVTqrkUOGemWDGHJpr",
"youtube": "https://www.youtube.com/watch?v=jZSPAp8kCl4",
"youtubeMusic": "https://music.youtube.com/watch?v=jZSPAp8kCl4",
"appleMusic": "https://geo.music.apple.com/de/album/_/590431776?i=590431781&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"hybrid-theory-5": {
"hybrid-theory_5": {
"spotify": "https://open.spotify.com/track/0X576XiCW9uEtko6f6VkcU",
"youtube": "https://www.youtube.com/watch?v=Gd9OhYroLN0",
"youtubeMusic": "https://music.youtube.com/watch?v=Gd9OhYroLN0",
"appleMusic": "https://geo.music.apple.com/de/album/_/591534774?i=591534780&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"hybrid-theory-6": {
"hybrid-theory_6": {
"spotify": "https://open.spotify.com/track/5tkHje8FGSF258gi869GcV",
"youtube": "https://www.youtube.com/watch?v=ig-fyQqf510",
"youtubeMusic": "https://music.youtube.com/watch?v=ig-fyQqf510",
"appleMusic": "https://geo.music.apple.com/de/album/_/528436018?i=528437609&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"hybrid-theory-7": {
"hybrid-theory_7": {
"spotify": "https://open.spotify.com/track/4SJoEhpI6C61wtUfxSHMGc",
"youtube": "https://www.youtube.com/watch?v=wWBp-nlGX1o",
"youtubeMusic": "https://music.youtube.com/watch?v=wWBp-nlGX1o",
"appleMusic": "https://geo.music.apple.com/de/album/_/528436018?i=528437611&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"hybrid-theory-8": {
"hybrid-theory_8": {
"spotify": "https://open.spotify.com/track/7q115ia4fQn9zonjpexWsY",
"youtube": "https://www.youtube.com/watch?v=eVTXPUF4Oz4",
"youtubeMusic": "https://music.youtube.com/watch?v=eVTXPUF4Oz4",
"appleMusic": "https://geo.music.apple.com/de/album/_/528436018?i=528437613&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"hybrid-theory-9": {
"hybrid-theory_9": {
"spotify": "https://open.spotify.com/track/1B8WdDScvobpFsZLfdmIE1",
"youtube": "https://www.youtube.com/watch?v=3t2WkCudwfY",
"youtubeMusic": "https://music.youtube.com/watch?v=3t2WkCudwfY",
"appleMusic": "https://geo.music.apple.com/de/album/_/528436018?i=528437708&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"hybrid-theory-10": {
"hybrid-theory_10": {
"spotify": "https://open.spotify.com/track/3JAu2BH8sSI46rJGzQerb6",
"youtube": "https://www.youtube.com/watch?v=HNCgBuI2eJc",
"youtubeMusic": "https://music.youtube.com/watch?v=HNCgBuI2eJc",
"appleMusic": "https://geo.music.apple.com/de/album/_/528436018?i=528437709&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"hybrid-theory-11": {
"hybrid-theory_11": {
"spotify": "https://open.spotify.com/track/15voDM9pGkwEvHBUecpcmo",
"youtube": "https://www.youtube.com/watch?v=qqC5sdsHLq8",
"youtubeMusic": "https://music.youtube.com/watch?v=qqC5sdsHLq8",
"appleMusic": "https://geo.music.apple.com/de/album/_/528436018?i=528437710&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"hybrid-theory-12": {
"hybrid-theory_12": {
"spotify": "https://open.spotify.com/track/4HlMOXxwF9SYG1RoJxEjio",
"youtube": "https://www.youtube.com/watch?v=Ve1LNJEIKUE",
"youtubeMusic": "https://music.youtube.com/watch?v=Ve1LNJEIKUE",
"appleMusic": "https://geo.music.apple.com/de/album/_/590431776?i=590431790&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-1": {
"meteora_1": {
"spotify": "https://open.spotify.com/track/4hbpxoMCp62bd1sdy7XehS",
"youtube": "https://www.youtube.com/watch?v=U6R-twDkrcI",
"youtubeMusic": "https://music.youtube.com/watch?v=U6R-twDkrcI",
"appleMusic": "https://geo.music.apple.com/de/album/_/590423275?i=590423280&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-2": {
"meteora_2": {
"spotify": "https://open.spotify.com/track/6HZdbb05lEXLvcmee3ZXO2",
"youtube": "https://www.youtube.com/watch?v=oWfGOVWrueo",
"youtubeMusic": "https://music.youtube.com/watch?v=oWfGOVWrueo",
"appleMusic": "https://geo.music.apple.com/de/album/_/1668484895?i=1668485277&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-3": {
"meteora_3": {
"spotify": "https://open.spotify.com/track/3agtg0x11wPvLIWkYR39nZ",
"youtube": "https://www.youtube.com/watch?v=zsCD5XCu6CM",
"youtubeMusic": "https://music.youtube.com/watch?v=zsCD5XCu6CM",
"appleMusic": "https://geo.music.apple.com/de/album/_/528435845?i=528437020&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-4": {
"meteora_4": {
"spotify": "https://open.spotify.com/track/4zP2e2aIzOZGEFTq1MDJmm",
"youtube": "https://www.youtube.com/watch?v=NjdgcHdzvac",
"youtubeMusic": "https://music.youtube.com/watch?v=NjdgcHdzvac",
"appleMusic": "https://geo.music.apple.com/de/album/_/590423275?i=590423283&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-5": {
"meteora_5": {
"spotify": "https://open.spotify.com/track/3R9NKZ4jmxNjOFihSF5s7f",
"youtube": "https://www.youtube.com/watch?v=oMals9XXQY8",
"youtubeMusic": "https://music.youtube.com/watch?v=oMals9XXQY8",
"appleMusic": "https://geo.music.apple.com/de/album/_/590423275?i=590423284&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-6": {
"meteora_6": {
"spotify": "https://open.spotify.com/track/17bgialGAwoiGj1STY4cnR",
"youtube": "https://www.youtube.com/watch?v=U5zdmjVeQzE",
"youtubeMusic": "https://music.youtube.com/watch?v=U5zdmjVeQzE",
"appleMusic": "https://geo.music.apple.com/de/album/_/590423275?i=590423285&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-7": {
"meteora_7": {
"spotify": "https://open.spotify.com/track/4Yf5bqU3NK4kNOypcrLYwU",
"youtube": "https://www.youtube.com/watch?v=LYU-8IFcDPw",
"youtubeMusic": "https://music.youtube.com/watch?v=LYU-8IFcDPw",
"appleMusic": "https://geo.music.apple.com/de/album/_/528435845?i=528437024&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-8": {
"meteora_8": {
"spotify": "https://open.spotify.com/track/2DrMcGNKEY0FZqjMovGaCm",
"youtube": "https://www.youtube.com/watch?v=6dEAeCHQrBs",
"youtubeMusic": "https://music.youtube.com/watch?v=6dEAeCHQrBs",
"appleMusic": "https://geo.music.apple.com/de/album/_/528435845?i=528437025&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-9": {
"meteora_9": {
"spotify": "https://open.spotify.com/track/6n8TMVyFKoUmDc4apxceRD",
"youtube": "https://www.youtube.com/watch?v=v2H4l9RpkwM",
"youtubeMusic": "https://music.youtube.com/watch?v=v2H4l9RpkwM",
"appleMusic": "https://geo.music.apple.com/de/album/_/528435845?i=528437026&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-10": {
"meteora_10": {
"spotify": "https://open.spotify.com/track/60IkVf7UfQXmt5CwkpcX8a",
"youtube": "https://www.youtube.com/watch?v=YLHpvjrFpe0",
"youtubeMusic": "https://music.youtube.com/watch?v=YLHpvjrFpe0",
"appleMusic": "https://geo.music.apple.com/de/album/_/528435845?i=528437027&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-11": {
"meteora_11": {
"spotify": "https://open.spotify.com/track/4m1P1BSg9nLxaWbvPhNdhw",
"youtube": "https://www.youtube.com/watch?v=QJ87793QXes",
"youtubeMusic": "https://music.youtube.com/watch?v=QJ87793QXes",
"appleMusic": "https://geo.music.apple.com/de/album/_/590423275?i=590423550&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-12": {
"meteora_12": {
"spotify": "https://open.spotify.com/track/3sbezh9MMCQrr4KY7zw13j",
"youtube": "https://www.youtube.com/watch?v=J1KqQYsUYIk",
"youtubeMusic": "https://music.youtube.com/watch?v=J1KqQYsUYIk",
"appleMusic": "https://geo.music.apple.com/de/album/_/528435845?i=528437513&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"meteora-13": {
"meteora_13": {
"spotify": "https://open.spotify.com/track/2nLtzopw4rPReszdYBJU6h",
"youtube": "https://www.youtube.com/watch?v=kXYiU_JCYtU",
"youtubeMusic": "https://music.youtube.com/watch?v=kXYiU_JCYtU",
"appleMusic": "https://geo.music.apple.com/de/album/_/528435845?i=528437514&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"minutes-to-midnight-1": {
"minutes-to-midnight_1": {
"spotify": "https://open.spotify.com/track/0GkuKdv0osuL9QhfnXqVNP",
"youtube": "https://www.youtube.com/watch?v=Me7TJDHCELk",
"youtubeMusic": "https://music.youtube.com/watch?v=Me7TJDHCELk",
"appleMusic": "https://geo.music.apple.com/de/album/_/590427297?i=590427304&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"minutes-to-midnight-2": {
"minutes-to-midnight_2": {
"spotify": "https://open.spotify.com/track/1fLlRApgzxWweF1JTf8yM5",
"youtube": "https://www.youtube.com/watch?v=0xyxtzD54rM",
"youtubeMusic": "https://music.youtube.com/watch?v=0xyxtzD54rM",
"appleMusic": "https://geo.music.apple.com/de/album/_/528975362?i=528975364&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"minutes-to-midnight-3": {
"minutes-to-midnight_3": {
"spotify": "https://open.spotify.com/track/0sp00HSXkQyqTa6QqM0O8V",
"youtube": "https://www.youtube.com/watch?v=yZIummTz9mM",
"youtubeMusic": "https://music.youtube.com/watch?v=yZIummTz9mM",
"appleMusic": "https://geo.music.apple.com/de/album/_/590427297?i=590427307&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"minutes-to-midnight-4": {
"minutes-to-midnight_4": {
"spotify": "https://open.spotify.com/track/0UFDKFqW2oGspYeYqo9wjA",
"youtube": "https://www.youtube.com/watch?v=OnuuYcqhzCE",
"youtubeMusic": "https://music.youtube.com/watch?v=OnuuYcqhzCE",
"appleMusic": "https://geo.music.apple.com/de/album/_/528975362?i=528975366&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"minutes-to-midnight-5": {
"minutes-to-midnight_5": {
"spotify": "https://open.spotify.com/track/0OYcEfskah1egYHjYRvbg1",
"youtube": "https://www.youtube.com/watch?v=n1PCW0C1aiM",
"youtubeMusic": "https://music.youtube.com/watch?v=n1PCW0C1aiM",
"appleMusic": "https://geo.music.apple.com/de/album/_/528975362?i=528975367&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"minutes-to-midnight-6": {
"minutes-to-midnight_6": {
"spotify": "https://open.spotify.com/track/18lR4BzEs7e3qzc0KVkTpU",
"youtube": "https://www.youtube.com/watch?v=8sgycukafqQ",
"youtubeMusic": "https://music.youtube.com/watch?v=8sgycukafqQ",
"appleMusic": "https://geo.music.apple.com/de/album/_/258416684?i=258416690&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"minutes-to-midnight-7": {
"minutes-to-midnight_7": {
"spotify": "https://open.spotify.com/track/0m7mTaFGMiKI3rBJpYknip",
"youtube": "https://www.youtube.com/watch?v=gG4P3ayBzVY",
"youtubeMusic": "https://music.youtube.com/watch?v=gG4P3ayBzVY",
"appleMusic": "https://geo.music.apple.com/de/album/_/528975362?i=528975409&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"minutes-to-midnight-8": {
"minutes-to-midnight_8": {
"spotify": "https://open.spotify.com/track/4CWhc9FaMMfBTt4ANjfbOf",
"youtube": "https://www.youtube.com/watch?v=rW4uBvP2Dqc",
"youtubeMusic": "https://music.youtube.com/watch?v=rW4uBvP2Dqc",
"appleMusic": "https://geo.music.apple.com/de/album/_/590427297?i=590427452&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"minutes-to-midnight-9": {
"minutes-to-midnight_9": {
"spotify": "https://open.spotify.com/track/2vfshZvISOKy2Je7wQBWOV",
"youtube": "https://www.youtube.com/watch?v=KAFOpywZbMM",
"youtubeMusic": "https://music.youtube.com/watch?v=KAFOpywZbMM",
"appleMusic": "https://geo.music.apple.com/de/album/_/528975362?i=528975411&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"minutes-to-midnight-10": {
"minutes-to-midnight_10": {
"spotify": "https://open.spotify.com/track/2ysXuQd8uOfSMZcMRR5Ux4",
"youtube": "https://www.youtube.com/watch?v=YgVzhgygYfs",
"youtubeMusic": "https://music.youtube.com/watch?v=YgVzhgygYfs",
"appleMusic": "https://geo.music.apple.com/de/album/_/528975362?i=528975412&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"minutes-to-midnight-11": {
"minutes-to-midnight_11": {
"spotify": "https://open.spotify.com/track/7jeI6EdY0elPSNz80mAKS8",
"youtube": "https://www.youtube.com/watch?v=NaRBn6QIMcQ",
"youtubeMusic": "https://music.youtube.com/watch?v=NaRBn6QIMcQ",
"appleMusic": "https://geo.music.apple.com/de/album/_/590427297?i=590427477&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m"
},
"minutes-to-midnight-12": {
"minutes-to-midnight_12": {
"spotify": "https://open.spotify.com/track/7jeI6EdY0elPSNz80mAKS8",
"youtube": "https://www.youtube.com/watch?v=NaRBn6QIMcQ",
"youtubeMusic": "https://music.youtube.com/watch?v=NaRBn6QIMcQ",

View file

@ -11,6 +11,9 @@
"fetch-links": "bun run scripts/fetch-song-links.ts"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^7.1.0",
"@fortawesome/free-brands-svg-icons": "^7.1.0",
"@fortawesome/react-fontawesome": "^3.1.0",
"@mantine/carousel": "^8.3.5",
"@mantine/core": "^8.3.5",
"@mantine/hooks": "^8.3.5",

View file

@ -102,6 +102,10 @@ export interface SongLinksData {
[songId: string]: SongLinks;
}
export function getSongLink(songId: string): SongLinks {
return songLinks[songId];
}
export const songLinks: SongLinksData = ${JSON.stringify(songLinks, null, 2)};
`;

View file

@ -4,6 +4,7 @@ import { Card, Group, Text, Badge, Box } from "@mantine/core";
import { useState } from "react";
import type { AlbumTheme } from "@/lib/themes";
import type { Track } from "@/lib/ListTypes";
import { useHash } from "@mantine/hooks";
interface TrackCardProps {
track: Track;
@ -13,9 +14,11 @@ interface TrackCardProps {
export default function TrackCard({ track, index, theme }: TrackCardProps) {
const [isHovered, setIsHovered] = useState(false);
const [_hash, setHash] = useHash();
return (
<Card
onClick={() => setHash(`trackModal_${track.id}`)}
className="backdrop-blur-sm transition-all duration-300"
style={{
background: isHovered ? theme.card.backgroundHover : theme.card.background,
@ -52,19 +55,6 @@ export default function TrackCard({ track, index, theme }: TrackCardProps) {
</Group>
<Group gap="md">
<Text
size="sm"
fw={500}
style={{
color: theme.text.muted,
fontFamily: "monospace",
background: theme.background.tertiary,
padding: "4px 12px",
borderRadius: "6px",
}}
>
{track.duration}
</Text>
<Group gap="xs">
{track.studioUrl && (
<Badge
@ -103,6 +93,19 @@ export default function TrackCard({ track, index, theme }: TrackCardProps) {
</Badge>
)}
</Group>
<Text
size="sm"
fw={500}
style={{
color: theme.text.muted,
fontFamily: "monospace",
background: theme.background.tertiary,
padding: "4px 12px",
borderRadius: "6px",
}}
>
{track.duration}
</Text>
</Group>
</Group>
</Card>

View file

@ -0,0 +1,199 @@
"use client";
import { albums } from "@/lib/list";
import { getSongLink } from "@/lib/songLinks";
import { getThemeColors } from "@/lib/themes";
import { faApple, faSpotify, faYoutube, faYoutubeSquare, IconDefinition } from "@fortawesome/free-brands-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import {
ActionIcon,
Anchor,
Box,
Divider,
Grid,
GridCol,
Group,
Modal,
Stack,
Text,
Title,
Tooltip,
} from "@mantine/core";
import { useDisclosure, useHash } from "@mantine/hooks";
import Link from "next/link";
export default function TrackModal() {
const [hash, setHash] = useHash();
console.log("🚀 ~ TrackModal.tsx:8 ~ TrackModal ~ hash:", hash);
const close = () => {
setHash("");
};
const album = albums.find((album) => {
return album.id === hash.split("_")[1];
});
const track = album?.tracks.find((track) => {
return track.id === `${hash.split("_")[1]}_${hash.split("_")[2]}`;
});
const songLink = getSongLink(track?.id || "");
console.log("🚀 ~ TrackModal.tsx:25 ~ TrackModal ~ songLink:", songLink);
const theme = getThemeColors(album?.id || "");
return (
<Modal
opened={hash.startsWith("#trackModal_")}
onClose={close}
withCloseButton={false}
styles={{
// content: {
// background: theme.background.gradient,
// border: `2px solid ${theme.border.light}`,
// boxShadow: "none",
// },
// header: {
// background: theme.background.gradient,
// border: `2px solid ${theme.border.light}`,
// boxShadow: "none",
// },
body: {
background: theme.background.gradient,
// border: `2px solid ${theme.border.light}`,
boxShadow: "none",
},
}}
>
<Stack>
<Title order={1}>{track?.label}</Title>
<Divider size={"lg"} label={<Title order={3}>Studio Version</Title>} />
<Grid columns={songLink && Object.keys(songLink).length > 0 ? Object.keys(songLink).length : 4}>
{songLink &&
Object.entries(songLink).map(([key, value]) => {
let themeColor: {
color: string;
icon: IconDefinition;
tooltip: string;
};
switch (key) {
case "spotify":
themeColor = {
color: "#1ED760",
icon: faSpotify,
tooltip: "Spotify",
};
break;
case "youtube":
themeColor = {
color: "#FF0000",
icon: faYoutube,
tooltip: "YouTube",
};
break;
case "youtubeMusic":
themeColor = {
color: "#FF0000",
icon: faYoutubeSquare,
tooltip: "YouTube Music",
};
break;
case "appleMusic":
themeColor = {
color: "#FF4E6B",
icon: faApple,
tooltip: "Apple Music",
};
break;
default:
return null;
}
if (!themeColor) return null;
return (
<GridCol
span={1}
key={`${track?.id}_${key}`}
style={{ display: "flex", alignItems: "center", justifyContent: "center" }}
>
<Tooltip label={themeColor.tooltip}>
<ActionIcon
variant="filled"
color={themeColor.color}
size="lg"
component={Link}
href={value}
target="_blank"
rel="noopener noreferrer"
>
<FontAwesomeIcon icon={themeColor.icon} />
</ActionIcon>
</Tooltip>
</GridCol>
);
})}
</Grid>
{Array.isArray(track?.emilyLive) && (
<>
<Divider size={"lg"} label={<Title order={3}>Fan Live Versions</Title>} />
<Stack>
{track.emilyLive.map((live, idx) => (
<Box style={{ width: "100%" }} key={`emilyLive_${live.url}`}>
<Group justify="space-between" align="center">
<Box style={{ display: "flex", flexDirection: "column", gap: "4px" }}>
<Text>By: {live.author}</Text>
<Text>{live.location}</Text>
<Text>
{new Date(live.date).toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric" })}
</Text>
</Box>
<ActionIcon
variant="filled"
color={"#FF0000"}
size="lg"
component={Link}
href={live.url}
target="_blank"
rel="noopener noreferrer"
>
<FontAwesomeIcon icon={faYoutube} />
</ActionIcon>
</Group>
</Box>
))}
</Stack>
</>
)}
{track?.lpLive && (
<>
<Divider size={"lg"} label={<Title order={3}>Linkin Park Live Versions</Title>} />
<Group justify="space-between" align="center">
<Box style={{ display: "flex", flexDirection: "column", gap: "4px" }}>
<Text>
{new Date(track?.lpLive.date).toLocaleDateString("en-US", {
year: "numeric",
month: "long",
day: "numeric",
})}
</Text>
<Text>{track?.lpLive.location}</Text>
</Box>
<ActionIcon
variant="filled"
color={"#FF0000"}
size="lg"
component={Link}
href={track?.lpLive.url}
target="_blank"
rel="noopener noreferrer"
>
<FontAwesomeIcon icon={faYoutube} />
</ActionIcon>
</Group>
</>
)}
</Stack>
</Modal>
);
}

View file

@ -4,6 +4,7 @@ import { albums } from "../../../lib/list";
import BackButton from "../../../Components/BackButton";
import { getThemeColors } from "@/lib/themes";
import TrackCard from "@/Components/TrackCard";
import TrackModal from "@/Components/TrackModal";
export function generateStaticParams() {
return albums.map((album) => ({
@ -45,6 +46,7 @@ export default async function AlbumDetail({ params }: { params: Promise<{ albumI
viewTransitionName: `album-card-background-${album.id}`,
}}
>
<TrackModal />
<Container size="xl" className="py-12">
{/* Back Button */}
<BackButton theme={theme} />

View file

@ -4,6 +4,10 @@ import { MantineProvider } from "@mantine/core";
import { ViewTransitions } from "next-view-transitions";
import { Nunito } from "next/font/google";
import { config } from "@fortawesome/fontawesome-svg-core";
import "@fortawesome/fontawesome-svg-core/styles.css";
config.autoAddCss = false;
const nunito = Nunito({
subsets: ["latin"],
weight: ["200", "300", "400", "500", "600", "700", "800", "900"],

View file

@ -3,11 +3,14 @@ export type Track = {
label: string;
duration: string;
studioUrl: string | null;
emilyLive: null | {
emilyLive:
| null
| {
url: string;
date: string;
location: string;
};
author: string;
}[];
lpLive: null | {
url: string;
date: string;

View file

@ -11,17 +11,34 @@ export const albums: Album[] = [
"Hybrid Theory is the debut studio album by American rock band Linkin Park, released on October 24, 2000, by Warner Bros. Records. It was recorded at The Plant Studios in Sausalito, California, and produced by Don Gilmore. The album was a commercial success, reaching number one on the Billboard 200 chart and selling over 10 million copies in the United States alone.",
tracks: [
{
id: "hybrid-theory-1",
id: "hybrid-theory_1",
label: "Papercut",
duration: "03:04",
studioUrl: null,
emilyLive: null,
lpLive: null,
emilyLive: [
{
url: "https://youtu.be/miQ9Y5UW08g",
date: "2025-04-26",
location: "Austin, Texas, USA",
author: "Erynn Halvorson",
},
{
url: "https://youtu.be/miQ9Y5UW08dasdasdg",
date: "2025-04-26",
location: "Austin, Texas, USdasdsaA",
author: "Erynn Halvorson",
},
],
lpLive: {
url: "https://www.youtube.com/watch?v=DOKcCl6iKaA",
date: "2024-09-11",
location: "Los Angeles, California, USA",
},
__SPOTIFY_URL__: "https://open.spotify.com/track/4HvcbAR8LisalXKt7cpqE1?si=a736ed41b9e84ff9",
},
{
id: "hybrid-theory-2",
id: "hybrid-theory_2",
label: "One Step Closer",
duration: "02:35",
studioUrl: null,
@ -31,7 +48,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/4bYLTrlcqctyHck3fjhMgW?si=dd2c47138fed4c4c",
},
{
id: "hybrid-theory-3",
id: "hybrid-theory_3",
label: "With You",
duration: "03:23",
studioUrl: null,
@ -41,7 +58,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/1Q9QN6dHEDeUegsySY012f?si=d4a1aca393954caa",
},
{
id: "hybrid-theory-4",
id: "hybrid-theory_4",
label: "Points of Authority",
duration: "03:20",
studioUrl: null,
@ -51,7 +68,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/214LJVTqrkUOGemWDGHJpr?si=749f11d7cd9a4f56",
},
{
id: "hybrid-theory-5",
id: "hybrid-theory_5",
label: "Crawling",
duration: "03:29",
studioUrl: null,
@ -61,7 +78,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/0X576XiCW9uEtko6f6VkcU?si=0a47dc1d660b4c71",
},
{
id: "hybrid-theory-6",
id: "hybrid-theory_6",
label: "Runaway",
duration: "03:03",
studioUrl: null,
@ -71,7 +88,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/5tkHje8FGSF258gi869GcV?si=f69a7e1ebf0f4f31",
},
{
id: "hybrid-theory-7",
id: "hybrid-theory_7",
label: "By Myself",
duration: "03:09",
studioUrl: null,
@ -81,7 +98,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/4SJoEhpI6C61wtUfxSHMGc?si=4ca78fd74ae74d6f",
},
{
id: "hybrid-theory-8",
id: "hybrid-theory_8",
label: "In the End",
duration: "03:36",
studioUrl: null,
@ -91,7 +108,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/7q115ia4fQn9zonjpexWsY?si=1e4cb0fe76244b11",
},
{
id: "hybrid-theory-9",
id: "hybrid-theory_9",
label: "A Place for My Head",
duration: "03:04",
studioUrl: null,
@ -101,7 +118,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/1B8WdDScvobpFsZLfdmIE1?si=f1b5b6fe0abb4e23",
},
{
id: "hybrid-theory-10",
id: "hybrid-theory_10",
label: "Forgotten",
duration: "03:04",
studioUrl: null,
@ -111,7 +128,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/3JAu2BH8sSI46rJGzQerb6?si=92186e546f0049b9",
},
{
id: "hybrid-theory-11",
id: "hybrid-theory_11",
label: "Cure for the Itch",
duration: "02:37",
studioUrl: null,
@ -121,7 +138,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/15voDM9pGkwEvHBUecpcmo?si=0b50fb655a2e4649",
},
{
id: "hybrid-theory-12",
id: "hybrid-theory_12",
label: "Pushing Me Away",
duration: "03:11",
studioUrl: null,
@ -142,7 +159,7 @@ export const albums: Album[] = [
"Meteora is the second studio album by American rock band Linkin Park, released on March 24, 2003, by Warner Bros. Records. It was recorded at The Plant Studios in Sausalito, California, and produced by Don Gilmore. The album was a commercial success, reaching number one on the Billboard 200 chart and selling over 10 million copies in the United States alone.",
tracks: [
{
id: "meteora-1",
id: "meteora_1",
label: "Foreword",
duration: "00:13",
studioUrl: null,
@ -152,7 +169,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/4hbpxoMCp62bd1sdy7XehS?si=0c4b2f93b36e43e7",
},
{
id: "meteora-2",
id: "meteora_2",
label: "Don't Stay",
duration: "03:07",
studioUrl: null,
@ -162,7 +179,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/6HZdbb05lEXLvcmee3ZXO2?si=b1f8362c72694a1b",
},
{
id: "meteora-3",
id: "meteora_3",
label: "Somewhere I Belong",
duration: "03:33",
studioUrl: null,
@ -172,7 +189,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/3agtg0x11wPvLIWkYR39nZ?si=e79dfe0143374cd9",
},
{
id: "meteora-4",
id: "meteora_4",
label: "Lying from You",
duration: "02:55",
studioUrl: null,
@ -182,7 +199,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/4zP2e2aIzOZGEFTq1MDJmm?si=a7951a3a01e740ac",
},
{
id: "meteora-5",
id: "meteora_5",
label: "Hit the Floor",
duration: "02:44",
studioUrl: null,
@ -192,7 +209,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/3R9NKZ4jmxNjOFihSF5s7f?si=3f07863add1e4e0f",
},
{
id: "meteora-6",
id: "meteora_6",
label: "Easier to Run",
duration: "03:24",
studioUrl: null,
@ -202,7 +219,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/17bgialGAwoiGj1STY4cnR?si=679a5b245d1d4610",
},
{
id: "meteora-7",
id: "meteora_7",
label: "Faint",
duration: "02:42",
studioUrl: null,
@ -212,7 +229,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/4Yf5bqU3NK4kNOypcrLYwU?si=cf2f7362cff04704",
},
{
id: "meteora-8",
id: "meteora_8",
label: "Figure.09",
duration: "03:17",
studioUrl: null,
@ -222,7 +239,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/2DrMcGNKEY0FZqjMovGaCm?si=583eb32931e84c48",
},
{
id: "meteora-9",
id: "meteora_9",
label: "Breaking the Habit",
duration: "03:16",
studioUrl: null,
@ -232,7 +249,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/6n8TMVyFKoUmDc4apxceRD?si=2b17f6b1906f46ec",
},
{
id: "meteora-10",
id: "meteora_10",
label: "From the Inside",
duration: "02:55",
studioUrl: null,
@ -242,7 +259,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/60IkVf7UfQXmt5CwkpcX8a?si=56ad75e64c174188",
},
{
id: "meteora-11",
id: "meteora_11",
label: "Nobody's Listening",
duration: "02:58",
studioUrl: null,
@ -252,7 +269,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/4m1P1BSg9nLxaWbvPhNdhw?si=9671f8d0299f429f",
},
{
id: "meteora-12",
id: "meteora_12",
label: "Session",
duration: "02:24",
studioUrl: null,
@ -262,7 +279,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/3sbezh9MMCQrr4KY7zw13j?si=62626db46f734d63",
},
{
id: "meteora-13",
id: "meteora_13",
label: "Numb",
duration: "03:05",
studioUrl: null,
@ -283,7 +300,7 @@ export const albums: Album[] = [
"Minutes to Midnight is the third studio album by American rock band Linkin Park, released on May 14, 2007, by Warner Bros. Records. The album marked a departure from the band's previous nu-metal sound, incorporating more alternative rock and experimental elements.",
tracks: [
{
id: "minutes-to-midnight-1",
id: "minutes-to-midnight_1",
label: "Wake",
duration: "01:40",
studioUrl: null,
@ -293,7 +310,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/0GkuKdv0osuL9QhfnXqVNP?si=0491e2d35b0a4e12",
},
{
id: "minutes-to-midnight-2",
id: "minutes-to-midnight_2",
label: "Given Up",
duration: "03:09",
studioUrl: null,
@ -303,7 +320,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/1fLlRApgzxWweF1JTf8yM5?si=9b22e697bdd640e8",
},
{
id: "minutes-to-midnight-3",
id: "minutes-to-midnight_3",
label: "Leave Out All the Rest",
duration: "03:29",
studioUrl: null,
@ -313,7 +330,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/0sp00HSXkQyqTa6QqM0O8V?si=c9ad349e7f164919",
},
{
id: "minutes-to-midnight-4",
id: "minutes-to-midnight_4",
label: "Bleed It Out",
duration: "02:44",
studioUrl: null,
@ -323,7 +340,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/0UFDKFqW2oGspYeYqo9wjA?si=2f4e310a85674523",
},
{
id: "minutes-to-midnight-5",
id: "minutes-to-midnight_5",
label: "Shadow of the Day",
duration: "04:49",
studioUrl: null,
@ -333,7 +350,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/0OYcEfskah1egYHjYRvbg1?si=e7fe66722b7544d9",
},
{
id: "minutes-to-midnight-6",
id: "minutes-to-midnight_6",
label: "What I've Done",
duration: "03:25",
studioUrl: null,
@ -343,7 +360,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/18lR4BzEs7e3qzc0KVkTpU?si=f04a6e933aab4ba0",
},
{
id: "minutes-to-midnight-7",
id: "minutes-to-midnight_7",
label: "Hands Held High",
duration: "03:53",
studioUrl: null,
@ -353,7 +370,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/0m7mTaFGMiKI3rBJpYknip?si=e382b6252c7c427a",
},
{
id: "minutes-to-midnight-8",
id: "minutes-to-midnight_8",
label: "No More Sorrow",
duration: "03:41",
studioUrl: null,
@ -363,7 +380,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/4CWhc9FaMMfBTt4ANjfbOf?si=dd3a00c6453c4737",
},
{
id: "minutes-to-midnight-9",
id: "minutes-to-midnight_9",
label: "Valentine's Day",
duration: "03:16",
studioUrl: null,
@ -373,7 +390,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/2vfshZvISOKy2Je7wQBWOV?si=51d75042da314fa4",
},
{
id: "minutes-to-midnight-10",
id: "minutes-to-midnight_10",
label: "In Between",
duration: "03:16",
studioUrl: null,
@ -383,7 +400,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/2ysXuQd8uOfSMZcMRR5Ux4?si=3ae5e92155874795",
},
{
id: "minutes-to-midnight-11",
id: "minutes-to-midnight_11",
label: "In Pieces",
duration: "03:38",
studioUrl: null,
@ -393,7 +410,7 @@ export const albums: Album[] = [
__SPOTIFY_URL__: "https://open.spotify.com/track/7jeI6EdY0elPSNz80mAKS8?si=983410366a774f68",
},
{
id: "minutes-to-midnight-12",
id: "minutes-to-midnight_12",
label: "The Little Things Give You Away",
duration: "06:23",
studioUrl: null,

View file

@ -1,6 +1,6 @@
// This file is auto-generated by scripts/fetch-song-links.ts
// Do not edit manually
// Last updated: 2025-10-24T23:43:29.142Z
// Last updated: 2025-10-25T00:32:44.823Z
// Run: bun run fetch-links
export interface SongLinks {
@ -14,260 +14,264 @@ export interface SongLinksData {
[songId: string]: SongLinks;
}
export function getSongLink(songId: string): SongLinks {
return songLinks[songId];
}
export const songLinks: SongLinksData = {
"hybrid-theory-1": {
"hybrid-theory_1": {
spotify: "https://open.spotify.com/track/4HvcbAR8LisalXKt7cpqE1",
youtube: "https://www.youtube.com/watch?v=vjVkXlxsO8Q",
youtubeMusic: "https://music.youtube.com/watch?v=vjVkXlxsO8Q",
appleMusic:
"https://geo.music.apple.com/de/album/_/528436018?i=528436568&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"hybrid-theory-2": {
"hybrid-theory_2": {
spotify: "https://open.spotify.com/track/4bYLTrlcqctyHck3fjhMgW",
youtube: "https://www.youtube.com/watch?v=4qlCC1GOwFw",
youtubeMusic: "https://music.youtube.com/watch?v=4qlCC1GOwFw",
appleMusic:
"https://geo.music.apple.com/de/album/_/590431776?i=590431778&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"hybrid-theory-3": {
"hybrid-theory_3": {
spotify: "https://open.spotify.com/track/1Q9QN6dHEDeUegsySY012f",
youtube: "https://www.youtube.com/watch?v=M8UTS2iFXOo",
youtubeMusic: "https://music.youtube.com/watch?v=M8UTS2iFXOo",
appleMusic:
"https://geo.music.apple.com/de/album/_/528436018?i=528437421&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"hybrid-theory-4": {
"hybrid-theory_4": {
spotify: "https://open.spotify.com/track/214LJVTqrkUOGemWDGHJpr",
youtube: "https://www.youtube.com/watch?v=jZSPAp8kCl4",
youtubeMusic: "https://music.youtube.com/watch?v=jZSPAp8kCl4",
appleMusic:
"https://geo.music.apple.com/de/album/_/590431776?i=590431781&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"hybrid-theory-5": {
"hybrid-theory_5": {
spotify: "https://open.spotify.com/track/0X576XiCW9uEtko6f6VkcU",
youtube: "https://www.youtube.com/watch?v=Gd9OhYroLN0",
youtubeMusic: "https://music.youtube.com/watch?v=Gd9OhYroLN0",
appleMusic:
"https://geo.music.apple.com/de/album/_/591534774?i=591534780&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"hybrid-theory-6": {
"hybrid-theory_6": {
spotify: "https://open.spotify.com/track/5tkHje8FGSF258gi869GcV",
youtube: "https://www.youtube.com/watch?v=ig-fyQqf510",
youtubeMusic: "https://music.youtube.com/watch?v=ig-fyQqf510",
appleMusic:
"https://geo.music.apple.com/de/album/_/528436018?i=528437609&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"hybrid-theory-7": {
"hybrid-theory_7": {
spotify: "https://open.spotify.com/track/4SJoEhpI6C61wtUfxSHMGc",
youtube: "https://www.youtube.com/watch?v=wWBp-nlGX1o",
youtubeMusic: "https://music.youtube.com/watch?v=wWBp-nlGX1o",
appleMusic:
"https://geo.music.apple.com/de/album/_/528436018?i=528437611&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"hybrid-theory-8": {
"hybrid-theory_8": {
spotify: "https://open.spotify.com/track/7q115ia4fQn9zonjpexWsY",
youtube: "https://www.youtube.com/watch?v=eVTXPUF4Oz4",
youtubeMusic: "https://music.youtube.com/watch?v=eVTXPUF4Oz4",
appleMusic:
"https://geo.music.apple.com/de/album/_/528436018?i=528437613&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"hybrid-theory-9": {
"hybrid-theory_9": {
spotify: "https://open.spotify.com/track/1B8WdDScvobpFsZLfdmIE1",
youtube: "https://www.youtube.com/watch?v=3t2WkCudwfY",
youtubeMusic: "https://music.youtube.com/watch?v=3t2WkCudwfY",
appleMusic:
"https://geo.music.apple.com/de/album/_/528436018?i=528437708&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"hybrid-theory-10": {
"hybrid-theory_10": {
spotify: "https://open.spotify.com/track/3JAu2BH8sSI46rJGzQerb6",
youtube: "https://www.youtube.com/watch?v=HNCgBuI2eJc",
youtubeMusic: "https://music.youtube.com/watch?v=HNCgBuI2eJc",
appleMusic:
"https://geo.music.apple.com/de/album/_/528436018?i=528437709&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"hybrid-theory-11": {
"hybrid-theory_11": {
spotify: "https://open.spotify.com/track/15voDM9pGkwEvHBUecpcmo",
youtube: "https://www.youtube.com/watch?v=qqC5sdsHLq8",
youtubeMusic: "https://music.youtube.com/watch?v=qqC5sdsHLq8",
appleMusic:
"https://geo.music.apple.com/de/album/_/528436018?i=528437710&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"hybrid-theory-12": {
"hybrid-theory_12": {
spotify: "https://open.spotify.com/track/4HlMOXxwF9SYG1RoJxEjio",
youtube: "https://www.youtube.com/watch?v=Ve1LNJEIKUE",
youtubeMusic: "https://music.youtube.com/watch?v=Ve1LNJEIKUE",
appleMusic:
"https://geo.music.apple.com/de/album/_/590431776?i=590431790&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-1": {
meteora_1: {
spotify: "https://open.spotify.com/track/4hbpxoMCp62bd1sdy7XehS",
youtube: "https://www.youtube.com/watch?v=U6R-twDkrcI",
youtubeMusic: "https://music.youtube.com/watch?v=U6R-twDkrcI",
appleMusic:
"https://geo.music.apple.com/de/album/_/590423275?i=590423280&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-2": {
meteora_2: {
spotify: "https://open.spotify.com/track/6HZdbb05lEXLvcmee3ZXO2",
youtube: "https://www.youtube.com/watch?v=oWfGOVWrueo",
youtubeMusic: "https://music.youtube.com/watch?v=oWfGOVWrueo",
appleMusic:
"https://geo.music.apple.com/de/album/_/1668484895?i=1668485277&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-3": {
meteora_3: {
spotify: "https://open.spotify.com/track/3agtg0x11wPvLIWkYR39nZ",
youtube: "https://www.youtube.com/watch?v=zsCD5XCu6CM",
youtubeMusic: "https://music.youtube.com/watch?v=zsCD5XCu6CM",
appleMusic:
"https://geo.music.apple.com/de/album/_/528435845?i=528437020&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-4": {
meteora_4: {
spotify: "https://open.spotify.com/track/4zP2e2aIzOZGEFTq1MDJmm",
youtube: "https://www.youtube.com/watch?v=NjdgcHdzvac",
youtubeMusic: "https://music.youtube.com/watch?v=NjdgcHdzvac",
appleMusic:
"https://geo.music.apple.com/de/album/_/590423275?i=590423283&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-5": {
meteora_5: {
spotify: "https://open.spotify.com/track/3R9NKZ4jmxNjOFihSF5s7f",
youtube: "https://www.youtube.com/watch?v=oMals9XXQY8",
youtubeMusic: "https://music.youtube.com/watch?v=oMals9XXQY8",
appleMusic:
"https://geo.music.apple.com/de/album/_/590423275?i=590423284&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-6": {
meteora_6: {
spotify: "https://open.spotify.com/track/17bgialGAwoiGj1STY4cnR",
youtube: "https://www.youtube.com/watch?v=U5zdmjVeQzE",
youtubeMusic: "https://music.youtube.com/watch?v=U5zdmjVeQzE",
appleMusic:
"https://geo.music.apple.com/de/album/_/590423275?i=590423285&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-7": {
meteora_7: {
spotify: "https://open.spotify.com/track/4Yf5bqU3NK4kNOypcrLYwU",
youtube: "https://www.youtube.com/watch?v=LYU-8IFcDPw",
youtubeMusic: "https://music.youtube.com/watch?v=LYU-8IFcDPw",
appleMusic:
"https://geo.music.apple.com/de/album/_/528435845?i=528437024&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-8": {
meteora_8: {
spotify: "https://open.spotify.com/track/2DrMcGNKEY0FZqjMovGaCm",
youtube: "https://www.youtube.com/watch?v=6dEAeCHQrBs",
youtubeMusic: "https://music.youtube.com/watch?v=6dEAeCHQrBs",
appleMusic:
"https://geo.music.apple.com/de/album/_/528435845?i=528437025&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-9": {
meteora_9: {
spotify: "https://open.spotify.com/track/6n8TMVyFKoUmDc4apxceRD",
youtube: "https://www.youtube.com/watch?v=v2H4l9RpkwM",
youtubeMusic: "https://music.youtube.com/watch?v=v2H4l9RpkwM",
appleMusic:
"https://geo.music.apple.com/de/album/_/528435845?i=528437026&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-10": {
meteora_10: {
spotify: "https://open.spotify.com/track/60IkVf7UfQXmt5CwkpcX8a",
youtube: "https://www.youtube.com/watch?v=YLHpvjrFpe0",
youtubeMusic: "https://music.youtube.com/watch?v=YLHpvjrFpe0",
appleMusic:
"https://geo.music.apple.com/de/album/_/528435845?i=528437027&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-11": {
meteora_11: {
spotify: "https://open.spotify.com/track/4m1P1BSg9nLxaWbvPhNdhw",
youtube: "https://www.youtube.com/watch?v=QJ87793QXes",
youtubeMusic: "https://music.youtube.com/watch?v=QJ87793QXes",
appleMusic:
"https://geo.music.apple.com/de/album/_/590423275?i=590423550&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-12": {
meteora_12: {
spotify: "https://open.spotify.com/track/3sbezh9MMCQrr4KY7zw13j",
youtube: "https://www.youtube.com/watch?v=J1KqQYsUYIk",
youtubeMusic: "https://music.youtube.com/watch?v=J1KqQYsUYIk",
appleMusic:
"https://geo.music.apple.com/de/album/_/528435845?i=528437513&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"meteora-13": {
meteora_13: {
spotify: "https://open.spotify.com/track/2nLtzopw4rPReszdYBJU6h",
youtube: "https://www.youtube.com/watch?v=kXYiU_JCYtU",
youtubeMusic: "https://music.youtube.com/watch?v=kXYiU_JCYtU",
appleMusic:
"https://geo.music.apple.com/de/album/_/528435845?i=528437514&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"minutes-to-midnight-1": {
"minutes-to-midnight_1": {
spotify: "https://open.spotify.com/track/0GkuKdv0osuL9QhfnXqVNP",
youtube: "https://www.youtube.com/watch?v=Me7TJDHCELk",
youtubeMusic: "https://music.youtube.com/watch?v=Me7TJDHCELk",
appleMusic:
"https://geo.music.apple.com/de/album/_/590427297?i=590427304&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"minutes-to-midnight-2": {
"minutes-to-midnight_2": {
spotify: "https://open.spotify.com/track/1fLlRApgzxWweF1JTf8yM5",
youtube: "https://www.youtube.com/watch?v=0xyxtzD54rM",
youtubeMusic: "https://music.youtube.com/watch?v=0xyxtzD54rM",
appleMusic:
"https://geo.music.apple.com/de/album/_/528975362?i=528975364&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"minutes-to-midnight-3": {
"minutes-to-midnight_3": {
spotify: "https://open.spotify.com/track/0sp00HSXkQyqTa6QqM0O8V",
youtube: "https://www.youtube.com/watch?v=yZIummTz9mM",
youtubeMusic: "https://music.youtube.com/watch?v=yZIummTz9mM",
appleMusic:
"https://geo.music.apple.com/de/album/_/590427297?i=590427307&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"minutes-to-midnight-4": {
"minutes-to-midnight_4": {
spotify: "https://open.spotify.com/track/0UFDKFqW2oGspYeYqo9wjA",
youtube: "https://www.youtube.com/watch?v=OnuuYcqhzCE",
youtubeMusic: "https://music.youtube.com/watch?v=OnuuYcqhzCE",
appleMusic:
"https://geo.music.apple.com/de/album/_/528975362?i=528975366&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"minutes-to-midnight-5": {
"minutes-to-midnight_5": {
spotify: "https://open.spotify.com/track/0OYcEfskah1egYHjYRvbg1",
youtube: "https://www.youtube.com/watch?v=n1PCW0C1aiM",
youtubeMusic: "https://music.youtube.com/watch?v=n1PCW0C1aiM",
appleMusic:
"https://geo.music.apple.com/de/album/_/528975362?i=528975367&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"minutes-to-midnight-6": {
"minutes-to-midnight_6": {
spotify: "https://open.spotify.com/track/18lR4BzEs7e3qzc0KVkTpU",
youtube: "https://www.youtube.com/watch?v=8sgycukafqQ",
youtubeMusic: "https://music.youtube.com/watch?v=8sgycukafqQ",
appleMusic:
"https://geo.music.apple.com/de/album/_/258416684?i=258416690&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"minutes-to-midnight-7": {
"minutes-to-midnight_7": {
spotify: "https://open.spotify.com/track/0m7mTaFGMiKI3rBJpYknip",
youtube: "https://www.youtube.com/watch?v=gG4P3ayBzVY",
youtubeMusic: "https://music.youtube.com/watch?v=gG4P3ayBzVY",
appleMusic:
"https://geo.music.apple.com/de/album/_/528975362?i=528975409&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"minutes-to-midnight-8": {
"minutes-to-midnight_8": {
spotify: "https://open.spotify.com/track/4CWhc9FaMMfBTt4ANjfbOf",
youtube: "https://www.youtube.com/watch?v=rW4uBvP2Dqc",
youtubeMusic: "https://music.youtube.com/watch?v=rW4uBvP2Dqc",
appleMusic:
"https://geo.music.apple.com/de/album/_/590427297?i=590427452&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"minutes-to-midnight-9": {
"minutes-to-midnight_9": {
spotify: "https://open.spotify.com/track/2vfshZvISOKy2Je7wQBWOV",
youtube: "https://www.youtube.com/watch?v=KAFOpywZbMM",
youtubeMusic: "https://music.youtube.com/watch?v=KAFOpywZbMM",
appleMusic:
"https://geo.music.apple.com/de/album/_/528975362?i=528975411&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"minutes-to-midnight-10": {
"minutes-to-midnight_10": {
spotify: "https://open.spotify.com/track/2ysXuQd8uOfSMZcMRR5Ux4",
youtube: "https://www.youtube.com/watch?v=YgVzhgygYfs",
youtubeMusic: "https://music.youtube.com/watch?v=YgVzhgygYfs",
appleMusic:
"https://geo.music.apple.com/de/album/_/528975362?i=528975412&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"minutes-to-midnight-11": {
"minutes-to-midnight_11": {
spotify: "https://open.spotify.com/track/7jeI6EdY0elPSNz80mAKS8",
youtube: "https://www.youtube.com/watch?v=NaRBn6QIMcQ",
youtubeMusic: "https://music.youtube.com/watch?v=NaRBn6QIMcQ",
appleMusic:
"https://geo.music.apple.com/de/album/_/590427297?i=590427477&mt=1&app=music&ls=1&at=1000lHKX&ct=api_http&itscg=30200&itsct=odsl_m",
},
"minutes-to-midnight-12": {
"minutes-to-midnight_12": {
spotify: "https://open.spotify.com/track/7jeI6EdY0elPSNz80mAKS8",
youtube: "https://www.youtube.com/watch?v=NaRBn6QIMcQ",
youtubeMusic: "https://music.youtube.com/watch?v=NaRBn6QIMcQ",