Badila's Music Archive is a platform where you can explore and discover (soon you'll also be albe to add) music albums and artists, whether you prefer the new wave or the classics.
It started with more than 50 albums, 20 artists and it continues to grow with you.
The project aims to become a dynamic hub where music enthusiasts can share what they love to listen with the community.
![homepage](https://private-user-images.githubusercontent.com/112496548/396440706-d8275bb3-98d7-4987-a806-13c1d588c045.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MTE1NzIsIm5iZiI6MTczOTQxMTI3MiwicGF0aCI6Ii8xMTI0OTY1NDgvMzk2NDQwNzA2LWQ4Mjc1YmIzLTk4ZDctNDk4Ny1hODA2LTEzYzFkNTg4YzA0NS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QwMTQ3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lNjA4ZjllNzU0MmFiNzA1Mjg3YjY2ZWQ5MWY1NzU0ZGMzODM2N2M1MTU0MjA0NWUwOWE4Y2VkZTkxNTBjZTE5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.THbkPnxErGco8tqmS7u_04j86ISRQgs1uJrOBXFV0pU)
The New Releases section updates when music albums with a release date closer to present day are added to the archive.
![artist-page](https://private-user-images.githubusercontent.com/112496548/396447372-4afbed5d-e933-485a-850f-3a60726f0b56.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MTE1NzIsIm5iZiI6MTczOTQxMTI3MiwicGF0aCI6Ii8xMTI0OTY1NDgvMzk2NDQ3MzcyLTRhZmJlZDVkLWU5MzMtNDg1YS04NTBmLTNhNjA3MjZmMGI1Ni5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QwMTQ3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04ZDAyYWU5NzE3MzliYzk5NTgxYTE4NzY5ZTZmNmI2MjIzNWZmZTBjYWMzNTAxNzM0OWRjMjgyOGRlZTU5OTdhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.e1F4YLpIypZsc9hpX0SO124Cl5h0L5C8UmDUEInHrjM)
![artists-page](https://private-user-images.githubusercontent.com/112496548/396448131-d806e3c2-5e96-474f-81b6-6db5cf2d1c8d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MTE1NzIsIm5iZiI6MTczOTQxMTI3MiwicGF0aCI6Ii8xMTI0OTY1NDgvMzk2NDQ4MTMxLWQ4MDZlM2MyLTVlOTYtNDc0Zi04MWI2LTZkYjVjZjJkMWM4ZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QwMTQ3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iNmU5MzM2OTBlMmE0MmM3NmYzMjk1NzJlN2I0YjM4MDkzMmMyOGVkZTc4NTRiZWVlMmVmNzY3ODg3MzZmNGI3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.aA5teCb-8t8LxFvuXPyUmhckYLGPglKnYkBTQWLViuY)
![albums-page](https://private-user-images.githubusercontent.com/112496548/396448465-d219f82b-1eb8-4d28-be01-c6684ca9640b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MTE1NzIsIm5iZiI6MTczOTQxMTI3MiwicGF0aCI6Ii8xMTI0OTY1NDgvMzk2NDQ4NDY1LWQyMTlmODJiLTFlYjgtNGQyOC1iZTAxLWM2Njg0Y2E5NjQwYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QwMTQ3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04ODk5Yzk0OWRmNzU3NzUzZmQ2YTdkMDkwZjEyN2E4MTA4M2I2YzM2YTJkMmFlNTBmZGNhZWI4ZDVkNzMwZjk5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.6IjTMVH3I6CQR_d_kO7eaUcKc0K5GROHq8DqsH2gmgk)
![album-page](https://private-user-images.githubusercontent.com/112496548/396450264-8fd66a6d-b87a-45f6-b399-c98487955de3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MTE1NzIsIm5iZiI6MTczOTQxMTI3MiwicGF0aCI6Ii8xMTI0OTY1NDgvMzk2NDUwMjY0LThmZDY2YTZkLWI4N2EtNDVmNi1iMzk5LWM5ODQ4Nzk1NWRlMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QwMTQ3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mZGUzOWViYjFlOTc2NjdlMTc3OTU5NWRmYTA1YzU4YWEyZWQyNmZkMWU4NzQzNWNmYWIzOTI5MDc1NWM3ZTBlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.qqNxZy03z76_xR-5YIZXEATJpHWnjvYGohEt3cFNMqI)
Other options to discover music albums are the Genres page:
![genres-page](https://private-user-images.githubusercontent.com/112496548/396450908-e9503ead-8c26-4e21-b45e-68460b1096cb.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MTE1NzIsIm5iZiI6MTczOTQxMTI3MiwicGF0aCI6Ii8xMTI0OTY1NDgvMzk2NDUwOTA4LWU5NTAzZWFkLThjMjYtNGUyMS1iNDVlLTY4NDYwYjEwOTZjYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QwMTQ3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wYjAyYjM2NzhiMzVhYWQwODEzZDRkMjM2ODkxZTc1NjJiMjUyZTQ5OTQzNmYyODI0NWNmNTQ1ZTdhZjM0Njc3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.8TGphxOx6NNTcrZVZoSFwW5ItAtdy4bVKyy4wVDqx9s)
The Labels page:
![labels-page](https://private-user-images.githubusercontent.com/112496548/396450996-bc361110-635f-4fd3-ada2-f168395c4e55.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MTE1NzIsIm5iZiI6MTczOTQxMTI3MiwicGF0aCI6Ii8xMTI0OTY1NDgvMzk2NDUwOTk2LWJjMzYxMTEwLTYzNWYtNGZkMy1hZGEyLWYxNjgzOTVjNGU1NS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QwMTQ3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mZDIwOWE5ZDlmNDUzMWI3ZTQ5NDA0MDJiOWYxMjM1N2Q5NzI4MDZkYzNiMGQ5MDJhODczM2Q5YmQ5YzBhODhiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.7aSGbowAViHoQaKKvcLFIrBfHHQDwC_ueMCW2Zf9HMM)
or the search bar - which returns both albums and artists based on your input, even if it is incomplete.
![search-result](https://private-user-images.githubusercontent.com/112496548/396451262-54957039-c000-4726-bcdf-4b841c09b806.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MTE1NzIsIm5iZiI6MTczOTQxMTI3MiwicGF0aCI6Ii8xMTI0OTY1NDgvMzk2NDUxMjYyLTU0OTU3MDM5LWMwMDAtNDcyNi1iY2RmLTRiODQxYzA5YjgwNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QwMTQ3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02OTU0MWE3M2M5ZTllZjg2Y2U0YTIzYmQyZTdiZWI5OTUyOGQwMDhkOGVjZWI0OWE5NzViOWQ1MGI5OGNhYzE0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.nfgnUMkC8AxDCWuKpNvqkPe2ZL2ZH6zV6p3WfoL4tEQ)
Backend: Node.js & Express.js
Frontend: EJS as templating language, to generate HTML with plain JS and & custom CSS for styling
Database: PostgreSQL for structured data management.
Deployment: Railway for hosting both the application and the database
Other tools & mentions:
- npm for dependency management and for using different modules like node-fetch - which brings Fetch API to Node.js.
- MediaWiki Action API for fetching and displaying the INTRO section insinde an album page and also the ABOUT section inside an artist page.
I didn't want to use an API for fetching the music albums / artists / genres or labels for a few reasons:
- I wanted to have full control when it comes to the information that I'm displaying, whether we're talking about the artists'/albums' names or an album cover. It was a lot of work and research just to find and select the perfect picture for each of them, but in the end, if I wouldn't have been passionate about music, I wouldn't have built this project at all.
- it was a great exercise to think what I want and need to happen inside the app, and then design the database schema that fits my needs.
- every API has its limitations and its risks - so I decided that I'm going to work in order to be able to serve myself the info that I'll be using; speaking about risks, I didn't want to develop this project around an API that may not be live one day.
You can browse my other repos to see what I've been working on lately or you can connect with me on linkedin and say hi if you want.