From b93b0c216006f25866f4b40bf273775e0ddcfddd Mon Sep 17 00:00:00 2001 From: m4x809 Date: Sat, 25 Oct 2025 03:03:11 +0200 Subject: [PATCH] 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. --- .vscode/settings.json | 3 + data/fetched-songs.json | 74 ++++++------ data/song-links.json | 74 ++++++------ package.json | 3 + scripts/fetch-song-links.ts | 4 + src/Components/TrackCard.tsx | 29 +++-- src/Components/TrackModal.tsx | 199 +++++++++++++++++++++++++++++++ src/app/album/[albumId]/page.tsx | 2 + src/app/layout.tsx | 4 + src/lib/ListTypes.ts | 13 +- src/lib/list.ts | 95 +++++++++------ src/lib/songLinks.ts | 80 +++++++------ 12 files changed, 411 insertions(+), 169 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 src/Components/TrackModal.tsx diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f8d576f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "cSpell.words": ["emily"] +} diff --git a/data/fetched-songs.json b/data/fetched-songs.json index b672e5a..6d97378 100644 --- a/data/fetched-songs.json +++ b/data/fetched-songs.json @@ -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 } diff --git a/data/song-links.json b/data/song-links.json index 7196df4..3412095 100644 --- a/data/song-links.json +++ b/data/song-links.json @@ -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", diff --git a/package.json b/package.json index 401b543..351a101 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/scripts/fetch-song-links.ts b/scripts/fetch-song-links.ts index 49d0544..231c393 100644 --- a/scripts/fetch-song-links.ts +++ b/scripts/fetch-song-links.ts @@ -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)}; `; diff --git a/src/Components/TrackCard.tsx b/src/Components/TrackCard.tsx index 972f90e..29cf212 100644 --- a/src/Components/TrackCard.tsx +++ b/src/Components/TrackCard.tsx @@ -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 ( 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) { - - {track.duration} - {track.studioUrl && ( )} + + {track.duration} + diff --git a/src/Components/TrackModal.tsx b/src/Components/TrackModal.tsx new file mode 100644 index 0000000..e5b19ce --- /dev/null +++ b/src/Components/TrackModal.tsx @@ -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 ( + + + {track?.label} + Studio Version} /> + 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 ( + + + + + + + + ); + })} + + {Array.isArray(track?.emilyLive) && ( + <> + Fan Live Versions} /> + + {track.emilyLive.map((live, idx) => ( + + + + By: {live.author} + {live.location} + + {new Date(live.date).toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric" })} + + + + + + + + ))} + + + )} + + {track?.lpLive && ( + <> + Linkin Park Live Versions} /> + + + + {new Date(track?.lpLive.date).toLocaleDateString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + })} + + {track?.lpLive.location} + + + + + + + )} + + + ); +} diff --git a/src/app/album/[albumId]/page.tsx b/src/app/album/[albumId]/page.tsx index 75d5b07..38dec3f 100644 --- a/src/app/album/[albumId]/page.tsx +++ b/src/app/album/[albumId]/page.tsx @@ -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}`, }} > + {/* Back Button */} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index fd8c2e3..50f7e2f 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -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"], diff --git a/src/lib/ListTypes.ts b/src/lib/ListTypes.ts index a2a8f6e..97fd3ab 100644 --- a/src/lib/ListTypes.ts +++ b/src/lib/ListTypes.ts @@ -3,11 +3,14 @@ export type Track = { label: string; duration: string; studioUrl: string | null; - emilyLive: null | { - url: string; - date: string; - location: string; - }; + emilyLive: + | null + | { + url: string; + date: string; + location: string; + author: string; + }[]; lpLive: null | { url: string; date: string; diff --git a/src/lib/list.ts b/src/lib/list.ts index 74960e4..ec728cb 100644 --- a/src/lib/list.ts +++ b/src/lib/list.ts @@ -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, diff --git a/src/lib/songLinks.ts b/src/lib/songLinks.ts index 210c2f5..95c25d2 100644 --- a/src/lib/songLinks.ts +++ b/src/lib/songLinks.ts @@ -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",