{"id":24800276,"url":"https://github.com/snowby666/moodify50","last_synced_at":"2026-01-21T04:32:33.748Z","repository":{"id":244008048,"uuid":"809660540","full_name":"snowby666/moodify50","owner":"snowby666","description":"💚 Spotify Premium @ Home","archived":false,"fork":false,"pushed_at":"2024-06-15T13:24:30.000Z","size":37945,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T10:50:02.067Z","etag":null,"topics":["ajax","django","htmx","jquery","moodify","music-player","spotify","spotify-ad-free","spotify-premium","spotify-web-api"],"latest_commit_sha":null,"homepage":"https://www.moodify.space","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/snowby666.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-03T07:52:12.000Z","updated_at":"2024-10-06T23:45:40.000Z","dependencies_parsed_at":"2024-06-14T08:55:02.874Z","dependency_job_id":"02958630-8c78-40e1-9dc1-0e0593ca3b28","html_url":"https://github.com/snowby666/moodify50","commit_stats":null,"previous_names":["snowby666/moodify50"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/snowby666/moodify50","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snowby666%2Fmoodify50","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snowby666%2Fmoodify50/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snowby666%2Fmoodify50/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snowby666%2Fmoodify50/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snowby666","download_url":"https://codeload.github.com/snowby666/moodify50/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snowby666%2Fmoodify50/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28626235,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T02:47:06.670Z","status":"ssl_error","status_checked_at":"2026-01-21T02:45:44.886Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ajax","django","htmx","jquery","moodify","music-player","spotify","spotify-ad-free","spotify-premium","spotify-web-api"],"created_at":"2025-01-30T03:18:09.445Z","updated_at":"2026-01-21T04:32:33.735Z","avatar_url":"https://github.com/snowby666.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\" id=\"top\"\u003e\n  \u003cimg src=\"./server/static/icon/android-chrome-384x384.png\" width=\"100\" alt=\"project-logo\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ch1 align=\"center\"\u003eMOODIFY50\u003c/h1\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003cem\u003eMoodify50 is a custom music streaming platform that leverages the Spotify Web API, Spotify Iframe API, and Spotify OAuth2 to provide a Premium-like experience without ads. The platform is built from scratch, featuring a custom music player that allows users to stream their favorite music without interruptions.\u003c/em\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\t\u003cimg src=\"https://img.shields.io/badge/python-3.9+-blue.svg\" alt=\"version\"\u003e\n\t\u003cimg src=\"https://img.shields.io/badge/License-GPLv3-blue.svg\" alt=\"license\"\u003e\n\t\u003cimg src=\"https://img.shields.io/github/last-commit/snowby666/moodify50\" alt=\"last-commit\"\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\u003cbr\u003e\n\n- [Features](#features)\n- [Project Overview](#project-overview)\n- [File Descriptions](#file-descriptions)\n- [Design Choices](#design-choices)\n- [Getting Started](#getting-started)\n- [Contributing](#contributing)\n- [Copyright](#copyright)\n  - [Copyright Notice](#copyright-notice)\n\u003c/details\u003e\n\n---\n\n##  Features\n\n\u003cul\u003e\n\u003cli\u003eUser Authentication and Authorization\u003c/li\u003e\n\u003cli\u003eMusic Recommendation Engine based on your own preferences and moods (energetic, happy, sad, depressed)\u003c/li\u003e\n\u003cli\u003eUser Profile Management, including Favorite Artists and Genres\u003c/li\u003e\n\u003cli\u003eSearch Functionality for Songs, Artists, and Genres\u003c/li\u003e\n\u003cli\u003ePlaylist Management (Create, Add, Rename, Delete)\u003c/li\u003e\n\u003cli\u003eMusic Playback and Streaming\u003c/li\u003e\n\u003cli\u003eMusic Controls (Repeat, Shuffle, and Queue)\u003c/li\u003e\n\u003cli\u003eView full Lyrics (Synced with song)\u003c/li\u003e\n\u003c/ul\u003e\n\n---\n\n## Project Overview\n\n\u003cp\u003e\n\u003ckbd\u003e\u003cimg src=\"./assets/demo1.png\" width=\"100%\" height=\"auto\"\u003e\u003c/kbd\u003e\n\n\u003ckbd\u003e\u003cimg src=\"./assets/demo2.png\" width=\"100%\" height=\"auto\"\u003e\u003c/kbd\u003e\n\n\u003ckbd\u003e\u003cimg src=\"./assets/demo3.png\" width=\"100%\" height=\"auto\"\u003e\u003c/kbd\u003e\n\n\u003ckbd\u003e\u003cimg src=\"./assets/demo4.png\" width=\"100%\" height=\"auto\"\u003e\u003c/kbd\u003e\n\u003c/p\u003e\n\nThe project consists of multiple files and directories, each serving a specific purpose in the overall architecture of the platform. The main directory contains the following subdirectories:\n\n* **moodify50**: This directory contains the core application files, including the custom music player, API integrations, and user interface components.\n* **server**: This directory contains the server-side code, including API routes, database models, and authentication logic.\n* **static**: This directory contains static assets, such as images, CSS files, and JavaScript files.\n* **templates**: This directory contains HTML templates for the user interface components.\n\n## File Descriptions\n\n* **manage.py**: This file contains the application's entry point, responsible for initializing the Django framework and loading the application's configuration.\n* **settings.py**: This file contains the application's configuration settings, including database connections, API keys, and authentication settings.\n* **urls.py**: This file defines the URL routes for the application, mapping URLs to specific views and API endpoints.\n* **wsgi.py**: This file contains the WSGI application object, responsible for serving the application over the web.\n* **models.py**: This file defines the database models for the application, including user profiles, music tracks, and playlists.\n* **views.py**: This file contains the application's views, responsible for handling HTTP requests and returning responses.\n* **forms.py**: This file defines the application's forms, used for user input validation and data processing.\n* **templates/base.html**: This file contains the base HTML template for the application, including the navigation menu and footer.\n* **templates/index.html**: This file contains the index page template, displaying the music player and search bar.\n* **static/css/style.css**: This file contains the application's CSS styles, defining the visual layout and design.\n* **static/js/script.js**: This file contains the application's JavaScript code, responsible for handling user interactions and API requests.\n\n---\n\n## Design Choices\n\nDuring the development of Moodify50, several design choices were debated and carefully considered. Some of the most significant decisions include:\n\n* The choice of using the Spotify Web API and iframe API to power the music streaming functionality, leveraging the existing infrastructure and expertise of Spotify to provide a seamless user experience.\n* The use of Django as the web framework, due to its robustness, scalability, and ease of use. Django's built-in authentication and authorization system was particularly useful in implementing user authentication and access control.\n* The use of AJAX for asynchronous requests to the Spotify API, allowing for seamless searching and music playback.\n* The use of jQuery for DOM manipulation and event handling, providing a responsive and interactive user interface.\n* The use of HTMX for handling search requests, providing a fast and efficient way to retrieve search results from the Spotify API.\n* The use of MVT (Model-View-Template) architecture, which separates the application logic into three interconnected components:\n\t+ **Model**: Represents the data and business logic of the application, encapsulating the database models and API integrations.\n\t+ **View**: Handles HTTP requests and returns responses, interacting with the model to retrieve and manipulate data.\n\t+ **Template**: Defines the user interface components, using the data provided by the view to render the HTML templates.\n\n---\n\n##  Getting Started\n\n**System Requirements:**\n\n* **Python**: `version 3.9+`\n  \nTo get started with this project, follow these steps:\n\n- Clone the repository: \n```ShellSession\ngit clone https://github.com/snowby666/moodify50\n```\n- Change to the project directory: \n```ShellSession\ncd moodify50\n```\n- Install the dependencies: \n```ShellSession\npip install -r requirements.txt\n```\n- Run the development server: \n```ShellSession\npython manage.py runserver\n```\n---\n\n##  Contributing\n\nContributions are welcome! Here are several ways you can contribute:\n\n- **[Report Issues](https://github.com/snowby666/moodify50/issues)**: Submit bugs found or log feature requests for the `moodify50` project.\n- **[Submit Pull Requests](https://github.com/snowby666/moodify50/blob/main/CONTRIBUTING.md)**: Review open PRs, and submit your own PRs.\n- **[Join the Discussions](https://github.com/snowby666/moodify50/discussions)**: Share your insights, provide feedback, or ask questions.\n\n\u003cdetails closed\u003e\n\u003csummary\u003eContributing Guidelines\u003c/summary\u003e\n\n1. **Fork the Repository**: Start by forking the project repository to your github account.\n2. **Clone Locally**: Clone the forked repository to your local machine using a git client.\n   \n   ```ShellSession\n   git clone https://github.com/snowby666/moodify50\n   ```\n3. **Create a New Branch**: Always work on a new branch, giving it a descriptive name.\n   \n   ```ShellSession\n   git checkout -b new-feature-x\n   ```\n4. **Make Your Changes**: Develop and test your changes locally.\n5. **Commit Your Changes**: Commit with a clear message describing your updates.\n   \n   ```ShellSession\n   git commit -m 'Implemented new feature x.'\n   ```\n6. **Push to github**: Push the changes to your forked repository.\n   \n   ```ShellSession\n   git push origin new-feature-x\n   ```\n7.  **Submit a Pull Request**: Create a PR against the original project repository. Clearly describe the changes and their motivations.\n8.  **Review**: Once your PR is reviewed and approved, it will be merged into the main branch. Congratulations on your contribution!\n\u003c/details\u003e\n\n\u003cdetails closed\u003e\n\u003csummary\u003eContributor Graph\u003c/summary\u003e\n\u003cbr\u003e\n\u003cp align=\"center\"\u003e\n   \u003ca href=\"https://github.com{/snowby666/moodify50/}graphs/contributors\"\u003e\n      \u003cimg src=\"https://contrib.rocks/image?repo=snowby666/moodify50\"\u003e\n   \u003c/a\u003e\n\u003c/p\u003e\n\u003c/details\u003e\n\n---\n\n## Copyright\nThis program is licensed under the [GNU GPL v3](https://github.com/snowby666/moodify50/blob/main/LICENSE). All code has been written by me, [snowby666](https://github.com/snowby666).\n\n### Copyright Notice\n```\nsnowby666/moodify50: Spotify Premium @ Home\nCopyright (C) 2024 snowby666\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n```\n\n---\n\n[**Return**](#top)\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnowby666%2Fmoodify50","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsnowby666%2Fmoodify50","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnowby666%2Fmoodify50/lists"}