{"id":13432354,"url":"https://github.com/jez/tunemachine","last_synced_at":"2025-03-16T23:31:14.954Z","repository":{"id":34405376,"uuid":"38334086","full_name":"jez/tunemachine","owner":"jez","description":":notes: A time machine for your Spotify tunes!","archived":true,"fork":false,"pushed_at":"2015-08-19T00:00:16.000Z","size":3809,"stargazers_count":62,"open_issues_count":1,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-10-27T11:50:46.401Z","etag":null,"topics":["music","spotify","webapp"],"latest_commit_sha":null,"homepage":"http://tunemachine.herokuapp.com","language":"CoffeeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jez.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}},"created_at":"2015-06-30T21:29:34.000Z","updated_at":"2023-01-28T10:32:30.000Z","dependencies_parsed_at":"2022-08-03T20:45:20.947Z","dependency_job_id":null,"html_url":"https://github.com/jez/tunemachine","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jez%2Ftunemachine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jez%2Ftunemachine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jez%2Ftunemachine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jez%2Ftunemachine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jez","download_url":"https://codeload.github.com/jez/tunemachine/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243949884,"owners_count":20373653,"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":["music","spotify","webapp"],"created_at":"2024-07-31T02:01:10.624Z","updated_at":"2025-03-16T23:31:14.150Z","avatar_url":"https://github.com/jez.png","language":"CoffeeScript","funding_links":[],"categories":["CoffeeScript","ASCII"],"sub_categories":[],"readme":"# TuneMachine\n\n\u003e :notes: A time machine for your Spotify tunes!\n\nThis project was made by the [ScottyLabs][sl]' team, consisting of Oscar Bezi,\nJustin Gallagher, Min Zhou, and Jake Zimmerman at a16z's Battle of the Hacks v2\nin June 2015.\n\nSee it live at \u003chttp://tunemachine.herokuapp.com\u003e.\n\nTuneMachine lets you take snapshots of your Spotify playlists and restore to a\nspecific version at any time. It has a super simple interface. Once you log in,\nyou see all of your playlists. From here, you can see a list of snapshots you've\ntaken of each playlist, and for each snapshot you can see a quick overview of\nwhat the playlist looked like at that point in time. This makes it super useful\nfor keeping track of what's changed over time inside collaborative playlists.\n\n![main TuneMachine app page](/assets/demo.png)\n\nThe app itself is written entirely in CoffeeScript on the backend and CJSX\n(CoffeeScript + JSX syntax for React) on the frontend. It uses Sass for CSS\ntemplating. It's been really fun to build, mostly because of how nice\nCoffeeScript and React are to use. Take a peek under the hood and see for\nyourself!\n\n\n## Setup\n\nThere are two ways to get set up; you can get set up for\n[development](#development) or for [The Real World](#the-real-world).\n\n### Development\n\nThe development environment requires a Node.js setup. First, clone this repo\nsomewhere, then run:\n\n```console\n$ npm install\n\n# If you want a fancy development environment:\n$ npm install -g nodemon\n```\n\nNext, either install the [Heroku toolbelt][toolbelt], or make sure you have the\n[foreman][foreman] gem installed.\n\n```console\nInstall the Heroku toolbelt package installer from Heroku\n\nor\n\n$ brew install heroku-toolbelt\n$ gem install foreman\n```\n\nNext up, you'll need to create an __[application on Spotify][spotify-app]__\nto get an app `client_id` and `client_secret`. Add a Redirect URI, and point it\nat `http://localhost:5000/auth/oauth2callback`.\n\nReplace `MYAPP_NAME` as necessary. Hit \"Save\". Once you have a client id and\nclient secret, fill in the appropriate values in `.env.template` after renaming\nit to `.env`.\n\n```console\n$ cp .env.template .env\n\n(Edit .env)\n```\n\nYou can ignore the other values that were in `.env.template.` They have sane\ndefaults configured in `config.coffee`.\n\nLast up, let's install MongoDB:\n\n```console\n$ brew install mongo\n```\n\nYou should now be all good to get started developing. This is a bunch of\ncommands that might be useful:\n\n```bash\n# To start the mongo instance:\n$ mongod --dbpath ./data\n\n# To run, watching for changes to backend coffee files:\nNODE_ENV=development foreman start\n\n# To run, not watching for changes on the backend\nforeman start\n\n# To watch and recompile frontend static assets\nnpm run watch\n\n# To compile the frontend static assets once\nnpm run build\n\n# To clean all compiled static assets\nnpm run clean\n```\n\n\n### The Real World\n\nThis app can be deployed with Heroku. First, clone this repo somewhere.\n\nNext, either install the [Heroku toolbelt][toolbelt], or make sure you have the\n[foreman][foreman] gem installed.\n\n```console\nInstall the Heroku toolbelt package installer from Heroku\n\nor\n\n$ brew install heroku-toolbelt\n$ gem install foreman\n```\n\nYou'll need to choose a name (like \"myapp\") for your app on Heroku, then create\nit at the command line:\n\n```console\n$ heroku create \u003cmyapp's name\u003e\n```\n\nNext up, you'll need to create an __[application on Spotify][spotify-app]__\nto get an app `client_id` and `client_secret`. Add a Redirect URI, and point it\nat `http://MYAPP_NAME.herokuapp.com/auth/oauth2callback`.\n\nReplace `MYAPP_NAME` as necessary. Hit \"Save\". Once you have a client id and\nclient secret, fill in the appropriate values in `.env.template` after renaming\nit to `.env.prod`.\n\nYou'll also want to uncomment `DOMAIN` and set it to\n`http://MYAPP_NAME.herokuapp.com`.\n\n```console\n$ cp .env.template .env.prod\n\n(Edit .env.prod)\n```\n\nThe last thing to configure is setting up a MongoDB database. You can either use\na free service like MongoLab for this or set up and host your own. Once you have\na database URI that you can use to connect to the database, add it in\n`.env.prod` as `DB_URL`.\n\nNow push this config to Heroku:\n\n```console\n$ heroku config:push -e .env.prod\n```\n\nWe should now be good to go. Push the code to Heroku to deploy:\n\n```console\n$ git push heroku master\n```\n\n\n## TODO\n\nThese are some things that might be fun to implement at some time in the future\nbut in all likelihood might never be.\n\n- [ ] Make it work on mobile\n- [ ] Render errors to the user using popup \"toasts\"\n- [ ] Add permalinks and client-side routing using React Router\n- [ ] Use server-side React for rendering the app initially on the backend\n- [ ] Use Flux to control the flow of data throughout the app\n- [ ] Add support for \"forking\" and \"merging\" changes from playlists you don't\n      have write access to.\n\n\n## License\n\nMIT License. See LICENSE.\n\n\n[sl]: https://scottylabs.org\n\n[toolbelt]: https://toolbelt.heroku.com/\n[foreman]: https://github.com/ddollar/foreman\n[spotify-app]: https://developer.spotify.com/my-applications/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjez%2Ftunemachine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjez%2Ftunemachine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjez%2Ftunemachine/lists"}