{"id":22213230,"url":"https://github.com/jowi-dev/practice_mate","last_synced_at":"2025-03-25T06:21:10.815Z","repository":{"id":254298167,"uuid":"846106999","full_name":"jowi-dev/practice_mate","owner":"jowi-dev","description":"a wrapper for easy to use spotify api commands","archived":false,"fork":false,"pushed_at":"2024-08-22T14:51:20.000Z","size":44,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-30T05:42:03.833Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jowi-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-08-22T14:42:51.000Z","updated_at":"2024-08-22T14:51:23.000Z","dependencies_parsed_at":"2024-08-22T16:46:20.604Z","dependency_job_id":"9830f956-4434-477e-9e42-fb6111cdbe2e","html_url":"https://github.com/jowi-dev/practice_mate","commit_stats":null,"previous_names":["jowi-dev/practice_mate"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jowi-dev%2Fpractice_mate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jowi-dev%2Fpractice_mate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jowi-dev%2Fpractice_mate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jowi-dev%2Fpractice_mate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jowi-dev","download_url":"https://codeload.github.com/jowi-dev/practice_mate/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245408790,"owners_count":20610400,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-12-02T21:09:07.295Z","updated_at":"2025-03-25T06:21:10.786Z","avatar_url":"https://github.com/jowi-dev.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PracticeMate\n\nThis is a small side project to help keep track of music I'm learning in my freetime.\n\nI was hesitant to pick Elixir for this at all because it screams CLI, but given that \nI'm not performance constrained, and just like elixir right now I'm going against\nbetter judgement and using what I know.\n\nIt is phoenix in the most bare way possible. Just a UI that helps authorize spotify.\n\nNx potentially - see point #1 in future\n\nSpotify-as-a-Database because I'm trying to stay away from dependencies as much as I can here.\nOpted for GenServers to store tokens and cache responses from spotify as needed.\n\n**In the interest of time, this repo has some less-than-sane error handling decisions that would not be appropriate for production, but are suitable for a CLI app**\n\n## Current Roadmap\n- [X] Integrate with the Spotify api\n- [ ] Basic Start/Stop commands\n- [ ] Mock API responses for easier testing \n- [ ] Setup basic TUI REPL\n\n## Plans for this Project\n#### The MVP of this project will have\n- [ ] A TUI interface\n- [ ] Viewing a list of songs I want to learn \n- [ ] Choosing a song for playback/doing playback \n- [ ] Seeking Forward/Backward in a song \n- [ ] Marking songs as \"Completed\"\n- [ ] Removing a song from the list \n\n### Future \nA few nice to haves for the future rainy days:\n- [ ] implement a KNN trained algorithm to determine key, time signature, tempo\n- [ ] Seeking Forward/backward based on measures rather than time via the meta data from point 1\n- [ ] Adjusting playback speed for complex portions\n- [ ] integrating with a tool like Splitter.ai to isolate parts of a track \n- [ ] Lead sheet style chord display\n- [ ] This has RPI written all over it\n\n\n## Want to Give it a Spin?\nSet the `SPOTIFY_CLIENT_ID` in your environment to the client_id generated from your \nvery own spotify app (google spotify web api for info on setting this up).\n\nThen ensure the following environment variables are set in your environment\n- `SPOTIFY_CLIENT_ID` (from the spotify app developer console web ui)\n- `SPOTIFY_CLIENT_SECRET` (from the spotify app developer console web ui)\n- `SPOTIFY_USER_ID` (url in the web player of your user profile)\n- `SPOTIFY_LEARNING_PLAYLIST_ID` (any playlist id you own)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjowi-dev%2Fpractice_mate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjowi-dev%2Fpractice_mate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjowi-dev%2Fpractice_mate/lists"}